@intentius/chant-lexicon-grafana 0.97.0 → 0.99.0

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.
Files changed (451) hide show
  1. package/README.md +15 -5
  2. package/dist/actions/grafana.d.ts +24 -0
  3. package/dist/actions/grafana.d.ts.map +1 -0
  4. package/dist/actions/index.d.ts +2 -0
  5. package/dist/actions/index.d.ts.map +1 -0
  6. package/dist/alerting-build.d.ts +128 -0
  7. package/dist/alerting-build.d.ts.map +1 -0
  8. package/dist/alerting.d.ts +273 -0
  9. package/dist/alerting.d.ts.map +1 -0
  10. package/dist/api/apply.d.ts +156 -0
  11. package/dist/api/apply.d.ts.map +1 -0
  12. package/dist/api/bind.d.ts +32 -0
  13. package/dist/api/bind.d.ts.map +1 -0
  14. package/dist/api/client.d.ts +76 -0
  15. package/dist/api/client.d.ts.map +1 -0
  16. package/dist/api/converge.d.ts +33 -0
  17. package/dist/api/converge.d.ts.map +1 -0
  18. package/dist/api/dashboards.d.ts +102 -0
  19. package/dist/api/dashboards.d.ts.map +1 -0
  20. package/dist/api/datasources.d.ts +26 -0
  21. package/dist/api/datasources.d.ts.map +1 -0
  22. package/dist/api/fake-grafana-writes.d.ts +41 -0
  23. package/dist/api/fake-grafana-writes.d.ts.map +1 -0
  24. package/dist/api/fake-grafana.d.ts +61 -0
  25. package/dist/api/fake-grafana.d.ts.map +1 -0
  26. package/dist/api/folders.d.ts +110 -0
  27. package/dist/api/folders.d.ts.map +1 -0
  28. package/dist/api/library-panels.d.ts +52 -0
  29. package/dist/api/library-panels.d.ts.map +1 -0
  30. package/dist/build.d.ts +30 -2
  31. package/dist/build.d.ts.map +1 -1
  32. package/dist/catalog.d.ts +1 -1
  33. package/dist/catalog.d.ts.map +1 -1
  34. package/dist/codegen/docs.d.ts.map +1 -1
  35. package/dist/codegen/schema-types.d.ts +3 -3
  36. package/dist/codegen/schema-types.d.ts.map +1 -1
  37. package/dist/composites/agent-dashboard.d.ts.map +1 -1
  38. package/dist/composites/catalog.d.ts.map +1 -1
  39. package/dist/composites/index.d.ts +4 -2
  40. package/dist/composites/index.d.ts.map +1 -1
  41. package/dist/composites/red-dashboard.d.ts +21 -2
  42. package/dist/composites/red-dashboard.d.ts.map +1 -1
  43. package/dist/composites/shared.d.ts +7 -0
  44. package/dist/composites/shared.d.ts.map +1 -1
  45. package/dist/composites/slo-alert-rules.d.ts +92 -0
  46. package/dist/composites/slo-alert-rules.d.ts.map +1 -0
  47. package/dist/config.d.ts +111 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/contact-point-secrets.d.ts +17 -0
  50. package/dist/contact-point-secrets.d.ts.map +1 -0
  51. package/dist/dashboard.d.ts +16 -2
  52. package/dist/dashboard.d.ts.map +1 -1
  53. package/dist/datasource-refs.d.ts +95 -0
  54. package/dist/datasource-refs.d.ts.map +1 -0
  55. package/dist/datasource.d.ts +29 -0
  56. package/dist/datasource.d.ts.map +1 -1
  57. package/dist/deep-observe-hooks.d.ts +64 -0
  58. package/dist/deep-observe-hooks.d.ts.map +1 -0
  59. package/dist/deep-observe.d.ts +42 -0
  60. package/dist/deep-observe.d.ts.map +1 -0
  61. package/dist/describe-resources.d.ts +49 -0
  62. package/dist/describe-resources.d.ts.map +1 -0
  63. package/dist/detect.d.ts +28 -1
  64. package/dist/detect.d.ts.map +1 -1
  65. package/dist/export-resources.d.ts +38 -0
  66. package/dist/export-resources.d.ts.map +1 -0
  67. package/dist/import/alerting.d.ts +40 -0
  68. package/dist/import/alerting.d.ts.map +1 -0
  69. package/dist/import/edits.d.ts +47 -0
  70. package/dist/import/edits.d.ts.map +1 -0
  71. package/dist/import/embedded.d.ts +14 -0
  72. package/dist/import/embedded.d.ts.map +1 -0
  73. package/dist/import/generator.d.ts +60 -0
  74. package/dist/import/generator.d.ts.map +1 -0
  75. package/dist/import/live-export.d.ts +108 -0
  76. package/dist/import/live-export.d.ts.map +1 -0
  77. package/dist/import/mappings.d.ts +83 -0
  78. package/dist/import/mappings.d.ts.map +1 -0
  79. package/dist/import/model.d.ts +98 -0
  80. package/dist/import/model.d.ts.map +1 -0
  81. package/dist/import/normalize-alerting.d.ts +26 -0
  82. package/dist/import/normalize-alerting.d.ts.map +1 -0
  83. package/dist/import/normalize.d.ts +74 -0
  84. package/dist/import/normalize.d.ts.map +1 -0
  85. package/dist/import/parser.d.ts +110 -0
  86. package/dist/import/parser.d.ts.map +1 -0
  87. package/dist/import/report.d.ts +26 -0
  88. package/dist/import/report.d.ts.map +1 -0
  89. package/dist/import/testdata/fixtures.d.ts +35 -0
  90. package/dist/import/testdata/fixtures.d.ts.map +1 -0
  91. package/dist/import/v2.d.ts +72 -0
  92. package/dist/import/v2.d.ts.map +1 -0
  93. package/dist/index.d.ts +26 -9
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/integrity.json +18 -10
  96. package/dist/k8s.d.ts +107 -0
  97. package/dist/k8s.d.ts.map +1 -0
  98. package/dist/lint/audit-catalog.d.ts +2 -1
  99. package/dist/lint/audit-catalog.d.ts.map +1 -1
  100. package/dist/lint/post-synth/graf101.d.ts +2 -2
  101. package/dist/lint/post-synth/graf102.d.ts +1 -1
  102. package/dist/lint/post-synth/graf107.d.ts +1 -1
  103. package/dist/lint/post-synth/graf108.d.ts +8 -0
  104. package/dist/lint/post-synth/graf108.d.ts.map +1 -0
  105. package/dist/lint/post-synth/graf109.d.ts +8 -0
  106. package/dist/lint/post-synth/graf109.d.ts.map +1 -0
  107. package/dist/lint/post-synth/graf111.d.ts +8 -0
  108. package/dist/lint/post-synth/graf111.d.ts.map +1 -0
  109. package/dist/lint/post-synth/graf112.d.ts +8 -0
  110. package/dist/lint/post-synth/graf112.d.ts.map +1 -0
  111. package/dist/lint/post-synth/graf113.d.ts +8 -0
  112. package/dist/lint/post-synth/graf113.d.ts.map +1 -0
  113. package/dist/lint/post-synth/graf114.d.ts +8 -0
  114. package/dist/lint/post-synth/graf114.d.ts.map +1 -0
  115. package/dist/lint/post-synth/graf115.d.ts +8 -0
  116. package/dist/lint/post-synth/graf115.d.ts.map +1 -0
  117. package/dist/lint/post-synth/grafana-helpers.d.ts +7 -5
  118. package/dist/lint/post-synth/grafana-helpers.d.ts.map +1 -1
  119. package/dist/lint/post-synth/index.d.ts.map +1 -1
  120. package/dist/lint/rules/literal-secret.d.ts +7 -3
  121. package/dist/lint/rules/literal-secret.d.ts.map +1 -1
  122. package/dist/lsp/hover.d.ts.map +1 -1
  123. package/dist/manifest.json +1 -1
  124. package/dist/members.d.ts +27 -0
  125. package/dist/members.d.ts.map +1 -0
  126. package/dist/meta.json +135 -0
  127. package/dist/okf/index.md +36 -2
  128. package/dist/okf/rules/GRAF002.md +3 -2
  129. package/dist/okf/rules/GRAF101.md +3 -2
  130. package/dist/okf/rules/GRAF102.md +1 -0
  131. package/dist/okf/rules/GRAF108.md +11 -0
  132. package/dist/okf/rules/GRAF109.md +15 -0
  133. package/dist/okf/rules/GRAF111.md +11 -0
  134. package/dist/okf/rules/GRAF112.md +16 -0
  135. package/dist/okf/rules/GRAF113.md +16 -0
  136. package/dist/okf/rules/GRAF114.md +11 -0
  137. package/dist/okf/rules/GRAF115.md +11 -0
  138. package/dist/okf/types/AlertListPanel.md +9 -0
  139. package/dist/okf/types/AlertQuery.md +9 -0
  140. package/dist/okf/types/AlertRule.md +9 -0
  141. package/dist/okf/types/AlertRuleGroup.md +9 -0
  142. package/dist/okf/types/BarChartPanel.md +9 -0
  143. package/dist/okf/types/BarGaugePanel.md +9 -0
  144. package/dist/okf/types/CanvasPanel.md +9 -0
  145. package/dist/okf/types/ClassicConditionsExpression.md +9 -0
  146. package/dist/okf/types/ContactPoint.md +14 -0
  147. package/dist/okf/types/Dashboard.md +1 -0
  148. package/dist/okf/types/Datasource.md +3 -2
  149. package/dist/okf/types/ExternalDatasource.md +15 -0
  150. package/dist/okf/types/FlameGraphPanel.md +9 -0
  151. package/dist/okf/types/GeomapPanel.md +9 -0
  152. package/dist/okf/types/HistogramPanel.md +9 -0
  153. package/dist/okf/types/MathExpression.md +9 -0
  154. package/dist/okf/types/MuteTiming.md +13 -0
  155. package/dist/okf/types/NodeGraphPanel.md +9 -0
  156. package/dist/okf/types/NotificationPolicy.md +9 -0
  157. package/dist/okf/types/NotificationTemplate.md +9 -0
  158. package/dist/okf/types/PieChartPanel.md +9 -0
  159. package/dist/okf/types/ReduceExpression.md +9 -0
  160. package/dist/okf/types/ResampleExpression.md +9 -0
  161. package/dist/okf/types/SqlExpression.md +9 -0
  162. package/dist/okf/types/StateTimelinePanel.md +9 -0
  163. package/dist/okf/types/StatusHistoryPanel.md +9 -0
  164. package/dist/okf/types/ThresholdExpression.md +9 -0
  165. package/dist/okf/types/TrendPanel.md +9 -0
  166. package/dist/okf/types/XYChartPanel.md +9 -0
  167. package/dist/op/activities/grafana-apply.d.ts +75 -0
  168. package/dist/op/activities/grafana-apply.d.ts.map +1 -0
  169. package/dist/op/activities/index.d.ts +9 -0
  170. package/dist/op/activities/index.d.ts.map +1 -0
  171. package/dist/op/builders.d.ts +24 -0
  172. package/dist/op/builders.d.ts.map +1 -0
  173. package/dist/ownership.d.ts +67 -0
  174. package/dist/ownership.d.ts.map +1 -0
  175. package/dist/panel-options.d.ts +65 -0
  176. package/dist/panel-options.d.ts.map +1 -0
  177. package/dist/panels.d.ts +46 -9
  178. package/dist/panels.d.ts.map +1 -1
  179. package/dist/pin.d.ts +29 -7
  180. package/dist/pin.d.ts.map +1 -1
  181. package/dist/plugin.d.ts.map +1 -1
  182. package/dist/promql-check.d.ts +51 -0
  183. package/dist/promql-check.d.ts.map +1 -0
  184. package/dist/query.d.ts +9 -8
  185. package/dist/query.d.ts.map +1 -1
  186. package/dist/rules/graf101.ts +3 -3
  187. package/dist/rules/graf102.ts +1 -1
  188. package/dist/rules/graf107.ts +1 -1
  189. package/dist/rules/graf108.ts +17 -0
  190. package/dist/rules/graf109.ts +17 -0
  191. package/dist/rules/graf111.ts +17 -0
  192. package/dist/rules/graf112.ts +17 -0
  193. package/dist/rules/graf113.ts +17 -0
  194. package/dist/rules/graf114.ts +17 -0
  195. package/dist/rules/graf115.ts +17 -0
  196. package/dist/rules/grafana-helpers.ts +15 -8
  197. package/dist/rules/literal-secret.ts +60 -6
  198. package/dist/schema/barchart.gen.d.ts +198 -0
  199. package/dist/schema/barchart.gen.d.ts.map +1 -0
  200. package/dist/schema/bargauge.gen.d.ts +97 -0
  201. package/dist/schema/bargauge.gen.d.ts.map +1 -0
  202. package/dist/schema/canvas.gen.d.ts +152 -0
  203. package/dist/schema/canvas.gen.d.ts.map +1 -0
  204. package/dist/schema/dashboard.gen.d.ts +196 -21
  205. package/dist/schema/dashboard.gen.d.ts.map +1 -1
  206. package/dist/schema/expr.gen.d.ts +606 -0
  207. package/dist/schema/expr.gen.d.ts.map +1 -0
  208. package/dist/schema/gauge.gen.d.ts.map +1 -1
  209. package/dist/schema/geomap.gen.d.ts +100 -0
  210. package/dist/schema/geomap.gen.d.ts.map +1 -0
  211. package/dist/schema/heatmap.gen.d.ts.map +1 -1
  212. package/dist/schema/histogram.gen.d.ts +132 -0
  213. package/dist/schema/histogram.gen.d.ts.map +1 -0
  214. package/dist/schema/index.d.ts +12 -0
  215. package/dist/schema/index.d.ts.map +1 -1
  216. package/dist/schema/logs.gen.d.ts +1 -0
  217. package/dist/schema/logs.gen.d.ts.map +1 -1
  218. package/dist/schema/loki.gen.d.ts.map +1 -1
  219. package/dist/schema/nodegraph.gen.d.ts +49 -0
  220. package/dist/schema/nodegraph.gen.d.ts.map +1 -0
  221. package/dist/schema/piechart.gen.d.ts +127 -0
  222. package/dist/schema/piechart.gen.d.ts.map +1 -0
  223. package/dist/schema/prometheus.gen.d.ts.map +1 -1
  224. package/dist/schema/stat.gen.d.ts.map +1 -1
  225. package/dist/schema/statetimeline.gen.d.ts +124 -0
  226. package/dist/schema/statetimeline.gen.d.ts.map +1 -0
  227. package/dist/schema/statushistory.gen.d.ts +114 -0
  228. package/dist/schema/statushistory.gen.d.ts.map +1 -0
  229. package/dist/schema/table.gen.d.ts +22 -3
  230. package/dist/schema/table.gen.d.ts.map +1 -1
  231. package/dist/schema/tempo.gen.d.ts.map +1 -1
  232. package/dist/schema/text.gen.d.ts.map +1 -1
  233. package/dist/schema/timeseries.gen.d.ts +5 -1
  234. package/dist/schema/timeseries.gen.d.ts.map +1 -1
  235. package/dist/schema/trend.gen.d.ts +180 -0
  236. package/dist/schema/trend.gen.d.ts.map +1 -0
  237. package/dist/schema/xychart.gen.d.ts +145 -0
  238. package/dist/schema/xychart.gen.d.ts.map +1 -0
  239. package/dist/schema-validate.d.ts +30 -4
  240. package/dist/schema-validate.d.ts.map +1 -1
  241. package/dist/serializer.d.ts +11 -3
  242. package/dist/serializer.d.ts.map +1 -1
  243. package/dist/skill-defs.d.ts.map +1 -1
  244. package/dist/skills/chant-grafana-alerting.md +49 -0
  245. package/dist/skills/chant-grafana-provisioning.md +3 -3
  246. package/dist/skills/chant-grafana.md +12 -6
  247. package/dist/spec/fetch-units-cli.d.ts +3 -0
  248. package/dist/spec/fetch-units-cli.d.ts.map +1 -0
  249. package/dist/spec/overlay.d.ts +43 -0
  250. package/dist/spec/overlay.d.ts.map +1 -0
  251. package/dist/spec/schemas.d.ts +13 -7
  252. package/dist/spec/schemas.d.ts.map +1 -1
  253. package/dist/spec/units.d.ts +35 -0
  254. package/dist/spec/units.d.ts.map +1 -0
  255. package/dist/spec/units.gen.d.ts +2 -0
  256. package/dist/spec/units.gen.d.ts.map +1 -0
  257. package/dist/transformations.d.ts +459 -0
  258. package/dist/transformations.d.ts.map +1 -0
  259. package/dist/util.d.ts +6 -0
  260. package/dist/util.d.ts.map +1 -1
  261. package/dist/validate-alerting.d.ts +65 -0
  262. package/dist/validate-alerting.d.ts.map +1 -0
  263. package/dist/validate-output.d.ts +49 -9
  264. package/dist/validate-output.d.ts.map +1 -1
  265. package/dist/validate.d.ts.map +1 -1
  266. package/dist/variables.d.ts +7 -2
  267. package/dist/variables.d.ts.map +1 -1
  268. package/package.json +12 -4
  269. package/src/actions/actions.test.ts +24 -0
  270. package/src/actions/grafana.ts +40 -0
  271. package/src/actions/index.ts +1 -0
  272. package/src/alerting-build.ts +376 -0
  273. package/src/alerting.e2e.test.ts +212 -0
  274. package/src/alerting.test.ts +272 -0
  275. package/src/alerting.ts +435 -0
  276. package/src/api/apply.test.ts +238 -0
  277. package/src/api/apply.ts +384 -0
  278. package/src/api/bind.ts +58 -0
  279. package/src/api/client.ts +148 -0
  280. package/src/api/converge.ts +63 -0
  281. package/src/api/dashboards.ts +247 -0
  282. package/src/api/datasources.ts +33 -0
  283. package/src/api/fake-grafana-writes.ts +201 -0
  284. package/src/api/fake-grafana.ts +186 -0
  285. package/src/api/folders.ts +265 -0
  286. package/src/api/library-panels.ts +101 -0
  287. package/src/build.test.ts +210 -5
  288. package/src/build.ts +180 -43
  289. package/src/catalog.ts +86 -2
  290. package/src/codegen/docs.ts +42 -9
  291. package/src/codegen/schema-types.ts +16 -6
  292. package/src/composites/agent-dashboard.ts +6 -3
  293. package/src/composites/catalog.test.ts +2 -2
  294. package/src/composites/catalog.ts +82 -0
  295. package/src/composites/composites.test.ts +73 -9
  296. package/src/composites/index.ts +4 -2
  297. package/src/composites/queries.e2e.test.ts +374 -0
  298. package/src/composites/red-dashboard.ts +83 -12
  299. package/src/composites/shared.ts +11 -0
  300. package/src/composites/slo-alert-rules.ts +149 -0
  301. package/src/config.test.ts +61 -0
  302. package/src/config.ts +138 -0
  303. package/src/contact-point-secrets.ts +63 -0
  304. package/src/dashboard.ts +16 -2
  305. package/src/datasource-refs.test.ts +56 -0
  306. package/src/datasource-refs.ts +189 -0
  307. package/src/datasource.ts +52 -0
  308. package/src/deep-observe-hooks.ts +252 -0
  309. package/src/deep-observe.test.ts +265 -0
  310. package/src/deep-observe.ts +164 -0
  311. package/src/describe-resources.test.ts +255 -0
  312. package/src/describe-resources.ts +209 -0
  313. package/src/detect.ts +79 -2
  314. package/src/export-resources.test.ts +129 -0
  315. package/src/export-resources.ts +84 -0
  316. package/src/generated/lexicon-grafana.json +135 -0
  317. package/src/import/alerting-roundtrip.test.ts +161 -0
  318. package/src/import/alerting.ts +500 -0
  319. package/src/import/edits.ts +95 -0
  320. package/src/import/embedded.test.ts +45 -0
  321. package/src/import/embedded.ts +47 -0
  322. package/src/import/generated-types.e2e.test.ts +118 -0
  323. package/src/import/generator.test.ts +210 -0
  324. package/src/import/generator.ts +462 -0
  325. package/src/import/live-export.ts +264 -0
  326. package/src/import/mappings.ts +264 -0
  327. package/src/import/model.ts +110 -0
  328. package/src/import/normalize-alerting.ts +101 -0
  329. package/src/import/normalize.test.ts +117 -0
  330. package/src/import/normalize.ts +364 -0
  331. package/src/import/parser.test.ts +440 -0
  332. package/src/import/parser.ts +1236 -0
  333. package/src/import/report.ts +62 -0
  334. package/src/import/roundtrip.test.ts +468 -0
  335. package/src/import/testdata/fixtures.ts +129 -0
  336. package/src/import/v2.test.ts +292 -0
  337. package/src/import/v2.ts +803 -0
  338. package/src/import.e2e.test.ts +31 -84
  339. package/src/import.test.ts +9 -3
  340. package/src/index.ts +190 -5
  341. package/src/k8s.test.ts +98 -0
  342. package/src/k8s.ts +197 -0
  343. package/src/lint/audit-catalog.ts +60 -3
  344. package/src/lint/core-lint.test.ts +43 -0
  345. package/src/lint/post-synth/graf101.ts +3 -3
  346. package/src/lint/post-synth/graf102.ts +1 -1
  347. package/src/lint/post-synth/graf107.ts +1 -1
  348. package/src/lint/post-synth/graf108.ts +17 -0
  349. package/src/lint/post-synth/graf109.ts +17 -0
  350. package/src/lint/post-synth/graf111.ts +17 -0
  351. package/src/lint/post-synth/graf112.ts +17 -0
  352. package/src/lint/post-synth/graf113.ts +17 -0
  353. package/src/lint/post-synth/graf114.ts +17 -0
  354. package/src/lint/post-synth/graf115.ts +17 -0
  355. package/src/lint/post-synth/grafana-helpers.ts +15 -8
  356. package/src/lint/post-synth/index.ts +14 -0
  357. package/src/lint/post-synth/post-synth.test.ts +235 -11
  358. package/src/lint/rules/literal-secret.ts +60 -6
  359. package/src/lint/rules/rules.test.ts +27 -0
  360. package/src/lsp/completions.test.ts +5 -0
  361. package/src/lsp/hover.test.ts +7 -0
  362. package/src/lsp/hover.ts +8 -1
  363. package/src/members.ts +68 -0
  364. package/src/observe.e2e.test.ts +255 -0
  365. package/src/op/activities/grafana-apply.e2e.test.ts +175 -0
  366. package/src/op/activities/grafana-apply.test.ts +229 -0
  367. package/src/op/activities/grafana-apply.ts +171 -0
  368. package/src/op/activities/index.ts +8 -0
  369. package/src/op/builders.test.ts +40 -0
  370. package/src/op/builders.ts +34 -0
  371. package/src/ownership.ts +103 -0
  372. package/src/panel-options.ts +66 -0
  373. package/src/panels.test.ts +51 -0
  374. package/src/panels.ts +148 -10
  375. package/src/pin.ts +57 -6
  376. package/src/plugin.test.ts +5 -2
  377. package/src/plugin.ts +66 -0
  378. package/src/promql-check.test.ts +108 -0
  379. package/src/promql-check.ts +189 -0
  380. package/src/query.ts +13 -8
  381. package/src/schema/barchart.gen.ts +221 -0
  382. package/src/schema/bargauge.gen.ts +111 -0
  383. package/src/schema/canvas.gen.ts +176 -0
  384. package/src/schema/dashboard.gen.ts +206 -22
  385. package/src/schema/expr.gen.ts +618 -0
  386. package/src/schema/gauge.gen.ts +2 -1
  387. package/src/schema/geomap.gen.ts +112 -0
  388. package/src/schema/heatmap.gen.ts +2 -1
  389. package/src/schema/histogram.gen.ts +151 -0
  390. package/src/schema/index.ts +12 -0
  391. package/src/schema/logs.gen.ts +3 -1
  392. package/src/schema/loki.gen.ts +2 -1
  393. package/src/schema/nodegraph.gen.ts +58 -0
  394. package/src/schema/piechart.gen.ts +146 -0
  395. package/src/schema/prometheus.gen.ts +2 -1
  396. package/src/schema/stat.gen.ts +2 -1
  397. package/src/schema/statetimeline.gen.ts +143 -0
  398. package/src/schema/statushistory.gen.ts +132 -0
  399. package/src/schema/table.gen.ts +27 -4
  400. package/src/schema/tempo.gen.ts +2 -1
  401. package/src/schema/text.gen.ts +2 -1
  402. package/src/schema/timeseries.gen.ts +7 -2
  403. package/src/schema/trend.gen.ts +208 -0
  404. package/src/schema/xychart.gen.ts +167 -0
  405. package/src/schema-overlay.test.ts +282 -0
  406. package/src/schema-validate.ts +141 -50
  407. package/src/schema.test.ts +4 -2
  408. package/src/serializer.test.ts +13 -1
  409. package/src/serializer.ts +11 -3
  410. package/src/skill-defs.ts +17 -0
  411. package/src/skills/chant-grafana-alerting.md +49 -0
  412. package/src/skills/chant-grafana-provisioning.md +3 -3
  413. package/src/skills/chant-grafana.md +12 -6
  414. package/src/spec/fetch-cli.ts +3 -3
  415. package/src/spec/fetch-units-cli.ts +37 -0
  416. package/src/spec/overlay/canvas.overlay.json +142 -0
  417. package/src/spec/overlay/dashboard.overlay.json +378 -0
  418. package/src/spec/overlay/expr.overlay.json +14 -0
  419. package/src/spec/overlay/geomap.overlay.json +35 -0
  420. package/src/spec/overlay/logs.overlay.json +14 -0
  421. package/src/spec/overlay/nodegraph.overlay.json +31 -0
  422. package/src/spec/overlay/piechart.overlay.json +17 -0
  423. package/src/spec/overlay/table.overlay.json +84 -0
  424. package/src/spec/overlay/timeseries.overlay.json +21 -0
  425. package/src/spec/overlay/trend.overlay.json +17 -0
  426. package/src/spec/overlay/xychart.overlay.json +16 -0
  427. package/src/spec/overlay.ts +105 -0
  428. package/src/spec/schemas/barchart.jsonschema.json +419 -0
  429. package/src/spec/schemas/bargauge.jsonschema.json +224 -0
  430. package/src/spec/schemas/canvas.jsonschema.json +356 -0
  431. package/src/spec/schemas/dashboardv2.jsonschema.json +3387 -0
  432. package/src/spec/schemas/expr.jsonschema.json +987 -0
  433. package/src/spec/schemas/geomap.jsonschema.json +220 -0
  434. package/src/spec/schemas/histogram.jsonschema.json +308 -0
  435. package/src/spec/schemas/nodegraph.jsonschema.json +77 -0
  436. package/src/spec/schemas/piechart.jsonschema.json +275 -0
  437. package/src/spec/schemas/statetimeline.jsonschema.json +324 -0
  438. package/src/spec/schemas/statushistory.jsonschema.json +292 -0
  439. package/src/spec/schemas/trend.jsonschema.json +449 -0
  440. package/src/spec/schemas/xychart.jsonschema.json +428 -0
  441. package/src/spec/schemas.ts +22 -10
  442. package/src/spec/units.gen.ts +281 -0
  443. package/src/spec/units.ts +77 -0
  444. package/src/transformations.test.ts +65 -0
  445. package/src/transformations.ts +574 -0
  446. package/src/util.ts +8 -0
  447. package/src/validate-alerting.test.ts +255 -0
  448. package/src/validate-alerting.ts +428 -0
  449. package/src/validate-output.ts +332 -101
  450. package/src/validate.ts +14 -0
  451. package/src/variables.ts +7 -2
