@intentius/chant 0.124.45 → 0.124.48
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/capabilities/aws.paths +148 -0
- package/dist/capabilities/base-mappings.json +122 -0
- package/dist/capabilities/catalog.d.ts +89 -0
- package/dist/capabilities/catalog.d.ts.map +1 -0
- package/dist/capabilities/catalog.js +204 -0
- package/dist/capabilities/language.d.ts +103 -0
- package/dist/capabilities/language.d.ts.map +1 -0
- package/dist/capabilities/language.js +335 -0
- package/dist/capabilities/matcher.d.ts +65 -0
- package/dist/capabilities/matcher.d.ts.map +1 -0
- package/dist/capabilities/matcher.js +299 -0
- package/dist/capabilities/view.d.ts +207 -0
- package/dist/capabilities/view.d.ts.map +1 -0
- package/dist/capabilities/view.js +484 -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/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +1 -0
- 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 +21 -2
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +6 -1
- package/dist/cli/handlers/declared-graph.d.ts +44 -0
- package/dist/cli/handlers/declared-graph.d.ts.map +1 -0
- package/dist/cli/handlers/declared-graph.js +87 -0
- package/dist/cli/handlers/graph.d.ts +25 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +93 -87
- 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.d.ts.map +1 -1
- package/dist/cli/handlers/pr-env.js +4 -3
- 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 +143 -39
- 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-count.d.ts +89 -0
- package/dist/cli/handlers/search-count.d.ts.map +1 -0
- package/dist/cli/handlers/search-count.js +132 -0
- package/dist/cli/handlers/search.d.ts +356 -6
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +1039 -155
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +88 -17
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +3 -0
- package/dist/cli/mcp/tools/capabilities.d.ts +7 -0
- package/dist/cli/mcp/tools/capabilities.d.ts.map +1 -0
- package/dist/cli/mcp/tools/capabilities.js +27 -0
- package/dist/cli/mcp/workspace-tools.d.ts +3 -1
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.js +47 -2
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +100 -19
- package/dist/cli/registry.d.ts +36 -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-env-ports.d.ts +29 -0
- package/dist/components/pr-env-ports.d.ts.map +1 -0
- package/dist/components/pr-env-ports.js +77 -0
- package/dist/components/pr-env-run.d.ts +5 -21
- package/dist/components/pr-env-run.d.ts.map +1 -1
- package/dist/components/pr-env-run.js +6 -70
- package/dist/components/pr-environment.d.ts +2 -1
- package/dist/components/pr-environment.d.ts.map +1 -1
- package/dist/components/pr-environment.js +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/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 +112 -0
- package/dist/config-environments.d.ts.map +1 -0
- package/dist/config-environments.js +114 -0
- package/dist/config.d.ts +32 -84
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -96
- package/dist/gate-decision.d.ts +11 -2
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +15 -3
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-detail.js +15 -3
- package/dist/graph-effective.d.ts +33 -2
- package/dist/graph-effective.d.ts.map +1 -1
- package/dist/graph-effective.js +215 -68
- package/dist/graph-ir.d.ts +48 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +130 -0
- package/dist/graph-sub-template.d.ts +11 -0
- package/dist/graph-sub-template.d.ts.map +1 -0
- package/dist/graph-sub-template.js +19 -0
- 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 +80 -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/observe.d.ts +28 -0
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +23 -1
- 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/rule.d.ts +6 -0
- package/dist/lint/rule.d.ts.map +1 -1
- 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/live-endpoint.d.ts +1 -1
- package/dist/live-endpoint.d.ts.map +1 -1
- package/dist/live-endpoint.js +1 -1
- package/dist/observation.d.ts +48 -1
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +21 -5
- 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.d.ts +11 -5
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-approval.js +11 -6
- 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 +44 -3
- 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 +38 -3
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +48 -6
- 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-post.d.ts +42 -0
- package/dist/pr-post.d.ts.map +1 -1
- package/dist/pr-post.js +67 -1
- 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 +266 -256
- package/dist/workspace/capabilities-contract.d.ts +66 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -0
- package/dist/workspace/capabilities-contract.js +107 -0
- package/dist/workspace/capabilities.schema.json +229 -0
- package/dist/workspace/check.schema.json +11 -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/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 +11 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +59 -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 +23 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +3 -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/conformance/index.d.ts +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/index.js +39 -2
- 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 +43 -2
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +45 -11
- package/dist/workspace/declaration.schema.json +133 -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/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 +8 -0
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +27 -3
- package/dist/workspace/graph-cli.d.ts +39 -2
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +92 -32
- package/dist/workspace/graph.schema.json +182 -0
- 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 +3 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +7 -1
- package/dist/workspace/kinds.d.ts +66 -2
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +98 -4
- 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/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 +10 -1
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +71 -6
- 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/nested-graph.d.ts +2 -0
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +32 -1
- package/dist/workspace/reason-codes.d.ts +18 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +23 -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-cli.d.ts +204 -0
- package/dist/workspace/search-cli.d.ts.map +1 -0
- package/dist/workspace/search-cli.js +466 -0
- package/dist/workspace/search-contract.d.ts +56 -0
- package/dist/workspace/search-contract.d.ts.map +1 -0
- package/dist/workspace/search-contract.js +70 -0
- package/dist/workspace/search.schema.json +822 -0
- 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 +58 -3
- 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/__snapshots__/okf.test.ts.snap +10 -0
- package/src/action-pins.test.ts +78 -0
- package/src/action-pins.ts +92 -0
- package/src/capabilities/aws.paths +148 -0
- package/src/capabilities/base-mappings.json +122 -0
- package/src/capabilities/catalog.ts +230 -0
- package/src/capabilities/language.test.ts +191 -0
- package/src/capabilities/language.ts +373 -0
- package/src/capabilities/matcher.ts +315 -0
- package/src/capabilities/view-compose.test.ts +76 -0
- package/src/capabilities/view.ts +631 -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/lint.ts +1 -0
- 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 +23 -2
- package/src/cli/handlers/build.ts +7 -1
- package/src/cli/handlers/declared-graph.ts +99 -0
- package/src/cli/handlers/graph.test.ts +94 -3
- package/src/cli/handlers/graph.ts +123 -96
- 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 +3 -4
- package/src/cli/handlers/pr.ts +138 -36
- package/src/cli/handlers/query.ts +16 -4
- package/src/cli/handlers/release.ts +6 -3
- package/src/cli/handlers/search-build-roots.test.ts +144 -0
- package/src/cli/handlers/search-count.test.ts +191 -0
- package/src/cli/handlers/search-count.ts +165 -0
- package/src/cli/handlers/search-json.test.ts +333 -0
- package/src/cli/handlers/search-live.test.ts +387 -0
- package/src/cli/handlers/search-paths.test.ts +235 -0
- package/src/cli/handlers/search.ts +1291 -166
- package/src/cli/main.test.ts +43 -3
- package/src/cli/main.ts +88 -17
- package/src/cli/mcp/server.test.ts +3 -3
- package/src/cli/mcp/server.ts +3 -0
- package/src/cli/mcp/tools/capabilities.ts +32 -0
- package/src/cli/mcp/workspace-tools.e2e.test.ts +21 -1
- package/src/cli/mcp/workspace-tools.ts +47 -2
- package/src/cli/parse-args.ts +79 -15
- package/src/cli/registry.ts +36 -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-ports.ts +89 -0
- package/src/components/pr-env-run-bundle.test.ts +54 -0
- package/src/components/pr-env-run.ts +5 -76
- package/src/components/pr-environment.ts +2 -1
- 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/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 +160 -0
- package/src/config.ts +44 -124
- package/src/gate-decision-bundle.test.ts +1 -0
- package/src/gate-decision-identity.test.ts +9 -0
- package/src/gate-decision.ts +26 -3
- package/src/graph-detail.ts +15 -3
- package/src/graph-effective.ts +226 -75
- package/src/graph-ir.test.ts +163 -0
- package/src/graph-ir.ts +174 -0
- package/src/graph-sub-template.ts +22 -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 +84 -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/observe.test.ts +27 -1
- package/src/lifecycle/observe.ts +43 -1
- 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/rule.ts +6 -0
- package/src/lint/rules/op/index.ts +2 -0
- package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
- package/src/live-endpoint.ts +1 -1
- package/src/observation.test.ts +25 -0
- package/src/observation.ts +69 -5
- 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.test.ts +6 -1
- package/src/op/gate-approval.ts +12 -6
- 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 +67 -8
- package/src/op/index.ts +3 -2
- package/src/op/local-executor.ts +69 -9
- 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-post-open.e2e.test.ts +36 -0
- package/src/pr-post.test.ts +102 -3
- package/src/pr-post.ts +89 -1
- 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/behold-kinds.test.ts +1 -1
- package/src/workspace/capabilities-contract.test.ts +88 -0
- package/src/workspace/capabilities-contract.ts +132 -0
- package/src/workspace/capabilities.schema.json +229 -0
- package/src/workspace/check-contract.test.ts +7 -6
- package/src/workspace/check.schema.json +11 -2
- package/src/workspace/checks/ci-branch.test.ts +128 -0
- package/src/workspace/checks/ci-branch.ts +141 -0
- package/src/workspace/checks/links.ts +12 -1
- package/src/workspace/checks/org.ts +169 -0
- package/src/workspace/checks.ts +64 -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 +19 -3
- 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/conformance/conformance.e2e.test.ts +14 -1
- package/src/workspace/conformance/index.ts +31 -2
- 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 +133 -24
- package/src/workspace/declaration.ts +84 -15
- package/src/workspace/environments.ts +40 -4
- package/src/workspace/flyway-dir.ts +113 -0
- package/src/workspace/flyway-layout.ts +337 -0
- package/src/workspace/graph-cache.ts +27 -3
- package/src/workspace/graph-cli.ts +119 -32
- package/src/workspace/graph-contract.test.ts +4 -2
- package/src/workspace/graph.schema.json +182 -0
- package/src/workspace/identity.test.ts +14 -2
- package/src/workspace/intent.ts +6 -14
- package/src/workspace/kind-link-readers.ts +68 -3
- package/src/workspace/kind-readers.e2e.test.ts +28 -0
- package/src/workspace/kind-readers.test.ts +1 -1
- package/src/workspace/kind-readers.ts +7 -1
- package/src/workspace/kinds.test.ts +12 -7
- package/src/workspace/kinds.ts +132 -7
- 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/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 +82 -3
- 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/nested-graph.ts +32 -1
- package/src/workspace/org-scope.test.ts +238 -0
- package/src/workspace/reason-codes.test.ts +13 -1
- package/src/workspace/reason-codes.ts +23 -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/search-cli.e2e.test.ts +305 -0
- package/src/workspace/search-cli.ts +591 -0
- package/src/workspace/search-contract.ts +95 -0
- package/src/workspace/search.schema.json +822 -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 +58 -3
- 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
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A dbt project's models as outputs (#3935), read beside its sources by the
|
|
3
|
+
* `dbt-project` reader.
|
|
4
|
+
*
|
|
5
|
+
* A model exposes `<schema>.<model>` and, for each column its YAML lists,
|
|
6
|
+
* `<schema>.<model>.<column>`, named by the contract of #3931: names as
|
|
7
|
+
* declared, Postgres case folding, never rendered per target. As with
|
|
8
|
+
* sources, nothing runs: dbt, Jinja and `profiles.yml` stay unread.
|
|
9
|
+
*
|
|
10
|
+
* - A model is a `.sql` file under the project's `model-paths`. Its name is
|
|
11
|
+
* the file's name, or its `alias`. Python models, seeds and snapshots are
|
|
12
|
+
* not read.
|
|
13
|
+
* - `enabled`, `schema` and `alias` come from the first of: the model's own
|
|
14
|
+
* `{{ config(...) }}`, the `config:` of its entry in a model YAML, then the
|
|
15
|
+
* `+` keys of `dbt_project.yml` that match the model's path (the project's
|
|
16
|
+
* name, each directory under the model path, the model's name), the
|
|
17
|
+
* deepest first.
|
|
18
|
+
* - The schema is the member's `modelSchema` field when it is set, and
|
|
19
|
+
* dbt's config is then not read for it. Otherwise it is the schema dbt
|
|
20
|
+
* config names, but dbt's default `generate_schema_name` joins the target's
|
|
21
|
+
* schema to a custom one (`<target_schema>_<custom>`), and a model with no
|
|
22
|
+
* custom schema lands in the target's schema, so the name depends on the
|
|
23
|
+
* target. The model is then a gap that says to set `modelSchema`. The
|
|
24
|
+
* exception is a project whose `generate_schema_name` macro is the usual
|
|
25
|
+
* override (the custom schema as it stands, the target's schema when there
|
|
26
|
+
* is none): a model with a custom schema is named by it. Any other
|
|
27
|
+
* override is not evaluated, and every model is a gap.
|
|
28
|
+
* - A templated schema, alias or `enabled`, or one that is not a plain
|
|
29
|
+
* string, is a gap; chant never renders it.
|
|
30
|
+
*/
|
|
31
|
+
import { posix } from "node:path";
|
|
32
|
+
import { parseYAMLDocument } from "../yaml.js";
|
|
33
|
+
import { isObject, isTemplated, keyLine, lines, nameLine, scalar, yamlFiles, } from "./dbt-project-common.js";
|
|
34
|
+
import { joinPath, skippedDir } from "./tree.js";
|
|
35
|
+
const KEYS = ["schema", "alias", "enabled"];
|
|
36
|
+
export function readDbtModels(ctx) {
|
|
37
|
+
const { input, project, projectFile, paths, quoting, dialect, result } = ctx;
|
|
38
|
+
const { tree, dir, fields } = input;
|
|
39
|
+
const gaps = result.gaps;
|
|
40
|
+
const outputs = (result.outputs ?? (result.outputs = []));
|
|
41
|
+
const modelSchema = typeof fields?.modelSchema === "string" && fields.modelSchema !== "" ? fields.modelSchema : null;
|
|
42
|
+
const name = (v, quoted) => (dialect === "postgres" && !quoted ? v.toLowerCase() : v);
|
|
43
|
+
const projectName = scalar(project.name);
|
|
44
|
+
const macro = modelSchema === null ? schemaMacro(tree, dir, project) : { kind: "default" };
|
|
45
|
+
// Model YAML: config and columns, by model name.
|
|
46
|
+
const yamlModels = new Map();
|
|
47
|
+
for (const p of paths) {
|
|
48
|
+
for (const file of yamlFiles(tree, p)) {
|
|
49
|
+
let text;
|
|
50
|
+
let doc;
|
|
51
|
+
try {
|
|
52
|
+
text = tree.read(file);
|
|
53
|
+
doc = parseYAMLDocument(text);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
// The sources pass reports an unreadable file, as a gap that leaves outputs out.
|
|
57
|
+
void err;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (!isObject(doc) || !Array.isArray(doc.models))
|
|
61
|
+
continue;
|
|
62
|
+
const fileLines = lines(text);
|
|
63
|
+
let cursor = keyLine(fileLines, "models");
|
|
64
|
+
for (const entry of doc.models) {
|
|
65
|
+
if (!isObject(entry))
|
|
66
|
+
continue;
|
|
67
|
+
const modelName = scalar(entry.name);
|
|
68
|
+
cursor = nameLine(fileLines, modelName, cursor);
|
|
69
|
+
if (modelName === undefined)
|
|
70
|
+
continue;
|
|
71
|
+
const cols = [];
|
|
72
|
+
let columnCursor = cursor;
|
|
73
|
+
for (const column of Array.isArray(entry.columns) ? entry.columns : []) {
|
|
74
|
+
if (!isObject(column))
|
|
75
|
+
continue;
|
|
76
|
+
const columnName = scalar(column.name);
|
|
77
|
+
columnCursor = nameLine(fileLines, columnName, columnCursor);
|
|
78
|
+
if (columnName === undefined || isTemplated(columnName)) {
|
|
79
|
+
gaps.push({ file, line: columnCursor, message: `model ${modelName}: column ${JSON.stringify(column.name)} is a Jinja template or not a name, which chant does not render; it was not read`, outputs: true });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
cols.push({ name: columnName, quote: column.quote === true, line: columnCursor, file });
|
|
83
|
+
}
|
|
84
|
+
const config = isObject(entry.config) ? { ...entry.config } : {};
|
|
85
|
+
yamlModels.set(modelName, { config, columns: cols, file });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const seen = new Set();
|
|
90
|
+
for (const p of paths) {
|
|
91
|
+
for (const file of sqlFiles(tree, p)) {
|
|
92
|
+
const modelName = posix.basename(file).replace(/\.sql$/, "");
|
|
93
|
+
if (seen.has(modelName))
|
|
94
|
+
continue;
|
|
95
|
+
seen.add(modelName);
|
|
96
|
+
const text = tree.read(file);
|
|
97
|
+
const inline = readInlineConfig(text);
|
|
98
|
+
const yaml = yamlModels.get(modelName);
|
|
99
|
+
const rel = posix.relative(p || ".", posix.dirname(file));
|
|
100
|
+
const segments = [...(rel === "" || rel === "." ? [] : rel.split("/")), modelName];
|
|
101
|
+
const fromProject = projectName ? projectConfig(project.models, projectName, segments) : {};
|
|
102
|
+
const config = {
|
|
103
|
+
schema: pick(inline.schema, setting(yaml?.config.schema, `config of ${modelName} in ${yaml?.file}`), setting(fromProject.schema, `+schema in ${projectFile}`)),
|
|
104
|
+
alias: pick(inline.alias, setting(yaml?.config.alias, `config of ${modelName} in ${yaml?.file}`), setting(fromProject.alias, `+alias in ${projectFile}`)),
|
|
105
|
+
enabled: pick(inline.enabled, setting(yaml?.config.enabled, `config of ${modelName} in ${yaml?.file}`), setting(fromProject.enabled, `+enabled in ${projectFile}`)),
|
|
106
|
+
};
|
|
107
|
+
const line = inline.line;
|
|
108
|
+
const gap = (message) => gaps.push({ file, line, message: `model ${modelName}: ${message}`, outputs: true });
|
|
109
|
+
const enabled = config.enabled;
|
|
110
|
+
if (enabled.status === "dynamic") {
|
|
111
|
+
gap(`enabled is ${enabled.text} (${enabled.at}), which chant does not render; the model was not read`);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (enabled.status === "value" && enabled.value === false)
|
|
115
|
+
continue;
|
|
116
|
+
if (enabled.status === "value" && enabled.value !== true) {
|
|
117
|
+
gap(`enabled is ${JSON.stringify(enabled.value)} (${enabled.at}), not true or false; the model was not read`);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
// The model's name: its alias, or the file's.
|
|
121
|
+
let relation = modelName;
|
|
122
|
+
if (config.alias.status === "dynamic") {
|
|
123
|
+
gap(`alias ${config.alias.text} (${config.alias.at}) is a Jinja template or not a name, which chant does not render; the model was not read`);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (config.alias.status === "value") {
|
|
127
|
+
const alias = scalar(config.alias.value);
|
|
128
|
+
if (alias === undefined || alias === "" || isTemplated(alias)) {
|
|
129
|
+
gap(`alias ${JSON.stringify(config.alias.value)} (${config.alias.at}) is a Jinja template or not a name, which chant does not render; the model was not read`);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
relation = alias;
|
|
133
|
+
}
|
|
134
|
+
// The schema it lands in.
|
|
135
|
+
let schema;
|
|
136
|
+
if (modelSchema !== null) {
|
|
137
|
+
schema = modelSchema;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const resolved = modelSchemaFromConfig(config.schema, macro);
|
|
141
|
+
if (typeof resolved !== "string") {
|
|
142
|
+
gap(`${resolved.message}; set modelSchema on the dbt member to name the schema its models land in`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
schema = resolved;
|
|
146
|
+
}
|
|
147
|
+
const model = `${name(schema, quoting.schema)}.${name(relation, quoting.identifier)}`;
|
|
148
|
+
outputs.push({ name: model, file, line });
|
|
149
|
+
for (const column of yaml?.columns ?? [])
|
|
150
|
+
outputs.push({ name: `${model}.${name(column.name, column.quote)}`, file: column.file, line: column.line });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/** The schema config names, or why that does not give a name. */
|
|
155
|
+
function modelSchemaFromConfig(schema, macro) {
|
|
156
|
+
if (schema.status === "dynamic")
|
|
157
|
+
return { message: `schema ${schema.text} (${schema.at}) is a Jinja template, which chant does not render for a target` };
|
|
158
|
+
if (macro.kind === "other")
|
|
159
|
+
return { message: `the project overrides generate_schema_name (${macro.file}:${macro.line}), which chant does not evaluate, so it cannot tell which schema the model lands in` };
|
|
160
|
+
if (schema.status === "unset")
|
|
161
|
+
return { message: "it sets no schema, so it lands in the target's schema, which profiles.yml names and chant does not read" };
|
|
162
|
+
const custom = scalar(schema.value);
|
|
163
|
+
if (custom === undefined || custom === "" || isTemplated(custom))
|
|
164
|
+
return { message: `schema ${JSON.stringify(schema.value)} (${schema.at}) is a Jinja template or not a name, which chant does not render` };
|
|
165
|
+
if (macro.kind === "custom-as-is")
|
|
166
|
+
return custom;
|
|
167
|
+
return { message: `schema ${JSON.stringify(custom)} (${schema.at}) is joined to the target's schema by dbt's default generate_schema_name (<target_schema>_${custom}), so the name depends on the target` };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Whether the project overrides `generate_schema_name`, in a `.sql` file under
|
|
171
|
+
* `macro-paths` (`macros` by default). The usual override returns the custom
|
|
172
|
+
* schema as it stands: with the tags removed, its body is the target's schema
|
|
173
|
+
* and `{{ custom_schema_name | trim }}`, one per branch of an `is none` test.
|
|
174
|
+
* Any other body is not evaluated.
|
|
175
|
+
*/
|
|
176
|
+
function schemaMacro(tree, dir, project) {
|
|
177
|
+
const raw = project["macro-paths"] ?? ["macros"];
|
|
178
|
+
if (!Array.isArray(raw))
|
|
179
|
+
return { kind: "default" };
|
|
180
|
+
let found = { kind: "default" };
|
|
181
|
+
for (const p of raw) {
|
|
182
|
+
if (typeof p !== "string" || isTemplated(p) || posix.isAbsolute(p))
|
|
183
|
+
continue;
|
|
184
|
+
const at = posix.normalize(joinPath(dir, p));
|
|
185
|
+
if (at === ".." || at.startsWith("../"))
|
|
186
|
+
continue;
|
|
187
|
+
for (const file of sqlFiles(tree, at === "." ? "" : at)) {
|
|
188
|
+
let text;
|
|
189
|
+
try {
|
|
190
|
+
text = tree.read(file);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const start = /\{%-?\s*macro\s+generate_schema_name\s*\(/.exec(text);
|
|
196
|
+
if (!start)
|
|
197
|
+
continue;
|
|
198
|
+
const line = text.slice(0, start.index).split("\n").length;
|
|
199
|
+
const end = /\{%-?\s*endmacro\s*-?%\}/.exec(text.slice(start.index));
|
|
200
|
+
const body = text.slice(start.index + start[0].length, end ? start.index + end.index : undefined);
|
|
201
|
+
const afterSignature = body.slice(body.indexOf("%}") + 2);
|
|
202
|
+
const flat = afterSignature.replace(/\{%[\s\S]*?%\}/g, "").replace(/\s+/g, "");
|
|
203
|
+
const asIs = /^\{\{(?:target\.schema|default_schema)\}\}\{\{custom_schema_name\|trim\}\}$/.test(flat) && /custom_schema_name(?:is|==)none/.test(afterSignature.replace(/\s+/g, ""));
|
|
204
|
+
found = asIs ? { kind: "custom-as-is" } : { kind: "other", file, line };
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return found;
|
|
208
|
+
}
|
|
209
|
+
/** `.sql` files under tree-relative directory `dir`, skipping dot directories and node_modules; sorted. */
|
|
210
|
+
function sqlFiles(tree, dir) {
|
|
211
|
+
if (dir !== "" && tree.stat(dir) !== "dir")
|
|
212
|
+
return [];
|
|
213
|
+
const out = [];
|
|
214
|
+
const walk = (at) => {
|
|
215
|
+
for (const e of tree.list(at) ?? []) {
|
|
216
|
+
const path = joinPath(at, e.name);
|
|
217
|
+
if (e.type === "dir") {
|
|
218
|
+
if (!skippedDir(e.name))
|
|
219
|
+
walk(path);
|
|
220
|
+
}
|
|
221
|
+
else if (/\.sql$/.test(e.name)) {
|
|
222
|
+
out.push(path);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
walk(dir);
|
|
227
|
+
return out.sort();
|
|
228
|
+
}
|
|
229
|
+
/** The first setting that is set: the model's own, then its YAML's, then the project's. */
|
|
230
|
+
function pick(...settings) {
|
|
231
|
+
return settings.find((s) => s.status !== "unset") ?? { status: "unset" };
|
|
232
|
+
}
|
|
233
|
+
function setting(value, at) {
|
|
234
|
+
if (value === undefined || value === null)
|
|
235
|
+
return { status: "unset" };
|
|
236
|
+
if (typeof value === "string" && isTemplated(value))
|
|
237
|
+
return { status: "dynamic", at, text: JSON.stringify(value) };
|
|
238
|
+
return { status: "value", value, at };
|
|
239
|
+
}
|
|
240
|
+
const PROJECT_KEYS = new Set(KEYS);
|
|
241
|
+
/** The configs `dbt_project.yml` sets for a model: the project's block, then each directory down to the model's name; deeper wins. */
|
|
242
|
+
function projectConfig(models, projectName, segments) {
|
|
243
|
+
const out = {};
|
|
244
|
+
if (!isObject(models))
|
|
245
|
+
return out;
|
|
246
|
+
let node = models[projectName];
|
|
247
|
+
const take = (n) => {
|
|
248
|
+
for (const [k, v] of Object.entries(n)) {
|
|
249
|
+
if (k.startsWith("+") && PROJECT_KEYS.has(k.slice(1)))
|
|
250
|
+
out[k.slice(1)] = v;
|
|
251
|
+
else if (PROJECT_KEYS.has(k) && !isObject(v))
|
|
252
|
+
out[k] = v;
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
if (!isObject(node))
|
|
256
|
+
return out;
|
|
257
|
+
take(node);
|
|
258
|
+
for (const seg of segments) {
|
|
259
|
+
node = node[seg];
|
|
260
|
+
if (!isObject(node))
|
|
261
|
+
break;
|
|
262
|
+
take(node);
|
|
263
|
+
}
|
|
264
|
+
return out;
|
|
265
|
+
}
|
|
266
|
+
/** What a model's own `{{ config(...) }}` calls set, and the line of the first one (1 when none). */
|
|
267
|
+
function readInlineConfig(text) {
|
|
268
|
+
const out = { schema: { status: "unset" }, alias: { status: "unset" }, enabled: { status: "unset" }, line: 1 };
|
|
269
|
+
// Comments are blanked, not removed, so lines stay where they were.
|
|
270
|
+
const blank = (m) => m.replace(/[^\n]/g, " ");
|
|
271
|
+
const code = text.replace(/\{#[\s\S]*?#\}/g, blank).replace(/--[^\n]*/g, blank);
|
|
272
|
+
const open = /\{\{-?\s*config\s*\(/g;
|
|
273
|
+
let first = true;
|
|
274
|
+
for (let m = open.exec(code); m; m = open.exec(code)) {
|
|
275
|
+
const args = balanced(code, open.lastIndex);
|
|
276
|
+
if (args === undefined)
|
|
277
|
+
continue;
|
|
278
|
+
if (first) {
|
|
279
|
+
out.line = code.slice(0, m.index).split("\n").length;
|
|
280
|
+
first = false;
|
|
281
|
+
}
|
|
282
|
+
for (const arg of splitTop(args)) {
|
|
283
|
+
const kv = /^\s*([A-Za-z_]\w*)\s*=\s*([\s\S]*?)\s*$/.exec(arg);
|
|
284
|
+
if (!kv || !PROJECT_KEYS.has(kv[1]))
|
|
285
|
+
continue;
|
|
286
|
+
const at = "the model's config()";
|
|
287
|
+
const raw = kv[2];
|
|
288
|
+
const str = /^(['"])((?:(?!\1)[^\\]|\\.)*)\1$/.exec(raw);
|
|
289
|
+
let s;
|
|
290
|
+
if (str)
|
|
291
|
+
s = isTemplated(str[2]) ? { status: "dynamic", at, text: raw } : { status: "value", value: str[2], at };
|
|
292
|
+
else if (/^true$/i.test(raw))
|
|
293
|
+
s = { status: "value", value: true, at };
|
|
294
|
+
else if (/^false$/i.test(raw))
|
|
295
|
+
s = { status: "value", value: false, at };
|
|
296
|
+
else if (/^(none|null)$/i.test(raw))
|
|
297
|
+
s = { status: "unset" };
|
|
298
|
+
else
|
|
299
|
+
s = { status: "dynamic", at, text: raw };
|
|
300
|
+
out[kv[1]] = s;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return out;
|
|
304
|
+
}
|
|
305
|
+
/** The text from `from` up to the parenthesis that closes the one before it, or undefined. */
|
|
306
|
+
function balanced(text, from) {
|
|
307
|
+
let depth = 1;
|
|
308
|
+
let quote = null;
|
|
309
|
+
for (let i = from; i < text.length; i++) {
|
|
310
|
+
const c = text[i];
|
|
311
|
+
if (quote) {
|
|
312
|
+
if (c === "\\")
|
|
313
|
+
i++;
|
|
314
|
+
else if (c === quote)
|
|
315
|
+
quote = null;
|
|
316
|
+
}
|
|
317
|
+
else if (c === "'" || c === '"')
|
|
318
|
+
quote = c;
|
|
319
|
+
else if (c === "(" || c === "[" || c === "{")
|
|
320
|
+
depth++;
|
|
321
|
+
else if (c === ")" || c === "]" || c === "}") {
|
|
322
|
+
depth--;
|
|
323
|
+
if (depth === 0)
|
|
324
|
+
return text.slice(from, i);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return undefined;
|
|
328
|
+
}
|
|
329
|
+
/** `text` split at the commas outside quotes and brackets. */
|
|
330
|
+
function splitTop(text) {
|
|
331
|
+
const parts = [];
|
|
332
|
+
let depth = 0;
|
|
333
|
+
let quote = null;
|
|
334
|
+
let start = 0;
|
|
335
|
+
for (let i = 0; i < text.length; i++) {
|
|
336
|
+
const c = text[i];
|
|
337
|
+
if (quote) {
|
|
338
|
+
if (c === "\\")
|
|
339
|
+
i++;
|
|
340
|
+
else if (c === quote)
|
|
341
|
+
quote = null;
|
|
342
|
+
}
|
|
343
|
+
else if (c === "'" || c === '"')
|
|
344
|
+
quote = c;
|
|
345
|
+
else if (c === "(" || c === "[" || c === "{")
|
|
346
|
+
depth++;
|
|
347
|
+
else if (c === ")" || c === "]" || c === "}")
|
|
348
|
+
depth--;
|
|
349
|
+
else if (c === "," && depth === 0) {
|
|
350
|
+
parts.push(text.slice(start, i));
|
|
351
|
+
start = i + 1;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
parts.push(text.slice(start));
|
|
355
|
+
return parts;
|
|
356
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the dbt readers share (#3932, #3935): YAML and line helpers, the
|
|
3
|
+
* `quoting:` rules, and the project's `model-paths`.
|
|
4
|
+
*/
|
|
5
|
+
import type { KindReadGap } from "./kind-link-readers.js";
|
|
6
|
+
import { type WorkspaceTree } from "./tree.js";
|
|
7
|
+
export declare const DBT_PROJECT_FILE = "dbt_project.yml";
|
|
8
|
+
export declare const DEFAULT_MODEL_PATHS: string[];
|
|
9
|
+
/** The dialects whose naming the reader follows; the member's `dialect` field picks one. */
|
|
10
|
+
export declare const DBT_DIALECTS: readonly ["postgres", "clickhouse"];
|
|
11
|
+
export type Dialect = (typeof DBT_DIALECTS)[number];
|
|
12
|
+
export interface Quoting {
|
|
13
|
+
schema: boolean;
|
|
14
|
+
identifier: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const isTemplated: (v: string) => boolean;
|
|
17
|
+
export declare const isObject: (v: unknown) => v is Record<string, unknown>;
|
|
18
|
+
/** A name as text: a string, or a number or boolean YAML read as one. */
|
|
19
|
+
export declare function scalar(v: unknown): string | undefined;
|
|
20
|
+
/** Whether an entry is enabled: `enabled`, or `config.enabled`. A templated value is a gap, and the entry is left out. */
|
|
21
|
+
export declare function readEnabled(entry: Record<string, unknown>, file: string, line: number, where: string, gaps: KindReadGap[]): boolean;
|
|
22
|
+
/** `base` with a `quoting:` block's schema and identifier applied. A value that isn't a boolean is a gap and keeps the base. */
|
|
23
|
+
export declare function readQuoting(base: Quoting, raw: unknown, file: string, line: number, where: string, gaps: KindReadGap[]): Quoting;
|
|
24
|
+
/** Every `.yml` and `.yaml` file under tree-relative directory `dir`, skipping dot directories and node_modules. */
|
|
25
|
+
export declare function yamlFiles(tree: WorkspaceTree, dir: string): string[];
|
|
26
|
+
export declare function lines(text: string): string[];
|
|
27
|
+
export declare function escapeRegExp(text: string): string;
|
|
28
|
+
/** The line (from 1) of top-level key `key`, or 1. */
|
|
29
|
+
export declare function keyLine(fileLines: string[], key: string): number;
|
|
30
|
+
/**
|
|
31
|
+
* The line of the first `name: <value>` entry after line `from`, or `from`
|
|
32
|
+
* itself. Sources, tables and columns are listed in file order, so
|
|
33
|
+
* searching on from the parent's line finds each one's own line. A file in
|
|
34
|
+
* flow style has no such lines, and its entries are reported at the parent.
|
|
35
|
+
*/
|
|
36
|
+
export declare function nameLine(fileLines: string[], value: string | undefined, from: number): number;
|
|
37
|
+
/** The line of the first `<key>:` after line `from`, or `from`. */
|
|
38
|
+
export declare function valueLine(fileLines: string[], key: string, from: number): number;
|
|
39
|
+
export declare function valueLineOf(fileLines: string[], key: string, value: string, from: number): number;
|
|
40
|
+
//# sourceMappingURL=dbt-project-common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbt-project-common.d.ts","sourceRoot":"","sources":["../../src/workspace/dbt-project-common.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAElE,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAClD,eAAO,MAAM,mBAAmB,UAAa,CAAC;AAE9C,4FAA4F;AAC5F,eAAO,MAAM,YAAY,YAAI,UAAU,EAAE,YAAY,CAAU,CAAC;AAChE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,MAAO,MAAM,YAAuB,CAAC;AAC7D,eAAO,MAAM,QAAQ,MAAO,OAAO,KAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAA6D,CAAC;AAE/H,yEAAyE;AACzE,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIrD;AAED,0HAA0H;AAC1H,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAOnI;AAED,gIAAgI;AAChI,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAchI;AAED,oHAAoH;AACpH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAepE;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhF;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the dbt readers share (#3932, #3935): YAML and line helpers, the
|
|
3
|
+
* `quoting:` rules, and the project's `model-paths`.
|
|
4
|
+
*/
|
|
5
|
+
import { joinPath, skippedDir } from "./tree.js";
|
|
6
|
+
export const DBT_PROJECT_FILE = "dbt_project.yml";
|
|
7
|
+
export const DEFAULT_MODEL_PATHS = ["models"];
|
|
8
|
+
/** The dialects whose naming the reader follows; the member's `dialect` field picks one. */
|
|
9
|
+
export const DBT_DIALECTS = ["postgres", "clickhouse"];
|
|
10
|
+
export const isTemplated = (v) => /\{\{|\{%/.test(v);
|
|
11
|
+
export const isObject = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
|
|
12
|
+
/** A name as text: a string, or a number or boolean YAML read as one. */
|
|
13
|
+
export function scalar(v) {
|
|
14
|
+
if (typeof v === "string")
|
|
15
|
+
return v;
|
|
16
|
+
if (typeof v === "number" || typeof v === "boolean")
|
|
17
|
+
return String(v);
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
/** Whether an entry is enabled: `enabled`, or `config.enabled`. A templated value is a gap, and the entry is left out. */
|
|
21
|
+
export function readEnabled(entry, file, line, where, gaps) {
|
|
22
|
+
const config = isObject(entry.config) ? entry.config : {};
|
|
23
|
+
const raw = entry.enabled ?? config.enabled;
|
|
24
|
+
if (raw === undefined || raw === null || raw === true)
|
|
25
|
+
return true;
|
|
26
|
+
if (raw === false)
|
|
27
|
+
return false;
|
|
28
|
+
gaps.push({ file, line, message: `${where}: enabled is ${JSON.stringify(raw)}, which chant does not render; it was not read` });
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
/** `base` with a `quoting:` block's schema and identifier applied. A value that isn't a boolean is a gap and keeps the base. */
|
|
32
|
+
export function readQuoting(base, raw, file, line, where, gaps) {
|
|
33
|
+
if (raw === undefined || raw === null)
|
|
34
|
+
return base;
|
|
35
|
+
if (!isObject(raw)) {
|
|
36
|
+
gaps.push({ file, line, message: `${where} is not a mapping; the quoting above it applies` });
|
|
37
|
+
return base;
|
|
38
|
+
}
|
|
39
|
+
const out = { ...base };
|
|
40
|
+
for (const key of ["schema", "identifier"]) {
|
|
41
|
+
const v = raw[key];
|
|
42
|
+
if (v === undefined)
|
|
43
|
+
continue;
|
|
44
|
+
if (typeof v === "boolean")
|
|
45
|
+
out[key] = v;
|
|
46
|
+
else
|
|
47
|
+
gaps.push({ file, line, message: `${where}.${key} is ${JSON.stringify(v)}, not true or false; the quoting above it applies` });
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/** Every `.yml` and `.yaml` file under tree-relative directory `dir`, skipping dot directories and node_modules. */
|
|
52
|
+
export function yamlFiles(tree, dir) {
|
|
53
|
+
if (dir !== "" && tree.stat(dir) !== "dir")
|
|
54
|
+
return [];
|
|
55
|
+
const out = [];
|
|
56
|
+
const walk = (at) => {
|
|
57
|
+
for (const e of tree.list(at) ?? []) {
|
|
58
|
+
const path = joinPath(at, e.name);
|
|
59
|
+
if (e.type === "dir") {
|
|
60
|
+
if (!skippedDir(e.name))
|
|
61
|
+
walk(path);
|
|
62
|
+
}
|
|
63
|
+
else if (/\.ya?ml$/.test(e.name)) {
|
|
64
|
+
out.push(path);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
walk(dir);
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
export function lines(text) {
|
|
72
|
+
return text.replace(/\r\n/g, "\n").split("\n");
|
|
73
|
+
}
|
|
74
|
+
export function escapeRegExp(text) {
|
|
75
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
76
|
+
}
|
|
77
|
+
/** The line (from 1) of top-level key `key`, or 1. */
|
|
78
|
+
export function keyLine(fileLines, key) {
|
|
79
|
+
const re = new RegExp(`^${escapeRegExp(key)}\\s*:`);
|
|
80
|
+
const i = fileLines.findIndex((l) => re.test(l));
|
|
81
|
+
return i < 0 ? 1 : i + 1;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The line of the first `name: <value>` entry after line `from`, or `from`
|
|
85
|
+
* itself. Sources, tables and columns are listed in file order, so
|
|
86
|
+
* searching on from the parent's line finds each one's own line. A file in
|
|
87
|
+
* flow style has no such lines, and its entries are reported at the parent.
|
|
88
|
+
*/
|
|
89
|
+
export function nameLine(fileLines, value, from) {
|
|
90
|
+
return value === undefined ? from : valueLineOf(fileLines, "name", value, from);
|
|
91
|
+
}
|
|
92
|
+
/** The line of the first `<key>:` after line `from`, or `from`. */
|
|
93
|
+
export function valueLine(fileLines, key, from) {
|
|
94
|
+
const re = new RegExp(`^\\s*(?:-\\s+)?${escapeRegExp(key)}\\s*:`);
|
|
95
|
+
for (let i = Math.max(from, 0); i < fileLines.length; i++)
|
|
96
|
+
if (re.test(fileLines[i]))
|
|
97
|
+
return i + 1;
|
|
98
|
+
return from;
|
|
99
|
+
}
|
|
100
|
+
export function valueLineOf(fileLines, key, value, from) {
|
|
101
|
+
const re = new RegExp(`^\\s*(?:-\\s+)?${escapeRegExp(key)}\\s*:\\s*(["']?)${escapeRegExp(value)}\\1\\s*(?:#.*)?$`);
|
|
102
|
+
for (let i = Math.max(from, 0); i < fileLines.length; i++)
|
|
103
|
+
if (re.test(fileLines[i]))
|
|
104
|
+
return i + 1;
|
|
105
|
+
return from;
|
|
106
|
+
}
|
|
@@ -27,10 +27,11 @@
|
|
|
27
27
|
* - The producer is the member the `sqlMember` field names. Unset, each link
|
|
28
28
|
* leaves the producer to `resolveLinks`, which picks the one member that
|
|
29
29
|
* exposes the table.
|
|
30
|
+
*
|
|
31
|
+
* The same pass reads the project's models as outputs (#3935); see
|
|
32
|
+
* `./dbt-models-reader.ts`.
|
|
30
33
|
*/
|
|
31
34
|
import type { KindLinkRead, KindReaderInput } from "./kind-link-readers.js";
|
|
32
|
-
export
|
|
33
|
-
/** The dialects whose naming the reader follows; the member's `dialect` field picks one. */
|
|
34
|
-
export declare const DBT_DIALECTS: readonly ["postgres", "clickhouse"];
|
|
35
|
+
export { DBT_DIALECTS, DBT_PROJECT_FILE } from "./dbt-project-common.js";
|
|
35
36
|
export declare function readDbtProject(input: KindReaderInput): KindLinkRead;
|
|
36
37
|
//# sourceMappingURL=dbt-project-reader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbt-project-reader.d.ts","sourceRoot":"","sources":["../../src/workspace/dbt-project-reader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"dbt-project-reader.d.ts","sourceRoot":"","sources":["../../src/workspace/dbt-project-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,YAAY,EAA6B,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAmBpG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CAsJnE"}
|