@intentius/chant 0.124.46 → 0.124.49
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/dist/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/dist/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +13 -0
- package/dist/__golden__/wave-loop/op-denied-source.json +16 -0
- package/dist/__golden__/wave-loop/op-denied.json +16 -0
- package/dist/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/dist/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/dist/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/dist/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/dist/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on.json +16 -0
- package/dist/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/dist/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/dist/__golden__/wave-loop/op-overridden.json +16 -0
- package/dist/__golden__/wave-loop/op-per-run.json +20 -0
- package/dist/__golden__/wave-loop/op-point.json +13 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +10 -0
- package/dist/__golden__/wave-loop/op-sealed.json +10 -0
- package/dist/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/dist/__golden__/wave-loop/op-spend.json +10 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/dist/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/dist/__golden__/wave-loop/op-wide.json +39 -0
- package/dist/action-pins.d.ts +61 -0
- package/dist/action-pins.d.ts.map +1 -0
- package/dist/action-pins.js +77 -0
- package/dist/cli/commands/carve.d.ts +3 -0
- package/dist/cli/commands/carve.d.ts.map +1 -1
- package/dist/cli/commands/carve.js +36 -7
- package/dist/cli/commands/import-report.d.ts +26 -0
- package/dist/cli/commands/import-report.d.ts.map +1 -0
- package/dist/cli/commands/import-report.js +65 -0
- package/dist/cli/commands/import.d.ts +11 -1
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +22 -3
- package/dist/cli/commands/migrate.d.ts +13 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +134 -10
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +41 -14
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +6 -1
- package/dist/cli/handlers/graph-reader.d.ts +26 -0
- package/dist/cli/handlers/graph-reader.d.ts.map +1 -0
- package/dist/cli/handlers/graph-reader.js +41 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +14 -0
- package/dist/cli/handlers/ledger.d.ts +3 -0
- package/dist/cli/handlers/ledger.d.ts.map +1 -0
- package/dist/cli/handlers/ledger.js +55 -0
- package/dist/cli/handlers/migrate.d.ts.map +1 -1
- package/dist/cli/handlers/migrate.js +18 -11
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +12 -1
- package/dist/cli/handlers/pr-env.js +2 -2
- package/dist/cli/handlers/pr.d.ts +15 -1
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +183 -40
- package/dist/cli/handlers/query.d.ts +7 -2
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +16 -4
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +6 -3
- package/dist/cli/handlers/search.d.ts +2 -4
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +13 -39
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +87 -14
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +47 -2
- package/dist/cli/registry.d.ts +22 -4
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/components/builders.d.ts +5 -1
- package/dist/components/builders.d.ts.map +1 -1
- package/dist/components/builders.js +5 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +16 -1
- package/dist/components/capability-plugin.d.ts +14 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/pr-hooks.d.ts +21 -1
- package/dist/components/pr-hooks.d.ts.map +1 -1
- package/dist/components/pr-hooks.js +72 -4
- package/dist/components/pr-pipeline.d.ts +45 -10
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +47 -14
- package/dist/components/pr-policy.d.ts +36 -0
- package/dist/components/pr-policy.d.ts.map +1 -1
- package/dist/components/pr-policy.js +36 -0
- package/dist/components/pr-run.d.ts +3 -0
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +1 -0
- package/dist/components/starter-plugin.d.ts +1 -0
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/starter-plugin.js +5 -1
- package/dist/components/verbs/index.d.ts +2 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +2 -0
- package/dist/components/verbs/publish-artifact.d.ts +65 -0
- package/dist/components/verbs/publish-artifact.d.ts.map +1 -0
- package/dist/components/verbs/publish-artifact.js +74 -0
- package/dist/components/verbs/publish-image.d.ts +129 -0
- package/dist/components/verbs/publish-image.d.ts.map +1 -0
- package/dist/components/verbs/publish-image.js +145 -0
- package/dist/config-environments.d.ts +20 -0
- package/dist/config-environments.d.ts.map +1 -1
- package/dist/config-environments.js +12 -0
- package/dist/config.d.ts +25 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -2
- package/dist/gate-decision.d.ts +20 -2
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +30 -3
- package/dist/graph-ir.d.ts +25 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-walk.d.ts +66 -0
- package/dist/graph-walk.d.ts.map +1 -0
- package/dist/graph-walk.js +70 -0
- package/dist/import/parser.d.ts +19 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/lexicon.d.ts +94 -6
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +11 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +2 -5
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/ledger-read.d.ts +65 -0
- package/dist/lifecycle/ledger-read.d.ts.map +1 -0
- package/dist/lifecycle/ledger-read.js +160 -0
- package/dist/lifecycle/release-workstation.d.ts +7 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -1
- package/dist/lifecycle/release-workstation.js +25 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -3
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +1 -0
- package/dist/lint/discover.js +3 -1
- package/dist/lint/post-synth.d.ts +127 -1
- package/dist/lint/post-synth.d.ts.map +1 -1
- package/dist/lint/post-synth.js +84 -2
- package/dist/lint/rules/op/index.d.ts +1 -0
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +2 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts +32 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts.map +1 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.js +63 -0
- package/dist/op/activities/activity-contracts.d.ts +9 -6
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +5 -2
- package/dist/op/activities/index.d.ts +2 -2
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/index.js +1 -1
- package/dist/op/activities/review-agent.d.ts +90 -4
- package/dist/op/activities/review-agent.d.ts.map +1 -1
- package/dist/op/activities/review-agent.js +217 -19
- package/dist/op/activities/work-evidence.d.ts +8 -1
- package/dist/op/activities/work-evidence.d.ts.map +1 -1
- package/dist/op/activities/work-evidence.js +1 -0
- package/dist/op/builders.d.ts +9 -5
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +9 -5
- package/dist/op/composites/apply-op.d.ts +29 -2
- package/dist/op/composites/apply-op.d.ts.map +1 -1
- package/dist/op/composites/apply-op.js +20 -1
- package/dist/op/gate-approval-base.d.ts +25 -0
- package/dist/op/gate-approval-base.d.ts.map +1 -0
- package/dist/op/gate-approval-base.js +71 -0
- package/dist/op/gate-approval.d.ts +18 -9
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-approval.js +13 -31
- package/dist/op/gate-name.d.ts +13 -0
- package/dist/op/gate-name.d.ts.map +1 -1
- package/dist/op/gate-name.js +14 -1
- package/dist/op/gate-quorum.d.ts +100 -3
- package/dist/op/gate-quorum.d.ts.map +1 -1
- package/dist/op/gate-quorum.js +108 -6
- package/dist/op/gate-review.d.ts +9 -0
- package/dist/op/gate-review.d.ts.map +1 -1
- package/dist/op/gate-review.js +13 -0
- package/dist/op/gate.d.ts +47 -5
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +25 -4
- package/dist/op/index.d.ts +3 -3
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +45 -3
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +68 -7
- package/dist/op/op-waves-run.d.ts +26 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +259 -13
- package/dist/op/op-waves.d.ts +72 -5
- package/dist/op/op-waves.d.ts.map +1 -1
- package/dist/op/op-waves.js +110 -15
- package/dist/op/runtime.d.ts +11 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/schedule-overdue.d.ts +16 -0
- package/dist/op/schedule-overdue.d.ts.map +1 -1
- package/dist/op/schedule-overdue.js +36 -0
- package/dist/op/stage-hooks.d.ts +9 -2
- package/dist/op/stage-hooks.d.ts.map +1 -1
- package/dist/op/stage-hooks.js +7 -5
- package/dist/op/workspace-run-env.d.ts +22 -0
- package/dist/op/workspace-run-env.d.ts.map +1 -0
- package/dist/op/workspace-run-env.js +21 -0
- package/dist/pr-forge.d.ts +24 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +47 -0
- package/dist/pr-loop.d.ts +10 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +4 -0
- package/dist/pr-migrations.d.ts +62 -0
- package/dist/pr-migrations.d.ts.map +1 -0
- package/dist/pr-migrations.js +50 -0
- package/dist/pr-post.d.ts +42 -0
- package/dist/pr-post.d.ts.map +1 -1
- package/dist/pr-post.js +68 -2
- package/dist/read-filter.d.ts +65 -0
- package/dist/read-filter.d.ts.map +1 -0
- package/dist/read-filter.js +179 -0
- package/dist/run-event.d.ts +1 -1
- package/dist/run-event.d.ts.map +1 -1
- package/dist/terraform/carve.d.ts +24 -3
- package/dist/terraform/carve.d.ts.map +1 -1
- package/dist/terraform/carve.js +32 -14
- package/dist/terraform/cuts.d.ts +97 -0
- package/dist/terraform/cuts.d.ts.map +1 -0
- package/dist/terraform/cuts.js +138 -0
- package/dist/terraform/folds.d.ts +26 -0
- package/dist/terraform/folds.d.ts.map +1 -0
- package/dist/terraform/folds.js +38 -0
- package/dist/terraform/graph.d.ts.map +1 -1
- package/dist/terraform/graph.js +10 -0
- package/dist/terraform/reach.d.ts +140 -0
- package/dist/terraform/reach.d.ts.map +1 -0
- package/dist/terraform/reach.js +170 -0
- package/dist/terraform/score.d.ts +14 -0
- package/dist/terraform/score.d.ts.map +1 -1
- package/dist/terraform/score.js +14 -31
- package/dist/terraform/state.d.ts.map +1 -1
- package/dist/terraform/state.js +4 -2
- package/dist/terraform/types.d.ts +8 -0
- package/dist/terraform/types.d.ts.map +1 -1
- package/dist/wave-blocked.d.ts +10 -1
- package/dist/wave-blocked.d.ts.map +1 -1
- package/dist/wave-blocked.js +31 -3
- package/dist/wave-runtime.mjs +264 -254
- package/dist/workspace/check.schema.json +13 -2
- package/dist/workspace/checks/ci-branch.d.ts +44 -0
- package/dist/workspace/checks/ci-branch.d.ts.map +1 -0
- package/dist/workspace/checks/ci-branch.js +133 -0
- package/dist/workspace/checks/gate-approval.d.ts +58 -0
- package/dist/workspace/checks/gate-approval.d.ts.map +1 -0
- package/dist/workspace/checks/gate-approval.js +103 -0
- package/dist/workspace/checks/links.d.ts +3 -0
- package/dist/workspace/checks/links.d.ts.map +1 -1
- package/dist/workspace/checks/links.js +12 -1
- package/dist/workspace/checks/org.d.ts +48 -0
- package/dist/workspace/checks/org.d.ts.map +1 -0
- package/dist/workspace/checks/org.js +156 -0
- package/dist/workspace/checks.d.ts +12 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +63 -7
- package/dist/workspace/ci-branches.d.ts +16 -0
- package/dist/workspace/ci-branches.d.ts.map +1 -1
- package/dist/workspace/ci-branches.js +27 -0
- package/dist/workspace/ci-green-cli.js +7 -7
- package/dist/workspace/ci-green-workflow.d.ts +1 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +13 -8
- package/dist/workspace/ci-green.d.ts +14 -0
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +44 -11
- package/dist/workspace/ci-run.d.ts +9 -1
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +67 -6
- package/dist/workspace/ci-serve.d.ts +9 -0
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +114 -76
- package/dist/workspace/compose-graph.d.ts +14 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/composites.d.ts +4 -1
- package/dist/workspace/composites.d.ts.map +1 -1
- package/dist/workspace/composites.js +5 -2
- package/dist/workspace/composites.schema.json +22 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/dist/workspace/cross-root-lint.d.ts +56 -0
- package/dist/workspace/cross-root-lint.d.ts.map +1 -0
- package/dist/workspace/cross-root-lint.js +111 -0
- package/dist/workspace/dbt-models-reader.d.ts +44 -0
- package/dist/workspace/dbt-models-reader.d.ts.map +1 -0
- package/dist/workspace/dbt-models-reader.js +356 -0
- package/dist/workspace/dbt-project-common.d.ts +40 -0
- package/dist/workspace/dbt-project-common.d.ts.map +1 -0
- package/dist/workspace/dbt-project-common.js +106 -0
- package/dist/workspace/dbt-project-reader.d.ts +4 -3
- package/dist/workspace/dbt-project-reader.d.ts.map +1 -1
- package/dist/workspace/dbt-project-reader.js +14 -108
- package/dist/workspace/decision-rank.d.ts +26 -0
- package/dist/workspace/decision-rank.d.ts.map +1 -0
- package/dist/workspace/decision-rank.js +16 -0
- package/dist/workspace/declaration.d.ts +50 -2
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +57 -11
- package/dist/workspace/declaration.schema.json +166 -24
- package/dist/workspace/environments.d.ts +26 -2
- package/dist/workspace/environments.d.ts.map +1 -1
- package/dist/workspace/environments.js +26 -2
- package/dist/workspace/exit-cli.d.ts +44 -0
- package/dist/workspace/exit-cli.d.ts.map +1 -0
- package/dist/workspace/exit-cli.js +198 -0
- package/dist/workspace/exit.d.ts +159 -0
- package/dist/workspace/exit.d.ts.map +1 -0
- package/dist/workspace/exit.js +480 -0
- package/dist/workspace/exit.schema.json +257 -0
- package/dist/workspace/flyway-dir.d.ts +39 -0
- package/dist/workspace/flyway-dir.d.ts.map +1 -0
- package/dist/workspace/flyway-dir.js +104 -0
- package/dist/workspace/flyway-layout.d.ts +96 -0
- package/dist/workspace/flyway-layout.d.ts.map +1 -0
- package/dist/workspace/flyway-layout.js +308 -0
- package/dist/workspace/graph-cache.d.ts +3 -1
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +12 -1
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +26 -8
- package/dist/workspace/graph.schema.json +34 -0
- package/dist/workspace/import-fetch.d.ts +38 -0
- package/dist/workspace/import-fetch.d.ts.map +1 -0
- package/dist/workspace/import-fetch.js +99 -0
- package/dist/workspace/import-init.d.ts +26 -0
- package/dist/workspace/import-init.d.ts.map +1 -0
- package/dist/workspace/import-init.js +130 -0
- package/dist/workspace/import-source.d.ts +147 -0
- package/dist/workspace/import-source.d.ts.map +1 -0
- package/dist/workspace/import-source.js +370 -0
- package/dist/workspace/init.d.ts +4 -0
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/init.js +70 -3
- package/dist/workspace/intent.d.ts +2 -3
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +5 -9
- package/dist/workspace/kind-link-readers.d.ts +59 -2
- package/dist/workspace/kind-link-readers.d.ts.map +1 -1
- package/dist/workspace/kind-link-readers.js +17 -1
- package/dist/workspace/kind-readers.d.ts +6 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +18 -0
- package/dist/workspace/kinds.d.ts +90 -3
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +161 -7
- package/dist/workspace/ledger.schema.json +158 -0
- package/dist/workspace/lexicon-outputs.d.ts +20 -1
- package/dist/workspace/lexicon-outputs.d.ts.map +1 -1
- package/dist/workspace/lexicon-outputs.js +102 -10
- package/dist/workspace/lineage-check.d.ts +3 -0
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-check.js +23 -4
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.js +13 -4
- package/dist/workspace/links.d.ts +8 -1
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/links.js +25 -1
- package/dist/workspace/ls.d.ts +8 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +7 -1
- package/dist/workspace/ls.schema.json +7 -0
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +54 -5
- package/dist/workspace/migrate-links.d.ts +45 -0
- package/dist/workspace/migrate-links.d.ts.map +1 -0
- package/dist/workspace/migrate-links.js +100 -0
- package/dist/workspace/migration-dirs.d.ts +74 -0
- package/dist/workspace/migration-dirs.d.ts.map +1 -0
- package/dist/workspace/migration-dirs.js +254 -0
- package/dist/workspace/new-migrations.d.ts +47 -0
- package/dist/workspace/new-migrations.d.ts.map +1 -0
- package/dist/workspace/new-migrations.js +91 -0
- package/dist/workspace/pr-report.schema.json +46 -0
- package/dist/workspace/promote.d.ts +96 -0
- package/dist/workspace/promote.d.ts.map +1 -0
- package/dist/workspace/promote.js +263 -0
- package/dist/workspace/reason-codes.d.ts +21 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +25 -0
- package/dist/workspace/records-cli.d.ts +11 -0
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-cli.js +57 -5
- package/dist/workspace/records.schema.json +5 -0
- package/dist/workspace/release-candidates.d.ts +2 -0
- package/dist/workspace/release-candidates.d.ts.map +1 -1
- package/dist/workspace/release-candidates.js +5 -2
- package/dist/workspace/release-train.d.ts +53 -0
- package/dist/workspace/release-train.d.ts.map +1 -0
- package/dist/workspace/release-train.js +134 -0
- package/dist/workspace/release-workflow.d.ts.map +1 -1
- package/dist/workspace/release-workflow.js +4 -3
- package/dist/workspace/repo-ref.d.ts +45 -0
- package/dist/workspace/repo-ref.d.ts.map +1 -0
- package/dist/workspace/repo-ref.js +114 -0
- package/dist/workspace/run-event.schema.json +2 -2
- package/dist/workspace/runs-cli.d.ts +9 -0
- package/dist/workspace/runs-cli.d.ts.map +1 -1
- package/dist/workspace/runs-cli.js +48 -3
- package/dist/workspace/runs.schema.json +7 -0
- package/dist/workspace/search-contract.d.ts +1 -1
- package/dist/workspace/search-contract.d.ts.map +1 -1
- package/dist/workspace/status-decisions.d.ts +37 -0
- package/dist/workspace/status-decisions.d.ts.map +1 -0
- package/dist/workspace/status-decisions.js +147 -0
- package/dist/workspace/status-gates.d.ts +9 -0
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status.d.ts +4 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +14 -2
- package/dist/workspace/status.schema.json +6 -0
- package/dist/workspace/work-cli.d.ts.map +1 -1
- package/dist/workspace/work-cli.js +5 -3
- package/dist/workspace/work-evidence-ops.d.ts +83 -0
- package/dist/workspace/work-evidence-ops.d.ts.map +1 -0
- package/dist/workspace/work-evidence-ops.js +169 -0
- package/dist/workspace/work-evidence.d.ts +12 -2
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/work-evidence.js +21 -3
- package/dist/workspace/work-evidence.schema.json +49 -2
- package/dist/workspace/workspace-gates.d.ts +110 -0
- package/dist/workspace/workspace-gates.d.ts.map +1 -0
- package/dist/workspace/workspace-gates.js +140 -0
- package/dist/workspace/workspace-kinds.schema.json +108 -10
- package/dist/workspace/workspace-ledger.d.ts +76 -0
- package/dist/workspace/workspace-ledger.d.ts.map +1 -0
- package/dist/workspace/workspace-ledger.js +91 -0
- package/dist/workspace/workspace-run.d.ts +112 -0
- package/dist/workspace/workspace-run.d.ts.map +1 -0
- package/dist/workspace/workspace-run.js +432 -0
- package/package.json +1 -1
- package/src/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/src/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/src/__golden__/wave-loop/op-cost-member.json +13 -0
- package/src/__golden__/wave-loop/op-denied-source.json +16 -0
- package/src/__golden__/wave-loop/op-denied.json +16 -0
- package/src/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/src/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/src/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/src/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/src/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/src/__golden__/wave-loop/op-held-on.json +16 -0
- package/src/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/src/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/src/__golden__/wave-loop/op-overridden.json +16 -0
- package/src/__golden__/wave-loop/op-per-run.json +20 -0
- package/src/__golden__/wave-loop/op-point.json +13 -0
- package/src/__golden__/wave-loop/op-pr-review.json +10 -0
- package/src/__golden__/wave-loop/op-sealed.json +10 -0
- package/src/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/src/__golden__/wave-loop/op-spend.json +10 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/src/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/src/__golden__/wave-loop/op-wide.json +39 -0
- package/src/action-pins.test.ts +78 -0
- package/src/action-pins.ts +92 -0
- package/src/cli/commands/carve-score-once.test.ts +99 -0
- package/src/cli/commands/carve.ts +37 -6
- package/src/cli/commands/check-lexicon.test.ts +2 -2
- package/src/cli/commands/import-report.ts +71 -0
- package/src/cli/commands/import.ts +33 -3
- package/src/cli/commands/migrate-dialect.test.ts +145 -0
- package/src/cli/commands/migrate.ts +132 -11
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +4 -4
- package/src/cli/handlers/approve.ts +33 -4
- package/src/cli/handlers/build.ts +7 -1
- package/src/cli/handlers/graph-reader.test.ts +31 -0
- package/src/cli/handlers/graph-reader.ts +51 -0
- package/src/cli/handlers/graph.ts +14 -0
- package/src/cli/handlers/ledger.ts +54 -0
- package/src/cli/handlers/migrate.ts +21 -12
- package/src/cli/handlers/misc.ts +10 -1
- package/src/cli/handlers/pr-env.ts +2 -2
- package/src/cli/handlers/pr.ts +176 -37
- package/src/cli/handlers/query.ts +16 -4
- package/src/cli/handlers/release.ts +6 -3
- package/src/cli/handlers/search.ts +13 -34
- package/src/cli/main.test.ts +17 -0
- package/src/cli/main.ts +87 -14
- package/src/cli/parse-args.ts +35 -2
- package/src/cli/registry.ts +22 -4
- package/src/components/builders.ts +8 -0
- package/src/components/capability-plugin-loader.ts +13 -1
- package/src/components/capability-plugin.ts +16 -0
- package/src/components/pr-env-run-bundle.test.ts +1 -0
- package/src/components/pr-hooks.test.ts +73 -5
- package/src/components/pr-hooks.ts +95 -5
- package/src/components/pr-pipeline.ts +64 -16
- package/src/components/pr-policy.test.ts +64 -1
- package/src/components/pr-policy.ts +53 -0
- package/src/components/pr-run.ts +4 -0
- package/src/components/registry.test.ts +1 -1
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +2 -0
- package/src/components/verbs/publish-artifact.test.ts +60 -0
- package/src/components/verbs/publish-artifact.ts +122 -0
- package/src/components/verbs/publish-image.test.ts +101 -0
- package/src/components/verbs/publish-image.ts +265 -0
- package/src/config-environments.ts +28 -1
- package/src/config.ts +24 -1
- package/src/gate-decision-bundle.test.ts +5 -2
- package/src/gate-decision-identity.test.ts +20 -0
- package/src/gate-decision.ts +46 -3
- package/src/graph-ir.ts +27 -0
- package/src/graph-walk.test.ts +44 -0
- package/src/graph-walk.ts +102 -0
- package/src/import/parser.ts +20 -0
- package/src/lexicon.ts +98 -6
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lifecycle/git.ts +2 -2
- package/src/lifecycle/ledger-read.test.ts +107 -0
- package/src/lifecycle/ledger-read.ts +195 -0
- package/src/lifecycle/release-workstation.ts +24 -0
- package/src/lifecycle/run-ledger.ts +5 -2
- package/src/lint/cross-root.test.ts +122 -0
- package/src/lint/discover.ts +3 -1
- package/src/lint/post-synth.ts +212 -2
- package/src/lint/rules/op/index.ts +2 -0
- package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
- package/src/op/activities/activity-contracts.ts +5 -2
- package/src/op/activities/index.ts +2 -2
- package/src/op/activities/review-agent.test.ts +221 -4
- package/src/op/activities/review-agent.ts +265 -22
- package/src/op/activities/work-evidence.ts +9 -1
- package/src/op/builders.ts +9 -5
- package/src/op/composites/apply-op.test.ts +108 -0
- package/src/op/composites/apply-op.ts +37 -2
- package/src/op/gate-approval-at-base.test.ts +97 -0
- package/src/op/gate-approval-base.ts +72 -0
- package/src/op/gate-approval.test.ts +6 -1
- package/src/op/gate-approval.ts +22 -27
- package/src/op/gate-name.ts +16 -1
- package/src/op/gate-quorum-at-base.test.ts +211 -0
- package/src/op/gate-quorum.ts +156 -8
- package/src/op/gate-review.ts +14 -0
- package/src/op/gate.ts +69 -9
- package/src/op/index.ts +3 -2
- package/src/op/local-executor.ts +91 -11
- package/src/op/op-waves-depends-on.test.ts +81 -0
- package/src/op/op-waves-hook-targets.test.ts +4 -2
- package/src/op/op-waves-quorum-product.test.ts +158 -0
- package/src/op/op-waves-run.ts +288 -14
- package/src/op/op-waves.ts +143 -14
- package/src/op/runtime.ts +8 -0
- package/src/op/schedule-overdue.ts +33 -0
- package/src/op/stage-hooks.ts +13 -5
- package/src/op/workspace-run-env.ts +29 -0
- package/src/pr-forge-bundle.test.ts +2 -2
- package/src/pr-forge.test.ts +47 -0
- package/src/pr-forge.ts +68 -0
- package/src/pr-loop-bundle.test.ts +3 -2
- package/src/pr-loop.test.ts +52 -0
- package/src/pr-loop.ts +12 -0
- package/src/pr-migrations.ts +97 -0
- package/src/pr-post-open.e2e.test.ts +36 -0
- package/src/pr-post.test.ts +102 -3
- package/src/pr-post.ts +90 -2
- package/src/read-filter.test.ts +54 -0
- package/src/read-filter.ts +193 -0
- package/src/run-event.ts +1 -1
- package/src/stage-hooks-bundle.test.ts +1 -0
- package/src/terraform/carve.ts +52 -15
- package/src/terraform/cuts.test.ts +173 -0
- package/src/terraform/cuts.ts +188 -0
- package/src/terraform/folds.ts +44 -0
- package/src/terraform/graph.ts +9 -0
- package/src/terraform/radius.test.ts +90 -0
- package/src/terraform/reach.test.ts +146 -0
- package/src/terraform/reach.ts +247 -0
- package/src/terraform/score.ts +27 -29
- package/src/terraform/state.ts +3 -1
- package/src/terraform/types.ts +8 -0
- package/src/wave-blocked.ts +28 -3
- package/src/wave-loop-golden.test.ts +4 -3
- package/src/workspace/__fixtures__/import/spacelift.json +9 -0
- package/src/workspace/__fixtures__/import/tfc.json +13 -0
- package/src/workspace/behold-kinds.test.ts +2 -1
- package/src/workspace/check-contract.test.ts +8 -6
- package/src/workspace/check.schema.json +13 -2
- package/src/workspace/checks/ci-branch.test.ts +128 -0
- package/src/workspace/checks/ci-branch.ts +141 -0
- package/src/workspace/checks/gate-approval.test.ts +77 -0
- package/src/workspace/checks/gate-approval.ts +121 -0
- package/src/workspace/checks/links.ts +12 -1
- package/src/workspace/checks/org.ts +169 -0
- package/src/workspace/checks.ts +68 -7
- package/src/workspace/ci-branches.ts +31 -0
- package/src/workspace/ci-green-branches.test.ts +153 -0
- package/src/workspace/ci-green-cli.ts +7 -7
- package/src/workspace/ci-green-workflow.test.ts +4 -3
- package/src/workspace/ci-green-workflow.ts +13 -9
- package/src/workspace/ci-green.ts +49 -12
- package/src/workspace/ci-run.test.ts +72 -1
- package/src/workspace/ci-run.ts +68 -8
- package/src/workspace/ci-serve.test.ts +95 -0
- package/src/workspace/ci-serve.ts +106 -65
- package/src/workspace/component-environments.test.ts +25 -2
- package/src/workspace/compose-graph.ts +9 -2
- package/src/workspace/composites.schema.json +22 -0
- package/src/workspace/composites.test.ts +39 -8
- package/src/workspace/composites.ts +6 -2
- package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/src/workspace/cross-root-lint.test.ts +90 -0
- package/src/workspace/cross-root-lint.ts +126 -0
- package/src/workspace/dbt-kind.test.ts +3 -2
- package/src/workspace/dbt-models-reader.ts +362 -0
- package/src/workspace/dbt-models.test.ts +248 -0
- package/src/workspace/dbt-project-common.ts +113 -0
- package/src/workspace/dbt-project-reader.ts +29 -112
- package/src/workspace/decision-rank.ts +40 -0
- package/src/workspace/declaration.schema.json +166 -24
- package/src/workspace/declaration.ts +101 -15
- package/src/workspace/environments.ts +40 -4
- package/src/workspace/exit-cli.ts +219 -0
- package/src/workspace/exit.schema.json +257 -0
- package/src/workspace/exit.test.ts +185 -0
- package/src/workspace/exit.ts +560 -0
- package/src/workspace/flyway-dir.ts +113 -0
- package/src/workspace/flyway-layout.ts +337 -0
- package/src/workspace/graph-cache.ts +12 -2
- package/src/workspace/graph-cli.ts +25 -10
- package/src/workspace/graph-contract.test.ts +4 -2
- package/src/workspace/graph.schema.json +34 -0
- package/src/workspace/identity.test.ts +29 -2
- package/src/workspace/import-fetch.ts +151 -0
- package/src/workspace/import-init.ts +147 -0
- package/src/workspace/import-source.test.ts +183 -0
- package/src/workspace/import-source.ts +462 -0
- package/src/workspace/init.test.ts +55 -1
- package/src/workspace/init.ts +66 -4
- package/src/workspace/intent.ts +6 -14
- package/src/workspace/kind-link-readers.ts +68 -3
- package/src/workspace/kind-readers.test.ts +36 -0
- package/src/workspace/kind-readers.ts +18 -1
- package/src/workspace/kinds.test.ts +35 -7
- package/src/workspace/kinds.ts +212 -11
- package/src/workspace/ledger.schema.json +158 -0
- package/src/workspace/lexicon-outputs.ts +132 -13
- package/src/workspace/lineage-check.ts +30 -7
- package/src/workspace/lineage-upgrade.test.ts +20 -0
- package/src/workspace/lineage-upgrade.ts +16 -7
- package/src/workspace/links.ts +24 -1
- package/src/workspace/ls-contract.test.ts +1 -1
- package/src/workspace/ls.schema.json +7 -0
- package/src/workspace/ls.ts +10 -1
- package/src/workspace/member-commands.ts +60 -2
- package/src/workspace/member-file-schema.test.ts +124 -0
- package/src/workspace/migrate-links.test.ts +99 -0
- package/src/workspace/migrate-links.ts +108 -0
- package/src/workspace/migration-dirs.test.ts +272 -0
- package/src/workspace/migration-dirs.ts +267 -0
- package/src/workspace/new-migrations.test.ts +98 -0
- package/src/workspace/new-migrations.ts +109 -0
- package/src/workspace/org-scope.test.ts +238 -0
- package/src/workspace/pr-report.schema.json +46 -0
- package/src/workspace/promote.test.ts +114 -0
- package/src/workspace/promote.ts +302 -0
- package/src/workspace/reason-codes.test.ts +10 -1
- package/src/workspace/reason-codes.ts +25 -0
- package/src/workspace/records-cli.ts +58 -5
- package/src/workspace/records.schema.json +5 -0
- package/src/workspace/release-candidates.ts +7 -2
- package/src/workspace/release-train.ts +157 -0
- package/src/workspace/release-workflow.ts +4 -3
- package/src/workspace/repo-ref.ts +113 -0
- package/src/workspace/run-event.schema.json +2 -2
- package/src/workspace/runs-cli.ts +48 -4
- package/src/workspace/runs.schema.json +7 -0
- package/src/workspace/status-contract.test.ts +46 -1
- package/src/workspace/status-decisions.test.ts +100 -0
- package/src/workspace/status-decisions.ts +151 -0
- package/src/workspace/status-gates.ts +9 -0
- package/src/workspace/status.schema.json +6 -0
- package/src/workspace/status.ts +17 -3
- package/src/workspace/where-filters.test.ts +39 -0
- package/src/workspace/work-cli.ts +5 -3
- package/src/workspace/work-evidence-ops.test.ts +176 -0
- package/src/workspace/work-evidence-ops.ts +189 -0
- package/src/workspace/work-evidence.schema.json +49 -2
- package/src/workspace/work-evidence.ts +22 -3
- package/src/workspace/workspace-gates.ts +200 -0
- package/src/workspace/workspace-kinds.schema.json +108 -10
- package/src/workspace/workspace-ledger.ts +130 -0
- package/src/workspace/workspace-run.test.ts +322 -0
- package/src/workspace/workspace-run.ts +461 -0
|
@@ -19,6 +19,16 @@
|
|
|
19
19
|
* `resolveLinks` (`./links.ts`) resolves the links beside the declared ones,
|
|
20
20
|
* with origin `kind-reader`; WSP093 and WSP094 name the reader's file and line,
|
|
21
21
|
* and WSP099 reports the gaps.
|
|
22
|
+
*
|
|
23
|
+
* A migration directory's reader (#4400) lists its migrations in order, in
|
|
24
|
+
* {@link KindLinkRead.migrations}, and returns no links: what the migrations
|
|
25
|
+
* produce comes from a replay.
|
|
26
|
+
*
|
|
27
|
+
* A reader may also return outputs (#3935): names the member's files state,
|
|
28
|
+
* which other members link to. A dbt project's models are outputs, read the
|
|
29
|
+
* same way as its sources. `resolveLinks` adds them to the member's handles
|
|
30
|
+
* (`withReaderOutputs`), so a link to one resolves, and goes missing when the
|
|
31
|
+
* file that states it is gone.
|
|
22
32
|
*/
|
|
23
33
|
import type { Declaration, Member } from "./declaration.js";
|
|
24
34
|
import { type FieldValue, type KindLinkReaderName, type KindRegistry } from "./kinds.js";
|
|
@@ -50,17 +60,64 @@ export interface KindReadGap {
|
|
|
50
60
|
file: string;
|
|
51
61
|
line: number;
|
|
52
62
|
message: string;
|
|
63
|
+
/**
|
|
64
|
+
* True when the gap leaves an output out of {@link KindLinkRead.outputs}
|
|
65
|
+
* (#3935): a link to a name the member does not list is then unresolved,
|
|
66
|
+
* not missing.
|
|
67
|
+
*/
|
|
68
|
+
outputs?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/** One output a reader found in the member's files: a name other members may link to. */
|
|
71
|
+
export interface KindReadOutput {
|
|
72
|
+
name: string;
|
|
73
|
+
/** The file that states it, relative to the workspace root. */
|
|
74
|
+
file: string;
|
|
75
|
+
/** Its line, from 1. */
|
|
76
|
+
line: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* One migration a migration-directory reader found (#4400), in the order the
|
|
80
|
+
* tool applies it. The reader lists files and never runs the tool, so the
|
|
81
|
+
* schema the migrations produce comes from a replay, not from here.
|
|
82
|
+
*/
|
|
83
|
+
export interface KindReadMigration {
|
|
84
|
+
/** 1-based position in the order the tool applies the migrations. */
|
|
85
|
+
position: number;
|
|
86
|
+
/** The version as the file name writes it, such as `00002`, `20240101120000` or `1.2`. */
|
|
87
|
+
version: string;
|
|
88
|
+
name: string;
|
|
89
|
+
/** `versioned` runs once; `repeatable` runs again when its checksum changes (Flyway); `baseline` and `undo` are Flyway's B and U files. */
|
|
90
|
+
type: "versioned" | "repeatable" | "baseline" | "undo";
|
|
91
|
+
/** The file with the up statements, relative to the workspace root. */
|
|
92
|
+
file: string;
|
|
93
|
+
/** The line the up statements start on, from 1. */
|
|
94
|
+
line: number;
|
|
95
|
+
/** The file that undoes it, or true when the same file does (goose), or false when none does. */
|
|
96
|
+
down: string | boolean;
|
|
97
|
+
/** The SQL dialect the migration is written in: the member's `dialect` field, or what the directory's own configuration names. */
|
|
98
|
+
dialect: string;
|
|
99
|
+
/** False when the file asks to run outside a transaction (`-- +goose NO TRANSACTION`). */
|
|
100
|
+
transaction?: boolean;
|
|
53
101
|
}
|
|
54
102
|
export interface KindLinkRead {
|
|
55
|
-
/** The reader that ran. */
|
|
56
|
-
reader: KindLinkReaderName
|
|
103
|
+
/** The reader that ran: a kind's reader, or `lexicon <name>` for links a member's lexicon read from its declarations (#4397). */
|
|
104
|
+
reader: KindLinkReaderName | `lexicon${string}`;
|
|
57
105
|
links: KindReadLink[];
|
|
58
106
|
gaps: KindReadGap[];
|
|
107
|
+
/**
|
|
108
|
+
* The outputs the member exposes that its files state (#3935), beside the
|
|
109
|
+
* ones its kind lists. `resolveLinks` adds them to the member's handles, so
|
|
110
|
+
* another member can link to them. A gap flagged `outputs` makes the list
|
|
111
|
+
* incomplete.
|
|
112
|
+
*/
|
|
113
|
+
outputs?: KindReadOutput[];
|
|
59
114
|
/**
|
|
60
115
|
* The member field that names the producer, for messages that ask the
|
|
61
116
|
* author to set it when the files don't say (`sqlMember` for dbt).
|
|
62
117
|
*/
|
|
63
118
|
producerField?: string;
|
|
119
|
+
/** The migrations of a migration directory (#4400), in the order they apply; unset for other readers. */
|
|
120
|
+
migrations?: KindReadMigration[];
|
|
64
121
|
}
|
|
65
122
|
/** What a reader gets: the member, its directory and resolved fields, and the tree read. */
|
|
66
123
|
export interface KindReaderInput {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kind-link-readers.d.ts","sourceRoot":"","sources":["../../src/workspace/kind-link-readers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kind-link-readers.d.ts","sourceRoot":"","sources":["../../src/workspace/kind-link-readers.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,12 +19,28 @@
|
|
|
19
19
|
* `resolveLinks` (`./links.ts`) resolves the links beside the declared ones,
|
|
20
20
|
* with origin `kind-reader`; WSP093 and WSP094 name the reader's file and line,
|
|
21
21
|
* and WSP099 reports the gaps.
|
|
22
|
+
*
|
|
23
|
+
* A migration directory's reader (#4400) lists its migrations in order, in
|
|
24
|
+
* {@link KindLinkRead.migrations}, and returns no links: what the migrations
|
|
25
|
+
* produce comes from a replay.
|
|
26
|
+
*
|
|
27
|
+
* A reader may also return outputs (#3935): names the member's files state,
|
|
28
|
+
* which other members link to. A dbt project's models are outputs, read the
|
|
29
|
+
* same way as its sources. `resolveLinks` adds them to the member's handles
|
|
30
|
+
* (`withReaderOutputs`), so a link to one resolves, and goes missing when the
|
|
31
|
+
* file that states it is gone.
|
|
22
32
|
*/
|
|
23
33
|
import { resolveMemberFields } from "./kinds.js";
|
|
24
34
|
import { readDbtProject } from "./dbt-project-reader.js";
|
|
35
|
+
import { readClickHouseMigrationsDir, readGolangMigrateDir, readGooseDir } from "./migration-dirs.js";
|
|
36
|
+
import { readFlywayDir } from "./flyway-dir.js";
|
|
25
37
|
/** Every reader chant ships, by the name a kinds file uses. */
|
|
26
38
|
export const LINK_READERS = {
|
|
27
39
|
"dbt-project": readDbtProject,
|
|
40
|
+
"goose-dir": readGooseDir,
|
|
41
|
+
"golang-migrate-dir": readGolangMigrateDir,
|
|
42
|
+
"clickhouse-migrations-dir": readClickHouseMigrationsDir,
|
|
43
|
+
"flyway-dir": readFlywayDir,
|
|
28
44
|
};
|
|
29
45
|
/**
|
|
30
46
|
* Run the link reader of every member whose kind has one. A member whose
|
|
@@ -46,7 +62,7 @@ export function readKindLinks(declaration, tree, kinds) {
|
|
|
46
62
|
out.set(m.name, LINK_READERS[kind.reader]({ member: m, dir, fields, tree }));
|
|
47
63
|
}
|
|
48
64
|
catch (err) {
|
|
49
|
-
out.set(m.name, { reader: kind.reader, links: [], gaps: [{ file: dir || ".", line: 1, message: `the ${kind.reader} reader failed: ${err.message}
|
|
65
|
+
out.set(m.name, { reader: kind.reader, links: [], gaps: [{ file: dir || ".", line: 1, message: `the ${kind.reader} reader failed: ${err.message}`, outputs: true }] });
|
|
50
66
|
}
|
|
51
67
|
}
|
|
52
68
|
return out;
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
* package, found from the workspace root as the kind's pin was. The lexicon
|
|
21
21
|
* chant loads is then the one the declaration pins.
|
|
22
22
|
*
|
|
23
|
+
* A kind whose `graph` names a `reader` module instead (#4413) gets a
|
|
24
|
+
* project with `lexicons: []` and `graph.reader` set to the module, which the
|
|
25
|
+
* supplying package ships, so any package can supply one. The member's own
|
|
26
|
+
* `chant graph` loads it there, under the member's toolchain, and prints the
|
|
27
|
+
* IR it returns. There is no lexicon to link.
|
|
28
|
+
*
|
|
23
29
|
* Nothing is written under the workspace, and the projects are removed when
|
|
24
30
|
* the read ends. A lexicon that can't be found where its pin says fails the
|
|
25
31
|
* member with `command-failed` and says what to install; the other members
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kind-readers.d.ts","sourceRoot":"","sources":["../../src/workspace/kind-readers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kind-readers.d.ts","sourceRoot":"","sources":["../../src/workspace/kind-readers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAW,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,gEAAgE;IAChE,OAAO,IAAI,IAAI,CAAC;CACjB;AAoCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CA8ClF"}
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
* package, found from the workspace root as the kind's pin was. The lexicon
|
|
21
21
|
* chant loads is then the one the declaration pins.
|
|
22
22
|
*
|
|
23
|
+
* A kind whose `graph` names a `reader` module instead (#4413) gets a
|
|
24
|
+
* project with `lexicons: []` and `graph.reader` set to the module, which the
|
|
25
|
+
* supplying package ships, so any package can supply one. The member's own
|
|
26
|
+
* `chant graph` loads it there, under the member's toolchain, and prints the
|
|
27
|
+
* IR it returns. There is no lexicon to link.
|
|
28
|
+
*
|
|
23
29
|
* Nothing is written under the workspace, and the projects are removed when
|
|
24
30
|
* the read ends. A lexicon that can't be found where its pin says fails the
|
|
25
31
|
* member with `command-failed` and says what to install; the other members
|
|
@@ -47,6 +53,8 @@ function real(path) {
|
|
|
47
53
|
/** Why a unit's lexicon can't be loaded from `root`, or the `node_modules` to link. */
|
|
48
54
|
function lexiconModules(unit, root) {
|
|
49
55
|
const reader = unit.reader;
|
|
56
|
+
if (!reader.lexicon)
|
|
57
|
+
return { message: `kind ${unit.kind} names no lexicon` };
|
|
50
58
|
const name = lexiconPackageName(reader.lexicon);
|
|
51
59
|
const installed = findInstalledPackage(name, root);
|
|
52
60
|
if (!installed) {
|
|
@@ -80,6 +88,16 @@ export function prepareKindReaders(plan, root) {
|
|
|
80
88
|
group.units = group.units.filter((unit) => {
|
|
81
89
|
if (!unit.reader)
|
|
82
90
|
return true;
|
|
91
|
+
if (unit.reader.readerFile) {
|
|
92
|
+
// A graph reader module (#4413): no lexicon and no node_modules link. The module sits in the pinned package and resolves its own imports from there.
|
|
93
|
+
scratch ?? (scratch = mkdtempSync(join(tmpdir(), "chant-ws-reader-")));
|
|
94
|
+
const project = join(scratch, unit.id);
|
|
95
|
+
mkdirSync(project, { recursive: true });
|
|
96
|
+
const config = substituteGraphConfig(unit.reader.config, { member: unit.member, dir: unit.abs, workspace: root });
|
|
97
|
+
writeFileSync(join(project, "chant.config.json"), `${JSON.stringify({ lexicons: [], graph: { lint: "report", reader: { module: unit.reader.readerFile, config } } }, null, 2)}\n`);
|
|
98
|
+
unit.abs = project;
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
83
101
|
const found = lexiconModules(unit, root);
|
|
84
102
|
if ("message" in found) {
|
|
85
103
|
failed.push({ name: unit.member, dir: unit.dir, kind: unit.kind, reason: { code: "command-failed", message: found.message } });
|
|
@@ -24,7 +24,9 @@ export declare const KINDS_SUBPATH = "./workspace-kinds";
|
|
|
24
24
|
/**
|
|
25
25
|
* The probe a package's kind carries (#2535, #2545). It passes when any of
|
|
26
26
|
* its clauses does. A name in either clause may use `*`, which matches any
|
|
27
|
-
* run of characters in one file name, so `*.tf` is every Terraform file
|
|
27
|
+
* run of characters in one file name, so `*.tf` is every Terraform file, and
|
|
28
|
+
* `[0-9]` matches one digit (#4400), so `[0-9]*_*.sql` is a file that opens
|
|
29
|
+
* with a version number.
|
|
28
30
|
*/
|
|
29
31
|
export interface FileProbe {
|
|
30
32
|
/** A file matching one of these names sits directly in the directory. */
|
|
@@ -49,6 +51,31 @@ export interface FileProbe {
|
|
|
49
51
|
in: string[];
|
|
50
52
|
pointers: string[];
|
|
51
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* A file directly in the directory whose name matches one of `in` has a
|
|
56
|
+
* line that starts, after leading space and ignoring case, with one of
|
|
57
|
+
* `starts` (#4400). This is how a goose directory is told from any other
|
|
58
|
+
* directory of `.sql` files: its files carry `-- +goose Up`.
|
|
59
|
+
*/
|
|
60
|
+
anyLine?: {
|
|
61
|
+
in: string[];
|
|
62
|
+
starts: string[];
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* A file directly in the directory whose name matches one of `in` parses
|
|
66
|
+
* as YAML or JSON (every document of a multi-document file is read), and
|
|
67
|
+
* one document satisfies one of the `match` entries. An entry maps JSON
|
|
68
|
+
* Pointers to the values allowed there, and a document satisfies it when
|
|
69
|
+
* every pointer holds a value that matches one of its patterns. A `*` in
|
|
70
|
+
* a pattern matches any run of characters, so `["*"]` means "has a
|
|
71
|
+
* value". This is how an Argo Application, a Flux Kustomization and a
|
|
72
|
+
* CloudFormation template are found by what they say, not by their file
|
|
73
|
+
* names (#3179). A file that doesn't parse is no evidence either way.
|
|
74
|
+
*/
|
|
75
|
+
anyDocument?: {
|
|
76
|
+
in: string[];
|
|
77
|
+
match: Record<string, string[]>[];
|
|
78
|
+
};
|
|
52
79
|
}
|
|
53
80
|
/** A string, integer or boolean field a kind declares for its members (#3151). */
|
|
54
81
|
export interface ScalarKindField {
|
|
@@ -77,6 +104,10 @@ FileProbe
|
|
|
77
104
|
/** The directory holds a chant project, as {@link holdsChantProject} says (`examples`). */
|
|
78
105
|
| {
|
|
79
106
|
chantProject: true;
|
|
107
|
+
}
|
|
108
|
+
/** Nothing local: the member names another repository's workspace (`repo`, #3168). */
|
|
109
|
+
| {
|
|
110
|
+
repo: true;
|
|
80
111
|
};
|
|
81
112
|
/**
|
|
82
113
|
* Which outputs a member of a kind exposes as link targets (#2524 D6,
|
|
@@ -102,7 +133,15 @@ export type KindOutputs =
|
|
|
102
133
|
* chant writes itself. See {@link substituteGraphConfig} for the placeholders.
|
|
103
134
|
*/
|
|
104
135
|
export interface KindGraph {
|
|
105
|
-
lexicon
|
|
136
|
+
/** The lexicon that reads the member; unset when `reader` is. */
|
|
137
|
+
lexicon?: string;
|
|
138
|
+
/**
|
|
139
|
+
* A graph reader module (#4413), as the kinds file names it: a path inside
|
|
140
|
+
* the supplying package, which may be any package. Unset when `lexicon` is.
|
|
141
|
+
*/
|
|
142
|
+
reader?: string;
|
|
143
|
+
/** The reader module, absolute; set once the package directory is known. */
|
|
144
|
+
readerFile?: string;
|
|
106
145
|
config: Record<string, unknown>;
|
|
107
146
|
}
|
|
108
147
|
export interface MemberKind {
|
|
@@ -135,14 +174,41 @@ export interface MemberKind {
|
|
|
135
174
|
* entry states.
|
|
136
175
|
*/
|
|
137
176
|
reader?: KindLinkReaderName;
|
|
177
|
+
/** A file every member of the kind has, and the JSON Schema it must pass (#3672); unset, the kind checks no member file. */
|
|
178
|
+
memberFile?: KindMemberFile;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* A kind's member file (#3672): `path` in each member's directory must pass
|
|
182
|
+
* the JSON Schema at `schema` in the supplying package. `chant workspace
|
|
183
|
+
* check` reads and validates it (WSP012). The schema is read as data when the
|
|
184
|
+
* package's kinds are read, so a schema that is missing or doesn't compile is
|
|
185
|
+
* a load problem (WSP002), and `validate` is unset.
|
|
186
|
+
*/
|
|
187
|
+
export interface KindMemberFile {
|
|
188
|
+
/** The file, relative to the member's directory. */
|
|
189
|
+
path: string;
|
|
190
|
+
/** The schema, as the kinds file names it, relative to the package. */
|
|
191
|
+
schema: string;
|
|
192
|
+
/** The schema, absolute; unset until the package directory is known. */
|
|
193
|
+
schemaFile?: string;
|
|
194
|
+
/** The compiled schema; unset when it could not be read or compiled. */
|
|
195
|
+
validate?: MemberFileValidate;
|
|
138
196
|
}
|
|
197
|
+
/** A compiled member-file schema, in Ajv's shape. */
|
|
198
|
+
export type MemberFileValidate = ((data: unknown) => boolean) & {
|
|
199
|
+
errors?: {
|
|
200
|
+
instancePath: string;
|
|
201
|
+
message?: string;
|
|
202
|
+
params?: Record<string, unknown>;
|
|
203
|
+
}[] | null;
|
|
204
|
+
};
|
|
139
205
|
/**
|
|
140
206
|
* The link readers chant ships (#3932). A kind names one in its kinds file as
|
|
141
207
|
* `reader`. The readers are chant's own code, not the package's: a kinds file
|
|
142
208
|
* stays data, and chant never imports the package that supplies it. Closed:
|
|
143
209
|
* a kind naming another reader is kept without one, and the load reports it.
|
|
144
210
|
*/
|
|
145
|
-
export declare const KIND_LINK_READERS: readonly ["dbt-project"];
|
|
211
|
+
export declare const KIND_LINK_READERS: readonly ["dbt-project", "goose-dir", "golang-migrate-dir", "clickhouse-migrations-dir", "flyway-dir"];
|
|
146
212
|
export type KindLinkReaderName = (typeof KIND_LINK_READERS)[number];
|
|
147
213
|
export interface KindRegistry {
|
|
148
214
|
get(name: string): MemberKind | undefined;
|
|
@@ -153,6 +219,8 @@ export interface KindRegistry {
|
|
|
153
219
|
}
|
|
154
220
|
/** The group kind (ws-051). An entry of this kind is a group, not a member. */
|
|
155
221
|
export declare const EXAMPLES_KIND = "examples";
|
|
222
|
+
/** The member kind that names another repository's workspace by URL and pinned revision (#3168). */
|
|
223
|
+
export declare const REPO_KIND = "repo";
|
|
156
224
|
/** The data member kind that holds design artifacts (#2549, ws-062). */
|
|
157
225
|
export declare const DESIGN_KIND = "design";
|
|
158
226
|
export declare const BUILTIN_KINDS: readonly MemberKind[];
|
|
@@ -212,6 +280,25 @@ export declare function kindsExportTarget(pkg: Record<string, unknown>, subpath?
|
|
|
212
280
|
};
|
|
213
281
|
/** Read the kinds a package directory publishes. Reads files only; imports nothing. */
|
|
214
282
|
export declare function readPackageKinds(packageDir: string, source?: string): PackageKinds;
|
|
283
|
+
/**
|
|
284
|
+
* Read and compile a kind's member-file schema from `packageDir` (#3672),
|
|
285
|
+
* setting `schemaFile` and `validate`. Returns why it can't be used, or
|
|
286
|
+
* undefined. The schema is a JSON file inside the package; it is data, so
|
|
287
|
+
* nothing is imported, and a `$ref` outside the file is not followed.
|
|
288
|
+
*/
|
|
289
|
+
export declare function loadMemberFileSchema(memberFile: KindMemberFile, packageDir: string): string | undefined;
|
|
290
|
+
/** One reason a member's file fails its kind's schema (#3672): a JSON Pointer into the file, and why. */
|
|
291
|
+
export interface MemberFileProblem {
|
|
292
|
+
pointer: string;
|
|
293
|
+
message: string;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Check a member's file text against its kind's schema (#3672). `file` is the
|
|
297
|
+
* file's name, which picks the parser: YAML for `.yml` and `.yaml`, JSON
|
|
298
|
+
* otherwise. The kind's schema must have loaded; when it didn't, WSP002 has
|
|
299
|
+
* already said why, and this returns nothing.
|
|
300
|
+
*/
|
|
301
|
+
export declare function checkMemberFile(memberFile: KindMemberFile, file: string, text: string): MemberFileProblem[];
|
|
215
302
|
/** The package a lexicon name resolves to. */
|
|
216
303
|
export declare function lexiconPackageName(lexicon: string): string;
|
|
217
304
|
/** Where each placeholder in a kind's graph config points (#2874). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../src/workspace/kinds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,EAAoB,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../src/workspace/kinds.ts"],"names":[],"mappings":"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"}
|
package/dist/workspace/kinds.js
CHANGED
|
@@ -16,13 +16,14 @@
|
|
|
16
16
|
* kinds claim one directory, the highest precedence decides, and a tie
|
|
17
17
|
* fails ({@link resolveKind}).
|
|
18
18
|
*/
|
|
19
|
-
import { readFileSync } from "node:fs";
|
|
19
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
20
20
|
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
21
21
|
import schema from "./workspace-kinds.schema.json" with { type: "json" };
|
|
22
22
|
import { joinPath, skippedDir } from "./tree.js";
|
|
23
23
|
import { checkPinIntegrity } from "./pin-integrity.js";
|
|
24
24
|
import { dataExportTarget, findInstalledPackage } from "./class-data.js";
|
|
25
25
|
import { loadAjv2020 } from "./ajv2020.js";
|
|
26
|
+
import yaml from "js-yaml";
|
|
26
27
|
export const KINDS_SCHEMA_ID = schema.$id;
|
|
27
28
|
/** The subpath a package publishes its kinds at. */
|
|
28
29
|
export const KINDS_SUBPATH = "./workspace-kinds";
|
|
@@ -32,9 +33,11 @@ export const KINDS_SUBPATH = "./workspace-kinds";
|
|
|
32
33
|
* stays data, and chant never imports the package that supplies it. Closed:
|
|
33
34
|
* a kind naming another reader is kept without one, and the load reports it.
|
|
34
35
|
*/
|
|
35
|
-
export const KIND_LINK_READERS = ["dbt-project"];
|
|
36
|
+
export const KIND_LINK_READERS = ["dbt-project", "goose-dir", "golang-migrate-dir", "clickhouse-migrations-dir", "flyway-dir"];
|
|
36
37
|
/** The group kind (ws-051). An entry of this kind is a group, not a member. */
|
|
37
38
|
export const EXAMPLES_KIND = "examples";
|
|
39
|
+
/** The member kind that names another repository's workspace by URL and pinned revision (#3168). */
|
|
40
|
+
export const REPO_KIND = "repo";
|
|
38
41
|
/** The data member kind that holds design artifacts (#2549, ws-062). */
|
|
39
42
|
export const DESIGN_KIND = "design";
|
|
40
43
|
export const BUILTIN_KINDS = [
|
|
@@ -56,6 +59,15 @@ export const BUILTIN_KINDS = [
|
|
|
56
59
|
outputs: { from: "none" },
|
|
57
60
|
source: "builtin",
|
|
58
61
|
},
|
|
62
|
+
{
|
|
63
|
+
name: REPO_KIND,
|
|
64
|
+
description: "another repository's workspace, named by URL and pinned revision; chant reads it through that repository's own chant workspace graph and never writes there",
|
|
65
|
+
probe: { repo: true },
|
|
66
|
+
precedence: 0,
|
|
67
|
+
shape: "member",
|
|
68
|
+
outputs: { from: "none" },
|
|
69
|
+
source: "builtin",
|
|
70
|
+
},
|
|
59
71
|
{
|
|
60
72
|
name: "other",
|
|
61
73
|
description: "a directory chant does not read; the entry says why in `because`",
|
|
@@ -108,7 +120,9 @@ export function probeKind(kind, tree, dir) {
|
|
|
108
120
|
return true;
|
|
109
121
|
if ("chantProject" in kind.probe)
|
|
110
122
|
return holdsChantProject(tree, dir);
|
|
111
|
-
|
|
123
|
+
if ("repo" in kind.probe)
|
|
124
|
+
return true;
|
|
125
|
+
const { anyFile, anyBlock, anyJsonKey, anyLine, anyDocument } = kind.probe;
|
|
112
126
|
if (anyFile && filesMatching(tree, dir, anyFile).length > 0)
|
|
113
127
|
return true;
|
|
114
128
|
if (anyJsonKey) {
|
|
@@ -123,6 +137,29 @@ export function probeKind(kind, tree, dir) {
|
|
|
123
137
|
}
|
|
124
138
|
}
|
|
125
139
|
}
|
|
140
|
+
if (anyLine) {
|
|
141
|
+
const starts = anyLine.starts.map((t) => t.toLowerCase());
|
|
142
|
+
for (const file of filesMatching(tree, dir, anyLine.in)) {
|
|
143
|
+
try {
|
|
144
|
+
if (tree.read(file).split(/\r?\n/).some((l) => starts.some((t) => l.trimStart().toLowerCase().startsWith(t))))
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// An unreadable file is no evidence either way.
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (anyDocument) {
|
|
153
|
+
for (const file of filesMatching(tree, dir, anyDocument.in)) {
|
|
154
|
+
try {
|
|
155
|
+
if (documentsOf(tree.read(file)).some((doc) => anyDocument.match.some((m) => documentMatches(doc, m))))
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// An unreadable file is no evidence either way.
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
126
163
|
if (anyBlock) {
|
|
127
164
|
const opener = new RegExp(`^\\s*(?:${anyBlock.blocks.map(escapeRegExp).join("|")})\\s*\\{`, "m");
|
|
128
165
|
for (const file of filesMatching(tree, dir, anyBlock.in)) {
|
|
@@ -139,7 +176,7 @@ export function probeKind(kind, tree, dir) {
|
|
|
139
176
|
}
|
|
140
177
|
/** Whether a probe looks at the directory's files, and so can claim it. */
|
|
141
178
|
function isFileProbe(probe) {
|
|
142
|
-
return !("directory" in probe) && !("chantProject" in probe);
|
|
179
|
+
return !("directory" in probe) && !("chantProject" in probe) && !("repo" in probe);
|
|
143
180
|
}
|
|
144
181
|
/**
|
|
145
182
|
* The files directly in `dir` (tree-relative paths) whose names match one of
|
|
@@ -154,7 +191,7 @@ function filesMatching(tree, dir, names) {
|
|
|
154
191
|
out.push(joinPath(dir, name));
|
|
155
192
|
}
|
|
156
193
|
if (globs.length > 0) {
|
|
157
|
-
const patterns = globs.map((g) => new RegExp(`^${g.split("*").map(escapeRegExp).join("[^/]*")}$`));
|
|
194
|
+
const patterns = globs.map((g) => new RegExp(`^${g.split("*").map((part) => escapeRegExp(part).replace(/\\\[0-9\\\]/g, "[0-9]")).join("[^/]*")}$`));
|
|
158
195
|
for (const e of tree.list(dir) ?? []) {
|
|
159
196
|
if (e.type === "file" && patterns.some((p) => p.test(e.name)))
|
|
160
197
|
out.push(joinPath(dir, e.name));
|
|
@@ -162,6 +199,36 @@ function filesMatching(tree, dir, names) {
|
|
|
162
199
|
}
|
|
163
200
|
return out.sort();
|
|
164
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* The documents in `text`, read as YAML (which holds JSON). A CloudFormation
|
|
204
|
+
* short-form tag such as `!Ref` or `!Sub` is not YAML js-yaml knows, so a
|
|
205
|
+
* file that fails to parse is read again with those tags dropped. Text that
|
|
206
|
+
* still doesn't parse has no documents.
|
|
207
|
+
*/
|
|
208
|
+
function documentsOf(text) {
|
|
209
|
+
try {
|
|
210
|
+
return yaml.loadAll(text);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
try {
|
|
214
|
+
return yaml.loadAll(text.replace(/(^|[\s:\-[,{])!(?:[A-Za-z][\w]*:?)+/gm, "$1"));
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/** Whether every pointer in `match` holds a value matching one of its patterns. */
|
|
222
|
+
function documentMatches(doc, match) {
|
|
223
|
+
const pointers = Object.entries(match);
|
|
224
|
+
return (pointers.length > 0 &&
|
|
225
|
+
pointers.every(([pointer, patterns]) => {
|
|
226
|
+
const value = atPointer(doc, pointer);
|
|
227
|
+
if (value === undefined)
|
|
228
|
+
return false;
|
|
229
|
+
return patterns.some((pattern) => new RegExp(`^${pattern.split("*").map(escapeRegExp).join(".*")}$`).test(String(value)));
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
165
232
|
/** The value at JSON Pointer `pointer` in `json`, or undefined when there is none. */
|
|
166
233
|
function atPointer(json, pointer) {
|
|
167
234
|
let at = json;
|
|
@@ -274,14 +341,19 @@ export function parseKindData(text, source) {
|
|
|
274
341
|
...(k.probe.anyFile ? { anyFile: [...k.probe.anyFile] } : {}),
|
|
275
342
|
...(k.probe.anyBlock ? { anyBlock: { in: [...k.probe.anyBlock.in], blocks: [...k.probe.anyBlock.blocks] } } : {}),
|
|
276
343
|
...(k.probe.anyJsonKey ? { anyJsonKey: { in: [...k.probe.anyJsonKey.in], pointers: [...k.probe.anyJsonKey.pointers] } } : {}),
|
|
344
|
+
...(k.probe.anyLine ? { anyLine: { in: [...k.probe.anyLine.in], starts: [...k.probe.anyLine.starts] } } : {}),
|
|
345
|
+
...(k.probe.anyDocument ? { anyDocument: { in: [...k.probe.anyDocument.in], match: k.probe.anyDocument.match.map((m) => structuredClone(m)) } } : {}),
|
|
277
346
|
},
|
|
278
347
|
precedence: k.precedence,
|
|
279
348
|
shape: "member",
|
|
280
349
|
outputs: { from: "declared", names: [...(k.outputs ?? [])] },
|
|
281
350
|
source,
|
|
282
|
-
...(k.graph
|
|
351
|
+
...(k.graph
|
|
352
|
+
? { graph: { ...(k.graph.lexicon ? { lexicon: k.graph.lexicon } : {}), ...(k.graph.reader ? { reader: k.graph.reader } : {}), config: structuredClone(k.graph.config ?? {}) } }
|
|
353
|
+
: {}),
|
|
283
354
|
...(k.fields ? { fields: structuredClone(k.fields) } : {}),
|
|
284
355
|
...(k.reader && KIND_LINK_READERS.includes(k.reader) ? { reader: k.reader } : {}),
|
|
356
|
+
...(k.memberFile ? { memberFile: { path: k.memberFile.path, schema: k.memberFile.schema } } : {}),
|
|
285
357
|
});
|
|
286
358
|
if (k.reader && !KIND_LINK_READERS.includes(k.reader)) {
|
|
287
359
|
problems.push(`${source}: kind ${k.name} names link reader ${k.reader}, which this chant does not have (it has ${KIND_LINK_READERS.join(", ")}); the kind is kept, and its members' links are only those their entries state`);
|
|
@@ -332,7 +404,28 @@ export function readPackageKinds(packageDir, source) {
|
|
|
332
404
|
const packageName = typeof pkg.name === "string" ? pkg.name : undefined;
|
|
333
405
|
for (const k of data.kinds) {
|
|
334
406
|
k.packageDir = packageDir;
|
|
335
|
-
if (k.
|
|
407
|
+
if (k.memberFile) {
|
|
408
|
+
const problem = loadMemberFileSchema(k.memberFile, packageDir);
|
|
409
|
+
if (problem)
|
|
410
|
+
data.problems.push(`${name}: kind ${k.name} ${problem}; members of the kind fail WSP012 until it is fixed`);
|
|
411
|
+
}
|
|
412
|
+
if (k.graph?.reader) {
|
|
413
|
+
// A reader module is any package's own file (#4413): it must sit inside the package and exist. Nothing is imported here.
|
|
414
|
+
const file = resolve(packageDir, ...k.graph.reader.split("/"));
|
|
415
|
+
const inside = relative(packageDir, file);
|
|
416
|
+
if (inside.startsWith("..") || isAbsolute(inside)) {
|
|
417
|
+
data.problems.push(`${name}: kind ${k.name} names graph reader ${k.graph.reader}, which is outside the package; the kind is kept, and workspace graph lists its members with kind-not-run`);
|
|
418
|
+
delete k.graph;
|
|
419
|
+
}
|
|
420
|
+
else if (!existsSync(file)) {
|
|
421
|
+
data.problems.push(`${name}: kind ${k.name} names graph reader ${k.graph.reader}, which does not exist in the package; the kind is kept, and workspace graph lists its members with kind-not-run`);
|
|
422
|
+
delete k.graph;
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
k.graph.readerFile = file;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
else if (k.graph?.lexicon && packageName !== lexiconPackageName(k.graph.lexicon)) {
|
|
336
429
|
data.problems.push(`${name}: kind ${k.name} reads its members with lexicon ${k.graph.lexicon}, which is ${lexiconPackageName(k.graph.lexicon)}, ` +
|
|
337
430
|
`and this package is ${packageName ?? "unnamed"}; the kind is kept, and workspace graph lists its members with kind-not-run`);
|
|
338
431
|
delete k.graph;
|
|
@@ -340,6 +433,67 @@ export function readPackageKinds(packageDir, source) {
|
|
|
340
433
|
}
|
|
341
434
|
return { ...data, file };
|
|
342
435
|
}
|
|
436
|
+
/**
|
|
437
|
+
* Read and compile a kind's member-file schema from `packageDir` (#3672),
|
|
438
|
+
* setting `schemaFile` and `validate`. Returns why it can't be used, or
|
|
439
|
+
* undefined. The schema is a JSON file inside the package; it is data, so
|
|
440
|
+
* nothing is imported, and a `$ref` outside the file is not followed.
|
|
441
|
+
*/
|
|
442
|
+
export function loadMemberFileSchema(memberFile, packageDir) {
|
|
443
|
+
const file = resolve(packageDir, ...memberFile.schema.split("/"));
|
|
444
|
+
memberFile.schemaFile = file;
|
|
445
|
+
const inside = relative(packageDir, file);
|
|
446
|
+
if (inside.startsWith("..") || isAbsolute(inside))
|
|
447
|
+
return `names member-file schema ${memberFile.schema}, which is outside the package`;
|
|
448
|
+
let doc;
|
|
449
|
+
try {
|
|
450
|
+
doc = JSON.parse(readFileSync(file, "utf-8"));
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
const missing = err.code === "ENOENT";
|
|
454
|
+
return missing ? `names member-file schema ${memberFile.schema}, which does not exist` : `names member-file schema ${memberFile.schema}, which is not JSON (${err.message})`;
|
|
455
|
+
}
|
|
456
|
+
if (doc === null || typeof doc !== "object" || Array.isArray(doc))
|
|
457
|
+
return `names member-file schema ${memberFile.schema}, which is not a JSON Schema object`;
|
|
458
|
+
try {
|
|
459
|
+
const Ajv = loadAjv2020();
|
|
460
|
+
memberFile.validate = new Ajv({ allErrors: true, strict: false }).compile(doc);
|
|
461
|
+
}
|
|
462
|
+
catch (err) {
|
|
463
|
+
return `names member-file schema ${memberFile.schema}, which does not compile as a draft 2020-12 schema (${err.message})`;
|
|
464
|
+
}
|
|
465
|
+
return undefined;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Check a member's file text against its kind's schema (#3672). `file` is the
|
|
469
|
+
* file's name, which picks the parser: YAML for `.yml` and `.yaml`, JSON
|
|
470
|
+
* otherwise. The kind's schema must have loaded; when it didn't, WSP002 has
|
|
471
|
+
* already said why, and this returns nothing.
|
|
472
|
+
*/
|
|
473
|
+
export function checkMemberFile(memberFile, file, text) {
|
|
474
|
+
if (!memberFile.validate)
|
|
475
|
+
return [];
|
|
476
|
+
let data;
|
|
477
|
+
try {
|
|
478
|
+
data = /\.ya?ml$/i.test(file) ? yaml.load(text) : JSON.parse(text);
|
|
479
|
+
}
|
|
480
|
+
catch (err) {
|
|
481
|
+
return [{ pointer: "", message: `is not ${/\.ya?ml$/i.test(file) ? "YAML" : "JSON"} (${err.message.split("\n")[0]})` }];
|
|
482
|
+
}
|
|
483
|
+
if (memberFile.validate(data))
|
|
484
|
+
return [];
|
|
485
|
+
const seen = new Set();
|
|
486
|
+
const out = [];
|
|
487
|
+
for (const e of memberFile.validate.errors ?? []) {
|
|
488
|
+
const extra = e.params && typeof e.params.additionalProperty === "string" ? ` (${e.params.additionalProperty})` : "";
|
|
489
|
+
const message = `${e.instancePath || "the file"} ${e.message ?? "is invalid"}${extra}`;
|
|
490
|
+
if (seen.has(message))
|
|
491
|
+
continue;
|
|
492
|
+
seen.add(message);
|
|
493
|
+
out.push({ pointer: e.instancePath, message });
|
|
494
|
+
}
|
|
495
|
+
return out;
|
|
496
|
+
}
|
|
343
497
|
/** The package a lexicon name resolves to. */
|
|
344
498
|
export function lexiconPackageName(lexicon) {
|
|
345
499
|
return `@intentius/chant-lexicon-${lexicon}`;
|