@@ -0,0 +1,189 @@
1
+ /**
2
+ * GRAF108: the PromQL a dashboard sends to Prometheus, syntax-checked with
3
+ * the prometheus lexicon's `checkPromql` (the grammar behind the Prometheus
4
+ * web UI's editor, `@prometheus-io/lezer-promql`).
5
+ *
6
+ * Only queries that reach a Prometheus datasource are parsed, as
7
+ * `datasourceUses()` resolves them: a query's own ref, else its panel's, a
8
+ * datasource variable's plugin type, or an undeclared ref's own `type`. A
9
+ * query whose datasource can't be told (no ref at all, a `-- Mixed --` panel
10
+ * query with none of its own) is left alone.
11
+ *
12
+ * Grafana interpolates template variables before Prometheus sees the query,
13
+ * so `$var`, `${var}`, `${var:format}`, `[[var]]` and the `$__` macros are
14
+ * replaced with a placeholder that parses where they stand: a duration
15
+ * inside `[...]` or after `offset`, a number for the `_ms`/`_s` macros and
16
+ * `$__from`/`$__to`, an identifier anywhere else. Inside a string literal
17
+ * they are left as they are.
18
+ */
19
+
20
+ import { checkPromql } from "@intentius/chant-lexicon-prometheus/promql";
21
+ import { datasourceUses, variablesOf, type KnownDatasource } from "./datasource-refs";
22
+
23
+ type Json = Record<string, unknown>;
24
+
25
+ const DURATION = "5m";
26
+ const NUMBER = "1";
27
+ const IDENTIFIER = "grafana_var";
28
+
29
+ /** A template variable reference starting at the regex's lastIndex. */
30
+ const VARIABLE = /\$\{([^}]*)\}|\[\[([A-Za-z_][^\]]*)\]\]|\$([A-Za-z_][A-Za-z0-9_]*)/y;
31
+
32
+ function isNumericMacro(name: string): boolean {
33
+ if (name === "__from" || name === "__to") return true;
34
+ return (name.startsWith("__") || name === "interval_ms") && /_(ms|s)$/.test(name);
35
+ }
36
+
37
+ /** A span of substituted text and the original text it replaced. */
38
+ interface Span {
39
+ at: number;
40
+ length: number;
41
+ original: number;
42
+ originalLength: number;
43
+ }
44
+
45
+ export interface Substituted {
46
+ text: string;
47
+ /** Maps an offset in `text` back to one in the original query. */
48
+ originalOffset(at: number): number;
49
+ }
50
+
51
+ /** Replace every template variable outside a string literal with a placeholder that parses in its place. */
52
+ export function substituteTemplateVariables(query: string): Substituted {
53
+ let out = "";
54
+ const spans: Span[] = [];
55
+ let quote: string | undefined;
56
+ let depth = 0;
57
+ let i = 0;
58
+ while (i < query.length) {
59
+ const c = query[i];
60
+ if (quote) {
61
+ out += c;
62
+ if (c === "\\" && quote !== "`" && i + 1 < query.length) {
63
+ out += query[i + 1];
64
+ i += 2;
65
+ continue;
66
+ }
67
+ if (c === quote) quote = undefined;
68
+ i++;
69
+ continue;
70
+ }
71
+ if (c === "$" || (c === "[" && query[i + 1] === "[")) {
72
+ VARIABLE.lastIndex = i;
73
+ const m = VARIABLE.exec(query);
74
+ if (m) {
75
+ const name = (m[1] ?? m[2] ?? m[3]).split(/[:.]/)[0].trim();
76
+ const before = out.trimEnd();
77
+ let value: string;
78
+ if (depth > 0 || /\boffset$/i.test(before)) {
79
+ // `[${n}m]`: the unit follows, so only the number is substituted.
80
+ value = /[a-z]/i.test(query[i + m[0].length] ?? "") ? NUMBER : DURATION;
81
+ } else if (isNumericMacro(name) || before.endsWith("@")) {
82
+ value = NUMBER;
83
+ } else {
84
+ value = IDENTIFIER;
85
+ }
86
+ spans.push({ at: out.length, length: value.length, original: i, originalLength: m[0].length });
87
+ out += value;
88
+ i += m[0].length;
89
+ continue;
90
+ }
91
+ }
92
+ if (c === '"' || c === "'" || c === "`") quote = c;
93
+ else if (c === "[") depth++;
94
+ else if (c === "]" && depth > 0) depth--;
95
+ out += c;
96
+ i++;
97
+ }
98
+ return {
99
+ text: out,
100
+ originalOffset(at: number): number {
101
+ let shift = 0;
102
+ for (const s of spans) {
103
+ if (at < s.at) break;
104
+ if (at < s.at + s.length) return s.original;
105
+ shift = s.original + s.originalLength - (s.at + s.length);
106
+ }
107
+ return at + shift;
108
+ },
109
+ };
110
+ }
111
+
112
+ export type PromqlSyntax = { ok: true } | { ok: false; message: string };
113
+
114
+ /** Check one query's PromQL syntax after substituting its template variables. */
115
+ export function checkGrafanaPromql(query: string): PromqlSyntax {
116
+ const substituted = substituteTemplateVariables(query);
117
+ const checked = checkPromql(substituted.text);
118
+ if (checked.ok) return { ok: true };
119
+ const at = Math.min(substituted.originalOffset(checked.position), query.length);
120
+ if (at >= query.length) return { ok: false, message: `the expression ends early (after "${query.slice(Math.max(0, at - 30)).trim()}")` };
121
+ const before = query.slice(Math.max(0, at - 30), at);
122
+ const after = query.slice(at, at + 30);
123
+ return { ok: false, message: `syntax error at offset ${at}: "${before}" >>> "${after}"` };
124
+ }
125
+
126
+ /**
127
+ * The PromQL inside a Prometheus query variable's query. Grafana handles
128
+ * `label_names()`, `label_values(selector, label)`, `metrics(regex)` and
129
+ * `query_result(expr)` itself and sends only the selector or expression; any
130
+ * other text is a series selector (`/api/v1/series?match[]=`).
131
+ */
132
+ export function variablePromql(query: string): string[] {
133
+ const q = query.trim();
134
+ if (q === "" || /^label_names\(\s*\)$/.test(q)) return [];
135
+ let m = /^label_names\((.+)\)$/.exec(q);
136
+ if (m) return [m[1]];
137
+ m = /^label_values\((?:(.+),\s*)?([a-zA-Z_$][a-zA-Z0-9_]*)\)$/.exec(q);
138
+ if (m) return m[1] ? [m[1]] : [];
139
+ if (/^metrics\((.+)\)$/.test(q)) return [];
140
+ m = /^query_result\((.+)\)$/.exec(q);
141
+ if (m) return [m[1]];
142
+ return [q];
143
+ }
144
+
145
+ function variableQueryText(variable: Json): string | undefined {
146
+ const q = variable.query;
147
+ if (typeof q === "string") return q;
148
+ if (q && typeof q === "object" && typeof (q as Json).query === "string") return (q as Json).query as string;
149
+ return undefined;
150
+ }
151
+
152
+ /** One piece of PromQL a dashboard sends to Prometheus, and where it is written. */
153
+ export interface PromqlUse {
154
+ where: string;
155
+ expr: string;
156
+ }
157
+
158
+ /** The PromQL of one dashboard (or, for a library panel, a one-panel stand-in); `library` names the `__elements` key. */
159
+ function usesOf(dashboard: Json, known: ReadonlyMap<string, KnownDatasource>, library?: string): PromqlUse[] {
160
+ const out: PromqlUse[] = [];
161
+ for (const use of datasourceUses(dashboard, known)) {
162
+ if (use.resolved.type !== "prometheus") continue;
163
+ if (use.kind === "query") {
164
+ const expr = use.target?.expr;
165
+ if (typeof expr !== "string" || expr.trim() === "") continue;
166
+ out.push({ where: library ? `library panel "${library}" query ${String(use.target?.refId ?? "?")}` : use.where, expr });
167
+ } else if (use.kind === "variable" && use.variable && !library) {
168
+ const text = variableQueryText(use.variable);
169
+ if (text) for (const expr of variablePromql(text)) out.push({ where: `${use.where} query`, expr });
170
+ }
171
+ }
172
+ return out;
173
+ }
174
+
175
+ /** Every PromQL query a dashboard sends to Prometheus: panel queries, query variables and the library panels an export embeds in `__elements`. */
176
+ export function prometheusQueries(dashboard: Json, known: ReadonlyMap<string, KnownDatasource>): PromqlUse[] {
177
+ const out = usesOf(dashboard, known);
178
+ const elements = dashboard.__elements;
179
+ if (elements && typeof elements === "object" && !Array.isArray(elements)) {
180
+ // The dashboard's variables, so a library panel's `${DS_...}` ref resolves as the dashboard's would.
181
+ const templating = { list: variablesOf(dashboard) };
182
+ for (const [key, element] of Object.entries(elements as Json)) {
183
+ const model = element && typeof element === "object" ? (element as Json).model : undefined;
184
+ if (!model || typeof model !== "object" || Array.isArray(model)) continue;
185
+ out.push(...usesOf({ templating, panels: [model] }, known, key));
186
+ }
187
+ }
188
+ return out;
189
+ }
package/src/query.ts CHANGED
@@ -3,10 +3,11 @@
3
3
  * `TempoQuery` (TraceQL) and `LokiQuery` (LogQL), each typed from that
