@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,72 @@
|
|
|
1
|
+
/** Canonical Git worktree checks for gitlink traversal. */
|
|
2
|
+
import { realpathSync, statSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { errorMessage } from "../host-environment/error-message.mjs";
|
|
5
|
+
import { processFailed } from "../host-environment/process/command.mjs";
|
|
6
|
+
import { runGit } from "../host-environment/git.mjs";
|
|
7
|
+
export function canonicalRepositoryPath(repository) {
|
|
8
|
+
return realpathSync(resolve(repository));
|
|
9
|
+
}
|
|
10
|
+
export function inspectGitlinkWorktree({ gitlinkPath, repository }) {
|
|
11
|
+
const submoduleRepository = resolve(repository, gitlinkPath);
|
|
12
|
+
let canonicalSubmoduleRepository;
|
|
13
|
+
try {
|
|
14
|
+
if (!statSync(submoduleRepository).isDirectory())
|
|
15
|
+
return { kind: "missing" };
|
|
16
|
+
canonicalSubmoduleRepository = canonicalRepositoryPath(submoduleRepository);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
return missingPath(error)
|
|
20
|
+
? { kind: "missing" }
|
|
21
|
+
: inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);
|
|
22
|
+
}
|
|
23
|
+
const topLevelResult = runGit({
|
|
24
|
+
args: ["rev-parse", "--show-toplevel"],
|
|
25
|
+
cwd: canonicalSubmoduleRepository
|
|
26
|
+
});
|
|
27
|
+
if (processFailed(topLevelResult)) {
|
|
28
|
+
const topLevelFailureDetail = topLevelResult.error?.message ||
|
|
29
|
+
topLevelResult.stderr.trim() ||
|
|
30
|
+
`exit ${topLevelResult.status}`;
|
|
31
|
+
return {
|
|
32
|
+
kind: "inspection-failed",
|
|
33
|
+
error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const topLevel = topLevelResult.stdout.trim();
|
|
37
|
+
if (!topLevel) {
|
|
38
|
+
return {
|
|
39
|
+
kind: "inspection-failed",
|
|
40
|
+
error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
return canonicalRepositoryPath(resolve(canonicalSubmoduleRepository, topLevel)) ===
|
|
45
|
+
canonicalSubmoduleRepository
|
|
46
|
+
? { kind: "initialized", repository: canonicalSubmoduleRepository }
|
|
47
|
+
: { kind: "not-independent" };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return inspectionFailure(`could not resolve Git top-level for submodule ${gitlinkPath}`, error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function resolveDescendableGitlinkRepository({ gitlinkPath, repository, visitedRepositories }) {
|
|
54
|
+
const inspection = inspectGitlinkWorktree({ gitlinkPath, repository });
|
|
55
|
+
if (inspection.kind === "inspection-failed") {
|
|
56
|
+
throw new Error(inspection.error);
|
|
57
|
+
}
|
|
58
|
+
return inspection.kind === "initialized" && !visitedRepositories.has(inspection.repository)
|
|
59
|
+
? inspection.repository
|
|
60
|
+
: null;
|
|
61
|
+
}
|
|
62
|
+
export function visitRepository({ repository, visitedRepositories }) {
|
|
63
|
+
return new Set([...visitedRepositories, repository]);
|
|
64
|
+
}
|
|
65
|
+
function missingPath(error) {
|
|
66
|
+
const code = error instanceof Error && "code" in error ? error.code : undefined;
|
|
67
|
+
return code === "ENOENT" || code === "ENOTDIR";
|
|
68
|
+
}
|
|
69
|
+
function inspectionFailure(message, error) {
|
|
70
|
+
return { kind: "inspection-failed", error: `${message}: ${errorMessage(error)}` };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=gitlink-worktree.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlink-worktree.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/gitlink-worktree.ts"],"names":[],"mappings":"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","sourcesContent":["/** Canonical Git worktree checks for gitlink traversal. */\n\nimport { realpathSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport { errorMessage } from \"../host-environment/error-message.ts\";\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit } from \"../host-environment/git.ts\";\n\nexport type GitlinkWorktreeInspection =\n | { readonly kind: \"initialized\"; readonly repository: string }\n | { readonly kind: \"inspection-failed\"; readonly error: string }\n | { readonly kind: \"missing\" }\n | { readonly kind: \"not-independent\" };\n\nexport function canonicalRepositoryPath(repository: string): string {\n return realpathSync(resolve(repository));\n}\n\nexport function inspectGitlinkWorktree({\n gitlinkPath,\n repository\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n}>): GitlinkWorktreeInspection {\n const submoduleRepository = resolve(repository, gitlinkPath);\n let canonicalSubmoduleRepository: string;\n try {\n if (!statSync(submoduleRepository).isDirectory()) return { kind: \"missing\" };\n canonicalSubmoduleRepository = canonicalRepositoryPath(submoduleRepository);\n } catch (error: unknown) {\n return missingPath(error)\n ? { kind: \"missing\" }\n : inspectionFailure(`could not inspect submodule worktree ${gitlinkPath}`, error);\n }\n\n const topLevelResult = runGit({\n args: [\"rev-parse\", \"--show-toplevel\"],\n cwd: canonicalSubmoduleRepository\n });\n if (processFailed(topLevelResult)) {\n const topLevelFailureDetail =\n topLevelResult.error?.message ||\n topLevelResult.stderr.trim() ||\n `exit ${topLevelResult.status}`;\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel failed while inspecting submodule ${gitlinkPath}: ${topLevelFailureDetail}`\n };\n }\n\n const topLevel = topLevelResult.stdout.trim();\n if (!topLevel) {\n return {\n kind: \"inspection-failed\",\n error: `git rev-parse --show-toplevel returned no repository path for submodule ${gitlinkPath}`\n };\n }\n\n try {\n return canonicalRepositoryPath(resolve(canonicalSubmoduleRepository, topLevel)) ===\n canonicalSubmoduleRepository\n ? { kind: \"initialized\", repository: canonicalSubmoduleRepository }\n : { kind: \"not-independent\" };\n } catch (error: unknown) {\n return inspectionFailure(`could not resolve Git top-level for submodule ${gitlinkPath}`, error);\n }\n}\n\nexport function resolveDescendableGitlinkRepository({\n gitlinkPath,\n repository,\n visitedRepositories\n}: Readonly<{\n readonly gitlinkPath: string;\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string | null {\n const inspection = inspectGitlinkWorktree({ gitlinkPath, repository });\n if (inspection.kind === \"inspection-failed\") {\n throw new Error(inspection.error);\n }\n return inspection.kind === \"initialized\" && !visitedRepositories.has(inspection.repository)\n ? inspection.repository\n : null;\n}\n\nexport function visitRepository({\n repository,\n visitedRepositories\n}: Readonly<{\n readonly repository: string;\n readonly visitedRepositories: ReadonlySet<string>;\n}>): ReadonlySet<string> {\n return new Set([...visitedRepositories, repository]);\n}\n\nfunction missingPath(error: unknown): boolean {\n const code = error instanceof Error && \"code\" in error ? error.code : undefined;\n return code === \"ENOENT\" || code === \"ENOTDIR\";\n}\n\nfunction inspectionFailure(message: string, error: unknown): GitlinkWorktreeInspection {\n return { kind: \"inspection-failed\", error: `${message}: ${errorMessage(error)}` };\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** 保持输入顺序,将每个 selected path 恰好分配给 accepted 或 rejected。 */
|
|
2
|
+
export function partitionProjectFilesByEligibility(selectedPaths, accepts) {
|
|
3
|
+
const acceptedPaths = [];
|
|
4
|
+
const rejectedPaths = [];
|
|
5
|
+
for (const path of selectedPaths) {
|
|
6
|
+
(accepts(path) ? acceptedPaths : rejectedPaths).push(path);
|
|
7
|
+
}
|
|
8
|
+
return Object.freeze({
|
|
9
|
+
acceptedPaths: Object.freeze(acceptedPaths),
|
|
10
|
+
rejectedPaths: Object.freeze(rejectedPaths)
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=input-eligibility.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-eligibility.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/input-eligibility.ts"],"names":[],"mappings":"AAMA,0DAA0D;AAC1D,MAAM,UAAU,kCAAkC,CAChD,aAAgC,EAChC,OAAkC;IAElC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3C,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC","sourcesContent":["/** 一个 Check 对完整 selected path set 做 eligibility 分类后的结果。 */\nexport interface ProjectFileEligibilityPartition {\n readonly acceptedPaths: readonly string[];\n readonly rejectedPaths: readonly string[];\n}\n\n/** 保持输入顺序,将每个 selected path 恰好分配给 accepted 或 rejected。 */\nexport function partitionProjectFilesByEligibility(\n selectedPaths: readonly string[],\n accepts: (path: string) => boolean\n): ProjectFileEligibilityPartition {\n const acceptedPaths: string[] = [];\n const rejectedPaths: string[] = [];\n for (const path of selectedPaths) {\n (accepts(path) ? acceptedPaths : rejectedPaths).push(path);\n }\n return Object.freeze({\n acceptedPaths: Object.freeze(acceptedPaths),\n rejectedPaths: Object.freeze(rejectedPaths)\n });\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { toSlashPath } from "../host-environment/path.mjs";
|
|
3
|
+
export function normalizeScannerReportedPath(reportedPath, projectRoot) {
|
|
4
|
+
const normalizedReportedPath = stripWindowsExtendedPathPrefix(reportedPath);
|
|
5
|
+
const normalizedProjectRoot = stripWindowsExtendedPathPrefix(projectRoot);
|
|
6
|
+
const pathApi = pathApiForScannerPath(normalizedReportedPath, normalizedProjectRoot);
|
|
7
|
+
const nativePath = pathApi.normalize(normalizedReportedPath);
|
|
8
|
+
const projectRelativePath = pathApi.isAbsolute(nativePath)
|
|
9
|
+
? pathApi.relative(pathApi.normalize(normalizedProjectRoot), nativePath)
|
|
10
|
+
: nativePath;
|
|
11
|
+
return toSlashPath(projectRelativePath);
|
|
12
|
+
}
|
|
13
|
+
function stripWindowsExtendedPathPrefix(filePath) {
|
|
14
|
+
if (filePath.startsWith("\\\\?\\UNC\\")) {
|
|
15
|
+
return `\\\\${filePath.slice(8)}`;
|
|
16
|
+
}
|
|
17
|
+
if (filePath.startsWith("\\\\?\\")) {
|
|
18
|
+
return filePath.slice(4);
|
|
19
|
+
}
|
|
20
|
+
return filePath;
|
|
21
|
+
}
|
|
22
|
+
function pathApiForScannerPath(reportedPath, projectRoot) {
|
|
23
|
+
return isWindowsAbsolutePath(reportedPath) || isWindowsAbsolutePath(projectRoot)
|
|
24
|
+
? path.win32
|
|
25
|
+
: path;
|
|
26
|
+
}
|
|
27
|
+
function isWindowsAbsolutePath(filePath) {
|
|
28
|
+
return /^[A-Za-z]:[\\/]/u.test(filePath) || filePath.startsWith("\\\\");
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=reported-path.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reported-path.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/reported-path.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,UAAU,4BAA4B,CAAC,YAAoB,EAAE,WAAmB;IACpF,MAAM,sBAAsB,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,qBAAqB,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,qBAAqB,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC7D,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;QACxD,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,UAAU,CAAC;QACxE,CAAC,CAAC,UAAU,CAAC;IAEf,OAAO,WAAW,CAAC,mBAAmB,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,8BAA8B,CAAC,QAAgB;IACtD,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAoB,EAAE,WAAmB;IACtE,OAAO,qBAAqB,CAAC,YAAY,CAAC,IAAI,qBAAqB,CAAC,WAAW,CAAC;QAC9E,CAAC,CAAC,IAAI,CAAC,KAAK;QACZ,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["import path from \"node:path\";\n\nimport { toSlashPath } from \"../host-environment/path.ts\";\n\nexport function normalizeScannerReportedPath(reportedPath: string, projectRoot: string): string {\n const normalizedReportedPath = stripWindowsExtendedPathPrefix(reportedPath);\n const normalizedProjectRoot = stripWindowsExtendedPathPrefix(projectRoot);\n const pathApi = pathApiForScannerPath(normalizedReportedPath, normalizedProjectRoot);\n const nativePath = pathApi.normalize(normalizedReportedPath);\n const projectRelativePath = pathApi.isAbsolute(nativePath)\n ? pathApi.relative(pathApi.normalize(normalizedProjectRoot), nativePath)\n : nativePath;\n\n return toSlashPath(projectRelativePath);\n}\n\nfunction stripWindowsExtendedPathPrefix(filePath: string): string {\n if (filePath.startsWith(\"\\\\\\\\?\\\\UNC\\\\\")) {\n return `\\\\\\\\${filePath.slice(8)}`;\n }\n if (filePath.startsWith(\"\\\\\\\\?\\\\\")) {\n return filePath.slice(4);\n }\n return filePath;\n}\n\nfunction pathApiForScannerPath(reportedPath: string, projectRoot: string): path.PlatformPath {\n return isWindowsAbsolutePath(reportedPath) || isWindowsAbsolutePath(projectRoot)\n ? path.win32\n : path;\n}\n\nfunction isWindowsAbsolutePath(filePath: string): boolean {\n return /^[A-Za-z]:[\\\\/]/u.test(filePath) || filePath.startsWith(\"\\\\\\\\\");\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Path and Git-output projections shared by revision traversal helpers. */
|
|
2
|
+
import { toSlashPath } from "../host-environment/path.mjs";
|
|
3
|
+
import { matchesAnyConfigGlob } from "./config-glob.mjs";
|
|
4
|
+
export function uniqueSortedPaths(files) {
|
|
5
|
+
return [...new Set(files.map(toSlashPath))].sort();
|
|
6
|
+
}
|
|
7
|
+
export function prefixAndFilter({ files, prefix, scanInputPaths }) {
|
|
8
|
+
return files
|
|
9
|
+
.map((file) => joinSlash({ path: file, prefix }))
|
|
10
|
+
.filter((file) => scanInputPaths.length === 0 || matchesAnyConfigGlob(file, scanInputPaths));
|
|
11
|
+
}
|
|
12
|
+
export function joinSlash({ path, prefix }) {
|
|
13
|
+
return prefix ? `${toSlashPath(prefix)}/${toSlashPath(path)}` : toSlashPath(path);
|
|
14
|
+
}
|
|
15
|
+
export function nonEmptyGitOutput(stdout) {
|
|
16
|
+
const value = (stdout || "").trim();
|
|
17
|
+
return value || null;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=revision-paths.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-paths.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-paths.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,cAAc,EAKd;IACA,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACuD;IAC7D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiC;IACjE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC","sourcesContent":["/** Path and Git-output projections shared by revision traversal helpers. */\n\nimport { toSlashPath } from \"../host-environment/path.ts\";\nimport { matchesAnyConfigGlob } from \"./config-glob.ts\";\n\nexport function uniqueSortedPaths(files: readonly string[]): string[] {\n return [...new Set(files.map(toSlashPath))].sort();\n}\n\nexport function prefixAndFilter({\n files,\n prefix,\n scanInputPaths\n}: Readonly<{\n readonly files: readonly string[];\n readonly prefix: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n return files\n .map((file) => joinSlash({ path: file, prefix }))\n .filter((file) => scanInputPaths.length === 0 || matchesAnyConfigGlob(file, scanInputPaths));\n}\n\nexport function joinSlash({\n path,\n prefix\n}: Readonly<{ readonly path: string; readonly prefix: string }>): string {\n return prefix ? `${toSlashPath(prefix)}/${toSlashPath(path)}` : toSlashPath(path);\n}\n\nexport function nonEmptyGitOutput(stdout: string | null | undefined): string | null {\n const value = (stdout || \"\").trim();\n return value || null;\n}\n"]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** Enumerates files from initialized, non-cyclic submodule working trees. */
|
|
2
|
+
import { processFailed } from "../host-environment/process/command.mjs";
|
|
3
|
+
import { runGit, splitNulDelimitedGitFileList } from "../host-environment/git.mjs";
|
|
4
|
+
import { canonicalRepositoryPath, resolveDescendableGitlinkRepository, visitRepository } from "./gitlink-worktree.mjs";
|
|
5
|
+
import { gitlinksAtRevision } from "./gitlink-revision.mjs";
|
|
6
|
+
import { joinSlash, nonEmptyGitOutput, prefixAndFilter, uniqueSortedPaths } from "./revision-paths.mjs";
|
|
7
|
+
export function collectSubmoduleWorktreeFiles({ repository, scanInputPaths }) {
|
|
8
|
+
const files = [];
|
|
9
|
+
const visitedRepositories = new Set([canonicalRepositoryPath(repository)]);
|
|
10
|
+
const revision = worktreeRevision(repository);
|
|
11
|
+
if (revision === null)
|
|
12
|
+
return files;
|
|
13
|
+
for (const gitlink of gitlinksAtRevision({ repository, revision })) {
|
|
14
|
+
const submoduleRepository = resolveDescendableGitlinkRepository({
|
|
15
|
+
gitlinkPath: gitlink.path,
|
|
16
|
+
repository,
|
|
17
|
+
visitedRepositories
|
|
18
|
+
});
|
|
19
|
+
if (!submoduleRepository)
|
|
20
|
+
continue;
|
|
21
|
+
files.push(...collectWorktreeFiles({
|
|
22
|
+
prefix: gitlink.path,
|
|
23
|
+
repository: submoduleRepository,
|
|
24
|
+
scanInputPaths,
|
|
25
|
+
visitedRepositories: visitRepository({
|
|
26
|
+
repository: submoduleRepository,
|
|
27
|
+
visitedRepositories
|
|
28
|
+
})
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
return uniqueSortedPaths(files);
|
|
32
|
+
}
|
|
33
|
+
function collectWorktreeFiles({ prefix, repository, scanInputPaths, visitedRepositories }) {
|
|
34
|
+
const result = runGit({
|
|
35
|
+
args: ["ls-files", "-z", "--cached", "--others", "--exclude-standard", "--"],
|
|
36
|
+
cwd: repository
|
|
37
|
+
});
|
|
38
|
+
if (processFailed(result)) {
|
|
39
|
+
const detail = result.stderr.trim() ||
|
|
40
|
+
result.error?.message ||
|
|
41
|
+
(result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
|
|
42
|
+
throw new Error(`could not enumerate git-worktree files in ${repository}: ${detail}`);
|
|
43
|
+
}
|
|
44
|
+
const files = prefixAndFilter({
|
|
45
|
+
files: splitNulDelimitedGitFileList(result.stdout),
|
|
46
|
+
prefix,
|
|
47
|
+
scanInputPaths
|
|
48
|
+
});
|
|
49
|
+
const revision = worktreeRevision(repository);
|
|
50
|
+
if (revision === null)
|
|
51
|
+
return uniqueSortedPaths(files);
|
|
52
|
+
files.push(...collectNestedWorktreeFiles({
|
|
53
|
+
prefix,
|
|
54
|
+
repository,
|
|
55
|
+
revision,
|
|
56
|
+
scanInputPaths,
|
|
57
|
+
visitedRepositories
|
|
58
|
+
}));
|
|
59
|
+
return uniqueSortedPaths(files);
|
|
60
|
+
}
|
|
61
|
+
function collectNestedWorktreeFiles({ prefix, repository, revision, scanInputPaths, visitedRepositories }) {
|
|
62
|
+
const files = [];
|
|
63
|
+
for (const gitlink of gitlinksAtRevision({ repository, revision })) {
|
|
64
|
+
const submoduleRepository = resolveDescendableGitlinkRepository({
|
|
65
|
+
gitlinkPath: gitlink.path,
|
|
66
|
+
repository,
|
|
67
|
+
visitedRepositories
|
|
68
|
+
});
|
|
69
|
+
if (!submoduleRepository)
|
|
70
|
+
continue;
|
|
71
|
+
files.push(...collectWorktreeFiles({
|
|
72
|
+
prefix: joinSlash({ path: gitlink.path, prefix }),
|
|
73
|
+
repository: submoduleRepository,
|
|
74
|
+
scanInputPaths,
|
|
75
|
+
visitedRepositories: visitRepository({
|
|
76
|
+
repository: submoduleRepository,
|
|
77
|
+
visitedRepositories
|
|
78
|
+
})
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
return files;
|
|
82
|
+
}
|
|
83
|
+
function worktreeRevision(repository) {
|
|
84
|
+
const result = runGit({ args: ["rev-parse", "--verify", "--quiet", "HEAD"], cwd: repository });
|
|
85
|
+
if (!processFailed(result)) {
|
|
86
|
+
const revision = nonEmptyGitOutput(result.stdout);
|
|
87
|
+
if (revision !== null)
|
|
88
|
+
return revision;
|
|
89
|
+
throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);
|
|
90
|
+
}
|
|
91
|
+
const headDoesNotExist = result.error === undefined &&
|
|
92
|
+
result.signal === null &&
|
|
93
|
+
result.status === 1 &&
|
|
94
|
+
result.stderr.trim() === "";
|
|
95
|
+
if (headDoesNotExist)
|
|
96
|
+
return null;
|
|
97
|
+
const detail = result.stderr.trim() ||
|
|
98
|
+
result.error?.message ||
|
|
99
|
+
(result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);
|
|
100
|
+
throw new Error(`could not inspect git-worktree revision in ${repository}: ${detail}`);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=revision-worktree-files.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-worktree-files.mjs","sourceRoot":"","sources":["../../../../src/package-checks/project-files/revision-worktree-files.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EACL,uBAAuB,EACvB,mCAAmC,EACnC,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,6BAA6B,CAAC,EAC5C,UAAU,EACV,cAAc,EAId;IACA,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;YAC9D,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,UAAU;YACV,mBAAmB;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB;YAAE,SAAS;QACnC,KAAK,CAAC,IAAI,CACR,GAAG,oBAAoB,CAAC;YACtB,MAAM,EAAE,OAAO,CAAC,IAAI;YACpB,UAAU,EAAE,mBAAmB;YAC/B,cAAc;YACd,mBAAmB,EAAE,eAAe,CAAC;gBACnC,UAAU,EAAE,mBAAmB;gBAC/B,mBAAmB;aACpB,CAAC;SACH,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,oBAAoB,CAAC,EAC5B,MAAM,EACN,UAAU,EACV,cAAc,EACd,mBAAmB,EAMnB;IACA,MAAM,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC;QAC5E,GAAG,EAAE,UAAU;KAChB,CAAC,CAAC;IACH,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YACpB,MAAM,CAAC,KAAK,EAAE,OAAO;YACrB,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,6CAA6C,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC;QAC5B,KAAK,EAAE,4BAA4B,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD,MAAM;QACN,cAAc;KACf,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CACR,GAAG,0BAA0B,CAAC;QAC5B,MAAM;QACN,UAAU;QACV,QAAQ;QACR,cAAc;QACd,mBAAmB;KACpB,CAAC,CACH,CAAC;IACF,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,0BAA0B,CAAC,EAClC,MAAM,EACN,UAAU,EACV,QAAQ,EACR,cAAc,EACd,mBAAmB,EAOnB;IACA,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;YAC9D,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,UAAU;YACV,mBAAmB;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB;YAAE,SAAS;QACnC,KAAK,CAAC,IAAI,CACR,GAAG,oBAAoB,CAAC;YACtB,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACjD,UAAU,EAAE,mBAAmB;YAC/B,cAAc;YACd,mBAAmB,EAAE,eAAe,CAAC;gBACnC,UAAU,EAAE,mBAAmB;gBAC/B,mBAAmB;aACpB,CAAC;SACH,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,QAAQ,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,4DAA4D,UAAU,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,gBAAgB,GACpB,MAAM,CAAC,KAAK,KAAK,SAAS;QAC1B,MAAM,CAAC,MAAM,KAAK,IAAI;QACtB,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAC9B,IAAI,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB,MAAM,CAAC,KAAK,EAAE,OAAO;QACrB,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,MAAM,IAAI,KAAK,CAAC,8CAA8C,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;AACzF,CAAC","sourcesContent":["/** Enumerates files from initialized, non-cyclic submodule working trees. */\n\nimport { processFailed } from \"../host-environment/process/command.ts\";\nimport { runGit, splitNulDelimitedGitFileList } from \"../host-environment/git.ts\";\nimport {\n canonicalRepositoryPath,\n resolveDescendableGitlinkRepository,\n visitRepository\n} from \"./gitlink-worktree.ts\";\nimport { gitlinksAtRevision } from \"./gitlink-revision.ts\";\nimport {\n joinSlash,\n nonEmptyGitOutput,\n prefixAndFilter,\n uniqueSortedPaths\n} from \"./revision-paths.ts\";\n\nexport function collectSubmoduleWorktreeFiles({\n repository,\n scanInputPaths\n}: Readonly<{\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n}>): string[] {\n const files: string[] = [];\n const visitedRepositories = new Set([canonicalRepositoryPath(repository)]);\n const revision = worktreeRevision(repository);\n if (revision === null) return files;\n\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: gitlink.path,\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return uniqueSortedPaths(files);\n}\n\nfunction collectWorktreeFiles({\n prefix,\n repository,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const result = runGit({\n args: [\"ls-files\", \"-z\", \"--cached\", \"--others\", \"--exclude-standard\", \"--\"],\n cwd: repository\n });\n if (processFailed(result)) {\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not enumerate git-worktree files in ${repository}: ${detail}`);\n }\n\n const files = prefixAndFilter({\n files: splitNulDelimitedGitFileList(result.stdout),\n prefix,\n scanInputPaths\n });\n const revision = worktreeRevision(repository);\n if (revision === null) return uniqueSortedPaths(files);\n files.push(\n ...collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n })\n );\n return uniqueSortedPaths(files);\n}\n\nfunction collectNestedWorktreeFiles({\n prefix,\n repository,\n revision,\n scanInputPaths,\n visitedRepositories\n}: Readonly<{\n readonly prefix: string;\n readonly repository: string;\n readonly revision: string;\n readonly scanInputPaths: readonly string[];\n readonly visitedRepositories: ReadonlySet<string>;\n}>): string[] {\n const files: string[] = [];\n for (const gitlink of gitlinksAtRevision({ repository, revision })) {\n const submoduleRepository = resolveDescendableGitlinkRepository({\n gitlinkPath: gitlink.path,\n repository,\n visitedRepositories\n });\n if (!submoduleRepository) continue;\n files.push(\n ...collectWorktreeFiles({\n prefix: joinSlash({ path: gitlink.path, prefix }),\n repository: submoduleRepository,\n scanInputPaths,\n visitedRepositories: visitRepository({\n repository: submoduleRepository,\n visitedRepositories\n })\n })\n );\n }\n return files;\n}\n\nfunction worktreeRevision(repository: string): string | null {\n const result = runGit({ args: [\"rev-parse\", \"--verify\", \"--quiet\", \"HEAD\"], cwd: repository });\n if (!processFailed(result)) {\n const revision = nonEmptyGitOutput(result.stdout);\n if (revision !== null) return revision;\n throw new Error(`git-worktree revision inspection returned no revision in ${repository}`);\n }\n const headDoesNotExist =\n result.error === undefined &&\n result.signal === null &&\n result.status === 1 &&\n result.stderr.trim() === \"\";\n if (headDoesNotExist) return null;\n const detail =\n result.stderr.trim() ||\n result.error?.message ||\n (result.signal === null ? `exit status ${result.status}` : `signal ${result.signal}`);\n throw new Error(`could not inspect git-worktree revision in ${repository}: ${detail}`);\n}\n"]}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { isInheritedCheckCollection, snapshotInheritedCheckCollection } from "../../check/check.mjs";
|
|
2
|
+
import { snapshotClosedArray, snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
|
|
3
|
+
import { validateCheckDescriptor } from "../../check/descriptor-validation.mjs";
|
|
4
|
+
import { snapshotJsonObject } from "../../check/options-snapshot.mjs";
|
|
5
|
+
const CHECK_KEYS = [
|
|
6
|
+
"checkId",
|
|
7
|
+
"checks",
|
|
8
|
+
"dependsOn",
|
|
9
|
+
"displayName",
|
|
10
|
+
"execution",
|
|
11
|
+
"maxParallel",
|
|
12
|
+
"mutex",
|
|
13
|
+
"options",
|
|
14
|
+
"parseData",
|
|
15
|
+
"preflight",
|
|
16
|
+
"visibility"
|
|
17
|
+
];
|
|
18
|
+
const CONTAINER_CHECK_FIELDS = Object.freeze({
|
|
19
|
+
definition: null,
|
|
20
|
+
execution: null,
|
|
21
|
+
options: null,
|
|
22
|
+
parseData: null,
|
|
23
|
+
preflight: null,
|
|
24
|
+
visibility: null
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Parses only the closed recursive authoring grammar. Execution callbacks are
|
|
28
|
+
* trusted project code, while every declarative field is copied and validated.
|
|
29
|
+
*/
|
|
30
|
+
export function parseCheckTreeAuthoring(value) {
|
|
31
|
+
const roots = snapshotClosedArray(value);
|
|
32
|
+
if (roots === undefined)
|
|
33
|
+
return undefined;
|
|
34
|
+
const state = { warnings: [] };
|
|
35
|
+
const checks = [];
|
|
36
|
+
for (let index = 0; index < roots.length; index += 1) {
|
|
37
|
+
const check = parseCheck(roots[index], `definition.checks[${index}]`, state);
|
|
38
|
+
if (check === undefined)
|
|
39
|
+
return undefined;
|
|
40
|
+
checks.push(check);
|
|
41
|
+
}
|
|
42
|
+
return Object.freeze({
|
|
43
|
+
checks: Object.freeze(checks),
|
|
44
|
+
warnings: Object.freeze(state.warnings)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function parseCheck(value, path, state) {
|
|
48
|
+
const data = parseCheckData(value);
|
|
49
|
+
if (data === undefined)
|
|
50
|
+
return undefined;
|
|
51
|
+
const execution = parseExecution(data);
|
|
52
|
+
if (execution === undefined)
|
|
53
|
+
return undefined;
|
|
54
|
+
const parseData = parseDataParser(data);
|
|
55
|
+
if (parseData === undefined)
|
|
56
|
+
return undefined;
|
|
57
|
+
const preflight = parsePreflight(data);
|
|
58
|
+
if (preflight === undefined)
|
|
59
|
+
return undefined;
|
|
60
|
+
const checks = parseChildren(data, path, state);
|
|
61
|
+
if (checks === undefined)
|
|
62
|
+
return undefined;
|
|
63
|
+
const scheduling = parseScheduling(data);
|
|
64
|
+
if (scheduling === undefined)
|
|
65
|
+
return undefined;
|
|
66
|
+
const fields = parseCheckFields(data, execution, parseData, preflight);
|
|
67
|
+
if (fields === undefined)
|
|
68
|
+
return undefined;
|
|
69
|
+
warnForMeaninglessCheck(data, checks, fields, path, state);
|
|
70
|
+
return Object.freeze({
|
|
71
|
+
checkId: data.checkId,
|
|
72
|
+
checks,
|
|
73
|
+
definition: fields.definition,
|
|
74
|
+
dependsOn: scheduling.dependsOn,
|
|
75
|
+
displayName: data.displayName,
|
|
76
|
+
execution: fields.execution,
|
|
77
|
+
maxParallel: scheduling.maxParallel,
|
|
78
|
+
mutex: scheduling.mutex,
|
|
79
|
+
options: fields.options,
|
|
80
|
+
path,
|
|
81
|
+
parseData: fields.parseData,
|
|
82
|
+
preflight: fields.preflight,
|
|
83
|
+
visibility: fields.visibility
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function parseCheckData(value) {
|
|
87
|
+
const data = snapshotClosedRecord(value);
|
|
88
|
+
if (data === undefined)
|
|
89
|
+
return undefined;
|
|
90
|
+
return hasValidCheckIdentity(data) ? data : undefined;
|
|
91
|
+
}
|
|
92
|
+
function hasValidCheckIdentity(data) {
|
|
93
|
+
return (hasOnlyCheckKeys(data) &&
|
|
94
|
+
typeof data.checkId === "string" &&
|
|
95
|
+
data.checkId.length > 0 &&
|
|
96
|
+
typeof data.displayName === "string" &&
|
|
97
|
+
data.displayName.length > 0);
|
|
98
|
+
}
|
|
99
|
+
function hasOnlyCheckKeys(data) {
|
|
100
|
+
return Object.keys(data).every((key) => CHECK_KEYS.some((checkKey) => checkKey === key));
|
|
101
|
+
}
|
|
102
|
+
function parseExecution(data) {
|
|
103
|
+
if (!Object.hasOwn(data, "execution"))
|
|
104
|
+
return null;
|
|
105
|
+
return isTrustedFunction(data.execution) ? data.execution : undefined;
|
|
106
|
+
}
|
|
107
|
+
function parseDataParser(data) {
|
|
108
|
+
if (!Object.hasOwn(data, "parseData") || data.parseData === undefined)
|
|
109
|
+
return null;
|
|
110
|
+
return isTrustedFunction(data.parseData) ? data.parseData : undefined;
|
|
111
|
+
}
|
|
112
|
+
function parsePreflight(data) {
|
|
113
|
+
if (!Object.hasOwn(data, "preflight"))
|
|
114
|
+
return null;
|
|
115
|
+
return isTrustedFunction(data.preflight) ? data.preflight : undefined;
|
|
116
|
+
}
|
|
117
|
+
function isTrustedFunction(value) {
|
|
118
|
+
return typeof value === "function";
|
|
119
|
+
}
|
|
120
|
+
function parseChildren(data, path, state) {
|
|
121
|
+
if (!Object.hasOwn(data, "checks"))
|
|
122
|
+
return Object.freeze([]);
|
|
123
|
+
const values = snapshotClosedArray(data.checks);
|
|
124
|
+
if (values === undefined)
|
|
125
|
+
return undefined;
|
|
126
|
+
const checks = [];
|
|
127
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
128
|
+
const check = parseCheck(values[index], `${path}.checks[${index}]`, state);
|
|
129
|
+
if (check === undefined)
|
|
130
|
+
return undefined;
|
|
131
|
+
checks.push(check);
|
|
132
|
+
}
|
|
133
|
+
return Object.freeze(checks);
|
|
134
|
+
}
|
|
135
|
+
function parseDefinition(data) {
|
|
136
|
+
const definition = validateCheckDescriptor({
|
|
137
|
+
checkId: data.checkId,
|
|
138
|
+
displayName: data.displayName
|
|
139
|
+
});
|
|
140
|
+
return definition.ok ? definition.value : undefined;
|
|
141
|
+
}
|
|
142
|
+
function parseOptions(data) {
|
|
143
|
+
if (!Object.hasOwn(data, "options"))
|
|
144
|
+
return Object.freeze({});
|
|
145
|
+
const options = snapshotClosedRecord(data.options);
|
|
146
|
+
if (options === undefined)
|
|
147
|
+
return undefined;
|
|
148
|
+
return snapshotJsonObject(options);
|
|
149
|
+
}
|
|
150
|
+
function parseCheckFields(data, execution, parseData, preflight) {
|
|
151
|
+
if (execution === null) {
|
|
152
|
+
return Object.hasOwn(data, "options") ||
|
|
153
|
+
Object.hasOwn(data, "visibility") ||
|
|
154
|
+
parseData !== null ||
|
|
155
|
+
preflight !== null
|
|
156
|
+
? undefined
|
|
157
|
+
: CONTAINER_CHECK_FIELDS;
|
|
158
|
+
}
|
|
159
|
+
const definition = parseDefinition(data);
|
|
160
|
+
if (definition === undefined)
|
|
161
|
+
return undefined;
|
|
162
|
+
const options = parseOptions(data);
|
|
163
|
+
if (options === undefined)
|
|
164
|
+
return undefined;
|
|
165
|
+
const visibility = parseVisibility(data);
|
|
166
|
+
if (visibility === undefined)
|
|
167
|
+
return undefined;
|
|
168
|
+
return Object.freeze({
|
|
169
|
+
definition,
|
|
170
|
+
execution,
|
|
171
|
+
options,
|
|
172
|
+
parseData,
|
|
173
|
+
preflight,
|
|
174
|
+
visibility
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
function parseVisibility(data) {
|
|
178
|
+
if (!Object.hasOwn(data, "visibility"))
|
|
179
|
+
return "always";
|
|
180
|
+
const visibility = data.visibility;
|
|
181
|
+
return visibility === undefined || visibility === "always" || visibility === "attention"
|
|
182
|
+
? (visibility ?? "always")
|
|
183
|
+
: undefined;
|
|
184
|
+
}
|
|
185
|
+
function warnForMeaninglessCheck(data, checks, fields, path, state) {
|
|
186
|
+
if (fields.execution !== null || checks.length > 0)
|
|
187
|
+
return;
|
|
188
|
+
state.warnings.push(Object.freeze({ code: "meaningless-check", path, checkId: data.checkId }));
|
|
189
|
+
}
|
|
190
|
+
function parseScheduling(data) {
|
|
191
|
+
const dependsOn = parseCollection(data, "dependsOn");
|
|
192
|
+
const mutex = parseCollection(data, "mutex");
|
|
193
|
+
const maxParallel = data.maxParallel;
|
|
194
|
+
if (dependsOn === null ||
|
|
195
|
+
mutex === null ||
|
|
196
|
+
(maxParallel !== undefined &&
|
|
197
|
+
(typeof maxParallel !== "number" || !Number.isSafeInteger(maxParallel) || maxParallel <= 0)))
|
|
198
|
+
return undefined;
|
|
199
|
+
return Object.freeze({
|
|
200
|
+
dependsOn: dependsOn ?? undefined,
|
|
201
|
+
maxParallel,
|
|
202
|
+
mutex: mutex ?? undefined
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
function parseCollection(data, field) {
|
|
206
|
+
if (!Object.hasOwn(data, field))
|
|
207
|
+
return undefined;
|
|
208
|
+
const value = data[field];
|
|
209
|
+
if (isInheritedCheckCollection(value))
|
|
210
|
+
return parseInheritedCollection(value);
|
|
211
|
+
const values = parseCollectionItems(value);
|
|
212
|
+
return values === undefined ? null : Object.freeze({ kind: "exact", values });
|
|
213
|
+
}
|
|
214
|
+
function parseInheritedCollection(value) {
|
|
215
|
+
const data = snapshotInheritedCheckCollection(value);
|
|
216
|
+
if (data === undefined || !hasExactInheritedKeys(data))
|
|
217
|
+
return null;
|
|
218
|
+
const add = data.add === undefined ? Object.freeze([]) : parseCollectionItems(data.add);
|
|
219
|
+
const remove = data.remove === undefined ? Object.freeze([]) : parseCollectionItems(data.remove);
|
|
220
|
+
if (add === undefined || remove === undefined)
|
|
221
|
+
return null;
|
|
222
|
+
return Object.freeze({ kind: "inherit", add, remove });
|
|
223
|
+
}
|
|
224
|
+
function hasExactInheritedKeys(data) {
|
|
225
|
+
const keys = Object.keys(data);
|
|
226
|
+
return keys.length > 0 && keys.every((key) => key === "add" || key === "remove");
|
|
227
|
+
}
|
|
228
|
+
function parseCollectionItems(value) {
|
|
229
|
+
const items = snapshotClosedArray(value);
|
|
230
|
+
if (items === undefined)
|
|
231
|
+
return undefined;
|
|
232
|
+
const values = [];
|
|
233
|
+
for (const item of items) {
|
|
234
|
+
const valid = typeof item === "string" && item.length > 0;
|
|
235
|
+
if (!valid)
|
|
236
|
+
return undefined;
|
|
237
|
+
if (!values.includes(item))
|
|
238
|
+
values.push(item);
|
|
239
|
+
}
|
|
240
|
+
return Object.freeze(values);
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=authoring.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoring.mjs","sourceRoot":"","sources":["../../../../src/project-definition/check-tree/authoring.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckDescriptor } from \"../../check/descriptor.ts\";\nimport {\n isInheritedCheckCollection,\n snapshotInheritedCheckCollection,\n type CheckVisibility,\n type CheckExecution,\n type CheckPreflight,\n type InheritedCheckCollection\n} from \"../../check/check.ts\";\nimport { snapshotClosedArray, snapshotClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport { validateCheckDescriptor } from \"../../check/descriptor-validation.ts\";\nimport { snapshotJsonObject } from \"../../check/options-snapshot.ts\";\n\ntype TrustedDataParser = (this: void, ...parameters: never[]) => unknown;\n\nexport type ParsedCheckCollection = Readonly<\n | { readonly kind: \"exact\"; readonly values: readonly string[] }\n | {\n readonly kind: \"inherit\";\n readonly add: readonly string[];\n readonly remove: readonly string[];\n }\n>;\n\nexport interface ParsedCheck {\n readonly checkId: string;\n readonly checks: readonly ParsedCheck[];\n readonly definition: CheckDescriptor | null;\n readonly dependsOn: ParsedCheckCollection | undefined;\n readonly displayName: string;\n readonly execution: CheckExecution | null;\n readonly maxParallel: number | undefined;\n readonly mutex: ParsedCheckCollection | undefined;\n readonly options: object | null;\n readonly path: string;\n readonly parseData: TrustedDataParser | null;\n readonly preflight: CheckPreflight | null;\n readonly visibility: CheckVisibility | null;\n}\n\nexport interface ParsedCheckTree {\n readonly checks: readonly ParsedCheck[];\n readonly warnings: readonly MeaninglessCheckWarning[];\n}\n\nexport interface MeaninglessCheckWarning {\n readonly code: \"meaningless-check\";\n readonly path: string;\n readonly checkId: string;\n}\n\ninterface ParseState {\n readonly warnings: MeaninglessCheckWarning[];\n}\n\ninterface CheckAuthoringData extends Readonly<Record<string, unknown>> {\n readonly checkId: string;\n readonly displayName: string;\n}\n\ninterface ParsedCheckFields {\n readonly definition: CheckDescriptor | null;\n readonly execution: CheckExecution | null;\n readonly options: object | null;\n readonly parseData: TrustedDataParser | null;\n readonly preflight: CheckPreflight | null;\n readonly visibility: CheckVisibility | null;\n}\n\nconst CHECK_KEYS = [\n \"checkId\",\n \"checks\",\n \"dependsOn\",\n \"displayName\",\n \"execution\",\n \"maxParallel\",\n \"mutex\",\n \"options\",\n \"parseData\",\n \"preflight\",\n \"visibility\"\n] as const;\n\nconst CONTAINER_CHECK_FIELDS: ParsedCheckFields = Object.freeze({\n definition: null,\n execution: null,\n options: null,\n parseData: null,\n preflight: null,\n visibility: null\n});\n\n/**\n * Parses only the closed recursive authoring grammar. Execution callbacks are\n * trusted project code, while every declarative field is copied and validated.\n */\nexport function parseCheckTreeAuthoring(value: unknown): ParsedCheckTree | undefined {\n const roots = snapshotClosedArray(value);\n if (roots === undefined) return undefined;\n const state: ParseState = { warnings: [] };\n const checks: ParsedCheck[] = [];\n for (let index = 0; index < roots.length; index += 1) {\n const check = parseCheck(roots[index], `definition.checks[${index}]`, state);\n if (check === undefined) return undefined;\n checks.push(check);\n }\n return Object.freeze({\n checks: Object.freeze(checks),\n warnings: Object.freeze(state.warnings)\n });\n}\n\nfunction parseCheck(value: unknown, path: string, state: ParseState): ParsedCheck | undefined {\n const data = parseCheckData(value);\n if (data === undefined) return undefined;\n const execution = parseExecution(data);\n if (execution === undefined) return undefined;\n const parseData = parseDataParser(data);\n if (parseData === undefined) return undefined;\n const preflight = parsePreflight(data);\n if (preflight === undefined) return undefined;\n const checks = parseChildren(data, path, state);\n if (checks === undefined) return undefined;\n const scheduling = parseScheduling(data);\n if (scheduling === undefined) return undefined;\n const fields = parseCheckFields(data, execution, parseData, preflight);\n if (fields === undefined) return undefined;\n warnForMeaninglessCheck(data, checks, fields, path, state);\n\n return Object.freeze({\n checkId: data.checkId,\n checks,\n definition: fields.definition,\n dependsOn: scheduling.dependsOn,\n displayName: data.displayName,\n execution: fields.execution,\n maxParallel: scheduling.maxParallel,\n mutex: scheduling.mutex,\n options: fields.options,\n path,\n parseData: fields.parseData,\n preflight: fields.preflight,\n visibility: fields.visibility\n });\n}\n\nfunction parseCheckData(value: unknown): CheckAuthoringData | undefined {\n const data = snapshotClosedRecord(value);\n if (data === undefined) return undefined;\n return hasValidCheckIdentity(data) ? data : undefined;\n}\n\nfunction hasValidCheckIdentity(\n data: Readonly<Record<string, unknown>>\n): data is CheckAuthoringData {\n return (\n hasOnlyCheckKeys(data) &&\n typeof data.checkId === \"string\" &&\n data.checkId.length > 0 &&\n typeof data.displayName === \"string\" &&\n data.displayName.length > 0\n );\n}\n\nfunction hasOnlyCheckKeys(data: Readonly<Record<string, unknown>>): boolean {\n return Object.keys(data).every((key) => CHECK_KEYS.some((checkKey) => checkKey === key));\n}\n\nfunction parseExecution(data: CheckAuthoringData): CheckExecution | null | undefined {\n if (!Object.hasOwn(data, \"execution\")) return null;\n return isTrustedFunction<CheckExecution>(data.execution) ? data.execution : undefined;\n}\n\nfunction parseDataParser(data: CheckAuthoringData): TrustedDataParser | null | undefined {\n if (!Object.hasOwn(data, \"parseData\") || data.parseData === undefined) return null;\n return isTrustedFunction<TrustedDataParser>(data.parseData) ? data.parseData : undefined;\n}\n\nfunction parsePreflight(data: CheckAuthoringData): CheckPreflight | null | undefined {\n if (!Object.hasOwn(data, \"preflight\")) return null;\n return isTrustedFunction<CheckPreflight>(data.preflight) ? data.preflight : undefined;\n}\n\nfunction isTrustedFunction<FunctionType extends (...parameters: never[]) => unknown>(\n value: unknown\n): value is FunctionType {\n return typeof value === \"function\";\n}\n\nfunction parseChildren(\n data: CheckAuthoringData,\n path: string,\n state: ParseState\n): readonly ParsedCheck[] | undefined {\n if (!Object.hasOwn(data, \"checks\")) return Object.freeze([]);\n const values = snapshotClosedArray(data.checks);\n if (values === undefined) return undefined;\n const checks: ParsedCheck[] = [];\n for (let index = 0; index < values.length; index += 1) {\n const check = parseCheck(values[index], `${path}.checks[${index}]`, state);\n if (check === undefined) return undefined;\n checks.push(check);\n }\n return Object.freeze(checks);\n}\n\nfunction parseDefinition(data: CheckAuthoringData): CheckDescriptor | undefined {\n const definition = validateCheckDescriptor({\n checkId: data.checkId,\n displayName: data.displayName\n });\n return definition.ok ? definition.value : undefined;\n}\n\nfunction parseOptions(data: CheckAuthoringData): object | undefined {\n if (!Object.hasOwn(data, \"options\")) return Object.freeze({});\n const options = snapshotClosedRecord(data.options);\n if (options === undefined) return undefined;\n return snapshotJsonObject(options);\n}\n\nfunction parseCheckFields(\n data: CheckAuthoringData,\n execution: CheckExecution | null,\n parseData: TrustedDataParser | null,\n preflight: CheckPreflight | null\n): ParsedCheckFields | undefined {\n if (execution === null) {\n return Object.hasOwn(data, \"options\") ||\n Object.hasOwn(data, \"visibility\") ||\n parseData !== null ||\n preflight !== null\n ? undefined\n : CONTAINER_CHECK_FIELDS;\n }\n const definition = parseDefinition(data);\n if (definition === undefined) return undefined;\n const options = parseOptions(data);\n if (options === undefined) return undefined;\n const visibility = parseVisibility(data);\n if (visibility === undefined) return undefined;\n return Object.freeze({\n definition,\n execution,\n options,\n parseData,\n preflight,\n visibility\n });\n}\n\nfunction parseVisibility(data: CheckAuthoringData): CheckVisibility | undefined {\n if (!Object.hasOwn(data, \"visibility\")) return \"always\";\n const visibility = data.visibility;\n return visibility === undefined || visibility === \"always\" || visibility === \"attention\"\n ? (visibility ?? \"always\")\n : undefined;\n}\n\nfunction warnForMeaninglessCheck(\n data: CheckAuthoringData,\n checks: readonly ParsedCheck[],\n fields: ParsedCheckFields,\n path: string,\n state: ParseState\n): void {\n if (fields.execution !== null || checks.length > 0) return;\n state.warnings.push(Object.freeze({ code: \"meaningless-check\", path, checkId: data.checkId }));\n}\n\nfunction parseScheduling(data: CheckAuthoringData):\n | Readonly<{\n readonly dependsOn: ParsedCheckCollection | undefined;\n readonly maxParallel: number | undefined;\n readonly mutex: ParsedCheckCollection | undefined;\n }>\n | undefined {\n const dependsOn = parseCollection(data, \"dependsOn\");\n const mutex = parseCollection(data, \"mutex\");\n const maxParallel = data.maxParallel;\n if (\n dependsOn === null ||\n mutex === null ||\n (maxParallel !== undefined &&\n (typeof maxParallel !== \"number\" || !Number.isSafeInteger(maxParallel) || maxParallel <= 0))\n )\n return undefined;\n return Object.freeze({\n dependsOn: dependsOn ?? undefined,\n maxParallel,\n mutex: mutex ?? undefined\n });\n}\n\nfunction parseCollection(\n data: CheckAuthoringData,\n field: \"dependsOn\" | \"mutex\"\n): ParsedCheckCollection | null | undefined {\n if (!Object.hasOwn(data, field)) return undefined;\n const value = data[field];\n if (isInheritedCheckCollection(value)) return parseInheritedCollection(value);\n const values = parseCollectionItems(value);\n return values === undefined ? null : Object.freeze({ kind: \"exact\", values });\n}\n\nfunction parseInheritedCollection(\n value: InheritedCheckCollection<unknown>\n): ParsedCheckCollection | null {\n const data = snapshotInheritedCheckCollection(value);\n if (data === undefined || !hasExactInheritedKeys(data)) return null;\n const add = data.add === undefined ? Object.freeze([]) : parseCollectionItems(data.add);\n const remove = data.remove === undefined ? Object.freeze([]) : parseCollectionItems(data.remove);\n if (add === undefined || remove === undefined) return null;\n return Object.freeze({ kind: \"inherit\", add, remove });\n}\n\nfunction hasExactInheritedKeys(data: Readonly<Record<string, unknown>>): boolean {\n const keys = Object.keys(data);\n return keys.length > 0 && keys.every((key) => key === \"add\" || key === \"remove\");\n}\n\nfunction parseCollectionItems(value: unknown): readonly string[] | undefined {\n const items = snapshotClosedArray(value);\n if (items === undefined) return undefined;\n const values: string[] = [];\n for (const item of items) {\n const valid = typeof item === \"string\" && item.length > 0;\n if (!valid) return undefined;\n if (!values.includes(item)) values.push(item);\n }\n return Object.freeze(values);\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { inherit } from "../../check/check.mjs";
|
|
2
|
+
/** Rebuilds the validated public authoring shape without retaining untyped input. */
|
|
3
|
+
export function materializeCheckTreeAuthoring(parsed) {
|
|
4
|
+
return materializeChecks(parsed.checks);
|
|
5
|
+
}
|
|
6
|
+
function materializeChecks(checks) {
|
|
7
|
+
return Object.freeze(checks.map((check) => materializeCheck(check)));
|
|
8
|
+
}
|
|
9
|
+
function materializeCheck(check) {
|
|
10
|
+
const checks = materializeChecks(check.checks);
|
|
11
|
+
const dependsOn = materializeCollection(check.dependsOn);
|
|
12
|
+
const mutex = materializeCollection(check.mutex);
|
|
13
|
+
const visibility = check.visibility;
|
|
14
|
+
const preflight = check.preflight;
|
|
15
|
+
const scheduling = {
|
|
16
|
+
...(dependsOn === undefined ? {} : { dependsOn }),
|
|
17
|
+
...(check.maxParallel === undefined ? {} : { maxParallel: check.maxParallel }),
|
|
18
|
+
...(mutex === undefined ? {} : { mutex })
|
|
19
|
+
};
|
|
20
|
+
if (check.definition === null ||
|
|
21
|
+
check.execution === null ||
|
|
22
|
+
check.options === null ||
|
|
23
|
+
visibility === null) {
|
|
24
|
+
return Object.freeze({
|
|
25
|
+
checkId: check.checkId,
|
|
26
|
+
checks,
|
|
27
|
+
displayName: check.displayName,
|
|
28
|
+
...scheduling
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return Object.freeze({
|
|
32
|
+
checkId: check.checkId,
|
|
33
|
+
checks,
|
|
34
|
+
displayName: check.displayName,
|
|
35
|
+
execution: check.execution,
|
|
36
|
+
...(check.parseData === null ? {} : { parseData: check.parseData }),
|
|
37
|
+
options: check.options,
|
|
38
|
+
...(preflight === null ? {} : { preflight }),
|
|
39
|
+
...scheduling,
|
|
40
|
+
visibility
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function materializeCollection(collection) {
|
|
44
|
+
if (collection === undefined)
|
|
45
|
+
return undefined;
|
|
46
|
+
if (collection.kind === "exact")
|
|
47
|
+
return collection.values;
|
|
48
|
+
return inherit({ add: collection.add, remove: collection.remove });
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=materialization.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialization.mjs","sourceRoot":"","sources":["../../../../src/project-definition/check-tree/materialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA+C,MAAM,sBAAsB,CAAC;AAG5F,qFAAqF;AACrF,MAAM,UAAU,6BAA6B,CAAC,MAAuB;IACnE,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA8B;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAkB;IAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC;IACF,IACE,KAAK,CAAC,UAAU,KAAK,IAAI;QACzB,KAAK,CAAC,SAAS,KAAK,IAAI;QACxB,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,UAAU,KAAK,IAAI,EACnB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM;YACN,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,GAAG,UAAU;SACd,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM;QACN,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACnE,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QAC5C,GAAG,UAAU;QACb,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,UAA6C;IAE7C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC;IAC1D,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AACrE,CAAC","sourcesContent":["import { inherit, type Check, type InheritableCheckCollection } from \"../../check/check.ts\";\nimport type { ParsedCheck, ParsedCheckCollection, ParsedCheckTree } from \"./authoring.ts\";\n\n/** Rebuilds the validated public authoring shape without retaining untyped input. */\nexport function materializeCheckTreeAuthoring(parsed: ParsedCheckTree): readonly Check[] {\n return materializeChecks(parsed.checks);\n}\n\nfunction materializeChecks(checks: readonly ParsedCheck[]): readonly Check[] {\n return Object.freeze(checks.map((check) => materializeCheck(check)));\n}\n\nfunction materializeCheck(check: ParsedCheck): Check {\n const checks = materializeChecks(check.checks);\n const dependsOn = materializeCollection(check.dependsOn);\n const mutex = materializeCollection(check.mutex);\n const visibility = check.visibility;\n const preflight = check.preflight;\n const scheduling = {\n ...(dependsOn === undefined ? {} : { dependsOn }),\n ...(check.maxParallel === undefined ? {} : { maxParallel: check.maxParallel }),\n ...(mutex === undefined ? {} : { mutex })\n };\n if (\n check.definition === null ||\n check.execution === null ||\n check.options === null ||\n visibility === null\n ) {\n return Object.freeze({\n checkId: check.checkId,\n checks,\n displayName: check.displayName,\n ...scheduling\n });\n }\n return Object.freeze({\n checkId: check.checkId,\n checks,\n displayName: check.displayName,\n execution: check.execution,\n ...(check.parseData === null ? {} : { parseData: check.parseData }),\n options: check.options,\n ...(preflight === null ? {} : { preflight }),\n ...scheduling,\n visibility\n });\n}\n\nfunction materializeCollection(\n collection: ParsedCheckCollection | undefined\n): InheritableCheckCollection<string> | undefined {\n if (collection === undefined) return undefined;\n if (collection.kind === \"exact\") return collection.values;\n return inherit({ add: collection.add, remove: collection.remove });\n}\n"]}
|