@gooddata/sdk-maql-language-server 0.0.0-stage → 11.65.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +118 -2
- package/esm/completions/complete.d.ts +12 -0
- package/esm/completions/complete.d.ts.map +1 -0
- package/esm/completions/complete.js +316 -0
- package/esm/completions/descriptions.d.ts +42 -0
- package/esm/completions/descriptions.d.ts.map +1 -0
- package/esm/completions/descriptions.js +290 -0
- package/esm/completions/findContext.d.ts +19 -0
- package/esm/completions/findContext.d.ts.map +1 -0
- package/esm/completions/findContext.js +172 -0
- package/esm/completions/functionDescriptions.d.ts +3 -0
- package/esm/completions/functionDescriptions.d.ts.map +1 -0
- package/esm/completions/functionDescriptions.js +99 -0
- package/esm/completions/sort.d.ts +4 -0
- package/esm/completions/sort.d.ts.map +1 -0
- package/esm/completions/sort.js +88 -0
- package/esm/constants.d.ts +21 -0
- package/esm/constants.d.ts.map +1 -0
- package/esm/constants.js +22 -0
- package/esm/dateElementFormat.d.ts +9 -0
- package/esm/dateElementFormat.d.ts.map +1 -0
- package/esm/dateElementFormat.js +60 -0
- package/esm/decorations.d.ts +39 -0
- package/esm/decorations.d.ts.map +1 -0
- package/esm/decorations.js +42 -0
- package/esm/diagnostics.d.ts +12 -0
- package/esm/diagnostics.d.ts.map +1 -0
- package/esm/diagnostics.js +260 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/approximate_count.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/approximate_count.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/approximate_count.js +61 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/avg.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/avg.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/avg.js +19 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/count.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/count.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/count.js +72 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/first.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/first.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/first.js +41 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/last.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/last.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/last.js +69 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/max.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/max.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/max.js +61 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/median.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/median.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/median.js +25 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/min.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/min.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/min.js +63 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/sum.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/sum.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/aggregation/sum.js +20 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/case.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/case.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/case.js +73 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/if-then-else.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/if-then-else.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/if-then-else.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/ifnull.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/ifnull.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/conditionals/ifnull.js +96 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-ranking-filters.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-ranking-filters.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-ranking-filters.js +71 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-having-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-having-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-having-clause.js +65 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-like-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-like-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-like-clause.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-where-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-where-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/filtering-with-the-where-clause.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions-except-for-attribute.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions-except-for-attribute.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions-except-for-attribute.js +21 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all-in-all-other-dimensions.js +27 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-all.js +64 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-attribute-all-in-all-other-dimensions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-attribute-all-in-all-other-dimensions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by-attribute-all-in-all-other-dimensions.js +22 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-attribute-filters/by.js +85 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-except.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-except.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-except.js +37 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-filter.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-filter.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/with-parent-filter.js +42 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-except.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-except.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-except.js +94 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-filter.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-filter.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/filters/overriding-parent/without-parent-filter.js +33 -0
- package/esm/docs/en/docs/create-metrics/maql/for-each.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/for-each.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/for-each.js +17 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/and.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/and.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/and.js +37 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/not.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/not.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/not.js +12 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/or.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/or.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/logical-operators/or.js +22 -0
- package/esm/docs/en/docs/create-metrics/maql/maql-and-multidimensionality.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/maql-and-multidimensionality.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/maql-and-multidimensionality.js +59 -0
- package/esm/docs/en/docs/create-metrics/maql/math/abs.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/abs.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/abs.js +23 -0
- package/esm/docs/en/docs/create-metrics/maql/math/arithmetic-operations.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/arithmetic-operations.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/arithmetic-operations.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ceiling.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ceiling.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ceiling.js +21 -0
- package/esm/docs/en/docs/create-metrics/maql/math/exp.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/exp.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/exp.js +27 -0
- package/esm/docs/en/docs/create-metrics/maql/math/floor.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/floor.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/floor.js +21 -0
- package/esm/docs/en/docs/create-metrics/maql/math/greatest.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/greatest.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/greatest.js +13 -0
- package/esm/docs/en/docs/create-metrics/maql/math/least.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/least.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/least.js +13 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ln.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ln.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/ln.js +33 -0
- package/esm/docs/en/docs/create-metrics/maql/math/log.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/log.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/log.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/math/power.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/power.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/power.js +33 -0
- package/esm/docs/en/docs/create-metrics/maql/math/round.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/round.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/round.js +34 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sign.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sign.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sign.js +30 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sqrt.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sqrt.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/sqrt.js +32 -0
- package/esm/docs/en/docs/create-metrics/maql/math/trunc.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/math/trunc.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/math/trunc.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/percentile.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/percentile.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/percentile.js +57 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/rank-variations.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/rank-variations.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/rank-variations.js +90 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-in.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-in.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-in.js +53 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-of.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-of.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/where-top-or-bottom-of.js +29 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/within-clause.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/within-clause.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/ranking/within-clause.js +101 -0
- package/esm/docs/en/docs/create-metrics/maql/relational-operators.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/relational-operators.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/relational-operators.js +50 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/rolling-window.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/rolling-window.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/rolling-window.js +71 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-total-statistical-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-total-statistical-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-total-statistical-functions.js +54 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-totals-for-core-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-totals-for-core-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/runing-totals/running-totals-for-core-functions.js +37 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/correl.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/correl.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/correl.js +47 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/covariance-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/covariance-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/covariance-functions.js +46 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/forecast.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/forecast.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/forecast.js +74 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/least-squares-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/least-squares-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/least-squares-functions.js +44 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/standard-deviation-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/standard-deviation-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/standard-deviation-functions.js +88 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/variance-functions.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/variance-functions.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/statistic/variance-functions.js +54 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-each.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-each.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-each.js +96 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next-period.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next-period.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next-period.js +38 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-next.js +27 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous-period.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous-period.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous-period.js +26 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/for-previous.js +30 -0
- package/esm/docs/en/docs/create-metrics/maql/time/functions-for-referring-to-past-time-periods.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time/functions-for-referring-to-past-time-periods.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time/functions-for-referring-to-past-time-periods.js +36 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-add.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-add.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-add.js +53 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-diff.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-diff.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time-arithmetics/datetime-diff.js +55 -0
- package/esm/docs/en/docs/create-metrics/maql/time-macros.d.ts +2 -0
- package/esm/docs/en/docs/create-metrics/maql/time-macros.d.ts.map +1 -0
- package/esm/docs/en/docs/create-metrics/maql/time-macros.js +79 -0
- package/esm/docs/index.d.ts +77 -0
- package/esm/docs/index.d.ts.map +1 -0
- package/esm/docs/index.js +141 -0
- package/esm/findObjects.d.ts +13 -0
- package/esm/findObjects.d.ts.map +1 -0
- package/esm/findObjects.js +72 -0
- package/esm/format.d.ts +4 -0
- package/esm/format.d.ts.map +1 -0
- package/esm/format.js +581 -0
- package/esm/highlight/convert.d.ts +3 -0
- package/esm/highlight/convert.d.ts.map +1 -0
- package/esm/highlight/convert.js +12 -0
- package/esm/highlight/semanticsHighlight.d.ts +29 -0
- package/esm/highlight/semanticsHighlight.d.ts.map +1 -0
- package/esm/highlight/semanticsHighlight.js +326 -0
- package/esm/highlight/utils.d.ts +3 -0
- package/esm/highlight/utils.d.ts.map +1 -0
- package/esm/highlight/utils.js +14 -0
- package/esm/hover.d.ts +17 -0
- package/esm/hover.d.ts.map +1 -0
- package/esm/hover.js +60 -0
- package/esm/index.d.ts +9 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +7 -0
- package/esm/labelElements.d.ts +22 -0
- package/esm/labelElements.d.ts.map +1 -0
- package/esm/labelElements.js +225 -0
- package/esm/maqlLanguageService.d.ts +51 -0
- package/esm/maqlLanguageService.d.ts.map +1 -0
- package/esm/maqlLanguageService.js +102 -0
- package/esm/maqlObjectTypes.d.ts +15 -0
- package/esm/maqlObjectTypes.d.ts.map +1 -0
- package/esm/maqlObjectTypes.js +28 -0
- package/esm/maqlServer.d.ts +4 -0
- package/esm/maqlServer.d.ts.map +1 -0
- package/esm/maqlServer.js +78 -0
- package/esm/metadata/model.d.ts +116 -0
- package/esm/metadata/model.d.ts.map +1 -0
- package/esm/metadata/model.js +137 -0
- package/esm/metadata/parameters.d.ts +16 -0
- package/esm/metadata/parameters.d.ts.map +1 -0
- package/esm/metadata/parameters.js +38 -0
- package/esm/metadata/types.d.ts +14 -0
- package/esm/metadata/types.d.ts.map +1 -0
- package/esm/metadata/types.js +2 -0
- package/esm/metadataService.d.ts +50 -0
- package/esm/metadataService.d.ts.map +1 -0
- package/esm/metadataService.js +156 -0
- package/esm/node/main.d.ts +2 -0
- package/esm/node/main.d.ts.map +1 -0
- package/esm/node/main.js +18 -0
- package/esm/parameterConstraints.d.ts +5 -0
- package/esm/parameterConstraints.d.ts.map +1 -0
- package/esm/parameterConstraints.js +198 -0
- package/esm/parseMaql.d.ts +43 -0
- package/esm/parseMaql.d.ts.map +1 -0
- package/esm/parseMaql.js +97 -0
- package/esm/renderParameters.d.ts +33 -0
- package/esm/renderParameters.d.ts.map +1 -0
- package/esm/renderParameters.js +72 -0
- package/esm/tests/metadata.test.helpers.d.ts +8 -0
- package/esm/tests/metadata.test.helpers.d.ts.map +1 -0
- package/esm/tests/metadata.test.helpers.js +468 -0
- package/esm/tokenRanges.d.ts +36 -0
- package/esm/tokenRanges.d.ts.map +1 -0
- package/esm/tokenRanges.js +54 -0
- package/esm/types/hierarchy.d.ts +37 -0
- package/esm/types/hierarchy.d.ts.map +1 -0
- package/esm/types/hierarchy.js +165 -0
- package/esm/types/signatures.d.ts +40 -0
- package/esm/types/signatures.d.ts.map +1 -0
- package/esm/types/signatures.js +142 -0
- package/esm/types/typeChecking.d.ts +56 -0
- package/esm/types/typeChecking.d.ts.map +1 -0
- package/esm/types/typeChecking.js +296 -0
- package/esm/types/typeModel.d.ts +18 -0
- package/esm/types/typeModel.d.ts.map +1 -0
- package/esm/types/typeModel.js +84 -0
- package/package.json +89 -3
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// (C) 2021-2026 GoodData Corporation
|
|
2
|
+
import MaqlPkg from "@gooddata/maql-antlr4ts";
|
|
3
|
+
const { AbstractAstVisitor, positionInRange } = MaqlPkg;
|
|
4
|
+
import { isTigerType, tigerIdTypeToObjectType } from "@gooddata/sdk-backend-tiger";
|
|
5
|
+
import { normalizeMaqlObjectType } from "./maqlObjectTypes.js";
|
|
6
|
+
import { AntlrRange, isMaqlObject, isMaqlString, } from "./tokenRanges.js";
|
|
7
|
+
/**
|
|
8
|
+
* Uses a visitor to make a depth-first tree-walk of a MAQL parse tree to find a correct "LabelContext"
|
|
9
|
+
* for a given caret offset
|
|
10
|
+
*/
|
|
11
|
+
export function findLabelContext(metric, position) {
|
|
12
|
+
const visitor = new LabelContextFinder(position);
|
|
13
|
+
const ast = metric.ast;
|
|
14
|
+
visitor.visit(ast);
|
|
15
|
+
return visitor.caretLabelContext ?? new LabelContext();
|
|
16
|
+
}
|
|
17
|
+
export function labelElementsFinder(metric) {
|
|
18
|
+
const visitor = new LabelElementsFinder();
|
|
19
|
+
visitor.visit(metric.ast);
|
|
20
|
+
return visitor.pairs;
|
|
21
|
+
}
|
|
22
|
+
export class LabelContext {
|
|
23
|
+
labels = [];
|
|
24
|
+
strings = [];
|
|
25
|
+
timeMacros = [];
|
|
26
|
+
get operands() {
|
|
27
|
+
return [...this.labels, ...this.strings, ...this.timeMacros];
|
|
28
|
+
}
|
|
29
|
+
isEmpty() {
|
|
30
|
+
return this.operands.length === 0;
|
|
31
|
+
}
|
|
32
|
+
addString(text, range) {
|
|
33
|
+
this.strings.push({
|
|
34
|
+
string: text,
|
|
35
|
+
range: range,
|
|
36
|
+
});
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
addLabel(maqlType, id, range, _space) {
|
|
40
|
+
// MAQL spells a computed attribute `computed_attribute`; the Tiger type is what the
|
|
41
|
+
// elements query and the catalog lookups understand.
|
|
42
|
+
const type = normalizeMaqlObjectType(maqlType);
|
|
43
|
+
if (!isTigerType(type)) {
|
|
44
|
+
return this; // `type "${type}" of the object {${type}${id}${space ? `/${space}` : ""}} is not valid`
|
|
45
|
+
}
|
|
46
|
+
// A computed attribute buckets rows into string values like a label does, so its values are
|
|
47
|
+
// listed and validated the same way. Its ref carries the computedAttribute type, which the
|
|
48
|
+
// elements query uses to address it (it has no labels of its own).
|
|
49
|
+
if (type === "attribute" || type === "label" || type === "computedAttribute") {
|
|
50
|
+
this.labels.push({
|
|
51
|
+
actualType: type,
|
|
52
|
+
tigerType: type,
|
|
53
|
+
id: id,
|
|
54
|
+
ref: {
|
|
55
|
+
type: tigerIdTypeToObjectType[type],
|
|
56
|
+
identifier: id,
|
|
57
|
+
},
|
|
58
|
+
range: range,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
addTimeMacro(transformationFunction, granularity, range) {
|
|
64
|
+
this.timeMacros.push({
|
|
65
|
+
transformationFunction: transformationFunction,
|
|
66
|
+
granularity: granularity,
|
|
67
|
+
range: range,
|
|
68
|
+
});
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
add(other) {
|
|
72
|
+
other.labels.forEach((label) => this.labels.push(label));
|
|
73
|
+
other.timeMacros.forEach((timeMacro) => this.timeMacros.push(timeMacro));
|
|
74
|
+
other.strings.forEach((str) => this.strings.push(str));
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
toString() {
|
|
78
|
+
return ("# LabelContext:\n## labels:\n" +
|
|
79
|
+
this.labels.map((label) => `${label.tigerType}/${label.id}`).join("\n") +
|
|
80
|
+
"\n## strings:\n" +
|
|
81
|
+
this.strings.map((string) => string.string).join("\n"));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
class LabelContextMarker extends AbstractAstVisitor {
|
|
85
|
+
defaultResult() {
|
|
86
|
+
return new LabelContext();
|
|
87
|
+
}
|
|
88
|
+
aggregateResult(aggregate, nextResult) {
|
|
89
|
+
return aggregate.add(nextResult);
|
|
90
|
+
}
|
|
91
|
+
visitFunctionNode(node) {
|
|
92
|
+
const lc = new LabelContext();
|
|
93
|
+
if (node.range === undefined)
|
|
94
|
+
return lc;
|
|
95
|
+
const name = node.name.toUpperCase();
|
|
96
|
+
const range = AntlrRange.fromAstRange(node.range);
|
|
97
|
+
if (node.type === "time macro") {
|
|
98
|
+
// assume that the first argument of time macro is always granularity
|
|
99
|
+
const granularity = node.content[0]?.value;
|
|
100
|
+
if (granularity) {
|
|
101
|
+
lc.addTimeMacro(name, granularity, range);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (node.type === "function") {
|
|
105
|
+
// special case for MIN and MAX functions
|
|
106
|
+
// to remove this special case we would need "source" information in function definition
|
|
107
|
+
if (name === "MAX" || name === "MIN") {
|
|
108
|
+
// ignore second argument of MIN/MAX function, as it is just a "witness attribute"
|
|
109
|
+
const [expr, _witness] = node.content;
|
|
110
|
+
if (expr) {
|
|
111
|
+
lc.add(this.visit(expr));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.visitChildren(node);
|
|
117
|
+
}
|
|
118
|
+
return lc;
|
|
119
|
+
}
|
|
120
|
+
visitIdentifierNode(node) {
|
|
121
|
+
const lc = new LabelContext();
|
|
122
|
+
if (node.range === undefined)
|
|
123
|
+
return lc;
|
|
124
|
+
const range = AntlrRange.fromAstRange(node.range);
|
|
125
|
+
lc.addLabel(node.objectType, node.id, range, node.space);
|
|
126
|
+
return lc;
|
|
127
|
+
}
|
|
128
|
+
visitStringLiteralNode(node) {
|
|
129
|
+
const lc = new LabelContext();
|
|
130
|
+
if (node.range === undefined)
|
|
131
|
+
return lc;
|
|
132
|
+
const range = AntlrRange.fromAstRange(node.range);
|
|
133
|
+
return lc.addString(node.value, range);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Finds a label context relevant to provided caret position
|
|
138
|
+
*/
|
|
139
|
+
class LabelContextFinder extends LabelContextMarker {
|
|
140
|
+
caretPosition;
|
|
141
|
+
caretLabelContext;
|
|
142
|
+
continueTraversal = true;
|
|
143
|
+
constructor(caretPosition) {
|
|
144
|
+
super();
|
|
145
|
+
this.caretPosition = caretPosition;
|
|
146
|
+
}
|
|
147
|
+
visit(node) {
|
|
148
|
+
const lc = super.visit(node);
|
|
149
|
+
if (this.continueTraversal &&
|
|
150
|
+
node.contextRange &&
|
|
151
|
+
positionInRange(this.caretPosition, node.contextRange)) {
|
|
152
|
+
this.caretLabelContext = lc;
|
|
153
|
+
}
|
|
154
|
+
return lc;
|
|
155
|
+
}
|
|
156
|
+
visitOperatorNode(node) {
|
|
157
|
+
// postorder AST traversal
|
|
158
|
+
const lc = super.visitOperatorNode(node);
|
|
159
|
+
// if the caret is in the operands of the following operators, use their label context and look no further
|
|
160
|
+
// idea: it may make sense to add "label context" to type information and unify this with findContext
|
|
161
|
+
switch (node.type) {
|
|
162
|
+
case "=":
|
|
163
|
+
case "<>":
|
|
164
|
+
case ">=":
|
|
165
|
+
case "<=":
|
|
166
|
+
case "<":
|
|
167
|
+
case ">":
|
|
168
|
+
case "like":
|
|
169
|
+
case "ilike":
|
|
170
|
+
case "not like":
|
|
171
|
+
case "not ilike":
|
|
172
|
+
case "between":
|
|
173
|
+
case "not between":
|
|
174
|
+
case "in":
|
|
175
|
+
case "not in":
|
|
176
|
+
if (this.continueTraversal &&
|
|
177
|
+
node.contextRange &&
|
|
178
|
+
positionInRange(this.caretPosition, node.contextRange)) {
|
|
179
|
+
this.continueTraversal = false;
|
|
180
|
+
this.caretLabelContext = lc;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// the result of filter expression is a boolean value, therefore inner label context is discarded
|
|
184
|
+
return this.defaultResult();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Traverses the AST to collect all instances of strings in relation to labels. This can then be used to validate
|
|
189
|
+
* label elements.
|
|
190
|
+
*/
|
|
191
|
+
class LabelElementsFinder extends LabelContextMarker {
|
|
192
|
+
pairs = [];
|
|
193
|
+
visitOperatorNode(node) {
|
|
194
|
+
const operandContexts = node.content.map((operand) => this.visit(operand).operands);
|
|
195
|
+
if (node.type !== "like" && node.type !== "not like") {
|
|
196
|
+
this.addOperands(operandContexts);
|
|
197
|
+
}
|
|
198
|
+
return this.defaultResult();
|
|
199
|
+
}
|
|
200
|
+
addOperands(operandContexts) {
|
|
201
|
+
if (operandContexts.length <= 1) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const head = operandContexts[0];
|
|
205
|
+
const tail = operandContexts.slice(1);
|
|
206
|
+
for (const headOp of head) {
|
|
207
|
+
for (const ops of tail) {
|
|
208
|
+
for (const op of ops) {
|
|
209
|
+
this.pushPair(headOp, op);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
this.addOperands(tail);
|
|
214
|
+
}
|
|
215
|
+
pushPair(left, right) {
|
|
216
|
+
if (isMaqlObject(left)) {
|
|
217
|
+
if (isMaqlString(right)) {
|
|
218
|
+
this.pairs.push([left, right]);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (isMaqlObject(right)) {
|
|
222
|
+
this.pushPair(right, left);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type CompletionItem, type CompletionList, type Diagnostic, type FormattingOptions, type InitializeResult, type SemanticTokens, type TextEdit } from "vscode-languageserver";
|
|
2
|
+
import { type Position, type Range, type TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
import { type IDecoration } from "./decorations.js";
|
|
4
|
+
import { type Locale } from "./docs/index.js";
|
|
5
|
+
import { type HighlightToken } from "./highlight/semanticsHighlight.js";
|
|
6
|
+
import { type HoverWithData } from "./hover.js";
|
|
7
|
+
import { type IMetadataInterface } from "./metadata/types.js";
|
|
8
|
+
export interface ILanguageService {
|
|
9
|
+
initialize(): InitializeResult;
|
|
10
|
+
doValidation(textDocument: TextDocument): Promise<Diagnostic[]>;
|
|
11
|
+
doCompletion(textDocument: TextDocument, position: Position): Promise<CompletionList>;
|
|
12
|
+
doCompletionResolve(item: CompletionItem): Promise<CompletionItem>;
|
|
13
|
+
doHighlightTokens(textDocument: TextDocument): Promise<HighlightToken[]>;
|
|
14
|
+
doSemanticTokens(textDocument: TextDocument): Promise<SemanticTokens>;
|
|
15
|
+
doDecoration(textDocument: TextDocument): Promise<IDecoration[]>;
|
|
16
|
+
doFormat(textDocument: TextDocument, options: FormattingOptions): Promise<TextEdit[]>;
|
|
17
|
+
doFormatRange(textDocument: TextDocument, range: Range, options: FormattingOptions): Promise<TextEdit[]>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* MAQL Language Service class
|
|
21
|
+
* A service to manage the capabilities of the MAQL language server
|
|
22
|
+
* Can be supplied by Metadata API credentials to automatically
|
|
23
|
+
* retrieve typed ldmObjects from the Logical Data Model (LDM)
|
|
24
|
+
*/
|
|
25
|
+
export declare class MaqlLanguageService implements ILanguageService {
|
|
26
|
+
constructor(locale?: Locale, metadataService?: IMetadataInterface);
|
|
27
|
+
private _locale;
|
|
28
|
+
get locale(): Locale;
|
|
29
|
+
set locale(locale: string);
|
|
30
|
+
private metadataService?;
|
|
31
|
+
private ldmObjects;
|
|
32
|
+
private labelElementsFunc?;
|
|
33
|
+
private docs;
|
|
34
|
+
private isValidLocale;
|
|
35
|
+
private setMetadataServiceMethods;
|
|
36
|
+
/**
|
|
37
|
+
* A method to get information about the capabilities of the service
|
|
38
|
+
*/
|
|
39
|
+
initialize(): InitializeResult;
|
|
40
|
+
doCompletion(textDocument: TextDocument, position: Position): Promise<CompletionList>;
|
|
41
|
+
doCompletionResolve(item: CompletionItem): Promise<CompletionItem>;
|
|
42
|
+
doHighlightTokens(textDocument: TextDocument): Promise<HighlightToken[]>;
|
|
43
|
+
doSemanticTokens(textDocument: TextDocument): Promise<SemanticTokens>;
|
|
44
|
+
doValidation(textDocument: TextDocument): Promise<Diagnostic[]>;
|
|
45
|
+
doDecoration(textDocument: TextDocument): Promise<IDecoration[]>;
|
|
46
|
+
doHover(textDocument: TextDocument, position: Position): Promise<HoverWithData | null>;
|
|
47
|
+
doFormat(textDocument: TextDocument, options: FormattingOptions): Promise<TextEdit[]>;
|
|
48
|
+
doFormatRange(textDocument: TextDocument, range: Range, options: FormattingOptions): Promise<TextEdit[]>;
|
|
49
|
+
private handleMetadataServiceError;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=maqlLanguageService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maqlLanguageService.d.ts","sourceRoot":"","sources":["../src/maqlLanguageService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// (C) 2021-2026 GoodData Corporation
|
|
2
|
+
import { TextDocumentSyncKind, } from "vscode-languageserver";
|
|
3
|
+
import { complete, resolve } from "./completions/complete.js";
|
|
4
|
+
import { decorate } from "./decorations.js";
|
|
5
|
+
import { validate } from "./diagnostics.js";
|
|
6
|
+
import { docsIndex, locales } from "./docs/index.js";
|
|
7
|
+
import { format, formatRange } from "./format.js";
|
|
8
|
+
import { convertToSemanticTokens } from "./highlight/convert.js";
|
|
9
|
+
import { semanticTokensLegend, semanticsFull } from "./highlight/semanticsHighlight.js";
|
|
10
|
+
import { hover } from "./hover.js";
|
|
11
|
+
/**
|
|
12
|
+
* MAQL Language Service class
|
|
13
|
+
* A service to manage the capabilities of the MAQL language server
|
|
14
|
+
* Can be supplied by Metadata API credentials to automatically
|
|
15
|
+
* retrieve typed ldmObjects from the Logical Data Model (LDM)
|
|
16
|
+
*/
|
|
17
|
+
export class MaqlLanguageService {
|
|
18
|
+
constructor(locale = "en-us", metadataService) {
|
|
19
|
+
this._locale = locale;
|
|
20
|
+
this.metadataService = metadataService;
|
|
21
|
+
this.setMetadataServiceMethods();
|
|
22
|
+
}
|
|
23
|
+
_locale;
|
|
24
|
+
get locale() {
|
|
25
|
+
return this._locale;
|
|
26
|
+
}
|
|
27
|
+
set locale(locale) {
|
|
28
|
+
const lowercaseLocale = locale.toLowerCase();
|
|
29
|
+
if (this.isValidLocale(lowercaseLocale)) {
|
|
30
|
+
this._locale = lowercaseLocale;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
metadataService;
|
|
34
|
+
ldmObjects = Promise.resolve();
|
|
35
|
+
labelElementsFunc;
|
|
36
|
+
docs = docsIndex;
|
|
37
|
+
isValidLocale(locale) {
|
|
38
|
+
return locales.includes(locale);
|
|
39
|
+
}
|
|
40
|
+
setMetadataServiceMethods() {
|
|
41
|
+
if (this.metadataService) {
|
|
42
|
+
this.ldmObjects = this.metadataService
|
|
43
|
+
.getLdmObjects()
|
|
44
|
+
.catch((reason) => this.handleMetadataServiceError(reason));
|
|
45
|
+
this.labelElementsFunc = this.metadataService
|
|
46
|
+
.getLabelElementsFunction()
|
|
47
|
+
.catch((reason) => this.handleMetadataServiceError(reason));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A method to get information about the capabilities of the service
|
|
52
|
+
*/
|
|
53
|
+
initialize() {
|
|
54
|
+
return {
|
|
55
|
+
capabilities: {
|
|
56
|
+
textDocumentSync: TextDocumentSyncKind.Full,
|
|
57
|
+
completionProvider: {
|
|
58
|
+
resolveProvider: true,
|
|
59
|
+
triggerCharacters: [" ", "(", "/", "{"],
|
|
60
|
+
},
|
|
61
|
+
semanticTokensProvider: {
|
|
62
|
+
legend: semanticTokensLegend,
|
|
63
|
+
full: true,
|
|
64
|
+
range: false,
|
|
65
|
+
},
|
|
66
|
+
hoverProvider: true,
|
|
67
|
+
documentFormattingProvider: true,
|
|
68
|
+
documentRangeFormattingProvider: true,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async doCompletion(textDocument, position) {
|
|
73
|
+
return complete(textDocument.getText(), textDocument.offsetAt(position), (await this.ldmObjects) || undefined, (await this.labelElementsFunc) || undefined);
|
|
74
|
+
}
|
|
75
|
+
async doCompletionResolve(item) {
|
|
76
|
+
return resolve(item, (resolveTag) => Promise.resolve(this.docs[this._locale][resolveTag]));
|
|
77
|
+
}
|
|
78
|
+
doHighlightTokens(textDocument) {
|
|
79
|
+
return Promise.resolve(semanticsFull(textDocument.getText()));
|
|
80
|
+
}
|
|
81
|
+
async doSemanticTokens(textDocument) {
|
|
82
|
+
return convertToSemanticTokens(await this.doHighlightTokens(textDocument));
|
|
83
|
+
}
|
|
84
|
+
async doValidation(textDocument) {
|
|
85
|
+
return validate(textDocument.getText(), (await this.ldmObjects) || undefined, (await this.labelElementsFunc) || undefined);
|
|
86
|
+
}
|
|
87
|
+
async doDecoration(textDocument) {
|
|
88
|
+
return decorate(textDocument.getText(), (await this.ldmObjects) || undefined);
|
|
89
|
+
}
|
|
90
|
+
async doHover(textDocument, position) {
|
|
91
|
+
return hover(textDocument.getText(), position, (await this.ldmObjects) || undefined);
|
|
92
|
+
}
|
|
93
|
+
doFormat(textDocument, options) {
|
|
94
|
+
return Promise.resolve(format(textDocument.getText(), options));
|
|
95
|
+
}
|
|
96
|
+
doFormatRange(textDocument, range, options) {
|
|
97
|
+
return Promise.resolve(formatRange(textDocument.getText(), range, options));
|
|
98
|
+
}
|
|
99
|
+
handleMetadataServiceError(_reason) {
|
|
100
|
+
// TODO: log failures (dependent on environment - web/node)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translates an object type as written in MAQL into the Tiger entity type it denotes. Types that
|
|
3
|
+
* are spelled identically on both sides are returned unchanged, so this is safe to apply to any
|
|
4
|
+
* `{type/id}` token before looking the type up.
|
|
5
|
+
*
|
|
6
|
+
* Keep the MAQL spelling for anything user-facing (diagnostics quote what the author wrote).
|
|
7
|
+
*/
|
|
8
|
+
export declare function normalizeMaqlObjectType(maqlObjectType: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Translates a Tiger entity type into the way MAQL spells it. Use it whenever a `{type/id}`
|
|
11
|
+
* reference is written back into MAQL text - a catalog object carries the Tiger type, which the
|
|
12
|
+
* parser would reject for computed attributes.
|
|
13
|
+
*/
|
|
14
|
+
export declare function toMaqlObjectType(tigerType: string): string;
|
|
15
|
+
//# sourceMappingURL=maqlObjectTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maqlObjectTypes.d.ts","sourceRoot":"","sources":["../src/maqlObjectTypes.ts"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
/**
|
|
3
|
+
* MAQL spells the computed-attribute object type with an underscore (`{computed_attribute/id}`),
|
|
4
|
+
* while the Tiger entity type it maps onto is camelCase (`computedAttribute`). Every other MAQL
|
|
5
|
+
* object type is spelled the same on both sides, so this is the only bridge the two need.
|
|
6
|
+
*/
|
|
7
|
+
const MAQL_OBJECT_TYPE_TO_TIGER_TYPE = {
|
|
8
|
+
computed_attribute: "computedAttribute",
|
|
9
|
+
};
|
|
10
|
+
const TIGER_TYPE_TO_MAQL_OBJECT_TYPE = Object.fromEntries(Object.entries(MAQL_OBJECT_TYPE_TO_TIGER_TYPE).map(([maqlType, tigerType]) => [tigerType, maqlType]));
|
|
11
|
+
/**
|
|
12
|
+
* Translates an object type as written in MAQL into the Tiger entity type it denotes. Types that
|
|
13
|
+
* are spelled identically on both sides are returned unchanged, so this is safe to apply to any
|
|
14
|
+
* `{type/id}` token before looking the type up.
|
|
15
|
+
*
|
|
16
|
+
* Keep the MAQL spelling for anything user-facing (diagnostics quote what the author wrote).
|
|
17
|
+
*/
|
|
18
|
+
export function normalizeMaqlObjectType(maqlObjectType) {
|
|
19
|
+
return MAQL_OBJECT_TYPE_TO_TIGER_TYPE[maqlObjectType] ?? maqlObjectType;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Translates a Tiger entity type into the way MAQL spells it. Use it whenever a `{type/id}`
|
|
23
|
+
* reference is written back into MAQL text - a catalog object carries the Tiger type, which the
|
|
24
|
+
* parser would reject for computed attributes.
|
|
25
|
+
*/
|
|
26
|
+
export function toMaqlObjectType(tigerType) {
|
|
27
|
+
return TIGER_TYPE_TO_MAQL_OBJECT_TYPE[tigerType] ?? tigerType;
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maqlServer.d.ts","sourceRoot":"","sources":["../src/maqlServer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAIvE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,wBAAgB,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,kBAAkB,QAuFvF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// (C) 2021-2026 GoodData Corporation
|
|
2
|
+
import { TextDocuments } from "vscode-languageserver";
|
|
3
|
+
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
4
|
+
import { MaqlLanguageService } from "./maqlLanguageService.js";
|
|
5
|
+
export function startServer(connection, metadataService) {
|
|
6
|
+
const languageService = new MaqlLanguageService("en-us", metadataService);
|
|
7
|
+
const documents = new TextDocuments(TextDocument);
|
|
8
|
+
documents.listen(connection);
|
|
9
|
+
connection.onInitialize((params) => {
|
|
10
|
+
connection.tracer.log("initialize");
|
|
11
|
+
if (params.locale) {
|
|
12
|
+
languageService.locale = params.locale;
|
|
13
|
+
}
|
|
14
|
+
return languageService.initialize();
|
|
15
|
+
});
|
|
16
|
+
connection.onInitialized(() => { });
|
|
17
|
+
documents.onDidOpen(() => { });
|
|
18
|
+
documents.onDidClose(() => { });
|
|
19
|
+
documents.onDidChangeContent((params) => {
|
|
20
|
+
languageService
|
|
21
|
+
.doValidation(params.document)
|
|
22
|
+
.then((diagnostics) => {
|
|
23
|
+
connection.tracer.log(`validateTextDocument uri=${params.document.uri}`);
|
|
24
|
+
void connection.sendDiagnostics({
|
|
25
|
+
uri: params.document.uri,
|
|
26
|
+
diagnostics: diagnostics,
|
|
27
|
+
});
|
|
28
|
+
})
|
|
29
|
+
.catch((reason) => {
|
|
30
|
+
connection.console.error(`FAILED validateTextDocument uri=${params.document.uri} ${reason}`);
|
|
31
|
+
// clear diagnostics, because no diagnostics is better than false diagnostics
|
|
32
|
+
void connection.sendDiagnostics({
|
|
33
|
+
uri: params.document.uri,
|
|
34
|
+
diagnostics: [],
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
documents.onDidSave(() => { });
|
|
39
|
+
connection.onCompletion((params) => {
|
|
40
|
+
const document = documents.get(params.textDocument.uri);
|
|
41
|
+
if (!document) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return languageService.doCompletion(document, params.position);
|
|
45
|
+
});
|
|
46
|
+
connection.onCompletionResolve((item) => languageService.doCompletionResolve(item));
|
|
47
|
+
connection.languages.semanticTokens.on(async (params) => {
|
|
48
|
+
const document = documents.get(params.textDocument.uri);
|
|
49
|
+
if (!document) {
|
|
50
|
+
return {
|
|
51
|
+
data: [],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return await languageService.doSemanticTokens(document);
|
|
55
|
+
});
|
|
56
|
+
connection.onHover((params) => {
|
|
57
|
+
const document = documents.get(params.textDocument.uri);
|
|
58
|
+
if (!document) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return languageService.doHover(document, params.position);
|
|
62
|
+
});
|
|
63
|
+
connection.onDocumentFormatting((params) => {
|
|
64
|
+
const document = documents.get(params.textDocument.uri);
|
|
65
|
+
if (!document) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return languageService.doFormat(document, params.options);
|
|
69
|
+
});
|
|
70
|
+
connection.onDocumentRangeFormatting((params) => {
|
|
71
|
+
const document = documents.get(params.textDocument.uri);
|
|
72
|
+
if (!document) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return languageService.doFormatRange(document, params.range, params.options);
|
|
76
|
+
});
|
|
77
|
+
connection.listen();
|
|
78
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { type IElementsQueryOptions } from "@gooddata/sdk-backend-spi";
|
|
2
|
+
import { type TigerObjectType } from "@gooddata/sdk-backend-tiger";
|
|
3
|
+
import { type DateAttributeGranularity, type IAttributeDisplayFormMetadataObject, type IAttributeElement, type IAttributeMetadataObject, type ICatalogAttribute, type ICatalogDateDataset, type ICatalogFact, type ICatalogMeasure, type IComputedAttributeMetadataObject, type IFactMetadataObject, type IMeasureMetadataObject, type IMetadataObject, type IParameterMetadataObject } from "@gooddata/sdk-model";
|
|
4
|
+
export interface ITigerMetadataObject extends IMetadataObject {
|
|
5
|
+
tigerType: TigerObjectType;
|
|
6
|
+
}
|
|
7
|
+
export type ITigerMetadataObjectStub = Pick<ITigerMetadataObject, "id" | "ref"> & Partial<ITigerMetadataObject>;
|
|
8
|
+
export interface ITigerAttribute extends IAttributeMetadataObject, ITigerMetadataObject {
|
|
9
|
+
type: "attribute";
|
|
10
|
+
tigerType: "attribute";
|
|
11
|
+
tigerTypeModifier?: "date";
|
|
12
|
+
granularity?: DateAttributeGranularity;
|
|
13
|
+
}
|
|
14
|
+
export interface ITigerLabel extends IAttributeDisplayFormMetadataObject, ITigerMetadataObject {
|
|
15
|
+
type: "displayForm";
|
|
16
|
+
tigerType: "label";
|
|
17
|
+
tigerTypeModifier?: "date";
|
|
18
|
+
granularity?: DateAttributeGranularity;
|
|
19
|
+
}
|
|
20
|
+
export interface ITigerDateLabel extends ITigerLabel {
|
|
21
|
+
tigerTypeModifier: "date";
|
|
22
|
+
}
|
|
23
|
+
export interface ITigerFact extends IFactMetadataObject, ITigerMetadataObject {
|
|
24
|
+
type: "fact";
|
|
25
|
+
tigerType: "fact";
|
|
26
|
+
}
|
|
27
|
+
export interface ITigerDataset extends ITigerMetadataObject {
|
|
28
|
+
type: "dataSet";
|
|
29
|
+
tigerType: "dataset";
|
|
30
|
+
}
|
|
31
|
+
export interface ITigerMetric extends IMeasureMetadataObject, ITigerMetadataObject {
|
|
32
|
+
type: "measure";
|
|
33
|
+
tigerType: "metric";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A computed attribute is referenced from MAQL by its own type rather than through a label - it has
|
|
37
|
+
* no real labels. In MAQL text the type is spelled `computed_attribute`, which
|
|
38
|
+
* {@link normalizeMaqlObjectType} translates into the `computedAttribute` Tiger type used here.
|
|
39
|
+
*/
|
|
40
|
+
export interface ITigerComputedAttribute extends IComputedAttributeMetadataObject, ITigerMetadataObject {
|
|
41
|
+
type: "computedAttribute";
|
|
42
|
+
tigerType: "computedAttribute";
|
|
43
|
+
}
|
|
44
|
+
export interface ITigerParameter extends IParameterMetadataObject, ITigerMetadataObject {
|
|
45
|
+
type: "parameter";
|
|
46
|
+
tigerType: "parameter";
|
|
47
|
+
}
|
|
48
|
+
export declare function isITigerAttribute(object: ITigerMetadataObject): object is ITigerAttribute;
|
|
49
|
+
export declare function isITigerLabel(object: ITigerMetadataObject): object is ITigerLabel;
|
|
50
|
+
export declare function isITigerDateLabel(object: ITigerMetadataObject): object is ITigerDateLabel;
|
|
51
|
+
export declare function isITigerFact(object: ITigerMetadataObject): object is ITigerFact;
|
|
52
|
+
export declare function isITigerMetric(object: ITigerMetadataObject): object is ITigerMetric;
|
|
53
|
+
export declare function isITigerComputedAttribute(object: ITigerMetadataObject): object is ITigerComputedAttribute;
|
|
54
|
+
export declare function isITigerParameter(object: ITigerMetadataObject): object is ITigerParameter;
|
|
55
|
+
/**
|
|
56
|
+
* The dataset fields that MAQL completion uses. SPI dataset metadata objects and declarative
|
|
57
|
+
* datasets both have them.
|
|
58
|
+
*/
|
|
59
|
+
export interface ILdmDataset {
|
|
60
|
+
id: string;
|
|
61
|
+
title: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
}
|
|
64
|
+
export declare class LdmObjects {
|
|
65
|
+
private readonly attributes;
|
|
66
|
+
private readonly labels;
|
|
67
|
+
private readonly facts;
|
|
68
|
+
private readonly metrics;
|
|
69
|
+
private readonly computedAttributes;
|
|
70
|
+
private readonly parameters;
|
|
71
|
+
private readonly datasets;
|
|
72
|
+
readonly size: number;
|
|
73
|
+
constructor(attributes: ICatalogAttribute[], facts: ICatalogFact[], metrics: ICatalogMeasure[], parameters: IParameterMetadataObject[], dates: ICatalogDateDataset[], datasets: ILdmDataset[], computedAttributes?: IComputedAttributeMetadataObject[]);
|
|
74
|
+
get(type: "attribute", typeModifier?: TypeModifiers): ITigerAttribute[];
|
|
75
|
+
get(type: "label", typeModifier?: TypeModifiers): ITigerLabel[];
|
|
76
|
+
get(type: "fact", typeModifier?: undefined): ITigerFact[];
|
|
77
|
+
get(type: "dataset", typeModifier?: undefined): ITigerDataset[];
|
|
78
|
+
get(type: "metric", typeModifier?: undefined): ITigerMetric[];
|
|
79
|
+
get(type: "computedAttribute", typeModifier?: undefined): ITigerComputedAttribute[];
|
|
80
|
+
get(type: "parameter", typeModifier?: undefined): ITigerParameter[];
|
|
81
|
+
get(type: TigerObjectType, typeModifier?: TypeModifiers): ITigerMetadataObject[] | undefined;
|
|
82
|
+
findObject(object: ITigerMetadataObjectStub): ITigerMetadataObject | undefined;
|
|
83
|
+
findById(type: "metric", id: string): ITigerMetric | undefined;
|
|
84
|
+
findById(type: "parameter", id: string): ITigerParameter | undefined;
|
|
85
|
+
findById(type: TigerObjectType, id: string): ITigerMetadataObject | undefined;
|
|
86
|
+
private processAttributes;
|
|
87
|
+
private processDates;
|
|
88
|
+
private static toTigerMetadataObject;
|
|
89
|
+
private static toTigerDataset;
|
|
90
|
+
}
|
|
91
|
+
interface IMetadataObjectStruct<T extends IMetadataObject> {
|
|
92
|
+
regular: T[];
|
|
93
|
+
date: T[];
|
|
94
|
+
all: T[];
|
|
95
|
+
}
|
|
96
|
+
type TypeModifiers = keyof IMetadataObjectStruct<IMetadataObject>;
|
|
97
|
+
/**
|
|
98
|
+
* @param labels - label objects for which to get elements
|
|
99
|
+
* @param excluded - label elements which should be filtered out from the result
|
|
100
|
+
* @param options - label elements API advanced query options
|
|
101
|
+
*/
|
|
102
|
+
export type LabelElementsFunc = <T extends ITigerMetadataObjectStub>(labels: T[], excluded: string[], options: IElementsQueryOptions, limit?: number, offset?: number) => Promise<ILabelElementsFuncResult<T>>;
|
|
103
|
+
export interface ILabelElementsFuncResult<T extends ITigerMetadataObjectStub> {
|
|
104
|
+
list: ILabelElementList;
|
|
105
|
+
rejected: T[];
|
|
106
|
+
/**
|
|
107
|
+
* Errors the elements queries of the rejected labels failed with
|
|
108
|
+
*/
|
|
109
|
+
rejectionReasons?: Map<T, unknown>;
|
|
110
|
+
}
|
|
111
|
+
export interface ILabelElementList {
|
|
112
|
+
elements: IAttributeElement[];
|
|
113
|
+
isIncomplete: boolean;
|
|
114
|
+
}
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/metadata/model.ts"],"names":[],"mappings":"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"}
|