4
4
  * plugin's query schema at `GRAFANA_SCHEMA_PIN`.
5
5
  *
6
- * The expression is a string; this lexicon does not parse PromQL, TraceQL or
7
- * LogQL. What it does check is where the query goes: `datasource` only
8
- * accepts a datasource of the query's own plugin type, and GRAF101, GRAF102
9
- * and GRAF103 check the emitted references after a build.
6
+ * The expression is a string. What the lexicon checks is where the query
7
+ * goes: `datasource` only accepts a datasource of the query's own plugin
8
+ * type, and GRAF101, GRAF102 and GRAF103 check the emitted references after
9
+ * a build. GRAF108 parses the PromQL of every query that reaches a
10
+ * Prometheus; TraceQL and LogQL are not parsed.
10
11
  *
11
12
  * `defineQuery` is the extension point for any other datasource plugin, and
12
13
  * the three built-ins are defined through it.
@@ -14,15 +15,19 @@
14
15
 
15
16
  import { createProperty } from "@intentius/chant/runtime";
16
17
  import type { Declarable } from "@intentius/chant/declarable";
17
- import type { DatasourceEntity, DatasourceRef } from "./datasource";
18
+ import type { DatasourceEntity, DatasourceRef, ExternalDatasourceEntity } from "./datasource";
18
19
  import type { DatasourceVariableEntity } from "./variables";
