@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,135 @@
|
|
|
1
|
+
import { createProgressRenderer } from "./renderer.mjs";
|
|
2
|
+
const PROGRESS_REFRESH_INTERVAL_MS = 5_000;
|
|
3
|
+
const defaultProgressRefreshScheduler = Object.freeze({
|
|
4
|
+
schedule: (refresh, intervalMs) => {
|
|
5
|
+
const interval = setInterval(refresh, intervalMs);
|
|
6
|
+
interval.unref();
|
|
7
|
+
return Object.freeze({ cancel: () => clearInterval(interval) });
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
/** Owns progress writer lifecycle and rendering; failed writers are permanently muted. */
|
|
11
|
+
export function createProgressRendering(configuration, statuses, dependencies = {}) {
|
|
12
|
+
if (!configuration.enabled)
|
|
13
|
+
return inertProgressRendering();
|
|
14
|
+
let failed = false;
|
|
15
|
+
const runningCheckIds = new Set();
|
|
16
|
+
let renderer;
|
|
17
|
+
let refreshSchedule;
|
|
18
|
+
const failRendering = () => {
|
|
19
|
+
if (failed)
|
|
20
|
+
return;
|
|
21
|
+
failed = true;
|
|
22
|
+
const activeSchedule = refreshSchedule;
|
|
23
|
+
refreshSchedule = undefined;
|
|
24
|
+
try {
|
|
25
|
+
activeSchedule?.cancel();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// The output is already failed; a scheduler cleanup fault must not reach Check execution.
|
|
29
|
+
}
|
|
30
|
+
statuses.failed("progressRendering");
|
|
31
|
+
};
|
|
32
|
+
const stopRefresh = () => {
|
|
33
|
+
const activeSchedule = refreshSchedule;
|
|
34
|
+
refreshSchedule = undefined;
|
|
35
|
+
try {
|
|
36
|
+
activeSchedule?.cancel();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
failRendering();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const render = (feedback) => {
|
|
43
|
+
if (failed)
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
renderer ??= createProgressRenderer((dependencies.writerFactory ?? defaultProgressWriter)(), dependencies.clock);
|
|
47
|
+
renderer.render(feedback);
|
|
48
|
+
if (feedback.kind === "final") {
|
|
49
|
+
statuses.succeeded("progressRendering");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
failRendering();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const refresh = () => {
|
|
57
|
+
if (failed)
|
|
58
|
+
return;
|
|
59
|
+
try {
|
|
60
|
+
renderer?.refresh();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
failRendering();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const startRefresh = () => {
|
|
67
|
+
if (failed ||
|
|
68
|
+
refreshSchedule !== undefined ||
|
|
69
|
+
runningCheckIds.size === 0 ||
|
|
70
|
+
renderer?.refreshesRunningRegion !== true) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
refreshSchedule = (dependencies.refreshScheduler ?? defaultProgressRefreshScheduler).schedule(refresh, PROGRESS_REFRESH_INTERVAL_MS);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
failRendering();
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return Object.freeze({
|
|
81
|
+
prepared: (totalChecks) => render(Object.freeze({ kind: "prepared", totalChecks })),
|
|
82
|
+
lifecycle: Object.freeze({
|
|
83
|
+
settled: (fact) => {
|
|
84
|
+
render(Object.freeze({
|
|
85
|
+
kind: "settled",
|
|
86
|
+
checkId: fact.checkId,
|
|
87
|
+
displayName: fact.displayName,
|
|
88
|
+
durationMs: fact.durationMs,
|
|
89
|
+
messages: fact.messages,
|
|
90
|
+
outcome: fact.outcome,
|
|
91
|
+
visibility: fact.visibility
|
|
92
|
+
}));
|
|
93
|
+
runningCheckIds.delete(fact.checkId);
|
|
94
|
+
if (runningCheckIds.size === 0)
|
|
95
|
+
stopRefresh();
|
|
96
|
+
},
|
|
97
|
+
started: (fact) => {
|
|
98
|
+
runningCheckIds.add(fact.checkId);
|
|
99
|
+
render(Object.freeze({ kind: "started", checkId: fact.checkId, displayName: fact.displayName }));
|
|
100
|
+
startRefresh();
|
|
101
|
+
}
|
|
102
|
+
}),
|
|
103
|
+
final: (input) => {
|
|
104
|
+
stopRefresh();
|
|
105
|
+
render(Object.freeze({
|
|
106
|
+
kind: "final",
|
|
107
|
+
counts: input.counts,
|
|
108
|
+
elapsedMs: input.elapsedMs,
|
|
109
|
+
execution: input.execution
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function inertProgressRendering() {
|
|
115
|
+
const lifecycle = Object.freeze({
|
|
116
|
+
settled: (_fact) => undefined,
|
|
117
|
+
started: (_fact) => undefined
|
|
118
|
+
});
|
|
119
|
+
return Object.freeze({
|
|
120
|
+
prepared: (_totalChecks) => undefined,
|
|
121
|
+
lifecycle,
|
|
122
|
+
final: (_input) => undefined
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function defaultProgressWriter() {
|
|
126
|
+
return Object.freeze({
|
|
127
|
+
color: process.stdout.isTTY === true && process.env.NO_COLOR === undefined,
|
|
128
|
+
isTTY: process.stdout.isTTY === true,
|
|
129
|
+
term: process.env.TERM,
|
|
130
|
+
write: (content) => {
|
|
131
|
+
process.stdout.write(content);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=presentation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.mjs","sourceRoot":"","sources":["../../../../src/project-run/progress-rendering/presentation.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CheckExecutionLifecycle,\n CheckSettledFact,\n CheckStartedFact\n} from \"../check-execution/resolved-checks.ts\";\nimport {\n createProgressRenderer,\n type ProgressClock,\n type ProgressFeedback,\n type ProgressOutcomeCounts,\n type ProgressWriter\n} from \"./renderer.ts\";\nimport type { ProjectOutputs } from \"../../project-definition/project-definition.ts\";\nimport type { OutputStatuses } from \"../output-status.ts\";\nexport interface ProgressRendering {\n readonly final: (input: ProgressFinalFeedback) => void;\n readonly lifecycle: CheckExecutionLifecycle;\n readonly prepared: (totalChecks: number) => void;\n}\nexport interface ProgressFinalFeedback {\n readonly counts: ProgressOutcomeCounts;\n readonly elapsedMs: number;\n readonly execution: \"cancelled\" | \"completed\";\n}\nexport type ProgressWriterFactory = () => ProgressWriter;\n\nexport interface ProgressRefreshSchedule {\n cancel(): void;\n}\n\nexport interface ProgressRefreshScheduler {\n schedule(refresh: () => void, intervalMs: number): ProgressRefreshSchedule;\n}\n\nexport interface ProgressRenderingDependencies {\n readonly clock?: ProgressClock;\n readonly refreshScheduler?: ProgressRefreshScheduler;\n readonly writerFactory?: ProgressWriterFactory;\n}\n\nconst PROGRESS_REFRESH_INTERVAL_MS = 5_000;\n\nconst defaultProgressRefreshScheduler: ProgressRefreshScheduler = Object.freeze({\n schedule: (refresh: () => void, intervalMs: number) => {\n const interval = setInterval(refresh, intervalMs);\n interval.unref();\n return Object.freeze({ cancel: () => clearInterval(interval) });\n }\n});\n\n/** Owns progress writer lifecycle and rendering; failed writers are permanently muted. */\nexport function createProgressRendering(\n configuration: ProjectOutputs[\"progressRendering\"],\n statuses: OutputStatuses,\n dependencies: ProgressRenderingDependencies = {}\n): ProgressRendering {\n if (!configuration.enabled) return inertProgressRendering();\n let failed = false;\n const runningCheckIds = new Set<string>();\n let renderer: ReturnType<typeof createProgressRenderer> | undefined;\n let refreshSchedule: ProgressRefreshSchedule | undefined;\n\n const failRendering = (): void => {\n if (failed) return;\n failed = true;\n const activeSchedule = refreshSchedule;\n refreshSchedule = undefined;\n try {\n activeSchedule?.cancel();\n } catch {\n // The output is already failed; a scheduler cleanup fault must not reach Check execution.\n }\n statuses.failed(\"progressRendering\");\n };\n\n const stopRefresh = (): void => {\n const activeSchedule = refreshSchedule;\n refreshSchedule = undefined;\n try {\n activeSchedule?.cancel();\n } catch {\n failRendering();\n }\n };\n\n const render = (feedback: ProgressFeedback): void => {\n if (failed) return;\n try {\n renderer ??= createProgressRenderer(\n (dependencies.writerFactory ?? defaultProgressWriter)(),\n dependencies.clock\n );\n renderer.render(feedback);\n if (feedback.kind === \"final\") {\n statuses.succeeded(\"progressRendering\");\n }\n } catch {\n failRendering();\n }\n };\n\n const refresh = (): void => {\n if (failed) return;\n try {\n renderer?.refresh();\n } catch {\n failRendering();\n }\n };\n\n const startRefresh = (): void => {\n if (\n failed ||\n refreshSchedule !== undefined ||\n runningCheckIds.size === 0 ||\n renderer?.refreshesRunningRegion !== true\n ) {\n return;\n }\n try {\n refreshSchedule = (dependencies.refreshScheduler ?? defaultProgressRefreshScheduler).schedule(\n refresh,\n PROGRESS_REFRESH_INTERVAL_MS\n );\n } catch {\n failRendering();\n }\n };\n\n return Object.freeze({\n prepared: (totalChecks: number) => render(Object.freeze({ kind: \"prepared\", totalChecks })),\n lifecycle: Object.freeze({\n settled: (fact: CheckSettledFact) => {\n render(\n Object.freeze({\n kind: \"settled\",\n checkId: fact.checkId,\n displayName: fact.displayName,\n durationMs: fact.durationMs,\n messages: fact.messages,\n outcome: fact.outcome,\n visibility: fact.visibility\n })\n );\n runningCheckIds.delete(fact.checkId);\n if (runningCheckIds.size === 0) stopRefresh();\n },\n started: (fact: CheckStartedFact) => {\n runningCheckIds.add(fact.checkId);\n render(\n Object.freeze({ kind: \"started\", checkId: fact.checkId, displayName: fact.displayName })\n );\n startRefresh();\n }\n }),\n final: (input: ProgressFinalFeedback) => {\n stopRefresh();\n render(\n Object.freeze({\n kind: \"final\",\n counts: input.counts,\n elapsedMs: input.elapsedMs,\n execution: input.execution\n })\n );\n }\n });\n}\nfunction inertProgressRendering(): ProgressRendering {\n const lifecycle = Object.freeze({\n settled: (_fact: CheckSettledFact): void => undefined,\n started: (_fact: CheckStartedFact): void => undefined\n });\n return Object.freeze({\n prepared: (_totalChecks: number): void => undefined,\n lifecycle,\n final: (_input: ProgressFinalFeedback): void => undefined\n });\n}\nfunction defaultProgressWriter(): ProgressWriter {\n return Object.freeze({\n color: process.stdout.isTTY === true && process.env.NO_COLOR === undefined,\n isTTY: process.stdout.isTTY === true,\n term: process.env.TERM,\n write: (content: string) => {\n process.stdout.write(content);\n }\n });\n}\n"]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
const COLOR = Object.freeze({
|
|
2
|
+
error: "\u001B[31m",
|
|
3
|
+
info: "\u001B[36m",
|
|
4
|
+
reset: "\u001B[0m",
|
|
5
|
+
warning: "\u001B[33m"
|
|
6
|
+
});
|
|
7
|
+
const NAMED_CONTROL_ESCAPES = Object.freeze({
|
|
8
|
+
"\n": "\\n",
|
|
9
|
+
"\r": "\\r",
|
|
10
|
+
"\t": "\\t"
|
|
11
|
+
});
|
|
12
|
+
export function formatRunningRow(input) {
|
|
13
|
+
const elapsed = input.elapsedMs === null ? "" : ` | ${formatDuration(input.elapsedMs)}`;
|
|
14
|
+
return ` [${input.displayIndex}/${input.totalChecks}] ${escapeTerminalText(input.displayName)} | running${elapsed}\n`;
|
|
15
|
+
}
|
|
16
|
+
export function shouldPresentSettledFeedback(feedback) {
|
|
17
|
+
return (feedback.visibility !== "attention" ||
|
|
18
|
+
feedback.outcome.status !== "passed" ||
|
|
19
|
+
feedback.messages.length > 0);
|
|
20
|
+
}
|
|
21
|
+
export function formatSettledBlock(input) {
|
|
22
|
+
const status = statusForOutcome(input.outcome);
|
|
23
|
+
const reason = reasonForOutcome(input.outcome);
|
|
24
|
+
const duration = input.durationMs === null ? "not run" : formatDuration(input.durationMs);
|
|
25
|
+
const reasonSuffix = reason === undefined ? "" : ` | ${escapeTerminalText(reason)}`;
|
|
26
|
+
const row = ` [${input.completionOrdinal}/${input.totalChecks}] ${escapeTerminalText(input.displayName)} | ${status} | ${duration}${reasonSuffix}\n`;
|
|
27
|
+
return `${row}${input.messages.map((message) => formatMessage(message, input.usesColor)).join("")}`;
|
|
28
|
+
}
|
|
29
|
+
export function formatFinalSummary(input) {
|
|
30
|
+
return [
|
|
31
|
+
"",
|
|
32
|
+
"Execution summary:",
|
|
33
|
+
` execution: ${input.execution}`,
|
|
34
|
+
` total checks: ${totalChecks(input.counts)}`,
|
|
35
|
+
` passed: ${input.counts.passed}`,
|
|
36
|
+
` failed: ${input.counts.failed}`,
|
|
37
|
+
` not applicable: ${input.counts.notApplicable}`,
|
|
38
|
+
` unavailable: ${input.counts.unavailable}`,
|
|
39
|
+
` elapsed: ${formatDuration(input.elapsedMs)}`,
|
|
40
|
+
""
|
|
41
|
+
].join("\n");
|
|
42
|
+
}
|
|
43
|
+
function formatMessage(message, usesColor) {
|
|
44
|
+
const label = colorMessageLevel(message.level, usesColor);
|
|
45
|
+
return ` [${label}] ${escapeTerminalText(message.message)}\n`;
|
|
46
|
+
}
|
|
47
|
+
function totalChecks(counts) {
|
|
48
|
+
return counts.passed + counts.failed + counts.notApplicable + counts.unavailable;
|
|
49
|
+
}
|
|
50
|
+
function statusForOutcome(outcome) {
|
|
51
|
+
switch (outcome.status) {
|
|
52
|
+
case "passed":
|
|
53
|
+
case "failed":
|
|
54
|
+
return outcome.status;
|
|
55
|
+
case "not-applicable":
|
|
56
|
+
return "not-applicable";
|
|
57
|
+
case "unavailable":
|
|
58
|
+
return "unavailable";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function reasonForOutcome(outcome) {
|
|
62
|
+
return outcome.status === "passed" || outcome.status === "failed"
|
|
63
|
+
? undefined
|
|
64
|
+
: outcome.reason?.code;
|
|
65
|
+
}
|
|
66
|
+
/** Human-only fields must not control the terminal that presents them. */
|
|
67
|
+
function escapeTerminalText(value) {
|
|
68
|
+
let escaped = "";
|
|
69
|
+
for (const character of value) {
|
|
70
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
71
|
+
const namedEscape = NAMED_CONTROL_ESCAPES[character];
|
|
72
|
+
if (namedEscape !== undefined) {
|
|
73
|
+
escaped += namedEscape;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
escaped += isTerminalControl(codePoint)
|
|
77
|
+
? `\\u${codePoint.toString(16).padStart(4, "0").toUpperCase()}`
|
|
78
|
+
: character;
|
|
79
|
+
}
|
|
80
|
+
return escaped;
|
|
81
|
+
}
|
|
82
|
+
function isTerminalControl(codePoint) {
|
|
83
|
+
return (codePoint <= 0x1f ||
|
|
84
|
+
(codePoint >= 0x7f && codePoint <= 0x9f) ||
|
|
85
|
+
codePoint === 0x2028 ||
|
|
86
|
+
codePoint === 0x2029);
|
|
87
|
+
}
|
|
88
|
+
function colorMessageLevel(level, usesColor) {
|
|
89
|
+
if (!usesColor)
|
|
90
|
+
return level;
|
|
91
|
+
return `${COLOR[level]}${level}${COLOR.reset}`;
|
|
92
|
+
}
|
|
93
|
+
function formatDuration(durationMs) {
|
|
94
|
+
if (durationMs < 1_000) {
|
|
95
|
+
return `${Number.isInteger(durationMs) ? durationMs : Number(durationMs.toFixed(1))}ms`;
|
|
96
|
+
}
|
|
97
|
+
const seconds = durationMs / 1_000;
|
|
98
|
+
return `${Number.isInteger(seconds) ? seconds : Number(seconds.toFixed(1))}s`;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=renderer-formatting.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-formatting.mjs","sourceRoot":"","sources":["../../../../src/project-run/progress-rendering/renderer-formatting.ts"],"names":[],"mappings":"AAGA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,YAAY;CACtB,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAA8C,MAAM,CAAC,MAAM,CAAC;IACrF,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;CACZ,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAC9B,KAKE;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IACxF,OAAO,MAAM,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,KAAK,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,OAAO,IAAI,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,QAAiE;IAEjE,OAAO,CACL,QAAQ,CAAC,UAAU,KAAK,WAAW;QACnC,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ;QACpC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAQE;IAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1F,MAAM,YAAY,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;IACpF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,WAAW,KAAK,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,MAAM,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC;IACtJ,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAA4D;IAE5D,OAAO;QACL,EAAE;QACF,oBAAoB;QACpB,gBAAgB,KAAK,CAAC,SAAS,EAAE;QACjC,mBAAmB,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QAC9C,aAAa,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QAClC,aAAa,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QAClC,qBAAqB,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE;QACjD,kBAAkB,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;QAC5C,cAAc,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAC/C,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAqB,EAAE,SAAkB;IAC9D,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1D,OAAO,QAAQ,KAAK,KAAK,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,SAAS,WAAW,CAAC,MAA6B;IAChD,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC;AACnF,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAqB;IAC7C,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,MAAM,CAAC;QACxB,KAAK,gBAAgB;YACnB,OAAO,gBAAgB,CAAC;QAC1B,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAqB;IAC7C,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAC/D,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3B,CAAC;AAED,0EAA0E;AAC1E,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,WAAW,CAAC;YACvB,SAAS;QACX,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC,SAAS,CAAC;YACrC,CAAC,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YAC/D,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO,CACL,SAAS,IAAI,IAAI;QACjB,CAAC,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC;QACxC,SAAS,KAAK,MAAM;QACpB,SAAS,KAAK,MAAM,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA4B,EAAE,SAAkB;IACzE,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AACjD,CAAC;AAID,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;IACnC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAChF,CAAC","sourcesContent":["import type { CheckMessage, CheckOutcome } from \"../../check/check.ts\";\nimport type { ProgressFeedback, ProgressOutcomeCounts } from \"./renderer.ts\";\n\nconst COLOR = Object.freeze({\n error: \"\\u001B[31m\",\n info: \"\\u001B[36m\",\n reset: \"\\u001B[0m\",\n warning: \"\\u001B[33m\"\n});\n\nconst NAMED_CONTROL_ESCAPES: Readonly<Partial<Record<string, string>>> = Object.freeze({\n \"\\n\": \"\\\\n\",\n \"\\r\": \"\\\\r\",\n \"\\t\": \"\\\\t\"\n});\n\nexport function formatRunningRow(\n input: Readonly<{\n readonly displayIndex: number;\n readonly displayName: string;\n readonly elapsedMs: number | null;\n readonly totalChecks: number;\n }>\n): string {\n const elapsed = input.elapsedMs === null ? \"\" : ` | ${formatDuration(input.elapsedMs)}`;\n return ` [${input.displayIndex}/${input.totalChecks}] ${escapeTerminalText(input.displayName)} | running${elapsed}\\n`;\n}\n\nexport function shouldPresentSettledFeedback(\n feedback: Extract<ProgressFeedback, { readonly kind: \"settled\" }>\n): boolean {\n return (\n feedback.visibility !== \"attention\" ||\n feedback.outcome.status !== \"passed\" ||\n feedback.messages.length > 0\n );\n}\n\nexport function formatSettledBlock(\n input: Readonly<{\n readonly completionOrdinal: number;\n readonly displayName: string;\n readonly durationMs: number | null;\n readonly messages: readonly CheckMessage[];\n readonly outcome: CheckOutcome;\n readonly totalChecks: number;\n readonly usesColor: boolean;\n }>\n): string {\n const status = statusForOutcome(input.outcome);\n const reason = reasonForOutcome(input.outcome);\n const duration = input.durationMs === null ? \"not run\" : formatDuration(input.durationMs);\n const reasonSuffix = reason === undefined ? \"\" : ` | ${escapeTerminalText(reason)}`;\n const row = ` [${input.completionOrdinal}/${input.totalChecks}] ${escapeTerminalText(input.displayName)} | ${status} | ${duration}${reasonSuffix}\\n`;\n return `${row}${input.messages.map((message) => formatMessage(message, input.usesColor)).join(\"\")}`;\n}\n\nexport function formatFinalSummary(\n input: Extract<ProgressFeedback, { readonly kind: \"final\" }>\n): string {\n return [\n \"\",\n \"Execution summary:\",\n ` execution: ${input.execution}`,\n ` total checks: ${totalChecks(input.counts)}`,\n ` passed: ${input.counts.passed}`,\n ` failed: ${input.counts.failed}`,\n ` not applicable: ${input.counts.notApplicable}`,\n ` unavailable: ${input.counts.unavailable}`,\n ` elapsed: ${formatDuration(input.elapsedMs)}`,\n \"\"\n ].join(\"\\n\");\n}\n\nfunction formatMessage(message: CheckMessage, usesColor: boolean): string {\n const label = colorMessageLevel(message.level, usesColor);\n return ` [${label}] ${escapeTerminalText(message.message)}\\n`;\n}\n\nfunction totalChecks(counts: ProgressOutcomeCounts): number {\n return counts.passed + counts.failed + counts.notApplicable + counts.unavailable;\n}\n\nfunction statusForOutcome(outcome: CheckOutcome): ProgressStatus {\n switch (outcome.status) {\n case \"passed\":\n case \"failed\":\n return outcome.status;\n case \"not-applicable\":\n return \"not-applicable\";\n case \"unavailable\":\n return \"unavailable\";\n }\n}\n\nfunction reasonForOutcome(outcome: CheckOutcome): string | undefined {\n return outcome.status === \"passed\" || outcome.status === \"failed\"\n ? undefined\n : outcome.reason?.code;\n}\n\n/** Human-only fields must not control the terminal that presents them. */\nfunction escapeTerminalText(value: string): string {\n let escaped = \"\";\n for (const character of value) {\n const codePoint = character.codePointAt(0) ?? 0;\n const namedEscape = NAMED_CONTROL_ESCAPES[character];\n if (namedEscape !== undefined) {\n escaped += namedEscape;\n continue;\n }\n escaped += isTerminalControl(codePoint)\n ? `\\\\u${codePoint.toString(16).padStart(4, \"0\").toUpperCase()}`\n : character;\n }\n return escaped;\n}\n\nfunction isTerminalControl(codePoint: number): boolean {\n return (\n codePoint <= 0x1f ||\n (codePoint >= 0x7f && codePoint <= 0x9f) ||\n codePoint === 0x2028 ||\n codePoint === 0x2029\n );\n}\n\nfunction colorMessageLevel(level: CheckMessage[\"level\"], usesColor: boolean): string {\n if (!usesColor) return level;\n return `${COLOR[level]}${level}${COLOR.reset}`;\n}\n\ntype ProgressStatus = CheckOutcome[\"status\"];\n\nfunction formatDuration(durationMs: number): string {\n if (durationMs < 1_000) {\n return `${Number.isInteger(durationMs) ? durationMs : Number(durationMs.toFixed(1))}ms`;\n }\n const seconds = durationMs / 1_000;\n return `${Number.isInteger(seconds) ? seconds : Number(seconds.toFixed(1))}s`;\n}\n"]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { formatFinalSummary, formatRunningRow, formatSettledBlock, shouldPresentSettledFeedback } from "./renderer-formatting.mjs";
|
|
2
|
+
/** Maintains the mutable lifecycle state and the TTY-only running terminal region. */
|
|
3
|
+
export class ProgressRendererController {
|
|
4
|
+
refreshesRunningRegion;
|
|
5
|
+
clock;
|
|
6
|
+
writer;
|
|
7
|
+
completedCount = 0;
|
|
8
|
+
preparedTotal;
|
|
9
|
+
renderedRunningRows = 0;
|
|
10
|
+
running = [];
|
|
11
|
+
usesColor;
|
|
12
|
+
constructor(writer, clock) {
|
|
13
|
+
this.writer = writer;
|
|
14
|
+
this.clock = clock;
|
|
15
|
+
this.refreshesRunningRegion = writer.isTTY && writer.term?.toLowerCase() !== "dumb";
|
|
16
|
+
this.usesColor = this.refreshesRunningRegion && writer.color;
|
|
17
|
+
}
|
|
18
|
+
refresh() {
|
|
19
|
+
if (!this.refreshesRunningRegion || this.running.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
this.requirePrepared();
|
|
22
|
+
this.eraseRunningRegion();
|
|
23
|
+
this.updateRunningDurations(this.clock.now());
|
|
24
|
+
this.redrawRunningRegion();
|
|
25
|
+
}
|
|
26
|
+
render(feedback) {
|
|
27
|
+
switch (feedback.kind) {
|
|
28
|
+
case "prepared":
|
|
29
|
+
this.prepare(feedback.totalChecks);
|
|
30
|
+
return;
|
|
31
|
+
case "started":
|
|
32
|
+
this.start(feedback);
|
|
33
|
+
return;
|
|
34
|
+
case "settled":
|
|
35
|
+
this.settle(feedback);
|
|
36
|
+
return;
|
|
37
|
+
case "final":
|
|
38
|
+
this.finish(feedback);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
prepare(totalChecks) {
|
|
42
|
+
if (this.preparedTotal !== undefined)
|
|
43
|
+
throw new Error("Progress feedback was prepared twice");
|
|
44
|
+
this.preparedTotal = totalChecks;
|
|
45
|
+
this.writer.write(`Vibe Check\ntotal ${totalChecks} checks\n\nChecks:\n`);
|
|
46
|
+
}
|
|
47
|
+
start(feedback) {
|
|
48
|
+
if (!this.refreshesRunningRegion)
|
|
49
|
+
return;
|
|
50
|
+
this.requirePrepared();
|
|
51
|
+
this.eraseRunningRegion();
|
|
52
|
+
this.running.push({
|
|
53
|
+
checkId: feedback.checkId,
|
|
54
|
+
displayName: feedback.displayName,
|
|
55
|
+
elapsedMs: null,
|
|
56
|
+
startedAtMs: this.clock.now()
|
|
57
|
+
});
|
|
58
|
+
this.redrawRunningRegion();
|
|
59
|
+
}
|
|
60
|
+
settle(feedback) {
|
|
61
|
+
const totalChecks = this.requirePrepared();
|
|
62
|
+
if (this.refreshesRunningRegion)
|
|
63
|
+
this.eraseRunningRegion();
|
|
64
|
+
this.completedCount += 1;
|
|
65
|
+
this.removeRunningCheck(feedback.checkId);
|
|
66
|
+
if (shouldPresentSettledFeedback(feedback)) {
|
|
67
|
+
this.writer.write(formatSettledBlock({
|
|
68
|
+
completionOrdinal: this.completedCount,
|
|
69
|
+
displayName: feedback.displayName,
|
|
70
|
+
durationMs: feedback.durationMs,
|
|
71
|
+
messages: feedback.messages,
|
|
72
|
+
outcome: feedback.outcome,
|
|
73
|
+
totalChecks,
|
|
74
|
+
usesColor: this.usesColor
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
if (this.refreshesRunningRegion)
|
|
78
|
+
this.redrawRunningRegion();
|
|
79
|
+
}
|
|
80
|
+
finish(feedback) {
|
|
81
|
+
this.requirePrepared();
|
|
82
|
+
if (this.running.length > 0) {
|
|
83
|
+
throw new Error("Progress feedback finalized while Checks are still running");
|
|
84
|
+
}
|
|
85
|
+
this.writer.write(formatFinalSummary(feedback));
|
|
86
|
+
}
|
|
87
|
+
eraseRunningRegion() {
|
|
88
|
+
for (let index = 0; index < this.renderedRunningRows; index += 1) {
|
|
89
|
+
this.writer.write("\u001B[1A\u001B[2K");
|
|
90
|
+
}
|
|
91
|
+
this.renderedRunningRows = 0;
|
|
92
|
+
}
|
|
93
|
+
redrawRunningRegion() {
|
|
94
|
+
const totalChecks = this.requirePrepared();
|
|
95
|
+
for (const [index, check] of this.running.entries()) {
|
|
96
|
+
this.writer.write(formatRunningRow({
|
|
97
|
+
displayIndex: this.completedCount + index + 1,
|
|
98
|
+
displayName: check.displayName,
|
|
99
|
+
elapsedMs: check.elapsedMs,
|
|
100
|
+
totalChecks
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
this.renderedRunningRows = this.running.length;
|
|
104
|
+
}
|
|
105
|
+
removeRunningCheck(checkId) {
|
|
106
|
+
const index = this.running.findIndex((check) => check.checkId === checkId);
|
|
107
|
+
if (index >= 0)
|
|
108
|
+
this.running.splice(index, 1);
|
|
109
|
+
}
|
|
110
|
+
updateRunningDurations(refreshedAtMs) {
|
|
111
|
+
for (const check of this.running) {
|
|
112
|
+
const elapsedMs = refreshedAtMs - check.startedAtMs;
|
|
113
|
+
check.elapsedMs = Number.isFinite(elapsedMs) && elapsedMs >= 0 ? elapsedMs : 0;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
requirePrepared() {
|
|
117
|
+
if (this.preparedTotal === undefined) {
|
|
118
|
+
throw new Error("Progress feedback arrived before preparation");
|
|
119
|
+
}
|
|
120
|
+
return this.preparedTotal;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=renderer-lifecycle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-lifecycle.mjs","sourceRoot":"","sources":["../../../../src/project-run/progress-rendering/renderer-lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ProgressClock,\n ProgressFeedback,\n ProgressRenderer,\n ProgressWriter\n} from \"./renderer.ts\";\nimport {\n formatFinalSummary,\n formatRunningRow,\n formatSettledBlock,\n shouldPresentSettledFeedback\n} from \"./renderer-formatting.ts\";\n\ninterface RunningCheck {\n readonly checkId: string;\n readonly displayName: string;\n readonly startedAtMs: number;\n elapsedMs: number | null;\n}\n\n/** Maintains the mutable lifecycle state and the TTY-only running terminal region. */\nexport class ProgressRendererController implements ProgressRenderer {\n readonly refreshesRunningRegion: boolean;\n\n private readonly clock: ProgressClock;\n private readonly writer: ProgressWriter;\n private completedCount = 0;\n private preparedTotal: number | undefined;\n private renderedRunningRows = 0;\n private readonly running: RunningCheck[] = [];\n private readonly usesColor: boolean;\n\n constructor(writer: ProgressWriter, clock: ProgressClock) {\n this.writer = writer;\n this.clock = clock;\n this.refreshesRunningRegion = writer.isTTY && writer.term?.toLowerCase() !== \"dumb\";\n this.usesColor = this.refreshesRunningRegion && writer.color;\n }\n\n refresh(): void {\n if (!this.refreshesRunningRegion || this.running.length === 0) return;\n this.requirePrepared();\n this.eraseRunningRegion();\n this.updateRunningDurations(this.clock.now());\n this.redrawRunningRegion();\n }\n\n render(feedback: ProgressFeedback): void {\n switch (feedback.kind) {\n case \"prepared\":\n this.prepare(feedback.totalChecks);\n return;\n case \"started\":\n this.start(feedback);\n return;\n case \"settled\":\n this.settle(feedback);\n return;\n case \"final\":\n this.finish(feedback);\n }\n }\n\n private prepare(totalChecks: number): void {\n if (this.preparedTotal !== undefined) throw new Error(\"Progress feedback was prepared twice\");\n this.preparedTotal = totalChecks;\n this.writer.write(`Vibe Check\\ntotal ${totalChecks} checks\\n\\nChecks:\\n`);\n }\n\n private start(feedback: Extract<ProgressFeedback, { readonly kind: \"started\" }>): void {\n if (!this.refreshesRunningRegion) return;\n this.requirePrepared();\n this.eraseRunningRegion();\n this.running.push({\n checkId: feedback.checkId,\n displayName: feedback.displayName,\n elapsedMs: null,\n startedAtMs: this.clock.now()\n });\n this.redrawRunningRegion();\n }\n\n private settle(feedback: Extract<ProgressFeedback, { readonly kind: \"settled\" }>): void {\n const totalChecks = this.requirePrepared();\n if (this.refreshesRunningRegion) this.eraseRunningRegion();\n this.completedCount += 1;\n this.removeRunningCheck(feedback.checkId);\n if (shouldPresentSettledFeedback(feedback)) {\n this.writer.write(\n formatSettledBlock({\n completionOrdinal: this.completedCount,\n displayName: feedback.displayName,\n durationMs: feedback.durationMs,\n messages: feedback.messages,\n outcome: feedback.outcome,\n totalChecks,\n usesColor: this.usesColor\n })\n );\n }\n if (this.refreshesRunningRegion) this.redrawRunningRegion();\n }\n\n private finish(feedback: Extract<ProgressFeedback, { readonly kind: \"final\" }>): void {\n this.requirePrepared();\n if (this.running.length > 0) {\n throw new Error(\"Progress feedback finalized while Checks are still running\");\n }\n this.writer.write(formatFinalSummary(feedback));\n }\n\n private eraseRunningRegion(): void {\n for (let index = 0; index < this.renderedRunningRows; index += 1) {\n this.writer.write(\"\\u001B[1A\\u001B[2K\");\n }\n this.renderedRunningRows = 0;\n }\n\n private redrawRunningRegion(): void {\n const totalChecks = this.requirePrepared();\n for (const [index, check] of this.running.entries()) {\n this.writer.write(\n formatRunningRow({\n displayIndex: this.completedCount + index + 1,\n displayName: check.displayName,\n elapsedMs: check.elapsedMs,\n totalChecks\n })\n );\n }\n this.renderedRunningRows = this.running.length;\n }\n\n private removeRunningCheck(checkId: string): void {\n const index = this.running.findIndex((check) => check.checkId === checkId);\n if (index >= 0) this.running.splice(index, 1);\n }\n\n private updateRunningDurations(refreshedAtMs: number): void {\n for (const check of this.running) {\n const elapsedMs = refreshedAtMs - check.startedAtMs;\n check.elapsedMs = Number.isFinite(elapsedMs) && elapsedMs >= 0 ? elapsedMs : 0;\n }\n }\n\n private requirePrepared(): number {\n if (this.preparedTotal === undefined) {\n throw new Error(\"Progress feedback arrived before preparation\");\n }\n return this.preparedTotal;\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ProgressRendererController } from "./renderer-lifecycle.mjs";
|
|
2
|
+
const SYSTEM_PROGRESS_CLOCK = Object.freeze({ now: () => performance.now() });
|
|
3
|
+
/** Product-private lifecycle presentation with one owner for feedback and its writer. */
|
|
4
|
+
export function createProgressRenderer(writer, clock = SYSTEM_PROGRESS_CLOCK) {
|
|
5
|
+
const controller = new ProgressRendererController(writer, clock);
|
|
6
|
+
return Object.freeze({
|
|
7
|
+
refreshesRunningRegion: controller.refreshesRunningRegion,
|
|
8
|
+
refresh: () => controller.refresh(),
|
|
9
|
+
render: (feedback) => controller.render(feedback)
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=renderer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.mjs","sourceRoot":"","sources":["../../../../src/project-run/progress-rendering/renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAqDrE,MAAM,qBAAqB,GAAkB,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE7F,yFAAyF;AACzF,MAAM,UAAU,sBAAsB,CACpC,MAAsB,EACtB,KAAK,GAAkB,qBAAqB;IAE5C,MAAM,UAAU,GAAG,IAAI,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,sBAAsB,EAAE,UAAU,CAAC,sBAAsB;QACzD,OAAO,EAAE,GAAS,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;QACzC,MAAM,EAAE,CAAC,QAA0B,EAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC1E,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { CheckMessage, CheckOutcome, CheckVisibility } from \"../../check/check.ts\";\nimport { ProgressRendererController } from \"./renderer-lifecycle.ts\";\n\nexport interface ProgressWriter {\n readonly color: boolean;\n readonly isTTY: boolean;\n readonly term: string | undefined;\n write(content: string): void;\n}\n\nexport type ProgressFeedback = Readonly<\n | {\n readonly kind: \"prepared\";\n readonly totalChecks: number;\n }\n | {\n readonly kind: \"started\";\n readonly checkId: string;\n readonly displayName: string;\n }\n | {\n readonly kind: \"settled\";\n readonly checkId: string;\n readonly displayName: string;\n readonly outcome: CheckOutcome;\n readonly durationMs: number | null;\n readonly visibility: CheckVisibility;\n readonly messages: readonly CheckMessage[];\n }\n | {\n readonly kind: \"final\";\n readonly execution: \"cancelled\" | \"completed\";\n readonly counts: ProgressOutcomeCounts;\n readonly elapsedMs: number;\n }\n>;\n\nexport interface ProgressOutcomeCounts {\n readonly failed: number;\n readonly notApplicable: number;\n readonly passed: number;\n readonly unavailable: number;\n}\n\nexport interface ProgressRenderer {\n refresh(): void;\n readonly refreshesRunningRegion: boolean;\n render(feedback: ProgressFeedback): void;\n}\n\nexport interface ProgressClock {\n now(): number;\n}\n\nconst SYSTEM_PROGRESS_CLOCK: ProgressClock = Object.freeze({ now: () => performance.now() });\n\n/** Product-private lifecycle presentation with one owner for feedback and its writer. */\nexport function createProgressRenderer(\n writer: ProgressWriter,\n clock: ProgressClock = SYSTEM_PROGRESS_CLOCK\n): ProgressRenderer {\n const controller = new ProgressRendererController(writer, clock);\n return Object.freeze({\n refreshesRunningRegion: controller.refreshesRunningRegion,\n refresh: (): void => controller.refresh(),\n render: (feedback: ProgressFeedback): void => controller.render(feedback)\n });\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Materializes only invocation-wide callback input; Check-local options own domain configuration. */
|
|
2
|
+
export function createProjectContext(input) {
|
|
3
|
+
return Object.freeze({
|
|
4
|
+
flags: Object.freeze([...(input.controls.flags ?? [])]),
|
|
5
|
+
root: input.root
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=project-context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-context.mjs","sourceRoot":"","sources":["../../../src/project-run/project-context.ts"],"names":[],"mappings":"AAEA,sGAAsG;AACtG,MAAM,UAAU,oBAAoB,CAClC,KAA0E;IAE1E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { CheckProjectContext } from \"../check/check.ts\";\nimport type { RunControls } from \"./controls/contract.ts\";\n/** Materializes only invocation-wide callback input; Check-local options own domain configuration. */\nexport function createProjectContext(\n input: Readonly<{ readonly controls: RunControls; readonly root: string }>\n): CheckProjectContext {\n return Object.freeze({\n flags: Object.freeze([...(input.controls.flags ?? [])]),\n root: input.root\n });\n}\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export function outputFailure(declarativeFingerprint, definitionWarnings, outputs, output, facts) {
|
|
2
|
+
return Object.freeze({
|
|
3
|
+
kind: "output",
|
|
4
|
+
declarativeFingerprint,
|
|
5
|
+
definitionWarnings,
|
|
6
|
+
diagnostic: Object.freeze({ code: outputDiagnosticCode(output) }),
|
|
7
|
+
outputs,
|
|
8
|
+
...facts
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function outputDiagnosticCode(output) {
|
|
12
|
+
switch (output) {
|
|
13
|
+
case "machinePublication":
|
|
14
|
+
return "machine-publication-failed";
|
|
15
|
+
case "progressRendering":
|
|
16
|
+
return "progress-rendering-failed";
|
|
17
|
+
case "diagnosticLogging":
|
|
18
|
+
return "diagnostic-logging-failed";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function isCancelled(controls) {
|
|
22
|
+
return controls.signal?.aborted === true;
|
|
23
|
+
}
|
|
24
|
+
export function planning(declarativeFingerprint, definitionWarnings, outputs, code) {
|
|
25
|
+
return Object.freeze({
|
|
26
|
+
kind: "planning",
|
|
27
|
+
declarativeFingerprint,
|
|
28
|
+
definitionWarnings,
|
|
29
|
+
diagnostic: Object.freeze({ code }),
|
|
30
|
+
outputs
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function preExecutionCancellation(declarativeFingerprint, definitionWarnings, outputs, phase) {
|
|
34
|
+
return Object.freeze({
|
|
35
|
+
kind: "cancelled",
|
|
36
|
+
declarativeFingerprint,
|
|
37
|
+
definitionWarnings,
|
|
38
|
+
outputs,
|
|
39
|
+
phase
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export function executionCancellation(input) {
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
kind: "cancelled",
|
|
45
|
+
declarativeFingerprint: input.declarativeFingerprint,
|
|
46
|
+
definitionWarnings: input.definitionWarnings,
|
|
47
|
+
outputs: input.outputs,
|
|
48
|
+
phase: "execution",
|
|
49
|
+
checkDurations: input.checkDurations,
|
|
50
|
+
checkMessages: input.checkMessages,
|
|
51
|
+
snapshot: input.snapshot
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=result.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.mjs","sourceRoot":"","sources":["../../../src/project-run/result.ts"],"names":[],"mappings":"AA2FA,MAAM,UAAU,aAAa,CAC3B,sBAA8B,EAC9B,kBAAgD,EAChD,OAA0B,EAC1B,MAA+B,EAC/B,KAAqB;IAErB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,QAAQ;QACd,sBAAsB;QACtB,kBAAkB;QAClB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,OAAO;QACP,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC;AACD,SAAS,oBAAoB,CAC3B,MAA+B;IAE/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,oBAAoB;YACvB,OAAO,4BAA4B,CAAC;QACtC,KAAK,mBAAmB;YACtB,OAAO,2BAA2B,CAAC;QACrC,KAAK,mBAAmB;YACtB,OAAO,2BAA2B,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAqB;IAC/C,OAAO,QAAQ,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAC3C,CAAC;AACD,MAAM,UAAU,QAAQ,CACtB,sBAA8B,EAC9B,kBAAgD,EAChD,OAA0B,EAC1B,IAA0D;IAE1D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,UAAU;QAChB,sBAAsB;QACtB,kBAAkB;QAClB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;QACnC,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,wBAAwB,CACtC,sBAA8B,EAC9B,kBAAgD,EAChD,OAA0B,EAC1B,KAA8B;IAK9B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,WAAW;QACjB,sBAAsB;QACtB,kBAAkB;QAClB,OAAO;QACP,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,qBAAqB,CACnC,KAOE;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,WAAW;QACjB,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;QACpD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,WAAW;QAClB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type {\n DefinitionWarning,\n ProjectDefinitionDiagnostic\n} from \"../project-definition/project-definition.ts\";\nimport type { RunControlDiagnostic } from \"./controls/validation-result.ts\";\nimport type { CheckAggregate, RunControls } from \"./controls/contract.ts\";\nimport type { CheckMessageLevel } from \"../check/check.ts\";\nimport type { CoreSnapshot } from \"../check-settlement/facts.ts\";\nimport type { RunOutputStatuses } from \"./output-status.ts\";\nexport type RunDiagnostic = Readonly<{\n readonly code: \"task-graph-invalid\" | \"task-engine-failed\" | \"publication-model-failed\";\n}>;\nexport type CheckDuration = Readonly<{\n readonly checkId: string;\n readonly durationMs: number | null;\n}>;\nexport interface CheckRunMessage {\n readonly checkId: string;\n readonly level: CheckMessageLevel;\n readonly code: string;\n readonly message: string;\n}\nexport interface RunResultFacts {\n readonly aggregate: CheckAggregate | null;\n readonly checkDurations: readonly CheckDuration[];\n readonly checkMessages: readonly CheckRunMessage[];\n readonly snapshot: CoreSnapshot;\n}\n/** 一次 Project Run 的可判别结果;output failure 保留已结算 facts。 */\nexport type RunResult = Readonly<\n | {\n readonly kind: \"configuration\";\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly diagnostic: ProjectDefinitionDiagnostic | RunControlDiagnostic;\n }\n | {\n readonly kind: \"planning\";\n readonly declarativeFingerprint: string;\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly diagnostic: RunDiagnostic;\n readonly outputs: RunOutputStatuses;\n }\n | {\n readonly kind: \"cancelled\";\n readonly declarativeFingerprint: string;\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly outputs: RunOutputStatuses;\n readonly phase: \"pre-work\" | \"planning\";\n }\n | {\n readonly kind: \"cancelled\";\n readonly declarativeFingerprint: string;\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly outputs: RunOutputStatuses;\n readonly phase: \"execution\";\n readonly checkDurations: readonly CheckDuration[];\n readonly checkMessages: readonly CheckRunMessage[];\n readonly snapshot: CoreSnapshot;\n }\n | ({\n readonly kind: \"completed\";\n readonly declarativeFingerprint: string;\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly outputs: RunOutputStatuses;\n } & RunResultFacts)\n | {\n readonly kind: \"execution\";\n readonly declarativeFingerprint: string;\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly diagnostic: RunDiagnostic;\n readonly outputs: RunOutputStatuses;\n }\n | ({\n readonly kind: \"output\";\n readonly declarativeFingerprint: string;\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly diagnostic: Readonly<{\n readonly code:\n | \"machine-publication-failed\"\n | \"progress-rendering-failed\"\n | \"diagnostic-logging-failed\";\n }>;\n readonly outputs: RunOutputStatuses;\n } & RunResultFacts)\n>;\n\n/** Any Run result produced after controls and Definition validation have completed. */\nexport type NonConfigurationRunResult = Exclude<RunResult, { readonly kind: \"configuration\" }>;\n\ntype OutputRunResult = Extract<RunResult, { readonly kind: \"output\" }>;\n\nexport function outputFailure(\n declarativeFingerprint: string,\n definitionWarnings: readonly DefinitionWarning[],\n outputs: RunOutputStatuses,\n output: keyof RunOutputStatuses,\n facts: RunResultFacts\n): OutputRunResult {\n return Object.freeze({\n kind: \"output\",\n declarativeFingerprint,\n definitionWarnings,\n diagnostic: Object.freeze({ code: outputDiagnosticCode(output) }),\n outputs,\n ...facts\n });\n}\nfunction outputDiagnosticCode(\n output: keyof RunOutputStatuses\n): Extract<RunResult, { readonly kind: \"output\" }>[\"diagnostic\"][\"code\"] {\n switch (output) {\n case \"machinePublication\":\n return \"machine-publication-failed\";\n case \"progressRendering\":\n return \"progress-rendering-failed\";\n case \"diagnosticLogging\":\n return \"diagnostic-logging-failed\";\n }\n}\n\nexport function isCancelled(controls: RunControls): boolean {\n return controls.signal?.aborted === true;\n}\nexport function planning(\n declarativeFingerprint: string,\n definitionWarnings: readonly DefinitionWarning[],\n outputs: RunOutputStatuses,\n code: Extract<RunDiagnostic[\"code\"], \"task-graph-invalid\">\n): Extract<NonConfigurationRunResult, { readonly kind: \"planning\" }> {\n return Object.freeze({\n kind: \"planning\",\n declarativeFingerprint,\n definitionWarnings,\n diagnostic: Object.freeze({ code }),\n outputs\n });\n}\nexport function preExecutionCancellation(\n declarativeFingerprint: string,\n definitionWarnings: readonly DefinitionWarning[],\n outputs: RunOutputStatuses,\n phase: \"pre-work\" | \"planning\"\n): Extract<\n NonConfigurationRunResult,\n { readonly kind: \"cancelled\"; readonly phase: \"pre-work\" | \"planning\" }\n> {\n return Object.freeze({\n kind: \"cancelled\",\n declarativeFingerprint,\n definitionWarnings,\n outputs,\n phase\n });\n}\nexport function executionCancellation(\n input: Readonly<{\n readonly checkDurations: readonly CheckDuration[];\n readonly checkMessages: readonly CheckRunMessage[];\n readonly declarativeFingerprint: string;\n readonly definitionWarnings: readonly DefinitionWarning[];\n readonly outputs: RunOutputStatuses;\n readonly snapshot: CoreSnapshot;\n }>\n): Extract<NonConfigurationRunResult, { readonly kind: \"cancelled\"; readonly phase: \"execution\" }> {\n return Object.freeze({\n kind: \"cancelled\",\n declarativeFingerprint: input.declarativeFingerprint,\n definitionWarnings: input.definitionWarnings,\n outputs: input.outputs,\n phase: \"execution\",\n checkDurations: input.checkDurations,\n checkMessages: input.checkMessages,\n snapshot: input.snapshot\n });\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { validateProjectDefinition } from "../project-definition/project-definition-validation.mjs";
|
|
2
|
+
import { validateRunControls } from "./controls/validation.mjs";
|
|
3
|
+
import { executeValidatedRun } from "./invocation.mjs";
|
|
4
|
+
export async function run(definition, controls = {}) {
|
|
5
|
+
const validatedDefinition = validateProjectDefinition(definition);
|
|
6
|
+
if (!validatedDefinition.ok) {
|
|
7
|
+
return Object.freeze({
|
|
8
|
+
kind: "configuration",
|
|
9
|
+
definitionWarnings: Object.freeze([]),
|
|
10
|
+
diagnostic: validatedDefinition.error
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const validatedControls = validateRunControls(controls);
|
|
14
|
+
if (!validatedControls.ok) {
|
|
15
|
+
return Object.freeze({
|
|
16
|
+
kind: "configuration",
|
|
17
|
+
definitionWarnings: Object.freeze([]),
|
|
18
|
+
diagnostic: validatedControls.error
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return executeValidatedRun(validatedDefinition.value, validatedControls.value, validatedDefinition.warnings);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=run.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.mjs","sourceRoot":"","sources":["../../../src/project-run/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAsBtD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,UAAmB,EAAE,QAAQ,GAAY,EAAE;IACnE,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,eAAe;YACrB,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,UAAU,EAAE,mBAAmB,CAAC,KAAK;SACtC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,eAAe;YACrB,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,UAAU,EAAE,iBAAiB,CAAC,KAAK;SACpC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,CACxB,mBAAmB,CAAC,KAAK,EACzB,iBAAiB,CAAC,KAAK,EACvB,mBAAmB,CAAC,QAAQ,CAC7B,CAAC;AACJ,CAAC","sourcesContent":["import type { ProjectDefinition } from \"../project-definition/project-definition.ts\";\nimport type { RunControls } from \"./controls/contract.ts\";\nimport { validateProjectDefinition } from \"../project-definition/project-definition-validation.ts\";\nimport { validateRunControls } from \"./controls/validation.ts\";\nimport { executeValidatedRun } from \"./invocation.ts\";\nimport type { RunResult } from \"./result.ts\";\n\nexport type { RunOutputStatus, RunOutputStatuses } from \"./output-status.ts\";\nexport type { RunDiagnostic, RunResult } from \"./result.ts\";\n\n/**\n * 在调用方的 Bun runtime 中执行一个由项目拥有的 Project Definition。\n *\n * @param definition - Project Definition input;{@link defineConfig} 补齐 defaults,run 在 invocation 前验证。\n * @param controls - 本次 invocation context 与 outputs 使用的闭合控制值。\n * @returns ordinary configuration、planning、execution、cancellation 与 output failures 通过 `RunResult`\n * 返回;调用方先按 `kind` narrow。\n * @remarks Definition validation 关闭 authoring grammar;可选 Check preflight 组成 invocation execution barrier,\n * 并在 execution callback、dependency resolver 或 scanner 前完成。`output` branch 同时提供完整 final\n * snapshot 与 output failure diagnostic。\n */\nexport async function run(\n definition: ProjectDefinition,\n controls?: RunControls\n): Promise<RunResult>;\nexport async function run(definition: unknown, controls?: unknown): Promise<RunResult>;\nexport async function run(definition: unknown, controls: unknown = {}): Promise<RunResult> {\n const validatedDefinition = validateProjectDefinition(definition);\n if (!validatedDefinition.ok) {\n return Object.freeze({\n kind: \"configuration\",\n definitionWarnings: Object.freeze([]),\n diagnostic: validatedDefinition.error\n });\n }\n const validatedControls = validateRunControls(controls);\n if (!validatedControls.ok) {\n return Object.freeze({\n kind: \"configuration\",\n definitionWarnings: Object.freeze([]),\n diagnostic: validatedControls.error\n });\n }\n\n return executeValidatedRun(\n validatedDefinition.value,\n validatedControls.value,\n validatedDefinition.warnings\n );\n}\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export function createSchedulerState(graph, options) {
|
|
2
|
+
const scopesById = new Map();
|
|
3
|
+
for (const scope of graph.scopes) {
|
|
4
|
+
scopesById.set(scope.id, {
|
|
5
|
+
scope,
|
|
6
|
+
activationTaskIds: new Set(scope.activationTaskIds),
|
|
7
|
+
isActive: false
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
diagnosticLogger: options.diagnosticLogger,
|
|
12
|
+
graph,
|
|
13
|
+
maxParallel: options.maxParallel,
|
|
14
|
+
signal: options.signal,
|
|
15
|
+
execute: options.execute,
|
|
16
|
+
pending: [...graph.tasks],
|
|
17
|
+
runningById: new Map(),
|
|
18
|
+
runningMutexes: new Set(),
|
|
19
|
+
settlementsByTaskId: new Map(),
|
|
20
|
+
scopesById,
|
|
21
|
+
reservationTaskId: undefined,
|
|
22
|
+
isCancelled: false
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** Projects mutable execution state into the pure scheduler-decision input. */
|
|
26
|
+
export function snapshotSchedulerState(state) {
|
|
27
|
+
return Object.freeze({
|
|
28
|
+
activeScopeIds: Object.freeze([...state.scopesById.values()]
|
|
29
|
+
.filter((scope) => scope.isActive)
|
|
30
|
+
.map((scope) => scope.scope.id)),
|
|
31
|
+
graph: state.graph,
|
|
32
|
+
isAbortRequested: state.signal?.aborted === true,
|
|
33
|
+
isCancelled: state.isCancelled,
|
|
34
|
+
maxParallel: state.maxParallel,
|
|
35
|
+
pendingTaskIds: Object.freeze(state.pending.map((task) => task.id)),
|
|
36
|
+
reservationTaskId: state.reservationTaskId,
|
|
37
|
+
runningMutexes: Object.freeze([...state.runningMutexes]),
|
|
38
|
+
runningTaskIds: Object.freeze([...state.runningById.keys()]),
|
|
39
|
+
settledTasks: Object.freeze([...state.settlementsByTaskId].map(([taskId, settlement]) => Object.freeze({ kind: settlement.kind, taskId })))
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export function scopeForTask(task, state) {
|
|
43
|
+
return task.scopeId === undefined ? undefined : state.scopesById.get(task.scopeId);
|
|
44
|
+
}
|
|
45
|
+
export function cancelPendingTasks(state) {
|
|
46
|
+
state.isCancelled = true;
|
|
47
|
+
state.reservationTaskId = undefined;
|
|
48
|
+
while (state.pending.length > 0) {
|
|
49
|
+
const task = state.pending.shift();
|
|
50
|
+
if (task === undefined) {
|
|
51
|
+
throw new Error("task graph pending queue changed unexpectedly");
|
|
52
|
+
}
|
|
53
|
+
recordSettlement(state, task, Object.freeze({ kind: "cancelled-before-start" }));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function recordSettlement(state, task, settlement) {
|
|
57
|
+
if (state.settlementsByTaskId.has(task.id)) {
|
|
58
|
+
throw new Error(`task ${task.id} settled more than once`);
|
|
59
|
+
}
|
|
60
|
+
state.settlementsByTaskId.set(task.id, settlement);
|
|
61
|
+
const scope = scopeForTask(task, state);
|
|
62
|
+
if (scope?.scope.terminalTaskId === task.id) {
|
|
63
|
+
scope.isActive = false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=execution-state.mjs.map
|