@zxyycom/vibe-check 0.0.1
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/LICENSE +21 -0
- package/README.md +154 -0
- package/dist/esm/check/check.mjs +5 -0
- package/dist/esm/check/check.mjs.map +1 -0
- package/dist/esm/check/descriptor-validation.mjs +37 -0
- package/dist/esm/check/descriptor-validation.mjs.map +1 -0
- package/dist/esm/check/descriptor.mjs +2 -0
- package/dist/esm/check/descriptor.mjs.map +1 -0
- package/dist/esm/check/inherited-collection.mjs +62 -0
- package/dist/esm/check/inherited-collection.mjs.map +1 -0
- package/dist/esm/check/options-snapshot.mjs +75 -0
- package/dist/esm/check/options-snapshot.mjs.map +1 -0
- package/dist/esm/check-settlement/fact-validation.mjs +216 -0
- package/dist/esm/check-settlement/fact-validation.mjs.map +1 -0
- package/dist/esm/check-settlement/facts.mjs +2 -0
- package/dist/esm/check-settlement/facts.mjs.map +1 -0
- package/dist/esm/check-settlement/outcome-normalization.mjs +80 -0
- package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -0
- package/dist/esm/check-settlement/record-store.mjs +59 -0
- package/dist/esm/check-settlement/record-store.mjs.map +1 -0
- package/dist/esm/check-settlement/session.mjs +179 -0
- package/dist/esm/check-settlement/session.mjs.map +1 -0
- package/dist/esm/data-boundary/canonical-data.mjs +159 -0
- package/dist/esm/data-boundary/canonical-data.mjs.map +1 -0
- package/dist/esm/data-boundary/canonical-json.mjs +2 -0
- package/dist/esm/data-boundary/canonical-json.mjs.map +1 -0
- package/dist/esm/data-boundary/closed-values.mjs +98 -0
- package/dist/esm/data-boundary/closed-values.mjs.map +1 -0
- package/dist/esm/data-boundary/value-shapes.mjs +13 -0
- package/dist/esm/data-boundary/value-shapes.mjs.map +1 -0
- package/dist/esm/finding-waivers/reconciliation.mjs +84 -0
- package/dist/esm/finding-waivers/reconciliation.mjs.map +1 -0
- package/dist/esm/index.mjs +26 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/machine-output/v4/atomic-publication.mjs +102 -0
- package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -0
- package/dist/esm/machine-output/v4/freeze-publication-value.mjs +14 -0
- package/dist/esm/machine-output/v4/freeze-publication-value.mjs.map +1 -0
- package/dist/esm/machine-output/v4/projection.mjs +23 -0
- package/dist/esm/machine-output/v4/projection.mjs.map +1 -0
- package/dist/esm/machine-output/v4/publication-invariants.mjs +59 -0
- package/dist/esm/machine-output/v4/publication-invariants.mjs.map +1 -0
- package/dist/esm/machine-output/v4/publication-model.mjs +19 -0
- package/dist/esm/machine-output/v4/publication-model.mjs.map +1 -0
- package/dist/esm/machine-output/v4/publish.mjs +20 -0
- package/dist/esm/machine-output/v4/publish.mjs.map +1 -0
- package/dist/esm/machine-output/v4/records-fingerprint.mjs +9 -0
- package/dist/esm/machine-output/v4/records-fingerprint.mjs.map +1 -0
- package/dist/esm/machine-output/v4/schema-identities.mjs +8 -0
- package/dist/esm/machine-output/v4/schema-identities.mjs.map +1 -0
- package/dist/esm/machine-output/v4/schema.mjs +50 -0
- package/dist/esm/machine-output/v4/schema.mjs.map +1 -0
- package/dist/esm/machine-output/v4/serializers.mjs +9 -0
- package/dist/esm/machine-output/v4/serializers.mjs.map +1 -0
- package/dist/esm/machine-output/v4/validation-result.mjs +16 -0
- package/dist/esm/machine-output/v4/validation-result.mjs.map +1 -0
- package/dist/esm/machine-output/v4/validation.mjs +131 -0
- package/dist/esm/machine-output/v4/validation.mjs.map +1 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs +49 -0
- package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +71 -0
- package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs +2 -0
- package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +37 -0
- package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/cache/key.mjs +38 -0
- package/dist/esm/package-checks/duplicate-detection/cache/key.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs +47 -0
- package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/cache/store.mjs +44 -0
- package/dist/esm/package-checks/duplicate-detection/cache/store.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs +39 -0
- package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/execution.mjs +124 -0
- package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/final-data.mjs +6 -0
- package/dist/esm/package-checks/duplicate-detection/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +77 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs +6 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +87 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +94 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs +2 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +180 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs +10 -0
- package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs +2 -0
- package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/measurement.mjs +151 -0
- package/dist/esm/package-checks/duplicate-detection/measurement.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +126 -0
- package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +60 -0
- package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/options.mjs +2 -0
- package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/project-revision.mjs +5 -0
- package/dist/esm/package-checks/duplicate-detection/project-revision.mjs.map +1 -0
- package/dist/esm/package-checks/duplicate-detection/records.mjs +119 -0
- package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/constructor.mjs +39 -0
- package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/execution.mjs +170 -0
- package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/final-data.mjs +6 -0
- package/dist/esm/package-checks/file-metrics/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/measurement-model.mjs +2 -0
- package/dist/esm/package-checks/file-metrics/measurement-model.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/measurement.mjs +33 -0
- package/dist/esm/package-checks/file-metrics/measurement.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs +171 -0
- package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/options-validation.mjs +82 -0
- package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/options.mjs +2 -0
- package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/records.mjs +109 -0
- package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs +59 -0
- package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs +17 -0
- package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs +145 -0
- package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -0
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +54 -0
- package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -0
- package/dist/esm/package-checks/final-data-parsing.mjs +35 -0
- package/dist/esm/package-checks/final-data-parsing.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/analysis.mjs +96 -0
- package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/constructor.mjs +43 -0
- package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/execution.mjs +178 -0
- package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/final-data.mjs +6 -0
- package/dist/esm/package-checks/function-metrics/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +64 -0
- package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/lizard/csv.mjs +17 -0
- package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +138 -0
- package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +35 -0
- package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/measurement-model.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/measurement.mjs +35 -0
- package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs +171 -0
- package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/options-validation.mjs +71 -0
- package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/options.mjs +2 -0
- package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/records.mjs +133 -0
- package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -0
- package/dist/esm/package-checks/function-metrics/target-files.mjs +75 -0
- package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/error-message.mjs +4 -0
- package/dist/esm/package-checks/host-environment/error-message.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/filesystem.mjs +81 -0
- package/dist/esm/package-checks/host-environment/filesystem.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/git.mjs +51 -0
- package/dist/esm/package-checks/host-environment/git.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/path.mjs +18 -0
- package/dist/esm/package-checks/host-environment/path.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/process/command.mjs +13 -0
- package/dist/esm/package-checks/host-environment/process/command.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/process/contract.mjs +2 -0
- package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/process/env.mjs +19 -0
- package/dist/esm/package-checks/host-environment/process/env.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/process/failure.mjs +34 -0
- package/dist/esm/package-checks/host-environment/process/failure.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/process/result.mjs +33 -0
- package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -0
- package/dist/esm/package-checks/host-environment/process/runner.mjs +30 -0
- package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -0
- package/dist/esm/package-checks/json-document/strict-document.mjs +163 -0
- package/dist/esm/package-checks/json-document/strict-document.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs +39 -0
- package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs +141 -0
- package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/final-data.mjs +64 -0
- package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs +35 -0
- package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs +118 -0
- package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs +45 -0
- package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +212 -0
- package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/options.mjs +2 -0
- package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +128 -0
- package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/remote-response.mjs +71 -0
- package/dist/esm/package-checks/json-schema-validation/remote-response.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs +190 -0
- package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs.map +1 -0
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +234 -0
- package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -0
- package/dist/esm/package-checks/json-validation/default-check.mjs +39 -0
- package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/json-validation/final-data.mjs +27 -0
- package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/json-validation/json-validation.mjs +138 -0
- package/dist/esm/package-checks/json-validation/json-validation.mjs.map +1 -0
- package/dist/esm/package-checks/json-validation/options-resolution.mjs +33 -0
- package/dist/esm/package-checks/json-validation/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/json-validation/options-validation.mjs +16 -0
- package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/json-validation/options.mjs +2 -0
- package/dist/esm/package-checks/json-validation/options.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs +73 -0
- package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/final-data.mjs +153 -0
- package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +155 -0
- package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +58 -0
- package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/measurement.mjs +125 -0
- package/dist/esm/package-checks/maintenance-reminders/measurement.mjs.map +1 -0
- package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs +72 -0
- package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +55 -0
- package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs +199 -0
- package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +109 -0
- package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/final-data.mjs +28 -0
- package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs +158 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +17 -0
- package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +191 -0
- package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +83 -0
- package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +50 -0
- package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/options.mjs +2 -0
- package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/records.mjs +32 -0
- package/dist/esm/package-checks/markdown-link-validation/records.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +196 -0
- package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs +23 -0
- package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs.map +1 -0
- package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs +41 -0
- package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/collection.mjs +142 -0
- package/dist/esm/package-checks/project-files/collection.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/config-glob.mjs +11 -0
- package/dist/esm/package-checks/project-files/config-glob.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/configuration.mjs +104 -0
- package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/exact-input-measurement.mjs +24 -0
- package/dist/esm/package-checks/project-files/exact-input-measurement.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/file-fingerprint.mjs +36 -0
- package/dist/esm/package-checks/project-files/file-fingerprint.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs +57 -0
- package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +72 -0
- package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/input-eligibility.mjs +13 -0
- package/dist/esm/package-checks/project-files/input-eligibility.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/reported-path.mjs +30 -0
- package/dist/esm/package-checks/project-files/reported-path.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/revision-paths.mjs +19 -0
- package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -0
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +102 -0
- package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs +242 -0
- package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/materialization.mjs +50 -0
- package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -0
- package/dist/esm/project-definition/check-tree/resolution.mjs +60 -0
- package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -0
- package/dist/esm/project-definition/output-defaults.mjs +7 -0
- package/dist/esm/project-definition/output-defaults.mjs.map +1 -0
- package/dist/esm/project-definition/output-validation.mjs +44 -0
- package/dist/esm/project-definition/output-validation.mjs.map +1 -0
- package/dist/esm/project-definition/project-definition-validation.mjs +95 -0
- package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -0
- package/dist/esm/project-definition/project-definition.mjs +92 -0
- package/dist/esm/project-definition/project-definition.mjs.map +1 -0
- package/dist/esm/project-run/aggregation.mjs +66 -0
- package/dist/esm/project-run/aggregation.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/callback.mjs +70 -0
- package/dist/esm/project-run/check-execution/callback.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/dependencies.mjs +50 -0
- package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/execution-finalization.mjs +103 -0
- package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/execution-settlement.mjs +90 -0
- package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/messages.mjs +38 -0
- package/dist/esm/project-run/check-execution/messages.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/plan.mjs +35 -0
- package/dist/esm/project-run/check-execution/plan.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/preflight-result.mjs +83 -0
- package/dist/esm/project-run/check-execution/preflight-result.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/preflight.mjs +186 -0
- package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/resolved-checks.mjs +168 -0
- package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -0
- package/dist/esm/project-run/check-execution/terminal-result.mjs +49 -0
- package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -0
- package/dist/esm/project-run/completion.mjs +173 -0
- package/dist/esm/project-run/completion.mjs.map +1 -0
- package/dist/esm/project-run/controls/contract.mjs +2 -0
- package/dist/esm/project-run/controls/contract.mjs.map +1 -0
- package/dist/esm/project-run/controls/outputs-override-validation.mjs +61 -0
- package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -0
- package/dist/esm/project-run/controls/validation-result.mjs +2 -0
- package/dist/esm/project-run/controls/validation-result.mjs.map +1 -0
- package/dist/esm/project-run/controls/validation.mjs +156 -0
- package/dist/esm/project-run/controls/validation.mjs.map +1 -0
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +182 -0
- package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -0
- package/dist/esm/project-run/diagnostic-logging/logger.mjs +242 -0
- package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -0
- package/dist/esm/project-run/invocation-creation.mjs +111 -0
- package/dist/esm/project-run/invocation-creation.mjs.map +1 -0
- package/dist/esm/project-run/invocation.mjs +195 -0
- package/dist/esm/project-run/invocation.mjs.map +1 -0
- package/dist/esm/project-run/machine-publication.mjs +16 -0
- package/dist/esm/project-run/machine-publication.mjs.map +1 -0
- package/dist/esm/project-run/output-configuration.mjs +17 -0
- package/dist/esm/project-run/output-configuration.mjs.map +1 -0
- package/dist/esm/project-run/output-status.mjs +43 -0
- package/dist/esm/project-run/output-status.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/presentation.mjs +135 -0
- package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +100 -0
- package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +123 -0
- package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -0
- package/dist/esm/project-run/progress-rendering/renderer.mjs +12 -0
- package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -0
- package/dist/esm/project-run/project-context.mjs +8 -0
- package/dist/esm/project-run/project-context.mjs.map +1 -0
- package/dist/esm/project-run/result.mjs +54 -0
- package/dist/esm/project-run/result.mjs.map +1 -0
- package/dist/esm/project-run/run.mjs +23 -0
- package/dist/esm/project-run/run.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/execution-state.mjs +66 -0
- package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs +119 -0
- package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/graph.mjs +116 -0
- package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +82 -0
- package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +27 -0
- package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +125 -0
- package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +45 -0
- package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +74 -0
- package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -0
- package/dist/esm/project-run/task-scheduler/scheduler.mjs +147 -0
- package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -0
- package/docs/api-mechanics.md +205 -0
- package/docs/checks/duplicate-detection.md +195 -0
- package/docs/checks/file-metrics.md +229 -0
- package/docs/checks/function-metrics.md +222 -0
- package/docs/checks/json-schema-validation.md +190 -0
- package/docs/checks/json-validation.md +133 -0
- package/docs/checks/maintenance-reminders.md +158 -0
- package/docs/checks/markdown-link-validation.md +192 -0
- package/docs/examples/artifacts/mixed-outcomes/definition.ts +195 -0
- package/docs/examples/artifacts/mixed-outcomes/records.ndjson +2 -0
- package/docs/examples/artifacts/mixed-outcomes/run.json +70 -0
- package/docs/output.md +97 -0
- package/docs/schemas/vibe-check-record.schema.json +33 -0
- package/docs/schemas/vibe-check-run.schema.json +173 -0
- package/index.mjs +1 -0
- package/package.json +49 -0
- package/src/check/check.ts +497 -0
- package/src/check/descriptor-validation.ts +60 -0
- package/src/check/descriptor.ts +5 -0
- package/src/check/inherited-collection.ts +101 -0
- package/src/check/options-snapshot.ts +80 -0
- package/src/check-settlement/fact-validation.ts +289 -0
- package/src/check-settlement/facts.ts +27 -0
- package/src/check-settlement/outcome-normalization.ts +118 -0
- package/src/check-settlement/record-store.ts +73 -0
- package/src/check-settlement/session.ts +257 -0
- package/src/data-boundary/canonical-data.ts +188 -0
- package/src/data-boundary/canonical-json.ts +11 -0
- package/src/data-boundary/closed-values.ts +126 -0
- package/src/data-boundary/value-shapes.ts +15 -0
- package/src/finding-waivers/reconciliation.ts +176 -0
- package/src/index.ts +123 -0
- package/src/machine-output/v4/atomic-publication.ts +123 -0
- package/src/machine-output/v4/freeze-publication-value.ts +12 -0
- package/src/machine-output/v4/projection.ts +36 -0
- package/src/machine-output/v4/publication-invariants.ts +89 -0
- package/src/machine-output/v4/publication-model.ts +38 -0
- package/src/machine-output/v4/publish.ts +23 -0
- package/src/machine-output/v4/records-fingerprint.ts +12 -0
- package/src/machine-output/v4/schema-identities.ts +8 -0
- package/src/machine-output/v4/schema.ts +97 -0
- package/src/machine-output/v4/serializers.ts +18 -0
- package/src/machine-output/v4/validation-result.ts +59 -0
- package/src/machine-output/v4/validation.ts +166 -0
- package/src/package-checks/code-quality-findings/policy.ts +85 -0
- package/src/package-checks/duplicate-detection/area-policy.ts +103 -0
- package/src/package-checks/duplicate-detection/cache/cache-contract.ts +49 -0
- package/src/package-checks/duplicate-detection/cache/identity.ts +61 -0
- package/src/package-checks/duplicate-detection/cache/key.ts +46 -0
- package/src/package-checks/duplicate-detection/cache/payload.ts +78 -0
- package/src/package-checks/duplicate-detection/cache/store.ts +77 -0
- package/src/package-checks/duplicate-detection/default-check.ts +50 -0
- package/src/package-checks/duplicate-detection/execution.ts +168 -0
- package/src/package-checks/duplicate-detection/final-data.ts +10 -0
- package/src/package-checks/duplicate-detection/jscpd/availability.ts +137 -0
- package/src/package-checks/duplicate-detection/jscpd/command-path.ts +8 -0
- package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +112 -0
- package/src/package-checks/duplicate-detection/jscpd/json-report.ts +137 -0
- package/src/package-checks/duplicate-detection/jscpd/scanner-contract.ts +18 -0
- package/src/package-checks/duplicate-detection/jscpd/scanner.ts +257 -0
- package/src/package-checks/duplicate-detection/jscpd/scoped-fragments.ts +17 -0
- package/src/package-checks/duplicate-detection/measurement-model.ts +44 -0
- package/src/package-checks/duplicate-detection/measurement.ts +223 -0
- package/src/package-checks/duplicate-detection/options-resolution.ts +162 -0
- package/src/package-checks/duplicate-detection/options-validation.ts +75 -0
- package/src/package-checks/duplicate-detection/options.ts +72 -0
- package/src/package-checks/duplicate-detection/project-revision.ts +5 -0
- package/src/package-checks/duplicate-detection/records.ts +171 -0
- package/src/package-checks/file-metrics/constructor.ts +46 -0
- package/src/package-checks/file-metrics/execution.ts +233 -0
- package/src/package-checks/file-metrics/final-data.ts +10 -0
- package/src/package-checks/file-metrics/measurement-model.ts +10 -0
- package/src/package-checks/file-metrics/measurement.ts +52 -0
- package/src/package-checks/file-metrics/options-resolution.ts +213 -0
- package/src/package-checks/file-metrics/options-validation.ts +104 -0
- package/src/package-checks/file-metrics/options.ts +91 -0
- package/src/package-checks/file-metrics/records.ts +182 -0
- package/src/package-checks/file-metrics/scc/availability.ts +100 -0
- package/src/package-checks/file-metrics/scc/csv.ts +20 -0
- package/src/package-checks/file-metrics/scc/parser.ts +223 -0
- package/src/package-checks/file-metrics/scc/scanner.ts +68 -0
- package/src/package-checks/final-data-parsing.ts +49 -0
- package/src/package-checks/function-metrics/analysis.ts +138 -0
- package/src/package-checks/function-metrics/constructor.ts +55 -0
- package/src/package-checks/function-metrics/execution.ts +263 -0
- package/src/package-checks/function-metrics/final-data.ts +10 -0
- package/src/package-checks/function-metrics/lizard/availability.ts +90 -0
- package/src/package-checks/function-metrics/lizard/csv.ts +20 -0
- package/src/package-checks/function-metrics/lizard/parser.ts +179 -0
- package/src/package-checks/function-metrics/lizard/scanner.ts +62 -0
- package/src/package-checks/function-metrics/measurement-model.ts +30 -0
- package/src/package-checks/function-metrics/measurement.ts +57 -0
- package/src/package-checks/function-metrics/options-resolution.ts +215 -0
- package/src/package-checks/function-metrics/options-validation.ts +89 -0
- package/src/package-checks/function-metrics/options.ts +84 -0
- package/src/package-checks/function-metrics/records.ts +254 -0
- package/src/package-checks/function-metrics/target-files.ts +85 -0
- package/src/package-checks/host-environment/error-message.ts +3 -0
- package/src/package-checks/host-environment/filesystem.ts +110 -0
- package/src/package-checks/host-environment/git.ts +68 -0
- package/src/package-checks/host-environment/path.ts +20 -0
- package/src/package-checks/host-environment/process/command.ts +21 -0
- package/src/package-checks/host-environment/process/contract.ts +56 -0
- package/src/package-checks/host-environment/process/env.ts +25 -0
- package/src/package-checks/host-environment/process/failure.ts +40 -0
- package/src/package-checks/host-environment/process/result.ts +39 -0
- package/src/package-checks/host-environment/process/runner.ts +47 -0
- package/src/package-checks/json-document/strict-document.ts +209 -0
- package/src/package-checks/json-schema-validation/default-check.ts +54 -0
- package/src/package-checks/json-schema-validation/execution-stages.ts +230 -0
- package/src/package-checks/json-schema-validation/final-data.ts +115 -0
- package/src/package-checks/json-schema-validation/issue-collector.ts +43 -0
- package/src/package-checks/json-schema-validation/json-schema-validation.ts +191 -0
- package/src/package-checks/json-schema-validation/options-resolution.ts +61 -0
- package/src/package-checks/json-schema-validation/options-validation.ts +256 -0
- package/src/package-checks/json-schema-validation/options.ts +66 -0
- package/src/package-checks/json-schema-validation/reference-resolver.ts +165 -0
- package/src/package-checks/json-schema-validation/remote-response.ts +84 -0
- package/src/package-checks/json-schema-validation/schema-engine.ts +263 -0
- package/src/package-checks/json-schema-validation/schema-policy.ts +275 -0
- package/src/package-checks/json-validation/default-check.ts +48 -0
- package/src/package-checks/json-validation/final-data.ts +46 -0
- package/src/package-checks/json-validation/json-validation.ts +212 -0
- package/src/package-checks/json-validation/options-resolution.ts +50 -0
- package/src/package-checks/json-validation/options-validation.ts +27 -0
- package/src/package-checks/json-validation/options.ts +18 -0
- package/src/package-checks/maintenance-reminders/assessment-results.ts +117 -0
- package/src/package-checks/maintenance-reminders/final-data.ts +239 -0
- package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +264 -0
- package/src/package-checks/maintenance-reminders/maintenance-support.ts +67 -0
- package/src/package-checks/maintenance-reminders/measurement.ts +183 -0
- package/src/package-checks/maintenance-reminders/options-validation.ts +88 -0
- package/src/package-checks/markdown-link-validation/default-check.ts +70 -0
- package/src/package-checks/markdown-link-validation/execution.ts +325 -0
- package/src/package-checks/markdown-link-validation/filesystem-probes.ts +127 -0
- package/src/package-checks/markdown-link-validation/final-data.ts +47 -0
- package/src/package-checks/markdown-link-validation/local-resolution.ts +306 -0
- package/src/package-checks/markdown-link-validation/local-resolver.ts +51 -0
- package/src/package-checks/markdown-link-validation/markdown-parser.ts +302 -0
- package/src/package-checks/markdown-link-validation/options-resolution.ts +114 -0
- package/src/package-checks/markdown-link-validation/options-validation.ts +72 -0
- package/src/package-checks/markdown-link-validation/options.ts +50 -0
- package/src/package-checks/markdown-link-validation/records.ts +77 -0
- package/src/package-checks/markdown-link-validation/resolver-engine.ts +276 -0
- package/src/package-checks/markdown-link-validation/target-descriptor.ts +34 -0
- package/src/package-checks/markdown-link-validation/traversal-result.ts +58 -0
- package/src/package-checks/project-files/collection.ts +199 -0
- package/src/package-checks/project-files/config-glob.ts +17 -0
- package/src/package-checks/project-files/configuration.ts +152 -0
- package/src/package-checks/project-files/exact-input-measurement.ts +38 -0
- package/src/package-checks/project-files/file-fingerprint.ts +46 -0
- package/src/package-checks/project-files/gitlink-revision.ts +82 -0
- package/src/package-checks/project-files/gitlink-worktree.ts +106 -0
- package/src/package-checks/project-files/input-eligibility.ts +21 -0
- package/src/package-checks/project-files/reported-path.ts +35 -0
- package/src/package-checks/project-files/revision-paths.ts +34 -0
- package/src/package-checks/project-files/revision-worktree-files.ts +148 -0
- package/src/project-definition/check-tree/authoring.ts +332 -0
- package/src/project-definition/check-tree/materialization.ts +56 -0
- package/src/project-definition/check-tree/resolution.ts +108 -0
- package/src/project-definition/output-defaults.ts +6 -0
- package/src/project-definition/output-validation.ts +54 -0
- package/src/project-definition/project-definition-validation.ts +123 -0
- package/src/project-definition/project-definition.ts +184 -0
- package/src/project-run/aggregation.ts +90 -0
- package/src/project-run/check-execution/callback.ts +106 -0
- package/src/project-run/check-execution/dependencies.ts +70 -0
- package/src/project-run/check-execution/execution-finalization.ts +177 -0
- package/src/project-run/check-execution/execution-settlement.ts +147 -0
- package/src/project-run/check-execution/messages.ts +46 -0
- package/src/project-run/check-execution/plan.ts +46 -0
- package/src/project-run/check-execution/preflight-result.ts +131 -0
- package/src/project-run/check-execution/preflight.ts +321 -0
- package/src/project-run/check-execution/resolved-checks.ts +285 -0
- package/src/project-run/check-execution/terminal-result.ts +74 -0
- package/src/project-run/completion.ts +263 -0
- package/src/project-run/controls/contract.ts +24 -0
- package/src/project-run/controls/outputs-override-validation.ts +86 -0
- package/src/project-run/controls/validation-result.ts +12 -0
- package/src/project-run/controls/validation.ts +176 -0
- package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +223 -0
- package/src/project-run/diagnostic-logging/logger.ts +325 -0
- package/src/project-run/invocation-creation.ts +160 -0
- package/src/project-run/invocation.ts +303 -0
- package/src/project-run/machine-publication.ts +23 -0
- package/src/project-run/output-configuration.ts +24 -0
- package/src/project-run/output-status.ts +69 -0
- package/src/project-run/progress-rendering/presentation.ts +189 -0
- package/src/project-run/progress-rendering/renderer-formatting.ts +141 -0
- package/src/project-run/progress-rendering/renderer-lifecycle.ts +152 -0
- package/src/project-run/progress-rendering/renderer.ts +68 -0
- package/src/project-run/project-context.ts +11 -0
- package/src/project-run/result.ts +175 -0
- package/src/project-run/run.ts +50 -0
- package/src/project-run/task-scheduler/execution-state.ts +153 -0
- package/src/project-run/task-scheduler/graph-validation.ts +176 -0
- package/src/project-run/task-scheduler/graph.ts +185 -0
- package/src/project-run/task-scheduler/scheduler-admission-decision.ts +177 -0
- package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +42 -0
- package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +199 -0
- package/src/project-run/task-scheduler/scheduler-decision-model.ts +158 -0
- package/src/project-run/task-scheduler/scheduler-decision.ts +103 -0
- package/src/project-run/task-scheduler/scheduler.ts +228 -0
- package/third-party-licenses/momoa-3.3.12-LICENSE +201 -0
- package/types/check/check.d.ts +350 -0
- package/types/check/descriptor-validation.d.ts +18 -0
- package/types/check/descriptor.d.ts +5 -0
- package/types/check/inherited-collection.d.ts +35 -0
- package/types/check/options-snapshot.d.ts +2 -0
- package/types/check-settlement/fact-validation.d.ts +14 -0
- package/types/check-settlement/facts.d.ts +19 -0
- package/types/check-settlement/outcome-normalization.d.ts +9 -0
- package/types/check-settlement/record-store.d.ts +14 -0
- package/types/check-settlement/session.d.ts +41 -0
- package/types/data-boundary/canonical-data.d.ts +13 -0
- package/types/data-boundary/canonical-json.d.ts +6 -0
- package/types/data-boundary/closed-values.d.ts +8 -0
- package/types/data-boundary/value-shapes.d.ts +4 -0
- package/types/finding-waivers/reconciliation.d.ts +66 -0
- package/types/index.d.ts +57 -0
- package/types/machine-output/v4/atomic-publication.d.ts +9 -0
- package/types/machine-output/v4/freeze-publication-value.d.ts +6 -0
- package/types/machine-output/v4/projection.d.ts +7 -0
- package/types/machine-output/v4/publication-invariants.d.ts +3 -0
- package/types/machine-output/v4/publication-model.d.ts +15 -0
- package/types/machine-output/v4/publish.d.ts +7 -0
- package/types/machine-output/v4/records-fingerprint.d.ts +4 -0
- package/types/machine-output/v4/schema-identities.d.ts +7 -0
- package/types/machine-output/v4/schema.d.ts +44 -0
- package/types/machine-output/v4/serializers.d.ts +6 -0
- package/types/machine-output/v4/validation-result.d.ts +26 -0
- package/types/machine-output/v4/validation.d.ts +6 -0
- package/types/package-checks/code-quality-findings/policy.d.ts +20 -0
- package/types/package-checks/duplicate-detection/area-policy.d.ts +3 -0
- package/types/package-checks/duplicate-detection/cache/cache-contract.d.ts +48 -0
- package/types/package-checks/duplicate-detection/cache/identity.d.ts +17 -0
- package/types/package-checks/duplicate-detection/cache/key.d.ts +4 -0
- package/types/package-checks/duplicate-detection/cache/payload.d.ts +4 -0
- package/types/package-checks/duplicate-detection/cache/store.d.ts +18 -0
- package/types/package-checks/duplicate-detection/default-check.d.ts +11 -0
- package/types/package-checks/duplicate-detection/execution.d.ts +11 -0
- package/types/package-checks/duplicate-detection/final-data.d.ts +5 -0
- package/types/package-checks/duplicate-detection/jscpd/availability.d.ts +19 -0
- package/types/package-checks/duplicate-detection/jscpd/command-path.d.ts +1 -0
- package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +23 -0
- package/types/package-checks/duplicate-detection/jscpd/json-report.d.ts +2 -0
- package/types/package-checks/duplicate-detection/jscpd/scanner-contract.d.ts +11 -0
- package/types/package-checks/duplicate-detection/jscpd/scanner.d.ts +21 -0
- package/types/package-checks/duplicate-detection/jscpd/scoped-fragments.d.ts +4 -0
- package/types/package-checks/duplicate-detection/measurement-model.d.ts +36 -0
- package/types/package-checks/duplicate-detection/measurement.d.ts +14 -0
- package/types/package-checks/duplicate-detection/options-resolution.d.ts +3 -0
- package/types/package-checks/duplicate-detection/options-validation.d.ts +1 -0
- package/types/package-checks/duplicate-detection/options.d.ts +65 -0
- package/types/package-checks/duplicate-detection/project-revision.d.ts +1 -0
- package/types/package-checks/duplicate-detection/records.d.ts +22 -0
- package/types/package-checks/file-metrics/constructor.d.ts +11 -0
- package/types/package-checks/file-metrics/execution.d.ts +11 -0
- package/types/package-checks/file-metrics/final-data.d.ts +5 -0
- package/types/package-checks/file-metrics/measurement-model.d.ts +12 -0
- package/types/package-checks/file-metrics/measurement.d.ts +13 -0
- package/types/package-checks/file-metrics/options-resolution.d.ts +3 -0
- package/types/package-checks/file-metrics/options-validation.d.ts +3 -0
- package/types/package-checks/file-metrics/options.d.ts +75 -0
- package/types/package-checks/file-metrics/records.d.ts +43 -0
- package/types/package-checks/file-metrics/scc/availability.d.ts +18 -0
- package/types/package-checks/file-metrics/scc/csv.d.ts +1 -0
- package/types/package-checks/file-metrics/scc/parser.d.ts +25 -0
- package/types/package-checks/file-metrics/scc/scanner.d.ts +14 -0
- package/types/package-checks/final-data-parsing.d.ts +9 -0
- package/types/package-checks/function-metrics/analysis.d.ts +10 -0
- package/types/package-checks/function-metrics/constructor.d.ts +11 -0
- package/types/package-checks/function-metrics/execution.d.ts +7 -0
- package/types/package-checks/function-metrics/final-data.d.ts +5 -0
- package/types/package-checks/function-metrics/lizard/availability.d.ts +11 -0
- package/types/package-checks/function-metrics/lizard/csv.d.ts +1 -0
- package/types/package-checks/function-metrics/lizard/parser.d.ts +17 -0
- package/types/package-checks/function-metrics/lizard/scanner.d.ts +15 -0
- package/types/package-checks/function-metrics/measurement-model.d.ts +26 -0
- package/types/package-checks/function-metrics/measurement.d.ts +21 -0
- package/types/package-checks/function-metrics/options-resolution.d.ts +3 -0
- package/types/package-checks/function-metrics/options-validation.d.ts +3 -0
- package/types/package-checks/function-metrics/options.d.ts +76 -0
- package/types/package-checks/function-metrics/records.d.ts +37 -0
- package/types/package-checks/function-metrics/target-files.d.ts +3 -0
- package/types/package-checks/host-environment/error-message.d.ts +1 -0
- package/types/package-checks/host-environment/filesystem.d.ts +19 -0
- package/types/package-checks/host-environment/git.d.ts +13 -0
- package/types/package-checks/host-environment/path.d.ts +3 -0
- package/types/package-checks/host-environment/process/command.d.ts +7 -0
- package/types/package-checks/host-environment/process/contract.d.ts +50 -0
- package/types/package-checks/host-environment/process/env.d.ts +16 -0
- package/types/package-checks/host-environment/process/failure.d.ts +4 -0
- package/types/package-checks/host-environment/process/result.d.ts +2 -0
- package/types/package-checks/host-environment/process/runner.d.ts +3 -0
- package/types/package-checks/json-document/strict-document.d.ts +35 -0
- package/types/package-checks/json-schema-validation/default-check.d.ts +11 -0
- package/types/package-checks/json-schema-validation/execution-stages.d.ts +27 -0
- package/types/package-checks/json-schema-validation/final-data.d.ts +15 -0
- package/types/package-checks/json-schema-validation/issue-collector.d.ts +12 -0
- package/types/package-checks/json-schema-validation/json-schema-validation.d.ts +42 -0
- package/types/package-checks/json-schema-validation/options-resolution.d.ts +3 -0
- package/types/package-checks/json-schema-validation/options-validation.d.ts +2 -0
- package/types/package-checks/json-schema-validation/options.d.ts +53 -0
- package/types/package-checks/json-schema-validation/reference-resolver.d.ts +23 -0
- package/types/package-checks/json-schema-validation/remote-response.d.ts +2 -0
- package/types/package-checks/json-schema-validation/schema-engine.d.ts +33 -0
- package/types/package-checks/json-schema-validation/schema-policy.d.ts +17 -0
- package/types/package-checks/json-validation/default-check.d.ts +11 -0
- package/types/package-checks/json-validation/final-data.d.ts +10 -0
- package/types/package-checks/json-validation/json-validation.d.ts +28 -0
- package/types/package-checks/json-validation/options-resolution.d.ts +3 -0
- package/types/package-checks/json-validation/options-validation.d.ts +2 -0
- package/types/package-checks/json-validation/options.d.ts +13 -0
- package/types/package-checks/maintenance-reminders/assessment-results.d.ts +10 -0
- package/types/package-checks/maintenance-reminders/final-data.d.ts +47 -0
- package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +111 -0
- package/types/package-checks/maintenance-reminders/maintenance-support.d.ts +7 -0
- package/types/package-checks/maintenance-reminders/measurement.d.ts +10 -0
- package/types/package-checks/maintenance-reminders/options-validation.d.ts +3 -0
- package/types/package-checks/markdown-link-validation/default-check.d.ts +27 -0
- package/types/package-checks/markdown-link-validation/execution.d.ts +12 -0
- package/types/package-checks/markdown-link-validation/filesystem-probes.d.ts +10 -0
- package/types/package-checks/markdown-link-validation/final-data.d.ts +10 -0
- package/types/package-checks/markdown-link-validation/local-resolution.d.ts +92 -0
- package/types/package-checks/markdown-link-validation/local-resolver.d.ts +5 -0
- package/types/package-checks/markdown-link-validation/markdown-parser.d.ts +37 -0
- package/types/package-checks/markdown-link-validation/options-resolution.d.ts +3 -0
- package/types/package-checks/markdown-link-validation/options-validation.d.ts +2 -0
- package/types/package-checks/markdown-link-validation/options.d.ts +43 -0
- package/types/package-checks/markdown-link-validation/records.d.ts +37 -0
- package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +15 -0
- package/types/package-checks/markdown-link-validation/target-descriptor.d.ts +5 -0
- package/types/package-checks/markdown-link-validation/traversal-result.d.ts +12 -0
- package/types/package-checks/project-files/collection.d.ts +9 -0
- package/types/package-checks/project-files/config-glob.d.ts +5 -0
- package/types/package-checks/project-files/configuration.d.ts +31 -0
- package/types/package-checks/project-files/exact-input-measurement.d.ts +12 -0
- package/types/package-checks/project-files/file-fingerprint.d.ts +7 -0
- package/types/package-checks/project-files/gitlink-revision.d.ts +9 -0
- package/types/package-checks/project-files/gitlink-worktree.d.ts +26 -0
- package/types/package-checks/project-files/input-eligibility.d.ts +7 -0
- package/types/package-checks/project-files/reported-path.d.ts +1 -0
- package/types/package-checks/project-files/revision-paths.d.ts +12 -0
- package/types/package-checks/project-files/revision-worktree-files.d.ts +5 -0
- package/types/project-definition/check-tree/authoring.d.ts +41 -0
- package/types/project-definition/check-tree/materialization.d.ts +4 -0
- package/types/project-definition/check-tree/resolution.d.ts +25 -0
- package/types/project-definition/output-defaults.d.ts +14 -0
- package/types/project-definition/output-validation.d.ts +3 -0
- package/types/project-definition/project-definition-validation.d.ts +6 -0
- package/types/project-definition/project-definition.d.ts +88 -0
- package/types/project-run/aggregation.d.ts +7 -0
- package/types/project-run/check-execution/callback.d.ts +24 -0
- package/types/project-run/check-execution/dependencies.d.ts +9 -0
- package/types/project-run/check-execution/execution-finalization.d.ts +18 -0
- package/types/project-run/check-execution/execution-settlement.d.ts +41 -0
- package/types/project-run/check-execution/messages.d.ts +3 -0
- package/types/project-run/check-execution/plan.d.ts +10 -0
- package/types/project-run/check-execution/preflight-result.d.ts +23 -0
- package/types/project-run/check-execution/preflight.d.ts +27 -0
- package/types/project-run/check-execution/resolved-checks.d.ts +51 -0
- package/types/project-run/check-execution/terminal-result.d.ts +27 -0
- package/types/project-run/completion.d.ts +14 -0
- package/types/project-run/controls/contract.d.ts +24 -0
- package/types/project-run/controls/outputs-override-validation.d.ts +3 -0
- package/types/project-run/controls/validation-result.d.ts +14 -0
- package/types/project-run/controls/validation.d.ts +3 -0
- package/types/project-run/diagnostic-logging/diagnostic-detail-rendering.d.ts +11 -0
- package/types/project-run/diagnostic-logging/logger.d.ts +33 -0
- package/types/project-run/invocation-creation.d.ts +12 -0
- package/types/project-run/invocation.d.ts +34 -0
- package/types/project-run/machine-publication.d.ts +10 -0
- package/types/project-run/output-configuration.d.ts +3 -0
- package/types/project-run/output-status.d.ts +21 -0
- package/types/project-run/progress-rendering/presentation.d.ts +28 -0
- package/types/project-run/progress-rendering/renderer-formatting.d.ts +23 -0
- package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +24 -0
- package/types/project-run/progress-rendering/renderer.d.ts +44 -0
- package/types/project-run/project-context.d.ts +7 -0
- package/types/project-run/result.d.ts +99 -0
- package/types/project-run/run.d.ts +18 -0
- package/types/project-run/task-scheduler/execution-state.d.ts +67 -0
- package/types/project-run/task-scheduler/graph-validation.d.ts +11 -0
- package/types/project-run/task-scheduler/graph.d.ts +40 -0
- package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +8 -0
- package/types/project-run/task-scheduler/scheduler-blocker-summary.d.ts +4 -0
- package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +24 -0
- package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +94 -0
- package/types/project-run/task-scheduler/scheduler-decision.d.ts +8 -0
- package/types/project-run/task-scheduler/scheduler.d.ts +3 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { errorMessage } from "./error-message.mjs";
|
|
4
|
+
import { toSlashPath } from "./path.mjs";
|
|
5
|
+
export function ensureDirForFile(filePath) {
|
|
6
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
7
|
+
}
|
|
8
|
+
export function readTextFile(filePath) {
|
|
9
|
+
return fs.readFileSync(filePath, "utf8");
|
|
10
|
+
}
|
|
11
|
+
export function writeTextFile({ content, filePath }) {
|
|
12
|
+
ensureDirForFile(filePath);
|
|
13
|
+
fs.writeFileSync(filePath, content, "utf8");
|
|
14
|
+
}
|
|
15
|
+
export function readJsonFile(filePath) {
|
|
16
|
+
let source;
|
|
17
|
+
try {
|
|
18
|
+
source = readTextFile(filePath);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw new Error(`could not read JSON file ${filePath}: ${errorMessage(error)}`, {
|
|
22
|
+
cause: error
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(source);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new Error(`could not parse JSON file ${filePath}: ${errorMessage(error)}`, {
|
|
30
|
+
cause: error
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function writeJsonFile({ filePath, trailingNewline = true, value }) {
|
|
35
|
+
const content = serializeJsonFile(value, filePath);
|
|
36
|
+
writeTextFile({ content: trailingNewline ? `${content}\n` : content, filePath });
|
|
37
|
+
}
|
|
38
|
+
export function walkFiles({ ignoredDirs: ignoredDirectoryNames, rootDir }) {
|
|
39
|
+
const ignoredDirs = new Set(ignoredDirectoryNames ?? []);
|
|
40
|
+
const results = [];
|
|
41
|
+
const visit = (subDir) => {
|
|
42
|
+
const currentDir = subDir ? path.join(rootDir, subDir) : rootDir;
|
|
43
|
+
let entries;
|
|
44
|
+
try {
|
|
45
|
+
entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
throw new Error(`could not read directory ${currentDir}: ${errorMessage(error)}`, {
|
|
49
|
+
cause: error
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
for (const entry of entries) {
|
|
53
|
+
const relPath = subDir ? `${subDir}/${entry.name}` : entry.name;
|
|
54
|
+
if (entry.isDirectory()) {
|
|
55
|
+
if (!ignoredDirs.has(entry.name)) {
|
|
56
|
+
visit(relPath);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else if (entry.isFile()) {
|
|
60
|
+
results.push(toSlashPath(relPath));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
visit("");
|
|
65
|
+
return Object.freeze(results.sort());
|
|
66
|
+
}
|
|
67
|
+
function serializeJsonFile(value, filePath) {
|
|
68
|
+
try {
|
|
69
|
+
const content = JSON.stringify(value, null, 2);
|
|
70
|
+
if (content === undefined) {
|
|
71
|
+
throw new TypeError("value is not JSON-serializable");
|
|
72
|
+
}
|
|
73
|
+
return content;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
throw new Error(`could not serialize JSON file ${filePath}: ${errorMessage(error)}`, {
|
|
77
|
+
cause: error
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=filesystem.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.mjs","sourceRoot":"","sources":["../../../../src/package-checks/host-environment/filesystem.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { errorMessage } from \"./error-message.ts\";\nimport { toSlashPath } from \"./path.ts\";\n\nexport type WriteTextFileInput = {\n readonly content: string;\n readonly filePath: string;\n};\n\nexport type WriteJsonFileInput = {\n readonly filePath: string;\n readonly trailingNewline?: boolean;\n readonly value: unknown;\n};\n\nexport type WalkFilesInput = {\n readonly ignoredDirs?: Iterable<string>;\n readonly rootDir: string;\n};\n\nexport function ensureDirForFile(filePath: string): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n}\n\nexport function readTextFile(filePath: string): string {\n return fs.readFileSync(filePath, \"utf8\");\n}\n\nexport function writeTextFile({ content, filePath }: WriteTextFileInput): void {\n ensureDirForFile(filePath);\n fs.writeFileSync(filePath, content, \"utf8\");\n}\n\nexport function readJsonFile(filePath: string): unknown {\n let source: string;\n try {\n source = readTextFile(filePath);\n } catch (error: unknown) {\n throw new Error(`could not read JSON file ${filePath}: ${errorMessage(error)}`, {\n cause: error\n });\n }\n\n try {\n return JSON.parse(source);\n } catch (error: unknown) {\n throw new Error(`could not parse JSON file ${filePath}: ${errorMessage(error)}`, {\n cause: error\n });\n }\n}\n\nexport function writeJsonFile({\n filePath,\n trailingNewline = true,\n value\n}: WriteJsonFileInput): void {\n const content = serializeJsonFile(value, filePath);\n writeTextFile({ content: trailingNewline ? `${content}\\n` : content, filePath });\n}\n\nexport function walkFiles({\n ignoredDirs: ignoredDirectoryNames,\n rootDir\n}: WalkFilesInput): readonly string[] {\n const ignoredDirs = new Set(ignoredDirectoryNames ?? []);\n const results: string[] = [];\n\n const visit = (subDir: string) => {\n const currentDir = subDir ? path.join(rootDir, subDir) : rootDir;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(currentDir, { withFileTypes: true });\n } catch (error: unknown) {\n throw new Error(`could not read directory ${currentDir}: ${errorMessage(error)}`, {\n cause: error\n });\n }\n\n for (const entry of entries) {\n const relPath = subDir ? `${subDir}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n if (!ignoredDirs.has(entry.name)) {\n visit(relPath);\n }\n } else if (entry.isFile()) {\n results.push(toSlashPath(relPath));\n }\n }\n };\n\n visit(\"\");\n return Object.freeze(results.sort());\n}\n\nfunction serializeJsonFile(value: unknown, filePath: string): string {\n try {\n const content = JSON.stringify(value, null, 2);\n if (content === undefined) {\n throw new TypeError(\"value is not JSON-serializable\");\n }\n return content;\n } catch (error: unknown) {\n throw new Error(`could not serialize JSON file ${filePath}: ${errorMessage(error)}`, {\n cause: error\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { processFailed, runProcessSync } from "./process/command.mjs";
|
|
2
|
+
import { toSlashPath } from "./path.mjs";
|
|
3
|
+
export function runGit(options) {
|
|
4
|
+
return runProcessSync({ command: "git", ...options });
|
|
5
|
+
}
|
|
6
|
+
export function gitHeadSha(cwd) {
|
|
7
|
+
const result = runGit({ args: ["rev-parse", "HEAD"], cwd });
|
|
8
|
+
if (processFailed(result))
|
|
9
|
+
return null;
|
|
10
|
+
return result.stdout.trim() || null;
|
|
11
|
+
}
|
|
12
|
+
export function gitCommitDate(options) {
|
|
13
|
+
return gitLogField({ format: "%aI", ...options });
|
|
14
|
+
}
|
|
15
|
+
export function gitCommitTitle(options) {
|
|
16
|
+
return gitLogField({ format: "%s", ...options });
|
|
17
|
+
}
|
|
18
|
+
export function splitGitFileList(stdout) {
|
|
19
|
+
return stdout.trim().split(/\r?\n/).filter(Boolean).map(toSlashPath);
|
|
20
|
+
}
|
|
21
|
+
export function splitNulDelimitedGitFileList(stdout) {
|
|
22
|
+
return stdout
|
|
23
|
+
.split("\0")
|
|
24
|
+
.filter((filePath) => filePath.length > 0)
|
|
25
|
+
.map(toSlashPath);
|
|
26
|
+
}
|
|
27
|
+
export function parseGitStatusPaths(stdout) {
|
|
28
|
+
return stdout
|
|
29
|
+
.split(/\r?\n/)
|
|
30
|
+
.map((line) => line.trimEnd())
|
|
31
|
+
.filter(Boolean)
|
|
32
|
+
.map((line) => {
|
|
33
|
+
const rawPath = line.slice(3).trim();
|
|
34
|
+
const renameMarker = " -> ";
|
|
35
|
+
return rawPath.includes(renameMarker)
|
|
36
|
+
? rawPath.slice(rawPath.indexOf(renameMarker) + renameMarker.length)
|
|
37
|
+
: rawPath;
|
|
38
|
+
})
|
|
39
|
+
.filter(Boolean)
|
|
40
|
+
.map(toSlashPath);
|
|
41
|
+
}
|
|
42
|
+
function gitLogField({ format, ...options }) {
|
|
43
|
+
const result = runGit({
|
|
44
|
+
args: ["log", `--format=${format}`, "--max-count=1", options.sha],
|
|
45
|
+
cwd: options.cwd
|
|
46
|
+
});
|
|
47
|
+
if (processFailed(result))
|
|
48
|
+
return null;
|
|
49
|
+
return result.stdout.trim() || null;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=git.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.mjs","sourceRoot":"","sources":["../../../../src/package-checks/host-environment/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAaxC,MAAM,UAAU,MAAM,CAAC,OAAsB;IAC3C,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB;IACrD,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;SACzC,GAAG,CAAC,WAAW,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,MAAM;SACV,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SAC7B,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,MAAM,CAAC;QAC5B,OAAO,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;YACpE,CAAC,CAAC,OAAO,CAAC;IACd,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,WAAW,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAsB;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,MAAM,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC;QACjE,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AACtC,CAAC","sourcesContent":["import { processFailed, runProcessSync } from \"./process/command.ts\";\nimport type { ProcessResult, RunProcessSyncOptions } from \"./process/command.ts\";\nimport { toSlashPath } from \"./path.ts\";\n\nexport type RunGitOptions = Omit<RunProcessSyncOptions, \"command\">;\n\nexport type GitCommitOptions = {\n readonly cwd: string;\n readonly sha: string;\n};\n\ntype GitLogFieldOptions = GitCommitOptions & {\n readonly format: string;\n};\n\nexport function runGit(options: RunGitOptions): ProcessResult {\n return runProcessSync({ command: \"git\", ...options });\n}\n\nexport function gitHeadSha(cwd: string): string | null {\n const result = runGit({ args: [\"rev-parse\", \"HEAD\"], cwd });\n if (processFailed(result)) return null;\n return result.stdout.trim() || null;\n}\n\nexport function gitCommitDate(options: GitCommitOptions): string | null {\n return gitLogField({ format: \"%aI\", ...options });\n}\n\nexport function gitCommitTitle(options: GitCommitOptions): string | null {\n return gitLogField({ format: \"%s\", ...options });\n}\n\nexport function splitGitFileList(stdout: string): string[] {\n return stdout.trim().split(/\\r?\\n/).filter(Boolean).map(toSlashPath);\n}\n\nexport function splitNulDelimitedGitFileList(stdout: string): string[] {\n return stdout\n .split(\"\\0\")\n .filter((filePath) => filePath.length > 0)\n .map(toSlashPath);\n}\n\nexport function parseGitStatusPaths(stdout: string): string[] {\n return stdout\n .split(/\\r?\\n/)\n .map((line) => line.trimEnd())\n .filter(Boolean)\n .map((line) => {\n const rawPath = line.slice(3).trim();\n const renameMarker = \" -> \";\n return rawPath.includes(renameMarker)\n ? rawPath.slice(rawPath.indexOf(renameMarker) + renameMarker.length)\n : rawPath;\n })\n .filter(Boolean)\n .map(toSlashPath);\n}\n\nfunction gitLogField({ format, ...options }: GitLogFieldOptions): string | null {\n const result = runGit({\n args: [\"log\", `--format=${format}`, \"--max-count=1\", options.sha],\n cwd: options.cwd\n });\n if (processFailed(result)) return null;\n return result.stdout.trim() || null;\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function toSlashPath(filePath) {
|
|
2
|
+
return filePath.replace(/\\/g, "/");
|
|
3
|
+
}
|
|
4
|
+
/** 判断值是否已是跨平台可稳定发布的 project-root-relative slash path。 */
|
|
5
|
+
export function isNormalizedProjectRelativePath(value) {
|
|
6
|
+
if (typeof value !== "string" ||
|
|
7
|
+
value.length === 0 ||
|
|
8
|
+
value.startsWith("/") ||
|
|
9
|
+
value.includes("\\") ||
|
|
10
|
+
value.includes("\u0000") ||
|
|
11
|
+
/^[A-Za-z]:/u.test(value)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return value
|
|
15
|
+
.split("/")
|
|
16
|
+
.every((segment) => segment.length > 0 && segment !== "." && segment !== "..");
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=path.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.mjs","sourceRoot":"","sources":["../../../../src/package-checks/host-environment/path.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,+BAA+B,CAAC,KAAc;IAC5D,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK;SACT,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","sourcesContent":["export function toSlashPath(filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\");\n}\n\n/** 判断值是否已是跨平台可稳定发布的 project-root-relative slash path。 */\nexport function isNormalizedProjectRelativePath(value: unknown): value is string {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.startsWith(\"/\") ||\n value.includes(\"\\\\\") ||\n value.includes(\"\\u0000\") ||\n /^[A-Za-z]:/u.test(value)\n ) {\n return false;\n }\n return value\n .split(\"/\")\n .every((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\");\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { processFailure, processFailureFromResult, processFailed } from "./failure.mjs";
|
|
2
|
+
export { PLAIN_TEXT_PROCESS_ENV, plainTextProcessEnv } from "./env.mjs";
|
|
3
|
+
export { runProcess, runProcessSync } from "./runner.mjs";
|
|
4
|
+
export { DEFAULT_PROCESS_MAX_BUFFER_BYTES } from "./contract.mjs";
|
|
5
|
+
export function writeProcessOutput(result) {
|
|
6
|
+
if (result.stdout) {
|
|
7
|
+
process.stdout.write(result.stdout);
|
|
8
|
+
}
|
|
9
|
+
if (result.stderr) {
|
|
10
|
+
process.stderr.write(result.stderr);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/host-environment/process/command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAQjE,MAAM,UAAU,kBAAkB,CAAC,MAAgD;IACjF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;AACH,CAAC","sourcesContent":["import type { ProcessResult } from \"./contract.ts\";\n\nexport { processFailure, processFailureFromResult, processFailed } from \"./failure.ts\";\nexport { PLAIN_TEXT_PROCESS_ENV, plainTextProcessEnv } from \"./env.ts\";\nexport { runProcess, runProcessSync } from \"./runner.ts\";\nexport { DEFAULT_PROCESS_MAX_BUFFER_BYTES } from \"./contract.ts\";\nexport type {\n ProcessFailure,\n ProcessResult,\n RunProcessOptions,\n RunProcessSyncOptions\n} from \"./contract.ts\";\n\nexport function writeProcessOutput(result: Pick<ProcessResult, \"stderr\" | \"stdout\">): void {\n if (result.stdout) {\n process.stdout.write(result.stdout);\n }\n if (result.stderr) {\n process.stderr.write(result.stderr);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/host-environment/process/contract.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC","sourcesContent":["import type { SyncOptions } from \"execa\";\n\nexport const DEFAULT_PROCESS_MAX_BUFFER_BYTES = 64 * 1024 * 1024;\n\nexport interface ProcessFailure extends Error {\n code?: number | string | null;\n signal?: NodeJS.Signals | null;\n status?: number | null;\n stderr?: Buffer | string;\n stdout?: Buffer | string;\n}\n\nexport type ProcessResult = {\n readonly error?: Error;\n readonly signal: NodeJS.Signals | null;\n readonly status: number | null;\n readonly stderr: string;\n readonly stdout: string;\n};\n\nexport type RunProcessSyncOptions = {\n readonly args: readonly string[];\n readonly command: string;\n readonly cwd?: string | URL;\n readonly encoding?: SyncOptions[\"encoding\"];\n readonly env?: NodeJS.ProcessEnv;\n readonly maxBuffer?: number;\n readonly stdio?: SyncOptions[\"stdio\"];\n readonly timeout?: number;\n readonly windowsHide?: boolean;\n};\n\nexport type RunProcessOptions = {\n readonly args?: readonly string[];\n readonly command: string;\n readonly cwd?: string | URL;\n readonly env?: NodeJS.ProcessEnv;\n readonly label?: string;\n readonly maxBuffer?: number;\n readonly timeout?: number;\n readonly windowsHide?: boolean;\n};\n\nexport type ExecaResultLike = {\n readonly code?: string;\n readonly exitCode?: number;\n readonly failed?: boolean;\n readonly isMaxBuffer?: boolean;\n readonly message?: string;\n readonly originalMessage?: string;\n readonly shortMessage?: string;\n readonly signal?: NodeJS.Signals;\n readonly stderr?: unknown;\n readonly stdout?: unknown;\n readonly timedOut?: boolean;\n};\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const PLAIN_TEXT_PROCESS_ENV = Object.freeze({
|
|
2
|
+
CARGO_TERM_COLOR: "never",
|
|
3
|
+
CLICOLOR: "0",
|
|
4
|
+
CLICOLOR_FORCE: "0",
|
|
5
|
+
FORCE_COLOR: "0",
|
|
6
|
+
NO_COLOR: "1",
|
|
7
|
+
PNPM_CONFIG_COLOR: "false",
|
|
8
|
+
PY_COLORS: "0",
|
|
9
|
+
TERM: "dumb",
|
|
10
|
+
UV_NO_COLOR: "1",
|
|
11
|
+
npm_config_color: "false"
|
|
12
|
+
});
|
|
13
|
+
export function plainTextProcessEnv({ env = process.env } = {}) {
|
|
14
|
+
return {
|
|
15
|
+
...env,
|
|
16
|
+
...PLAIN_TEXT_PROCESS_ENV
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=env.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/host-environment/process/env.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,gBAAgB,EAAE,OAAO;IACzB,QAAQ,EAAE,GAAG;IACb,cAAc,EAAE,GAAG;IACnB,WAAW,EAAE,GAAG;IAChB,QAAQ,EAAE,GAAG;IACb,iBAAiB,EAAE,OAAO;IAC1B,SAAS,EAAE,GAAG;IACd,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,GAAG;IAChB,gBAAgB,EAAE,OAAO;CACE,CAAC,CAAC;AAM/B,MAAM,UAAU,mBAAmB,CAAC,EAClC,GAAG,GAAG,OAAO,CAAC,GAAG,EAClB,GAA6B,EAAE;IAC9B,OAAO;QACL,GAAG,GAAG;QACN,GAAG,sBAAsB;KAC1B,CAAC;AACJ,CAAC","sourcesContent":["export const PLAIN_TEXT_PROCESS_ENV = Object.freeze({\n CARGO_TERM_COLOR: \"never\",\n CLICOLOR: \"0\",\n CLICOLOR_FORCE: \"0\",\n FORCE_COLOR: \"0\",\n NO_COLOR: \"1\",\n PNPM_CONFIG_COLOR: \"false\",\n PY_COLORS: \"0\",\n TERM: \"dumb\",\n UV_NO_COLOR: \"1\",\n npm_config_color: \"false\"\n} satisfies NodeJS.ProcessEnv);\n\nexport type PlainTextProcessEnvInput = {\n readonly env?: NodeJS.ProcessEnv;\n};\n\nexport function plainTextProcessEnv({\n env = process.env\n}: PlainTextProcessEnvInput = {}): NodeJS.ProcessEnv {\n return {\n ...env,\n ...PLAIN_TEXT_PROCESS_ENV\n };\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function processFailure(error) {
|
|
2
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
3
|
+
}
|
|
4
|
+
export function processFailureFromResult(result) {
|
|
5
|
+
if (result.error) {
|
|
6
|
+
return attachProcessResult(processFailure(result.error), result);
|
|
7
|
+
}
|
|
8
|
+
if (result.status === 0) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return attachProcessResult(createExitFailure(result), result);
|
|
12
|
+
}
|
|
13
|
+
export function processFailed(result) {
|
|
14
|
+
return result.error !== undefined || result.status !== 0;
|
|
15
|
+
}
|
|
16
|
+
function attachProcessResult(failure, result) {
|
|
17
|
+
failure.stdout = result.stdout;
|
|
18
|
+
failure.stderr = result.stderr;
|
|
19
|
+
failure.signal = result.signal;
|
|
20
|
+
failure.status = result.status;
|
|
21
|
+
return failure;
|
|
22
|
+
}
|
|
23
|
+
function createExitFailure(result) {
|
|
24
|
+
const failure = new Error(exitFailureMessage(result));
|
|
25
|
+
failure.code = result.status ?? 1;
|
|
26
|
+
return failure;
|
|
27
|
+
}
|
|
28
|
+
function exitFailureMessage(result) {
|
|
29
|
+
if (result.status === null) {
|
|
30
|
+
return `process terminated by signal ${result.signal ?? "unknown"}`;
|
|
31
|
+
}
|
|
32
|
+
return `process exited with status ${result.status}`;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=failure.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/host-environment/process/failure.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAqB;IAC5D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,mBAAmB,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA+C;IAC3E,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAuB,EAAE,MAAqB;IACzE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAqB;IAC9C,MAAM,OAAO,GAAmB,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAqB;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,gCAAgC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,8BAA8B,MAAM,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC","sourcesContent":["import type { ProcessFailure, ProcessResult } from \"./contract.ts\";\n\nexport function processFailure(error: unknown): ProcessFailure {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nexport function processFailureFromResult(result: ProcessResult): ProcessFailure | null {\n if (result.error) {\n return attachProcessResult(processFailure(result.error), result);\n }\n if (result.status === 0) {\n return null;\n }\n return attachProcessResult(createExitFailure(result), result);\n}\n\nexport function processFailed(result: Pick<ProcessResult, \"error\" | \"status\">): boolean {\n return result.error !== undefined || result.status !== 0;\n}\n\nfunction attachProcessResult(failure: ProcessFailure, result: ProcessResult): ProcessFailure {\n failure.stdout = result.stdout;\n failure.stderr = result.stderr;\n failure.signal = result.signal;\n failure.status = result.status;\n return failure;\n}\n\nfunction createExitFailure(result: ProcessResult): ProcessFailure {\n const failure: ProcessFailure = new Error(exitFailureMessage(result));\n failure.code = result.status ?? 1;\n return failure;\n}\n\nfunction exitFailureMessage(result: ProcessResult): string {\n if (result.status === null) {\n return `process terminated by signal ${result.signal ?? \"unknown\"}`;\n }\n return `process exited with status ${result.status}`;\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function toProcessResult(result, label) {
|
|
2
|
+
return {
|
|
3
|
+
error: processErrorFor(result, label),
|
|
4
|
+
signal: result.signal ?? null,
|
|
5
|
+
status: result.exitCode ?? null,
|
|
6
|
+
stderr: outputString(result.stderr),
|
|
7
|
+
stdout: outputString(result.stdout)
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function outputString(output) {
|
|
11
|
+
return typeof output === "string" ? output : "";
|
|
12
|
+
}
|
|
13
|
+
function processErrorFor(result, label = "process") {
|
|
14
|
+
if (!isExecutionError(result)) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
const message = result.originalMessage ?? result.shortMessage ?? result.message ?? `${label} failed`;
|
|
18
|
+
const error = new Error(message);
|
|
19
|
+
if (result.code) {
|
|
20
|
+
error.code = result.code;
|
|
21
|
+
}
|
|
22
|
+
return error;
|
|
23
|
+
}
|
|
24
|
+
function isExecutionError(result) {
|
|
25
|
+
if (!result.failed) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (typeof result.exitCode === "number") {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return Boolean(result.code || result.timedOut || result.isMaxBuffer || result.signal);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=result.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/host-environment/process/result.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,MAAuB,EAAE,KAAa;IACpE,OAAO;QACL,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QAC/B,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QACnC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAe;IACnC,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,KAAK,GAAG,SAAS;IACjE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GACX,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,IAAI,GAAG,KAAK,SAAS,CAAC;IACvF,MAAM,KAAK,GAA0B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuB;IAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;AACxF,CAAC","sourcesContent":["import type { ExecaResultLike, ProcessResult } from \"./contract.ts\";\n\nexport function toProcessResult(result: ExecaResultLike, label: string): ProcessResult {\n return {\n error: processErrorFor(result, label),\n signal: result.signal ?? null,\n status: result.exitCode ?? null,\n stderr: outputString(result.stderr),\n stdout: outputString(result.stdout)\n };\n}\n\nfunction outputString(output: unknown): string {\n return typeof output === \"string\" ? output : \"\";\n}\n\nfunction processErrorFor(result: ExecaResultLike, label = \"process\"): Error | undefined {\n if (!isExecutionError(result)) {\n return undefined;\n }\n\n const message =\n result.originalMessage ?? result.shortMessage ?? result.message ?? `${label} failed`;\n const error: NodeJS.ErrnoException = new Error(message);\n if (result.code) {\n error.code = result.code;\n }\n return error;\n}\n\nfunction isExecutionError(result: ExecaResultLike): boolean {\n if (!result.failed) {\n return false;\n }\n if (typeof result.exitCode === \"number\") {\n return false;\n }\n return Boolean(result.code || result.timedOut || result.isMaxBuffer || result.signal);\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { execa, execaSync } from "execa";
|
|
2
|
+
import { plainTextProcessEnv } from "./env.mjs";
|
|
3
|
+
import { toProcessResult } from "./result.mjs";
|
|
4
|
+
import { DEFAULT_PROCESS_MAX_BUFFER_BYTES } from "./contract.mjs";
|
|
5
|
+
export function runProcessSync(options) {
|
|
6
|
+
const { args, command, ...processOptions } = options;
|
|
7
|
+
const result = execaSync(command, args, {
|
|
8
|
+
...processOptions,
|
|
9
|
+
encoding: processOptions.encoding ?? "utf8",
|
|
10
|
+
env: plainTextProcessEnv({ env: processOptions.env }),
|
|
11
|
+
maxBuffer: processOptions.maxBuffer ?? DEFAULT_PROCESS_MAX_BUFFER_BYTES,
|
|
12
|
+
reject: false,
|
|
13
|
+
stripFinalNewline: false,
|
|
14
|
+
windowsHide: processOptions.windowsHide ?? true
|
|
15
|
+
});
|
|
16
|
+
return toProcessResult(result, command);
|
|
17
|
+
}
|
|
18
|
+
export function runProcess(options) {
|
|
19
|
+
const { args = [], command, cwd, env, label = command, maxBuffer = DEFAULT_PROCESS_MAX_BUFFER_BYTES, timeout, windowsHide = true } = options;
|
|
20
|
+
return execa(command, args, {
|
|
21
|
+
cwd,
|
|
22
|
+
env: plainTextProcessEnv({ env }),
|
|
23
|
+
maxBuffer,
|
|
24
|
+
reject: false,
|
|
25
|
+
stripFinalNewline: false,
|
|
26
|
+
timeout,
|
|
27
|
+
windowsHide
|
|
28
|
+
}).then((result) => toProcessResult(result, label));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=runner.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/host-environment/process/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAIjC,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE;QACtC,GAAG,cAAc;QACjB,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,MAAM;QAC3C,GAAG,EAAE,mBAAmB,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC;QACrD,SAAS,EAAE,cAAc,CAAC,SAAS,IAAI,gCAAgC;QACvE,MAAM,EAAE,KAAK;QACb,iBAAiB,EAAE,KAAK;QACxB,WAAW,EAAE,cAAc,CAAC,WAAW,IAAI,IAAI;KAChD,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,MAAM,EACJ,IAAI,GAAG,EAAE,EACT,OAAO,EACP,GAAG,EACH,GAAG,EACH,KAAK,GAAG,OAAO,EACf,SAAS,GAAG,gCAAgC,EAC5C,OAAO,EACP,WAAW,GAAG,IAAI,EACnB,GAAG,OAAO,CAAC;IAEZ,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;QAC1B,GAAG;QACH,GAAG,EAAE,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC;QACjC,SAAS;QACT,MAAM,EAAE,KAAK;QACb,iBAAiB,EAAE,KAAK;QACxB,OAAO;QACP,WAAW;KACZ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC","sourcesContent":["import { execa, execaSync } from \"execa\";\n\nimport { plainTextProcessEnv } from \"./env.ts\";\nimport { toProcessResult } from \"./result.ts\";\nimport {\n DEFAULT_PROCESS_MAX_BUFFER_BYTES,\n type ProcessResult,\n type RunProcessOptions,\n type RunProcessSyncOptions\n} from \"./contract.ts\";\n\nexport function runProcessSync(options: RunProcessSyncOptions): ProcessResult {\n const { args, command, ...processOptions } = options;\n const result = execaSync(command, args, {\n ...processOptions,\n encoding: processOptions.encoding ?? \"utf8\",\n env: plainTextProcessEnv({ env: processOptions.env }),\n maxBuffer: processOptions.maxBuffer ?? DEFAULT_PROCESS_MAX_BUFFER_BYTES,\n reject: false,\n stripFinalNewline: false,\n windowsHide: processOptions.windowsHide ?? true\n });\n return toProcessResult(result, command);\n}\n\nexport function runProcess(options: RunProcessOptions): Promise<ProcessResult> {\n const {\n args = [],\n command,\n cwd,\n env,\n label = command,\n maxBuffer = DEFAULT_PROCESS_MAX_BUFFER_BYTES,\n timeout,\n windowsHide = true\n } = options;\n\n return execa(command, args, {\n cwd,\n env: plainTextProcessEnv({ env }),\n maxBuffer,\n reject: false,\n stripFinalNewline: false,\n timeout,\n windowsHide\n }).then((result) => toProcessResult(result, label));\n}\n"]}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { closeSync, fstatSync, openSync, readSync } from "node:fs";
|
|
2
|
+
import { parse } from "@humanwhocodes/momoa";
|
|
3
|
+
const UTF8_BOM = [0xef, 0xbb, 0xbf];
|
|
4
|
+
const UNAVAILABLE_DOCUMENT = Object.freeze({ kind: "unavailable" });
|
|
5
|
+
function isPositiveSafeInteger(value) {
|
|
6
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Reads one approved file with a byte limit, then applies the strict JSON document contract.
|
|
10
|
+
* The caller owns exact-input authorization and maps `unavailable` to its Check outcome.
|
|
11
|
+
*/
|
|
12
|
+
export function readStrictJsonDocument(input) {
|
|
13
|
+
if (!isPositiveSafeInteger(input.maximumBytes))
|
|
14
|
+
return UNAVAILABLE_DOCUMENT;
|
|
15
|
+
const bytes = readBoundedFile(input.filePath, input.maximumBytes);
|
|
16
|
+
if (bytes === undefined)
|
|
17
|
+
return UNAVAILABLE_DOCUMENT;
|
|
18
|
+
if (bytes === "too-large")
|
|
19
|
+
return issue("too-large");
|
|
20
|
+
return inspectStrictJsonBytes(bytes);
|
|
21
|
+
}
|
|
22
|
+
function readBoundedFile(filePath, maximumBytes) {
|
|
23
|
+
let descriptor;
|
|
24
|
+
try {
|
|
25
|
+
descriptor = openSync(filePath, "r");
|
|
26
|
+
const before = fstatSync(descriptor);
|
|
27
|
+
if (!before.isFile() || !Number.isSafeInteger(before.size))
|
|
28
|
+
return undefined;
|
|
29
|
+
if (before.size > maximumBytes)
|
|
30
|
+
return "too-large";
|
|
31
|
+
const bytes = new Uint8Array(before.size);
|
|
32
|
+
let offset = 0;
|
|
33
|
+
while (offset < bytes.byteLength) {
|
|
34
|
+
const bytesRead = readSync(descriptor, bytes, offset, bytes.byteLength - offset, null);
|
|
35
|
+
if (bytesRead === 0)
|
|
36
|
+
return undefined;
|
|
37
|
+
offset += bytesRead;
|
|
38
|
+
}
|
|
39
|
+
const after = fstatSync(descriptor);
|
|
40
|
+
return after.size === before.size ? bytes : undefined;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
if (descriptor !== undefined) {
|
|
47
|
+
try {
|
|
48
|
+
closeSync(descriptor);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// The read result is already fully normalized; closing cannot expose a native failure.
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Applies strict JSON grammar and duplicate-key semantics to already bounded bytes.
|
|
58
|
+
* This is package-private so controlled remote schema bytes use the same boundary as local files.
|
|
59
|
+
*/
|
|
60
|
+
export function inspectStrictJsonBytes(bytes) {
|
|
61
|
+
if (hasUtf8Bom(bytes))
|
|
62
|
+
return issue("bom");
|
|
63
|
+
let source;
|
|
64
|
+
try {
|
|
65
|
+
source = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return issue("invalid-utf8");
|
|
69
|
+
}
|
|
70
|
+
let document;
|
|
71
|
+
try {
|
|
72
|
+
document = parse(source, { allowTrailingCommas: false, mode: "json" });
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return isMomoaSyntaxError(error) ? issue("invalid-json") : UNAVAILABLE_DOCUMENT;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
if (hasDuplicateKey(document.body))
|
|
79
|
+
return issue("duplicate-key");
|
|
80
|
+
return valid(toStrictJsonValue(document.body));
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return UNAVAILABLE_DOCUMENT;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function isMomoaSyntaxError(error) {
|
|
87
|
+
return (error instanceof Error &&
|
|
88
|
+
hasNumericOwnProperty(error, "line") &&
|
|
89
|
+
hasNumericOwnProperty(error, "column") &&
|
|
90
|
+
hasNumericOwnProperty(error, "offset"));
|
|
91
|
+
}
|
|
92
|
+
function hasNumericOwnProperty(error, propertyName) {
|
|
93
|
+
return typeof Object.getOwnPropertyDescriptor(error, propertyName)?.value === "number";
|
|
94
|
+
}
|
|
95
|
+
function hasUtf8Bom(bytes) {
|
|
96
|
+
return UTF8_BOM.every((byte, index) => bytes[index] === byte);
|
|
97
|
+
}
|
|
98
|
+
function hasDuplicateKey(node) {
|
|
99
|
+
if (node.type === "Array") {
|
|
100
|
+
return node.elements.some((element) => hasDuplicateKey(element.value));
|
|
101
|
+
}
|
|
102
|
+
if (node.type !== "Object")
|
|
103
|
+
return false;
|
|
104
|
+
const names = new Set();
|
|
105
|
+
for (const member of node.members) {
|
|
106
|
+
if (member.name.type !== "String")
|
|
107
|
+
throw new TypeError("strict JSON object member must be a string");
|
|
108
|
+
if (names.has(member.name.value))
|
|
109
|
+
return true;
|
|
110
|
+
names.add(member.name.value);
|
|
111
|
+
if (hasDuplicateKey(member.value))
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
function toStrictJsonValue(node) {
|
|
117
|
+
switch (node.type) {
|
|
118
|
+
case "Null":
|
|
119
|
+
return null;
|
|
120
|
+
case "Boolean":
|
|
121
|
+
case "Number":
|
|
122
|
+
case "String":
|
|
123
|
+
return node.value;
|
|
124
|
+
case "Array":
|
|
125
|
+
return strictJsonArray(node);
|
|
126
|
+
case "Object":
|
|
127
|
+
return strictJsonObject(node);
|
|
128
|
+
case "Infinity":
|
|
129
|
+
case "NaN":
|
|
130
|
+
throw new TypeError("strict JSON value node must not be a non-finite number");
|
|
131
|
+
default:
|
|
132
|
+
throw new TypeError("strict JSON value node must be a standard JSON node");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function strictJsonArray(node) {
|
|
136
|
+
return Object.freeze(node.elements.map((element) => toStrictJsonValue(element.value)));
|
|
137
|
+
}
|
|
138
|
+
function strictJsonObject(node) {
|
|
139
|
+
const strictObject = {};
|
|
140
|
+
Object.setPrototypeOf(strictObject, null);
|
|
141
|
+
for (const member of node.members) {
|
|
142
|
+
defineStrictJsonProperty(strictObject, member.name, member.value);
|
|
143
|
+
}
|
|
144
|
+
return Object.freeze(strictObject);
|
|
145
|
+
}
|
|
146
|
+
function defineStrictJsonProperty(target, name, value) {
|
|
147
|
+
if (name.type !== "String" || name.value === undefined) {
|
|
148
|
+
throw new TypeError("strict JSON object member must be a string");
|
|
149
|
+
}
|
|
150
|
+
Object.defineProperty(target, name.value, {
|
|
151
|
+
configurable: false,
|
|
152
|
+
enumerable: true,
|
|
153
|
+
value: toStrictJsonValue(value),
|
|
154
|
+
writable: false
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function issue(reason) {
|
|
158
|
+
return Object.freeze({ kind: "issue", reason });
|
|
159
|
+
}
|
|
160
|
+
function valid(jsonValue) {
|
|
161
|
+
return Object.freeze({ kind: "valid", jsonValue });
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=strict-document.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-document.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-document/strict-document.ts"],"names":[],"mappings":"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","sourcesContent":["import { closeSync, fstatSync, openSync, readSync } from \"node:fs\";\n\nimport { parse, type ValueNode } from \"@humanwhocodes/momoa\";\n\nexport type JsonDocumentIssue =\n | \"too-large\"\n | \"bom\"\n | \"invalid-utf8\"\n | \"invalid-json\"\n | \"duplicate-key\";\n\n/**\n * A strict JSON value retained only inside Product source boundaries.\n * Objects have a null prototype and every aggregate is frozen, so document keys cannot affect ambient prototypes.\n */\nexport type StrictJsonArray = readonly StrictJsonValue[];\n\nexport interface StrictJsonObject {\n readonly [key: string]: StrictJsonValue;\n}\n\nexport type StrictJsonValue = null | boolean | number | string | StrictJsonArray | StrictJsonObject;\n\nexport type StrictJsonDocumentResult =\n | Readonly<{ readonly kind: \"valid\"; readonly jsonValue: StrictJsonValue }>\n | Readonly<{ readonly kind: \"issue\"; readonly reason: JsonDocumentIssue }>\n | Readonly<{ readonly kind: \"unavailable\" }>;\n\ninterface StrictJsonDocumentReadInput {\n readonly filePath: string;\n /** Normally validated at the Check options boundary; malformed private input becomes unavailable. */\n readonly maximumBytes: number;\n}\n\nconst UTF8_BOM = [0xef, 0xbb, 0xbf] as const;\nconst UNAVAILABLE_DOCUMENT = Object.freeze({ kind: \"unavailable\" } as const);\n\nfunction isPositiveSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\n/**\n * Reads one approved file with a byte limit, then applies the strict JSON document contract.\n * The caller owns exact-input authorization and maps `unavailable` to its Check outcome.\n */\nexport function readStrictJsonDocument(\n input: StrictJsonDocumentReadInput\n): StrictJsonDocumentResult {\n if (!isPositiveSafeInteger(input.maximumBytes)) return UNAVAILABLE_DOCUMENT;\n\n const bytes = readBoundedFile(input.filePath, input.maximumBytes);\n if (bytes === undefined) return UNAVAILABLE_DOCUMENT;\n if (bytes === \"too-large\") return issue(\"too-large\");\n return inspectStrictJsonBytes(bytes);\n}\n\nfunction readBoundedFile(\n filePath: string,\n maximumBytes: number\n): Uint8Array | \"too-large\" | undefined {\n let descriptor: number | undefined;\n try {\n descriptor = openSync(filePath, \"r\");\n const before = fstatSync(descriptor);\n if (!before.isFile() || !Number.isSafeInteger(before.size)) return undefined;\n if (before.size > maximumBytes) return \"too-large\";\n\n const bytes = new Uint8Array(before.size);\n let offset = 0;\n while (offset < bytes.byteLength) {\n const bytesRead = readSync(descriptor, bytes, offset, bytes.byteLength - offset, null);\n if (bytesRead === 0) return undefined;\n offset += bytesRead;\n }\n\n const after = fstatSync(descriptor);\n return after.size === before.size ? bytes : undefined;\n } catch {\n return undefined;\n } finally {\n if (descriptor !== undefined) {\n try {\n closeSync(descriptor);\n } catch {\n // The read result is already fully normalized; closing cannot expose a native failure.\n }\n }\n }\n}\n\n/**\n * Applies strict JSON grammar and duplicate-key semantics to already bounded bytes.\n * This is package-private so controlled remote schema bytes use the same boundary as local files.\n */\nexport function inspectStrictJsonBytes(bytes: Uint8Array): StrictJsonDocumentResult {\n if (hasUtf8Bom(bytes)) return issue(\"bom\");\n\n let source: string;\n try {\n source = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n } catch {\n return issue(\"invalid-utf8\");\n }\n\n let document: ReturnType<typeof parse>;\n try {\n document = parse(source, { allowTrailingCommas: false, mode: \"json\" });\n } catch (error) {\n return isMomoaSyntaxError(error) ? issue(\"invalid-json\") : UNAVAILABLE_DOCUMENT;\n }\n\n try {\n if (hasDuplicateKey(document.body)) return issue(\"duplicate-key\");\n return valid(toStrictJsonValue(document.body));\n } catch {\n return UNAVAILABLE_DOCUMENT;\n }\n}\n\nfunction isMomoaSyntaxError(error: unknown): boolean {\n return (\n error instanceof Error &&\n hasNumericOwnProperty(error, \"line\") &&\n hasNumericOwnProperty(error, \"column\") &&\n hasNumericOwnProperty(error, \"offset\")\n );\n}\n\nfunction hasNumericOwnProperty(error: object, propertyName: string): boolean {\n return typeof Object.getOwnPropertyDescriptor(error, propertyName)?.value === \"number\";\n}\n\nfunction hasUtf8Bom(bytes: Uint8Array): boolean {\n return UTF8_BOM.every((byte, index) => bytes[index] === byte);\n}\n\nfunction hasDuplicateKey(node: ValueNode): boolean {\n if (node.type === \"Array\") {\n return node.elements.some((element) => hasDuplicateKey(element.value));\n }\n if (node.type !== \"Object\") return false;\n\n const names = new Set<string>();\n for (const member of node.members) {\n if (member.name.type !== \"String\")\n throw new TypeError(\"strict JSON object member must be a string\");\n if (names.has(member.name.value)) return true;\n names.add(member.name.value);\n if (hasDuplicateKey(member.value)) return true;\n }\n return false;\n}\n\nfunction toStrictJsonValue(node: ValueNode): StrictJsonValue {\n switch (node.type) {\n case \"Null\":\n return null;\n case \"Boolean\":\n case \"Number\":\n case \"String\":\n return node.value;\n case \"Array\":\n return strictJsonArray(node);\n case \"Object\":\n return strictJsonObject(node);\n case \"Infinity\":\n case \"NaN\":\n throw new TypeError(\"strict JSON value node must not be a non-finite number\");\n default:\n throw new TypeError(\"strict JSON value node must be a standard JSON node\");\n }\n}\n\nfunction strictJsonArray(node: Extract<ValueNode, { type: \"Array\" }>): StrictJsonArray {\n return Object.freeze(node.elements.map((element) => toStrictJsonValue(element.value)));\n}\n\nfunction strictJsonObject(node: Extract<ValueNode, { type: \"Object\" }>): StrictJsonObject {\n const strictObject: Record<string, StrictJsonValue> = {};\n Object.setPrototypeOf(strictObject, null);\n for (const member of node.members) {\n defineStrictJsonProperty(strictObject, member.name, member.value);\n }\n return Object.freeze(strictObject);\n}\n\nfunction defineStrictJsonProperty(\n target: Record<string, StrictJsonValue>,\n name: { readonly type: string; readonly value?: string },\n value: ValueNode\n): void {\n if (name.type !== \"String\" || name.value === undefined) {\n throw new TypeError(\"strict JSON object member must be a string\");\n }\n Object.defineProperty(target, name.value, {\n configurable: false,\n enumerable: true,\n value: toStrictJsonValue(value),\n writable: false\n });\n}\n\nfunction issue(reason: JsonDocumentIssue): StrictJsonDocumentResult {\n return Object.freeze({ kind: \"issue\", reason });\n}\n\nfunction valid(jsonValue: StrictJsonValue): StrictJsonDocumentResult {\n return Object.freeze({ kind: \"valid\", jsonValue });\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { defineCheck } from "../../check/check.mjs";
|
|
2
|
+
import { JSON_SCHEMA_VALIDATION_CHECK_DEFINITION, executeJsonSchemaValidation } from "./json-schema-validation.mjs";
|
|
3
|
+
import { parseJsonSchemaValidationData } from "./final-data.mjs";
|
|
4
|
+
import { resolveJsonSchemaValidationOptions } from "./options-resolution.mjs";
|
|
5
|
+
import { validJsonSchemaValidationOptions } from "./options-validation.mjs";
|
|
6
|
+
/**
|
|
7
|
+
* 使用可省略的 file、identity、reference、schema 与 binding policy 构造 Check。
|
|
8
|
+
*
|
|
9
|
+
* @param options - 省略顶层字段和 file fields 使用 package defaults;显式数组是完整替换值。
|
|
10
|
+
* @returns 固定 `json-schema-validation` identity、完整冻结 options、parser 与执行逻辑。
|
|
11
|
+
* @throws {TypeError} input 不符合 closed authoring policy、identity 或 binding 不变量时抛出。
|
|
12
|
+
*/
|
|
13
|
+
export function jsonSchemaValidation(options = {}) {
|
|
14
|
+
const resolvedOptions = resolveJsonSchemaValidationOptions(options);
|
|
15
|
+
if (resolvedOptions === undefined) {
|
|
16
|
+
throw new TypeError("jsonSchemaValidation options must match the documented closed policy");
|
|
17
|
+
}
|
|
18
|
+
return defineCheck({
|
|
19
|
+
...JSON_SCHEMA_VALIDATION_CHECK_DEFINITION,
|
|
20
|
+
execution: executeJsonSchemaValidation,
|
|
21
|
+
parseData: parseJsonSchemaValidationData,
|
|
22
|
+
preflight: (preparedOptions) => validJsonSchemaValidationOptions(preparedOptions)
|
|
23
|
+
? { status: "success", preparedOptions }
|
|
24
|
+
: {
|
|
25
|
+
status: "failure",
|
|
26
|
+
action: "block",
|
|
27
|
+
reason: { code: "invalid-options" },
|
|
28
|
+
messages: [
|
|
29
|
+
{
|
|
30
|
+
code: "invalid-options",
|
|
31
|
+
level: "error",
|
|
32
|
+
message: "jsonSchemaValidation options are invalid; recreate the Check with jsonSchemaValidation(options) or restore its complete resolved options."
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
options: resolvedOptions
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=default-check.mjs.map
|
|
@@ -0,0 +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;AAE3E;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAO,GAAgC,EAAE;IAMzC,MAAM,eAAe,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,uCAAuC;QAC1C,SAAS,EAAE,2BAA2B;QACtC,SAAS,EAAE,6BAA6B;QACxC,SAAS,EAAE,CAAC,eAAe,EAAE,EAAE,CAC7B,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 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 = {}\n): TypedCheckWithOptions<\n \"json-schema-validation\",\n ResolvedJsonSchemaValidationOptions,\n typeof parseJsonSchemaValidationData\n> {\n const resolvedOptions = resolveJsonSchemaValidationOptions(options);\n if (resolvedOptions === undefined) {\n throw new TypeError(\"jsonSchemaValidation options must match the documented closed policy\");\n }\n return defineCheck({\n ...JSON_SCHEMA_VALIDATION_CHECK_DEFINITION,\n execution: executeJsonSchemaValidation,\n parseData: parseJsonSchemaValidationData,\n preflight: (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"]}
|