19
20
  import type { SchemaName } from "./pin";
20
21
  import type { Dataquery as PrometheusDataquery } from "./schema/prometheus.gen";
21
22
  import type { Dataquery as TempoDataquery } from "./schema/tempo.gen";
22
23
  import type { Dataquery as LokiDataquery } from "./schema/loki.gen";
23
24
 
24
- /** Where a query or panel sends its request: a declared datasource, a datasource variable, or the ref of one declared elsewhere. */
25
- export type DatasourceInput<T extends string = string> = DatasourceEntity<T> | DatasourceVariableEntity<T> | DatasourceRef<T>;
25
+ /** Where a query or panel sends its request: a declared or external datasource, a datasource variable, or the ref of one declared elsewhere. */
26
+ export type DatasourceInput<T extends string = string> =
27
+ | DatasourceEntity<T>
28
+ | ExternalDatasourceEntity<T>
29
+ | DatasourceVariableEntity<T>
30
+ | DatasourceRef<T>;
26
31
 
27
32
  /** A query model's fields, less what chant fills in (`datasource`, `refId` stays optional). */
28
33
  export type QueryModel<M> = Omit<M, "datasource">;
@@ -108,7 +113,7 @@ function makeQueryClass<T extends string, M>(def: QueryDefinition<T, M>): QueryC
108
113
  * });
109
114
  * ```
110
115
  */
111
- export function defineQuery<M>() {
116
+ export function defineQuery<M = Record<string, unknown>>() {
112
117
  return function <T extends string>(def: Omit<QueryDefinition<T, M>, "builtin">): QueryClass<T, M> {
113
118
  return makeQueryClass<T, M>({ ...def, builtin: false });
114
119
  };
@@ -0,0 +1,221 @@
1
+ // Code generated by chant generate from the vendored Grafana schema
2
+ // src/spec/schemas/barchart.jsonschema.json (see src/pin.ts) and its correction
3
+ // overlay in src/spec/overlay/ (see src/spec/overlay.ts). DO NOT EDIT.
4
+ /* eslint-disable */
5
+
6
+ export interface Options {
7
+ /**
8
+ * Manually select which field from the dataset to represent the x field.
9
+ */
10
+ xField?: string;
11
+ /**
12
+ * Use the color value for a sibling field to color each bar value.
13
+ */
14
+ colorByField?: string;
15
+ /**
16
+ * Controls the orientation of the bar chart, either vertical or horizontal.
17
+ */
18
+ orientation: VizOrientation;
19
+ /**
20
+ * Controls the radius of each bar.
21
+ */
22
+ barRadius?: number;
23
+ /**
24
+ * Controls the rotation of the x axis labels.
25
+ */
26
+ xTickLabelRotation: number;
27
+ /**
28
+ * Sets the max length that a label can have before it is truncated.
29
+ */
30
+ xTickLabelMaxLength: number;
31
+ /**
32
+ * Controls the spacing between x axis labels.
33
+ * negative values indicate backwards skipping behavior
34
+ */
35
+ xTickLabelSpacing?: number;
36
+ /**
37
+ * Controls whether bars are stacked or not, either normally or in percent mode.
38
+ */
39
+ stacking: StackingMode;
40
+ /**
41
+ * This controls whether values are shown on top or to the left of bars.
42
+ */
43
+ showValue: VisibilityMode;
44
+ /**
45
+ * Controls the width of bars. 1 = Max width, 0 = Min width.
46
+ */
47
+ barWidth: number;
48
+ /**
49
+ * Controls the width of groups. 1 = max with, 0 = min width.
50
+ */
51
+ groupWidth: number;
52
+ legend: VizLegendOptions;
53
+ tooltip: VizTooltipOptions;
54
+ text?: VizTextDisplayOptions;
55
+ /**
56
+ * Enables mode which highlights the entire bar area and shows tooltip when cursor
57
+ * hovers over highlighted area
58
+ */
59
+ fullHighlight: boolean;
60
+ }
61
+
62
+ export interface FieldConfig {
63
+ /**
64
+ * Controls line width of the bars.
65
+ */
66
+ lineWidth?: number;
67
+ /**
68
+ * Controls the fill opacity of the bars.
69
+ */
70
+ fillOpacity?: number;
71
+ /**
72
+ * Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option.
73
+ * Gradient appearance is influenced by the Fill opacity setting.
74
+ */
75
+ gradientMode?: GraphGradientMode;
76
+ axisPlacement?: AxisPlacement;
77
+ axisColorMode?: AxisColorMode;
78
+ axisLabel?: string;
79
+ axisWidth?: number;
80
+ axisSoftMin?: number;
81
+ axisSoftMax?: number;
82
+ axisGridShow?: boolean;
83
+ scaleDistribution?: ScaleDistributionConfig;
84
+ axisCenteredZero?: boolean;
85
+ hideFrom?: HideSeriesConfig;
86
+ /**
87
+ * Threshold rendering
88
+ */
89
+ thresholdsStyle?: GraphThresholdsStyleConfig;
90
+ axisBorderShow?: boolean;
91
+ }
92
+
93
+ /**
94
+ * TODO docs
95
+ */
96
+ export type VizOrientation = "auto" | "vertical" | "horizontal";
97
+
98
+ /**
99
+ * TODO docs
100
+ */
101
+ export type StackingMode = "none" | "normal" | "percent";
102
+
103
+ /**
104
+ * TODO docs
105
+ */
106
+ export type VisibilityMode = "auto" | "never" | "always";
107
+
108
+ /**
109
+ * TODO docs
110
+ */
111
+ export interface VizLegendOptions {
112
+ displayMode: LegendDisplayMode;
113
+ placement: LegendPlacement;
114
+ showLegend: boolean;
115
+ asTable?: boolean;
116
+ isVisible?: boolean;
117
+ sortBy?: string;
118
+ sortDesc?: boolean;
119
+ width?: number;
120
+ calcs: string[];
121
+ }
122
+
123
+ /**
124
+ * TODO docs
125
+ */
126
+ export interface VizTooltipOptions {
127
+ mode: TooltipDisplayMode;
128
+ sort: SortOrder;
129
+ maxWidth?: number;
130
+ maxHeight?: number;
131
+ hideZeros?: boolean;
132
+ }
133
+
134
+ /**
135
+ * TODO docs
136
+ */
137
+ export interface VizTextDisplayOptions {
138
+ /**
139
+ * Explicit title text size
140
+ */
141
+ titleSize?: number;
142
+ /**
143
+ * Explicit value text size
144
+ */
145
+ valueSize?: number;
146
+ /**
147
+ * Explicit percent text size
148
+ */
149
+ percentSize?: number;
150
+ }
151
+
152
+ /**
153
+ * TODO docs
154
+ */
155
+ export type GraphGradientMode = "none" | "opacity" | "hue" | "scheme";
156
+
157
+ /**
158
+ * TODO docs
159
+ */
160
+ export type AxisPlacement = "auto" | "top" | "right" | "bottom" | "left" | "hidden";
161
+
162
+ /**
163
+ * TODO docs
164
+ */
165
+ export type AxisColorMode = "text" | "series";
166
+
167
+ /**
168
+ * TODO docs
169
+ */
170
+ export interface ScaleDistributionConfig {
171
+ type: ScaleDistribution;
172
+ log?: number;
173
+ linearThreshold?: number;
174
+ }
175
+
176
+ /**
177
+ * TODO docs
178
+ */
179
+ export interface HideSeriesConfig {
180
+ tooltip: boolean;
181
+ legend: boolean;
182
+ viz: boolean;
183
+ }
184
+
185
+ /**
186
+ * TODO docs
187
+ */
188
+ export interface GraphThresholdsStyleConfig {
189
+ mode: GraphThresholdsStyleMode;
190
+ }
191
+
192
+ /**
193
+ * TODO docs
194
+ * Note: "hidden" needs to remain as an option for plugins compatibility
195
+ */
196
+ export type LegendDisplayMode = "list" | "table" | "hidden";
197
+
198
+ /**
199
+ * TODO docs
200
+ */
201
+ export type LegendPlacement = "bottom" | "right";
202
+
203
+ /**
204
+ * TODO docs
205
+ */
206
+ export type TooltipDisplayMode = "single" | "multi" | "none";
207
+
208
+ /**
209
+ * TODO docs
210
+ */
211
+ export type SortOrder = "asc" | "desc" | "none";
212
+
213
+ /**
214
+ * TODO docs
215
+ */
216
+ export type ScaleDistribution = "linear" | "log" | "ordinal" | "symlog";
217
+
218
+ /**
219
+ * TODO docs
220
+ */
221
+ export type GraphThresholdsStyleMode = "off" | "line" | "dashed" | "area" | "line+area" | "dashed+area" | "series";
@@ -0,0 +1,111 @@
1
+ // Code generated by chant generate from the vendored Grafana schema
2
+ // src/spec/schemas/bargauge.jsonschema.json (see src/pin.ts) and its correction
3
+ // overlay in src/spec/overlay/ (see src/spec/overlay.ts). DO NOT EDIT.
4
+ /* eslint-disable */
5
+
6
+ export interface Options {
7
+ displayMode: BarGaugeDisplayMode;
8
+ valueMode: BarGaugeValueMode;
9
+ namePlacement: BarGaugeNamePlacement;
10
+ showUnfilled: boolean;
11
+ sizing: BarGaugeSizing;
12
+ minVizWidth: number;
13
+ minVizHeight: number;
14
+ legend: VizLegendOptions;
15
+ reduceOptions: ReduceDataOptions;
16
+ text?: VizTextDisplayOptions;
17
+ maxVizHeight: number;
18
+ orientation: VizOrientation;
19
+ }
20
+
21
+ /**
22
+ * Enum expressing the possible display modes
23
+ * for the bar gauge component of Grafana UI
24
+ */
25
+ export type BarGaugeDisplayMode = "basic" | "lcd" | "gradient";
26
+
27
+ /**
28
+ * Allows for the table cell gauge display type to set the gauge mode.
29
+ */
30
+ export type BarGaugeValueMode = "color" | "text" | "hidden";
31
+
32
+ /**
33
+ * Allows for the bar gauge name to be placed explicitly
34
+ */
35
+ export type BarGaugeNamePlacement = "auto" | "top" | "left" | "hidden";
36
+
37
+ /**
38
+ * Allows for the bar gauge size to be set explicitly
39
+ */
40
+ export type BarGaugeSizing = "auto" | "manual";
41
+
42
+ /**
43
+ * TODO docs
44
+ */
45
+ export interface VizLegendOptions {
46
+ displayMode: LegendDisplayMode;
47
+ placement: LegendPlacement;
48
+ showLegend: boolean;
49
+ asTable?: boolean;
50
+ isVisible?: boolean;
51
+ sortBy?: string;
52
+ sortDesc?: boolean;
53
+ width?: number;
54
+ calcs: string[];
55
+ }
56
+
57
+ /**
58
+ * TODO docs
59
+ */
60
+ export interface ReduceDataOptions {
61
+ /**
62
+ * If true show each row value
63
+ */
64
+ values?: boolean;
65
+ /**
66
+ * if showing all values limit
67
+ */
68
+ limit?: number;
69
+ /**
70
+ * When !values, pick one value for the whole field
71
+ */
72
+ calcs: string[];
73
+ /**
74
+ * Which fields to show. By default this is only numeric fields
75
+ */
76
+ fields?: string;
77
+ }
78
+
79
+ /**
80
+ * TODO docs
81
+ */
82
+ export interface VizTextDisplayOptions {
83
+ /**
84
+ * Explicit title text size
85
+ */
86
+ titleSize?: number;
87
+ /**
88
+ * Explicit value text size
89
+ */
90
+ valueSize?: number;
91
+ /**
92
+ * Explicit percent text size
93
+ */
94
+ percentSize?: number;
95
+ }
96
+
97
+ /**
98
+ * TODO docs
99
+ */
100
+ export type VizOrientation = "auto" | "vertical" | "horizontal";
101
+
102
+ /**
103
+ * TODO docs
104
+ * Note: "hidden" needs to remain as an option for plugins compatibility
105
+ */
106
+ export type LegendDisplayMode = "list" | "table" | "hidden";
107
+
108
+ /**
109
+ * TODO docs
110
+ */
111
+ export type LegendPlacement = "bottom" | "right";