@grafana/plugin-ui 0.14.0-dev.1 → 0.14.1-dsconfig.032cfc4

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 (285) hide show
  1. package/dist/cjs/index.cjs +2803 -185
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +694 -39
  4. package/dist/cjs/schemas.cjs +25 -0
  5. package/dist/cjs/schemas.cjs.map +1 -0
  6. package/dist/cjs/schemas.d.cts +448 -0
  7. package/dist/cjs/test-utils.d.cts +23 -23
  8. package/dist/cjs/useDatasourceSchema-CxPGD2-b.js +17125 -0
  9. package/dist/cjs/useDatasourceSchema-CxPGD2-b.js.map +1 -0
  10. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
  11. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js +234 -0
  12. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js.map +1 -0
  13. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js +27 -0
  14. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js.map +1 -0
  15. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js +71 -0
  16. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js.map +1 -0
  17. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js +54 -0
  18. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js.map +1 -0
  19. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js +181 -0
  20. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js.map +1 -0
  21. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js +75 -0
  22. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js.map +1 -0
  23. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js +258 -0
  24. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js.map +1 -0
  25. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js +354 -0
  26. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js.map +1 -0
  27. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js +138 -0
  28. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js.map +1 -0
  29. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js +326 -0
  30. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map +1 -0
  31. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js +106 -0
  32. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js.map +1 -0
  33. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js +51 -0
  34. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js.map +1 -0
  35. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js +26 -0
  36. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js.map +1 -0
  37. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js +106 -0
  38. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js.map +1 -0
  39. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js +124 -0
  40. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js.map +1 -0
  41. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js +190 -0
  42. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js.map +1 -0
  43. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js +31 -0
  44. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js.map +1 -0
  45. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js +59 -0
  46. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js.map +1 -0
  47. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js +80 -0
  48. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js.map +1 -0
  49. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js +141 -0
  50. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js.map +1 -0
  51. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js +30 -0
  52. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js.map +1 -0
  53. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js +360 -0
  54. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js.map +1 -0
  55. package/dist/esm/components/DataLinks/DataLink.js +2 -2
  56. package/dist/esm/components/DataLinks/DataLinks.js +2 -2
  57. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +7 -7
  58. package/dist/esm/components/DatePicker/styles.js +2 -2
  59. package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
  60. package/dist/esm/components/QueryEditor/EditorField.js +2 -2
  61. package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
  62. package/dist/esm/components/QueryEditor/EditorRow.js +2 -2
  63. package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
  64. package/dist/esm/components/QueryEditor/InlineSelect.js +1 -1
  65. package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
  66. package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
  67. package/dist/esm/components/QueryEditor/QueryEditor.js +3 -1
  68. package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
  69. package/dist/esm/components/QueryEditor/QueryHeader.js +2 -2
  70. package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
  71. package/dist/esm/components/QueryEditor/Space.js +2 -2
  72. package/dist/esm/components/QueryEditor/TableSelector.js +0 -1
  73. package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
  74. package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
  75. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js +10 -2
  76. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
  77. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +6 -1
  78. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
  79. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +13 -3
  80. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
  81. package/dist/esm/components/QueryEditor/types.js +0 -1
  82. package/dist/esm/components/QueryEditor/types.js.map +1 -1
  83. package/dist/esm/components/QueryEditor/utils/formatSQL.js +15 -4
  84. package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
  85. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +2 -2
  86. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
  87. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +4 -4
  88. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
  89. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js +0 -1
  90. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
  91. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +0 -1
  92. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
  93. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js +0 -1
  94. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
  95. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js +0 -1
  96. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
  97. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +2 -2
  98. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js +10 -2
  99. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
  100. package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
  101. package/dist/esm/components/SQLEditor/standardSql/definition.js +0 -6
  102. package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
  103. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +2 -1
  104. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
  105. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +2 -1
  106. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
  107. package/dist/esm/components/SQLEditor/types.js +1 -17
  108. package/dist/esm/components/SQLEditor/types.js.map +1 -1
  109. package/dist/esm/components/SQLEditor/utils/LinkedToken.js +1 -1
  110. package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
  111. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +2 -2
  112. package/dist/esm/components/SQLEditor/utils/tokenType.js +18 -0
  113. package/dist/esm/components/SQLEditor/utils/tokenType.js.map +1 -0
  114. package/dist/esm/components/SQLEditor/utils/tokenUtils.js +1 -1
  115. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +1 -1
  116. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +1 -1
  117. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +1 -1
  118. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +1 -1
  119. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +1 -1
  120. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +1 -1
  121. package/dist/esm/datasource/SqlDatasource.js +10 -10
  122. package/dist/esm/index.d.ts +694 -39
  123. package/dist/esm/index.js +13 -1
  124. package/dist/esm/index.js.map +1 -1
  125. package/dist/esm/schema/registry/alertmanager.schema.json.js +77 -0
  126. package/dist/esm/schema/registry/alertmanager.schema.json.js.map +1 -0
  127. package/dist/esm/schema/registry/cloudwatch.schema.json.js +384 -0
  128. package/dist/esm/schema/registry/cloudwatch.schema.json.js.map +1 -0
  129. package/dist/esm/schema/registry/elasticsearch.schema.json.js +597 -0
  130. package/dist/esm/schema/registry/elasticsearch.schema.json.js.map +1 -0
  131. package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.schema.json.js +95 -0
  132. package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.schema.json.js.map +1 -0
  133. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js +166 -0
  134. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js.map +1 -0
  135. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js +145 -0
  136. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js.map +1 -0
  137. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js +123 -0
  138. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js.map +1 -0
  139. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js +158 -0
  140. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js.map +1 -0
  141. package/dist/esm/schema/registry/grafana-atlassianstatuspage-datasource.schema.json.js +43 -0
  142. package/dist/esm/schema/registry/grafana-atlassianstatuspage-datasource.schema.json.js.map +1 -0
  143. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js +204 -0
  144. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js.map +1 -0
  145. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js +300 -0
  146. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js.map +1 -0
  147. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js +101 -0
  148. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js.map +1 -0
  149. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js +125 -0
  150. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js.map +1 -0
  151. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js +508 -0
  152. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js.map +1 -0
  153. package/dist/esm/schema/registry/grafana-catchpoint-datasource.schema.json.js +42 -0
  154. package/dist/esm/schema/registry/grafana-catchpoint-datasource.schema.json.js.map +1 -0
  155. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js +1400 -0
  156. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js.map +1 -0
  157. package/dist/esm/schema/registry/grafana-cloudflare-datasource.schema.json.js +42 -0
  158. package/dist/esm/schema/registry/grafana-cloudflare-datasource.schema.json.js.map +1 -0
  159. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js +302 -0
  160. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js.map +1 -0
  161. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js +291 -0
  162. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js.map +1 -0
  163. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js +155 -0
  164. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js.map +1 -0
  165. package/dist/esm/schema/registry/grafana-drone-datasource.schema.json.js +64 -0
  166. package/dist/esm/schema/registry/grafana-drone-datasource.schema.json.js.map +1 -0
  167. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js +179 -0
  168. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js.map +1 -0
  169. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js +134 -0
  170. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js.map +1 -0
  171. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js +156 -0
  172. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js.map +1 -0
  173. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js +84 -0
  174. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js.map +1 -0
  175. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js +231 -0
  176. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js.map +1 -0
  177. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js +87 -0
  178. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js.map +1 -0
  179. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js +159 -0
  180. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js.map +1 -0
  181. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js +188 -0
  182. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js.map +1 -0
  183. package/dist/esm/schema/registry/grafana-logicmonitor-datasource.schema.json.js +63 -0
  184. package/dist/esm/schema/registry/grafana-logicmonitor-datasource.schema.json.js.map +1 -0
  185. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js +82 -0
  186. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js.map +1 -0
  187. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js +278 -0
  188. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js.map +1 -0
  189. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js +168 -0
  190. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js.map +1 -0
  191. package/dist/esm/schema/registry/grafana-netlify-datasource.schema.json.js +42 -0
  192. package/dist/esm/schema/registry/grafana-netlify-datasource.schema.json.js.map +1 -0
  193. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js +129 -0
  194. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js.map +1 -0
  195. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js +56 -0
  196. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js.map +1 -0
  197. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js +212 -0
  198. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js.map +1 -0
  199. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js +186 -0
  200. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js.map +1 -0
  201. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js +85 -0
  202. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js.map +1 -0
  203. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js +411 -0
  204. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js.map +1 -0
  205. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js +41 -0
  206. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js.map +1 -0
  207. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js +201 -0
  208. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js.map +1 -0
  209. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js +248 -0
  210. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js.map +1 -0
  211. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js +208 -0
  212. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js.map +1 -0
  213. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js +94 -0
  214. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js.map +1 -0
  215. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js +179 -0
  216. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js.map +1 -0
  217. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js +304 -0
  218. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js.map +1 -0
  219. package/dist/esm/schema/registry/grafana-solarwinds-datasource.schema.json.js +77 -0
  220. package/dist/esm/schema/registry/grafana-solarwinds-datasource.schema.json.js.map +1 -0
  221. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js +690 -0
  222. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js.map +1 -0
  223. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js +90 -0
  224. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js.map +1 -0
  225. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js +74 -0
  226. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js.map +1 -0
  227. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js +102 -0
  228. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js.map +1 -0
  229. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js +92 -0
  230. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js.map +1 -0
  231. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js +145 -0
  232. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js.map +1 -0
  233. package/dist/esm/schema/registry/grafana-vercel-datasource.schema.json.js +62 -0
  234. package/dist/esm/schema/registry/grafana-vercel-datasource.schema.json.js.map +1 -0
  235. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js +80 -0
  236. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js.map +1 -0
  237. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js +112 -0
  238. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js.map +1 -0
  239. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js +114 -0
  240. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js.map +1 -0
  241. package/dist/esm/schema/registry/grafana-zendesk-datasource.schema.json.js +76 -0
  242. package/dist/esm/schema/registry/grafana-zendesk-datasource.schema.json.js.map +1 -0
  243. package/dist/esm/schema/registry/graphite.schema.json.js +104 -0
  244. package/dist/esm/schema/registry/graphite.schema.json.js.map +1 -0
  245. package/dist/esm/schema/registry/index.js +157 -0
  246. package/dist/esm/schema/registry/index.js.map +1 -0
  247. package/dist/esm/schema/registry/influxdb.schema.json.js +717 -0
  248. package/dist/esm/schema/registry/influxdb.schema.json.js.map +1 -0
  249. package/dist/esm/schema/registry/jaeger.schema.json.js +59 -0
  250. package/dist/esm/schema/registry/jaeger.schema.json.js.map +1 -0
  251. package/dist/esm/schema/registry/loki.schema.json.js +545 -0
  252. package/dist/esm/schema/registry/loki.schema.json.js.map +1 -0
  253. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js +45 -0
  254. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js.map +1 -0
  255. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js +36 -0
  256. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js.map +1 -0
  257. package/dist/esm/schema/registry/mssql.schema.json.js +292 -0
  258. package/dist/esm/schema/registry/mssql.schema.json.js.map +1 -0
  259. package/dist/esm/schema/registry/mysql.schema.json.js +304 -0
  260. package/dist/esm/schema/registry/mysql.schema.json.js.map +1 -0
  261. package/dist/esm/schema/registry/opentsdb.schema.json.js +113 -0
  262. package/dist/esm/schema/registry/opentsdb.schema.json.js.map +1 -0
  263. package/dist/esm/schema/registry/prometheus.schema.json.js +783 -0
  264. package/dist/esm/schema/registry/prometheus.schema.json.js.map +1 -0
  265. package/dist/esm/schema/registry/stackdriver.schema.json.js +224 -0
  266. package/dist/esm/schema/registry/stackdriver.schema.json.js.map +1 -0
  267. package/dist/esm/schema/registry/tempo.schema.json.js +664 -0
  268. package/dist/esm/schema/registry/tempo.schema.json.js.map +1 -0
  269. package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.schema.json.js +1073 -0
  270. package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.schema.json.js.map +1 -0
  271. package/dist/esm/schema/registry/zipkin.schema.json.js +40 -0
  272. package/dist/esm/schema/registry/zipkin.schema.json.js.map +1 -0
  273. package/dist/esm/schema/utils/dsconfig.js +97 -0
  274. package/dist/esm/schema/utils/dsconfig.js.map +1 -0
  275. package/dist/esm/schema/utils/llm.js +54 -0
  276. package/dist/esm/schema/utils/llm.js.map +1 -0
  277. package/dist/esm/schema/utils/provisioning.js +434 -0
  278. package/dist/esm/schema/utils/provisioning.js.map +1 -0
  279. package/dist/esm/schema/utils/useDatasourceSchema.js +16 -0
  280. package/dist/esm/schema/utils/useDatasourceSchema.js.map +1 -0
  281. package/dist/esm/schemas.d.ts +448 -0
  282. package/dist/esm/schemas.js +6 -0
  283. package/dist/esm/schemas.js.map +1 -0
  284. package/dist/esm/test-utils.d.ts +23 -23
  285. package/package.json +52 -16
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioning.js","sources":["../../../../src/schema/utils/provisioning.ts"],"sourcesContent":["// @ts-expect-error — js-yaml has no bundled type declarations; used only for scalar serialization\nimport yaml from 'js-yaml';\nimport { resolveGroups } from '../../components/ConfigEditor/DatasourceConfigWizard/config';\nimport { ROOT_CONFIG_FIELDS } from './dsconfig';\nimport type { AllowedValuesValidationRule, ConfigField, ConfigGroup, DatasourceConfigSchema } from '../schema';\n\ntype YamlRenderOptions = { jsonDataKeys?: string[]; secureKeys?: string[] };\n\n// ============================================================\n// Provisioning YAML generation\n// ============================================================\n\n/** Indent each line by `depth * 2` spaces. */\nfunction yamlIndent(depth: number): string {\n return ' '.repeat(depth);\n}\n\n/** Serialize a scalar value as a safe YAML string using js-yaml. */\nfunction yamlString(value: unknown): string {\n if (value === null || value === undefined) {\n return '\"\"';\n }\n const s = String(value);\n if (s === '') {\n return '\"\"';\n }\n return yaml.dump(s, { lineWidth: -1 }).trimEnd();\n}\n\n/** Format a value as YAML inline. */\nfunction yamlValue(value: unknown, depth: number): string {\n if (value === null || value === undefined) {\n return '\"\"';\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return yamlString(value);\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]';\n }\n const lines = value.map((item) => {\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n const entries = Object.entries(item as Record<string, unknown>);\n if (entries.length === 0) {\n return `${yamlIndent(depth)}- {}`;\n }\n const [firstKey, firstVal] = entries[0];\n const firstLine = `${yamlIndent(depth)}- ${yamlString(firstKey)}: ${yamlValue(firstVal, depth + 2)}`;\n const rest = entries\n .slice(1)\n .map(([k, v]) => `${yamlIndent(depth + 1)}${yamlString(k)}: ${yamlValue(v, depth + 2)}`);\n return [firstLine, ...rest].join('\\n');\n }\n return `${yamlIndent(depth)}- ${yamlValue(item, depth + 1)}`;\n });\n return '\\n' + lines.join('\\n');\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n return '{}';\n }\n const lines = entries.map(([k, v]) => `${yamlIndent(depth)}${yamlString(k)}: ${yamlValue(v, depth + 1)}`);\n return '\\n' + lines.join('\\n');\n }\n return yamlString(value);\n}\n\n/** True if the field is a certificate or key (multiline secret). */\nfunction isCertField(field: ConfigField): boolean {\n const k = field.key.toLowerCase();\n return (\n field.target === 'secureJsonData' && (k.includes('cert') || k.includes('key') || field.ui?.component === 'textarea')\n );\n}\n\n/** True if the field should be excluded from provisioning YAML output. */\nfunction isExcludedFromProvisioning(field: ConfigField): boolean {\n if (field.kind === 'virtual') {\n return true;\n }\n if (field.isItemField) {\n return true;\n }\n // Fields tagged \"managed-by:*\" are auto-set by the wizard UI via effects.\n // Root fields like basicAuth still need to appear in provisioning YAML\n // because they are real storage fields. Only exclude managed jsonData fields.\n if (field.tags?.some((t) => t.startsWith('managed-by:')) && field.target !== 'root') {\n return true;\n }\n // Skip indexedPair storage — these are handled separately (e.g. httpHeaders)\n if (field.storage?.type === 'indexedPair') {\n return true;\n }\n return false;\n}\n\n/** Format a secureJsonData placeholder value. */\nfunction secretPlaceholder(field: ConfigField): string {\n if (isCertField(field)) {\n return '|\\n xxxxxx';\n }\n return 'xxxxxx';\n}\n\n/** Default YAML value for a field in template mode. */\nfunction templateValue(field: ConfigField): unknown {\n if (field.defaultValue !== undefined) {\n return field.defaultValue;\n }\n // Use first option value as a sensible default\n if (field.ui?.options && field.ui.options.length > 0) {\n return field.ui.options[0].value;\n }\n switch (field.valueType) {\n case 'string':\n return '';\n case 'number':\n return 0;\n case 'boolean':\n return false;\n case 'array':\n return [];\n case 'object':\n case 'map':\n return {};\n default:\n return '';\n }\n}\n\n/**\n * Format a YAML comment for a field in template mode.\n * Includes label, description, allowed values, and default.\n */\nfunction fieldComment(field: ConfigField, indent: string): string {\n const parts: string[] = [];\n const label = field.label ?? field.key;\n let line = label;\n if (field.required) {\n line += ' (REQUIRED)';\n }\n if (field.description) {\n line += ` — ${field.description}`;\n }\n parts.push(`${indent}# ${line}`);\n\n const options = field.ui?.options;\n if (options && options.length > 0) {\n const vals = options.map((o) => String(o.value)).join(', ');\n parts.push(`${indent}# Allowed values: ${vals}`);\n }\n\n const allowedValuesRule = field.validations?.find(\n (v): v is AllowedValuesValidationRule => v.type === 'allowedValues'\n );\n if (allowedValuesRule && !options) {\n const vals = allowedValuesRule.values.map((v) => String(v)).join(', ');\n parts.push(`${indent}# Allowed values: ${vals}`);\n }\n\n if (field.dependsOn) {\n parts.push(`${indent}# Only when: ${field.dependsOn}`);\n }\n\n return parts.join('\\n');\n}\n\nexport type ProvisioningYamlOptions = {\n /** Include comments with field descriptions. Default: true for template, false for export. */\n comments?: boolean;\n /** Name override (used in template mode). */\n name?: string;\n};\n\n/**\n * Generate a Grafana provisioning YAML from a dsconfig schema.\n * In template mode (no values), emits all fields with defaults and comments.\n * When values are provided, emits actual values — used for existing datasource export.\n */\nexport function toProvisioningYaml(\n schema: DatasourceConfigSchema,\n values?: Record<string, unknown>,\n options?: ProvisioningYamlOptions\n): string {\n const isTemplate = !values;\n const showComments = options?.comments ?? isTemplate;\n const indent2 = ' ';\n const indent3 = ' ';\n\n // Use schema groups to order fields logically (connection → auth → network → etc.)\n const groups = resolveGroups(schema);\n const rootFields: ConfigField[] = [];\n const jsonDataFieldsByGroup: Array<{ group: ConfigGroup; fields: ConfigField[] }> = [];\n const secureJsonDataFieldsByGroup: Array<{ group: ConfigGroup; fields: ConfigField[] }> = [];\n const virtualFieldsWithOptions: ConfigField[] = [];\n\n for (const { group, fields } of groups) {\n const jd: ConfigField[] = [];\n const sd: ConfigField[] = [];\n for (const field of fields) {\n // Collect virtual fields with UI options (e.g. auth.method) for comment-only output\n if (field.kind === 'virtual' && field.ui?.options && field.ui.options.length > 0) {\n virtualFieldsWithOptions.push(field);\n continue;\n }\n if (isExcludedFromProvisioning(field)) {\n continue;\n }\n switch (field.target) {\n case 'root':\n rootFields.push(field);\n break;\n case 'jsonData':\n jd.push(field);\n break;\n case 'secureJsonData':\n sd.push(field);\n break;\n }\n }\n if (jd.length > 0) {\n jsonDataFieldsByGroup.push({ group, fields: jd });\n }\n if (sd.length > 0) {\n secureJsonDataFieldsByGroup.push({ group, fields: sd });\n }\n }\n\n const allSecureJsonDataFields = secureJsonDataFieldsByGroup.flatMap((g) => g.fields);\n\n // Pick up root fields not referenced in any group (e.g. root.basicAuth is managed\n // by auth.method effects and not listed in the auth group's fieldRefs).\n const groupedFieldIds = new Set(groups.flatMap(({ group }) => group.fieldRefs));\n for (const field of schema.fields) {\n if (field.target === 'root' && !groupedFieldIds.has(field.id) && !isExcludedFromProvisioning(field)) {\n rootFields.push(field);\n }\n }\n\n const lines: string[] = [];\n lines.push('apiVersion: 1');\n lines.push('');\n lines.push('datasources:');\n lines.push(`${indent2.slice(2)}- name: ${yamlString(options?.name ?? values?.name ?? `my-${schema.pluginType}`)}`);\n lines.push(`${indent2}type: ${schema.pluginType}`);\n\n // In export mode, emit uid so the provisioning YAML can be used for idempotent upserts.\n if (!isTemplate && values?.uid) {\n lines.push(`${indent2}uid: ${yamlString(values.uid)}`);\n }\n\n // Root fields (url, basicAuth, basicAuthUser, database, etc.)\n const ALREADY_EMITTED_ROOT = new Set(['name', 'type', 'uid']);\n for (const field of rootFields) {\n if (ALREADY_EMITTED_ROOT.has(field.key)) {\n continue;\n }\n const val = values ? values[field.key] : templateValue(field);\n if (val === undefined || val === null) {\n continue;\n }\n // Skip false booleans in export mode to keep YAML clean\n if (!isTemplate && val === false) {\n continue;\n }\n if (showComments) {\n lines.push(fieldComment(field, indent2));\n }\n lines.push(`${indent2}${field.key}: ${yamlValue(val, 3)}`);\n }\n\n // Emit virtual fields with UI options as comments (e.g. auth.method selector)\n // These explain configuration choices even though they aren't stored directly.\n if (showComments) {\n for (const vf of virtualFieldsWithOptions) {\n const label = vf.label ?? vf.key;\n const opts = vf.ui!.options!.map((o) => `${String(o.value)} (${o.label})`).join(', ');\n lines.push(`${indent2}# ${label}: ${opts}`);\n if (vf.description) {\n lines.push(`${indent2}# ${vf.description}`);\n }\n }\n }\n\n // Collect jsonData keys emitted by schema fields so we can detect extra keys in export mode.\n const emittedJsonDataKeys = new Set<string>();\n const emittedSecureJsonDataKeys = new Set<string>();\n\n // jsonData section — ordered by schema groups\n const jsonDataValues = values?.jsonData as Record<string, unknown> | undefined;\n const hasJsonDataFromSchema = jsonDataFieldsByGroup.length > 0;\n const hasJsonDataFromValues = !isTemplate && jsonDataValues && Object.keys(jsonDataValues).length > 0;\n\n if (hasJsonDataFromSchema || hasJsonDataFromValues) {\n lines.push(`${indent2}jsonData:`);\n\n // Schema-declared fields, grouped by section\n for (const { group, fields: groupFields } of jsonDataFieldsByGroup) {\n if (showComments && jsonDataFieldsByGroup.length > 1) {\n lines.push(`${indent3}# --- ${group.title} ---`);\n }\n for (const field of groupFields) {\n const val = values ? getNestedValue(values, 'jsonData', field) : templateValue(field);\n if (val === undefined || val === null) {\n continue;\n }\n // In export mode, skip default-value fields to keep YAML minimal\n if (!isTemplate && field.defaultValue !== undefined && val === field.defaultValue) {\n continue;\n }\n emittedJsonDataKeys.add(field.key);\n if (showComments) {\n lines.push(fieldComment(field, indent3));\n }\n const rendered = yamlValue(val, 4);\n if (rendered.startsWith('\\n')) {\n lines.push(`${indent3}${field.key}:${rendered}`);\n } else {\n lines.push(`${indent3}${field.key}: ${rendered}`);\n }\n }\n }\n\n // In export mode, emit extra jsonData keys not declared in the schema\n // (e.g. httpHeaderName1 from indexedPair storage, or plugin-specific keys)\n if (!isTemplate && jsonDataValues) {\n for (const [key, val] of Object.entries(jsonDataValues)) {\n if (emittedJsonDataKeys.has(key)) {\n continue;\n }\n if (val === undefined || val === null) {\n continue;\n }\n const rendered = yamlValue(val, 4);\n if (rendered.startsWith('\\n')) {\n lines.push(`${indent3}${key}:${rendered}`);\n } else {\n lines.push(`${indent3}${key}: ${rendered}`);\n }\n }\n }\n }\n\n // secureJsonData section\n // In export mode, the Grafana API returns `secureJsonFields: { key: true }` indicating which\n // secure fields are actually configured. Only emit those — not all schema-declared secure fields.\n // In template mode, emit all schema-declared secure fields with placeholders.\n const secureJsonFields = (values?.secureJsonFields ?? {}) as Record<string, boolean>;\n const inferredSecureKeys = !isTemplate ? inferSecureJsonDataKeys(jsonDataValues) : [];\n\n // Filter secure fields: in export mode, only emit fields that are actually set on the datasource\n const activeSecureFields = isTemplate\n ? allSecureJsonDataFields\n : allSecureJsonDataFields.filter((f) => secureJsonFields[f.key] === true);\n\n if (activeSecureFields.length > 0 || inferredSecureKeys.length > 0) {\n lines.push(`${indent2}secureJsonData:`);\n for (const field of activeSecureFields) {\n emittedSecureJsonDataKeys.add(field.key);\n if (showComments) {\n lines.push(fieldComment(field, indent3));\n }\n lines.push(`${indent3}${field.key}: ${secretPlaceholder(field)}`);\n }\n // Inferred secure keys (e.g. httpHeaderValue1 matching httpHeaderName1)\n for (const key of inferredSecureKeys) {\n if (emittedSecureJsonDataKeys.has(key)) {\n continue;\n }\n lines.push(`${indent3}${key}: xxxxxx`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Infer secureJsonData keys from jsonData keys.\n * For example, httpHeaderName1 → httpHeaderValue1 (Grafana's indexedPair convention).\n */\nfunction inferSecureJsonDataKeys(jsonData: Record<string, unknown> | undefined): string[] {\n if (!jsonData) {\n return [];\n }\n const keys: string[] = [];\n for (const key of Object.keys(jsonData)) {\n const match = key.match(/^httpHeaderName(\\d+)$/);\n if (match) {\n keys.push(`httpHeaderValue${match[1]}`);\n }\n }\n return keys;\n}\n\n/** Retrieve a nested value for a jsonData/secureJsonData field from a flat or nested values object. */\nfunction getNestedValue(values: Record<string, unknown>, target: string, field: ConfigField): unknown {\n const nested = values[target];\n if (nested && typeof nested === 'object') {\n return (nested as Record<string, unknown>)[field.key];\n }\n return undefined;\n}\n\n/**\n * Generate provisioning YAML from an existing Grafana datasource API response.\n * If a dsconfig schema is available, uses it for field ordering and comments.\n * If not, generates basic YAML from the raw API response.\n */\nexport function datasourceToProvisioningYaml(\n ds: Record<string, unknown>,\n schema: DatasourceConfigSchema | null\n): string {\n if (schema) {\n return toProvisioningYaml(schema, ds, { comments: false });\n }\n\n // No schema — generate basic YAML from the raw API response\n const lines: string[] = [];\n lines.push('apiVersion: 1');\n lines.push('');\n lines.push('datasources:');\n lines.push(` - name: ${yamlString(ds.name)}`);\n if (ds.uid) {\n lines.push(` uid: ${yamlString(ds.uid)}`);\n }\n lines.push(` type: ${yamlString(ds.type)}`);\n if (ds.url) {\n lines.push(` url: ${yamlString(ds.url)}`);\n }\n if (ds.database) {\n lines.push(` database: ${yamlString(ds.database)}`);\n }\n if (ds.isDefault) {\n lines.push(' isDefault: true');\n }\n if (ds.basicAuth) {\n lines.push(' basicAuth: true');\n if (ds.basicAuthUser) {\n lines.push(` basicAuthUser: ${yamlString(ds.basicAuthUser)}`);\n }\n }\n\n const jsonData = ds.jsonData as Record<string, unknown> | undefined;\n if (jsonData && Object.keys(jsonData).length > 0) {\n lines.push(' jsonData:');\n for (const [key, val] of Object.entries(jsonData)) {\n const rendered = yamlValue(val, 4);\n if (rendered.startsWith('\\n')) {\n lines.push(` ${key}:${rendered}`);\n } else {\n lines.push(` ${key}: ${rendered}`);\n }\n }\n }\n\n // secureJsonData is never returned by the API — emit placeholder comment\n lines.push(' # secureJsonData: (secrets are not exported — add manually)');\n lines.push(' # mySecret: xxxxxx');\n\n return lines.join('\\n');\n}\n\nfunction getYamlRenderOptions(ds: Record<string, unknown>): Required<YamlRenderOptions> {\n return {\n jsonDataKeys: Object.keys((ds.jsonData ?? {}) as Record<string, unknown>).sort(),\n secureKeys: [\n ...new Set([\n ...Object.keys((ds.secureJsonData ?? {}) as Record<string, unknown>),\n ...Object.keys((ds.secureJsonFields ?? {}) as Record<string, boolean>),\n ]),\n ].sort(),\n };\n}\n\nexport const configToYaml = (ds: Record<string, unknown>, options: YamlRenderOptions = {}): string => {\n const { jsonDataKeys, secureKeys } = {\n ...getYamlRenderOptions(ds),\n ...options,\n };\n const root: Record<string, unknown> = {};\n\n for (const key of ROOT_CONFIG_FIELDS) {\n root[key] = ds[key] ?? '';\n }\n\n const jsonData = (ds.jsonData ?? {}) as Record<string, unknown>;\n if (jsonDataKeys.length > 0) {\n const jsonDataYaml: Record<string, unknown> = {};\n for (const key of jsonDataKeys) {\n jsonDataYaml[key] = jsonData[key] ?? '';\n }\n root.jsonData = jsonDataYaml;\n }\n\n if (secureKeys.length > 0) {\n const secureJsonData: Record<string, string> = {};\n for (const key of secureKeys) {\n secureJsonData[key] = '********';\n }\n root.secureJsonData = secureJsonData;\n }\n\n return yaml.dump(root, { lineWidth: -1, sortKeys: false, noRefs: true }).trimEnd();\n};\n\nexport const formatYamlDiff = (existing: Record<string, unknown>, body: Record<string, unknown>): string => {\n const updated = { ...existing, ...body };\n\n const existingJD = (existing.jsonData ?? {}) as Record<string, unknown>;\n const updatedJD = (updated.jsonData ?? {}) as Record<string, unknown>;\n const jsonDataKeys = [...new Set([...Object.keys(existingJD), ...Object.keys(updatedJD)])].sort();\n\n const secureKeys = [\n ...new Set([\n ...Object.keys((existing.secureJsonData ?? {}) as Record<string, unknown>),\n ...Object.keys((existing.secureJsonFields ?? {}) as Record<string, boolean>),\n ...Object.keys((updated.secureJsonData ?? {}) as Record<string, unknown>),\n ...Object.keys((updated.secureJsonFields ?? {}) as Record<string, boolean>),\n ]),\n ].sort();\n\n const currentYaml = configToYaml(existing, { jsonDataKeys, secureKeys });\n const updatedYaml = configToYaml(updated, { jsonDataKeys, secureKeys });\n\n const oldLines = currentYaml.split('\\n');\n const newLines = updatedYaml.split('\\n');\n const maxLen = Math.max(oldLines.length, newLines.length);\n const diffLines: string[] = [];\n\n for (let i = 0; i < maxLen; i++) {\n const oldLine = oldLines[i];\n const newLine = newLines[i];\n if (oldLine === newLine) {\n diffLines.push(` ${oldLine}`);\n continue;\n }\n if (oldLine !== undefined) {\n diffLines.push(`-${oldLine}`);\n }\n if (newLine !== undefined) {\n diffLines.push(`+${newLine}`);\n }\n }\n\n return '```diff\\n' + diffLines.join('\\n') + '\\n```';\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { useMemo } from 'react';
2
+ import { getConfigSchema } from '../registry/index.js';
3
+
4
+ function useDatasourceSchema(pluginType) {
5
+ const schema = useMemo(() => fetchConfigSchema(pluginType), [pluginType]);
6
+ return { schema, loading: false, error: null };
7
+ }
8
+ function fetchConfigSchema(pluginType) {
9
+ if (!pluginType) {
10
+ return null;
11
+ }
12
+ return getConfigSchema(pluginType);
13
+ }
14
+
15
+ export { fetchConfigSchema, useDatasourceSchema };
16
+ //# sourceMappingURL=useDatasourceSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDatasourceSchema.js","sources":["../../../../src/schema/utils/useDatasourceSchema.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { getConfigSchema } from '../registry';\nimport type { DatasourceConfigSchema } from '../schema';\n\ntype UseDatasourceSchemaResult = { schema: DatasourceConfigSchema | null; loading: boolean; error: string | null };\n\nexport function useDatasourceSchema(pluginType: string): UseDatasourceSchemaResult {\n const schema = useMemo(() => fetchConfigSchema(pluginType), [pluginType]);\n return { schema, loading: false, error: null };\n}\n\nexport function fetchConfigSchema(pluginType: string): DatasourceConfigSchema | null {\n if (!pluginType) {\n return null;\n }\n return getConfigSchema(pluginType);\n}\n"],"names":[],"mappings":";;;AAMO,SAAS,oBAAoB,UAAA,EAA+C;AACjF,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM,iBAAA,CAAkB,UAAU,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACxE,EAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,OAAO,IAAA,EAAK;AAC/C;AAEO,SAAS,kBAAkB,UAAA,EAAmD;AACnF,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,gBAAgB,UAAU,CAAA;AACnC;;;;"}
@@ -0,0 +1,448 @@
1
+ interface DatasourceConfigSchema {
2
+ /**
3
+ * Schema version (required)
4
+ * Used for compatibility and migrations
5
+ *
6
+ * Example: "v2"
7
+ */
8
+ schemaVersion: string;
9
+ /**
10
+ * Unique datasource plugin identifier
11
+ * Example: "prometheus"
12
+ */
13
+ pluginType: string;
14
+ /**
15
+ * Human-readable name
16
+ */
17
+ pluginName: string;
18
+ /**
19
+ * Optional documentation URL
20
+ */
21
+ docURL?: string;
22
+ /**
23
+ * Source of truth for configuration
24
+ */
25
+ fields: ConfigField[];
26
+ /**
27
+ * Optional UI grouping
28
+ */
29
+ groups?: ConfigGroup[];
30
+ /**
31
+ * Relationships between fields
32
+ */
33
+ relationships?: FieldRelationship[];
34
+ }
35
+ interface ConfigField {
36
+ /**
37
+ * Globally unique identifier
38
+ * Recommended format: dot-separated path
39
+ * Example: "auth.method", "httpHeaders.item.key"
40
+ */
41
+ id: string;
42
+ /**
43
+ * Local key used in storage or object
44
+ */
45
+ key: string;
46
+ /**
47
+ * UI metadata
48
+ */
49
+ label?: string;
50
+ description?: string;
51
+ docURL?: string;
52
+ /**
53
+ * Core type of the field
54
+ */
55
+ valueType: ValueType;
56
+ /**
57
+ * Semantic meaning (optional)
58
+ */
59
+ semanticType?: SemanticType;
60
+ /**
61
+ * Storage location (required for storage fields)
62
+ */
63
+ target?: TargetLocation;
64
+ /**
65
+ * Dotted path prefix within the target for nested objects.
66
+ * Example: for jsonData.tracesToLogs.datasourceUid,
67
+ * target="jsonData", section="tracesToLogs", key="datasourceUid".
68
+ */
69
+ section?: string;
70
+ /**
71
+ * Field kind.
72
+ * @default "storage"
73
+ */
74
+ kind?: FieldKind;
75
+ /**
76
+ * True if field belongs to array item schema
77
+ */
78
+ isItemField?: boolean;
79
+ /**
80
+ * Lifecycle state
81
+ */
82
+ lifecycle?: Lifecycle;
83
+ /**
84
+ * UI rendering hints
85
+ */
86
+ ui?: FieldUI;
87
+ /**
88
+ * Validations rules
89
+ */
90
+ validations?: FieldValidationRule[];
91
+ /**
92
+ * Visibility condition (CEL expression)
93
+ */
94
+ dependsOn?: Expression;
95
+ /**
96
+ * Always required
97
+ */
98
+ required?: boolean;
99
+ /**
100
+ * Conditionally required
101
+ */
102
+ requiredWhen?: Expression;
103
+ /**
104
+ * Disabled condition
105
+ */
106
+ disabledWhen?: Expression;
107
+ /**
108
+ * Dynamic overrides
109
+ */
110
+ overrides?: FieldOverride[];
111
+ /**
112
+ * Declarative multi-field write side-effects.
113
+ * When this field's value matches a condition, the listed target
114
+ * fields are set to specified values. Typically used on virtual
115
+ * selector fields (e.g. auth method dropdown).
116
+ */
117
+ effects?: FieldEffect[];
118
+ /**
119
+ * Item schema for array elements or map values.
120
+ * Required if valueType === "array" or "map".
121
+ */
122
+ item?: FieldItemSchema;
123
+ /**
124
+ * Legacy indexed fields (deprecated)
125
+ */
126
+ repeatable?: boolean;
127
+ pattern?: string;
128
+ /**
129
+ * Storage mapping
130
+ */
131
+ storage?: StorageMapping;
132
+ /**
133
+ * Metadata
134
+ */
135
+ tags?: string[];
136
+ examples?: unknown[];
137
+ defaultValue?: unknown;
138
+ }
139
+ interface FieldItemSchema {
140
+ /**
141
+ * Type of array items or map values.
142
+ * For arrays, describes each element.
143
+ * For maps, describes each value (keys are always strings).
144
+ */
145
+ valueType: ValueType;
146
+ /**
147
+ * Sub-fields for object items. Optional even when valueType = "object"
148
+ * (omitting allows an unconstrained object).
149
+ */
150
+ fields?: ConfigField[];
151
+ }
152
+ /**
153
+ * CEL expression string
154
+ */
155
+ type Expression = string;
156
+ type ValueType = 'string' | 'number' | 'boolean' | 'array' | 'object' | 'map' | 'any';
157
+ type SemanticType = 'url' | 'password' | 'token' | 'hostname' | 'duration' | 'datasourceUid' | 'query';
158
+ type FieldKind = 'storage' | 'virtual';
159
+ type Lifecycle = 'stable' | 'deprecated' | 'experimental';
160
+ type TargetLocation = 'root' | 'jsonData' | 'secureJsonData';
161
+ type UIComponent = 'input' | 'textarea' | 'select' | 'multiselect' | 'radio' | 'checkbox' | 'switch' | 'code' | 'keyvalue' | 'list' | 'fileUpload';
162
+ type UIWidth = 'full' | 'half';
163
+ /**
164
+ * UI configuration
165
+ */
166
+ interface FieldUI {
167
+ component: UIComponent;
168
+ multiline?: boolean;
169
+ rows?: number;
170
+ options?: FieldOption[];
171
+ allowCustom?: boolean;
172
+ width?: UIWidth;
173
+ placeholder?: string;
174
+ /**
175
+ * Language hint for code editor components.
176
+ * Example: "promql", "logql", "traceql", "sql", "json"
177
+ */
178
+ language?: string;
179
+ /**
180
+ * Layout row index for item fields inside object arrays.
181
+ * Fields with the same row number are rendered horizontally.
182
+ * Fields without a row number use auto-layout:
183
+ * - ≤3 fields: all on one row
184
+ * - >3 fields: each on its own row
185
+ */
186
+ row?: number;
187
+ /**
188
+ * Accepted file types for fileUpload component.
189
+ * Uses HTML accept attribute format with leading dot.
190
+ * Example: [".json"]
191
+ */
192
+ accept?: string[];
193
+ /**
194
+ * Maps keys in an uploaded JSON file to target field IDs.
195
+ * Used by fileUpload to distribute parsed values to other form fields.
196
+ * Example: { "private_key": "secureJsonData.privateKey", "client_email": "jsonData.clientEmail" }
197
+ */
198
+ fileMapping?: Record<string, string>;
199
+ }
200
+ type FieldValidationRule = PatternValidationRule | RangeValidationRule | LengthValidationRule | ItemCountValidationRule | AllowedValuesValidationRule | CustomValidationRule;
201
+ interface BaseValidationRule {
202
+ /**
203
+ * Optional stable ID for the validation rule.
204
+ * Useful for docs, localization, and test snapshots.
205
+ */
206
+ id?: string;
207
+ /**
208
+ * Human-readable validation error message.
209
+ */
210
+ message?: string;
211
+ }
212
+ interface PatternValidationRule extends BaseValidationRule {
213
+ type: 'pattern';
214
+ pattern: string;
215
+ }
216
+ interface RangeValidationRule extends BaseValidationRule {
217
+ type: 'range';
218
+ min?: number;
219
+ max?: number;
220
+ }
221
+ interface LengthValidationRule extends BaseValidationRule {
222
+ type: 'length';
223
+ min?: number;
224
+ max?: number;
225
+ }
226
+ interface ItemCountValidationRule extends BaseValidationRule {
227
+ type: 'itemCount';
228
+ min?: number;
229
+ max?: number;
230
+ }
231
+ interface AllowedValuesValidationRule extends BaseValidationRule {
232
+ type: 'allowedValues';
233
+ values: unknown[];
234
+ }
235
+ interface CustomValidationRule extends BaseValidationRule {
236
+ type: 'custom';
237
+ /**
238
+ * CEL expression.
239
+ *
240
+ * Should evaluate to true when the field value is valid.
241
+ */
242
+ expression: Expression;
243
+ }
244
+ interface FieldOverride {
245
+ /**
246
+ * CEL condition
247
+ */
248
+ when: Expression;
249
+ defaultValue?: unknown;
250
+ /**
251
+ * When true, the field is disabled/read-only while this override is active.
252
+ */
253
+ readOnly?: boolean;
254
+ description?: string;
255
+ placeholder?: string;
256
+ tooltip?: string;
257
+ validations?: FieldValidationRule[];
258
+ options?: FieldOption[];
259
+ /**
260
+ * When present on an `isItemField` field, the value is routed to
261
+ * `secureJsonData` under the resolved key instead of being stored
262
+ * inline in the parent array.
263
+ *
264
+ * The template string supports placeholders:
265
+ * - `{index}` — 0-based array position
266
+ * - `{index1}` — 1-based array position
267
+ * - `{item.KEY}` — value of sibling item field `KEY`
268
+ *
269
+ * Examples:
270
+ * - `"secureHttpHeaders.{item.name}"` (ClickHouse)
271
+ * - `"httpHeaderValue{index1}"` (Grafana core headers)
272
+ */
273
+ secureKey?: string;
274
+ }
275
+ /**
276
+ * Declares that when a field's value matches a condition,
277
+ * listed target fields should be set to specified values.
278
+ *
279
+ * Use "value" in the `when` expression to refer to the field's value.
280
+ */
281
+ interface FieldEffect {
282
+ /**
283
+ * CEL expression. Example: "value == 'basic-auth'"
284
+ */
285
+ when: Expression;
286
+ /**
287
+ * Maps field IDs to the values they should be set to.
288
+ * Must contain at least one entry.
289
+ */
290
+ set: Record<string, unknown> & {
291
+ [k: string]: unknown;
292
+ };
293
+ }
294
+ type StorageMapping = DirectMapping | IndexedPairMapping | ComputedMapping;
295
+ /**
296
+ * Direct mapping
297
+ */
298
+ interface DirectMapping {
299
+ type: 'direct';
300
+ }
301
+ /**
302
+ * Indexed pair mapping (headers)
303
+ */
304
+ interface IndexedPairMapping {
305
+ type: 'indexedPair';
306
+ key: MappingField;
307
+ value: MappingField;
308
+ startIndex?: number;
309
+ }
310
+ /**
311
+ * Computed mapping (virtual fields).
312
+ * At least one of `read` or `write` must be provided.
313
+ */
314
+ type ComputedMapping = {
315
+ type: 'computed';
316
+ read: Expression;
317
+ write?: Expression;
318
+ } | {
319
+ type: 'computed';
320
+ read?: Expression;
321
+ write: Expression;
322
+ };
323
+ /**
324
+ * Mapping field
325
+ */
326
+ interface MappingField {
327
+ target: TargetLocation;
328
+ pattern: string;
329
+ }
330
+ interface FieldOption {
331
+ label: string;
332
+ /**
333
+ * Must match parent field valueType.
334
+ * Must not be null.
335
+ */
336
+ value: NonNullable<unknown>;
337
+ /**
338
+ * Optional human-readable description of the option.
339
+ */
340
+ description?: string;
341
+ }
342
+ interface ConfigGroup {
343
+ id: string;
344
+ title: string;
345
+ description?: string;
346
+ order?: number;
347
+ /**
348
+ * When true, the group is optional and can be collapsed/hidden by default.
349
+ */
350
+ optional?: boolean;
351
+ /**
352
+ * References field IDs (not keys)
353
+ */
354
+ fieldRefs: string[];
355
+ }
356
+ type RelationshipType = 'pair' | 'group' | 'datasourceReference';
357
+ interface FieldRelationship {
358
+ type: RelationshipType;
359
+ /**
360
+ * References field IDs
361
+ */
362
+ fields: string[];
363
+ description?: string;
364
+ /**
365
+ * Constrains the datasource UID to a specific plugin type.
366
+ * Only applicable when type is "datasourceReference".
367
+ */
368
+ targetPluginType?: string;
369
+ }
370
+ type SecureFieldState = {
371
+ type: 'unset';
372
+ } | {
373
+ type: 'configured';
374
+ } | {
375
+ type: 'updated';
376
+ value: string;
377
+ };
378
+ interface FormState {
379
+ values: Record<string, unknown>;
380
+ secure: Record<string, SecureFieldState>;
381
+ }
382
+
383
+ declare function getConfigSchema(pluginType: string): DatasourceConfigSchema | null;
384
+
385
+ /**
386
+ * Generate LLM hints for select fields (used when creating datasources).
387
+ */
388
+ declare function generateLLMHint(schema: DatasourceConfigSchema): string;
389
+ /**
390
+ * Generate comprehensive structured field data for troubleshooting context.
391
+ * Returns an array of field descriptors the LLM can use to render rich tables.
392
+ */
393
+ declare function generateTroubleshootingFields(schema: DatasourceConfigSchema): Array<{
394
+ label: string;
395
+ key: string;
396
+ target: string;
397
+ type: string;
398
+ required: boolean;
399
+ description?: string;
400
+ defaultValue?: unknown;
401
+ options?: string[];
402
+ section?: string;
403
+ dependsOn?: string;
404
+ }>;
405
+
406
+ type YamlRenderOptions = {
407
+ jsonDataKeys?: string[];
408
+ secureKeys?: string[];
409
+ };
410
+ type ProvisioningYamlOptions = {
411
+ /** Include comments with field descriptions. Default: true for template, false for export. */
412
+ comments?: boolean;
413
+ /** Name override (used in template mode). */
414
+ name?: string;
415
+ };
416
+ /**
417
+ * Generate a Grafana provisioning YAML from a dsconfig schema.
418
+ * In template mode (no values), emits all fields with defaults and comments.
419
+ * When values are provided, emits actual values — used for existing datasource export.
420
+ */
421
+ declare function toProvisioningYaml(schema: DatasourceConfigSchema, values?: Record<string, unknown>, options?: ProvisioningYamlOptions): string;
422
+ /**
423
+ * Generate provisioning YAML from an existing Grafana datasource API response.
424
+ * If a dsconfig schema is available, uses it for field ordering and comments.
425
+ * If not, generates basic YAML from the raw API response.
426
+ */
427
+ declare function datasourceToProvisioningYaml(ds: Record<string, unknown>, schema: DatasourceConfigSchema | null): string;
428
+ declare const configToYaml: (ds: Record<string, unknown>, options?: YamlRenderOptions) => string;
429
+ declare const formatYamlDiff: (existing: Record<string, unknown>, body: Record<string, unknown>) => string;
430
+
431
+ type UseDatasourceSchemaResult = {
432
+ schema: DatasourceConfigSchema | null;
433
+ loading: boolean;
434
+ error: string | null;
435
+ };
436
+ declare function useDatasourceSchema(pluginType: string): UseDatasourceSchemaResult;
437
+ declare function fetchConfigSchema(pluginType: string): DatasourceConfigSchema | null;
438
+
439
+ declare const ROOT_CONFIG_FIELDS: readonly ["name", "type", "id", "uid", "access", "url", "basicAuth", "basicAuthUser", "user", "isDefault", "database", "withCredentials"];
440
+ type DatasourceConfig = Record<any, any>;
441
+ declare const buildCreateDatasourcePayload: (input: DatasourceConfig) => DatasourceConfig;
442
+ declare const buildCloneDatasourcePayload: (source: DatasourceConfig, name: string) => DatasourceConfig;
443
+ declare const buildUpdateDatasourcePayload: (existing: DatasourceConfig, input: DatasourceConfig) => {
444
+ body: DatasourceConfig;
445
+ hasChanges: boolean;
446
+ };
447
+
448
+ export { type AllowedValuesValidationRule, type BaseValidationRule, type ComputedMapping, type ConfigField, type ConfigGroup, type CustomValidationRule, type DatasourceConfigSchema, type DirectMapping, type Expression, type FieldEffect, type FieldItemSchema, type FieldKind, type FieldOption, type FieldOverride, type FieldRelationship, type FieldUI, type FieldValidationRule, type FormState, type IndexedPairMapping, type ItemCountValidationRule, type LengthValidationRule, type Lifecycle, type MappingField, type PatternValidationRule, type ProvisioningYamlOptions, ROOT_CONFIG_FIELDS, type RangeValidationRule, type RelationshipType, type SecureFieldState, type SemanticType, type StorageMapping, type TargetLocation, type UIComponent, type UIWidth, type ValueType, buildCloneDatasourcePayload, buildCreateDatasourcePayload, buildUpdateDatasourcePayload, configToYaml, datasourceToProvisioningYaml, fetchConfigSchema, formatYamlDiff, generateLLMHint, generateTroubleshootingFields, getConfigSchema, toProvisioningYaml, useDatasourceSchema };
@@ -0,0 +1,6 @@
1
+ export { getConfigSchema } from './schema/registry/index.js';
2
+ export { generateLLMHint, generateTroubleshootingFields } from './schema/utils/llm.js';
3
+ export { configToYaml, datasourceToProvisioningYaml, formatYamlDiff, toProvisioningYaml } from './schema/utils/provisioning.js';
4
+ export { fetchConfigSchema, useDatasourceSchema } from './schema/utils/useDatasourceSchema.js';
5
+ export { ROOT_CONFIG_FIELDS, buildCloneDatasourcePayload, buildCreateDatasourcePayload, buildUpdateDatasourcePayload } from './schema/utils/dsconfig.js';
6
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -3,38 +3,38 @@ import { DataSourceInstanceSettings, DataQuery, DataSourcePluginMeta, PluginDepe
3
3
  import { DataSourceWithBackend } from '@grafana/runtime';
4
4
 
5
5
  declare class DatasourceMock extends DataSourceWithBackend {
6
- query: jest.Mock<any, any>;
6
+ query: jest.Mock<any, any, any>;
7
7
  filterQuery: any;
8
- applyTemplateVariables: jest.Mock<any, any>;
9
- getResource: jest.Mock<any, any>;
10
- postResource: jest.Mock<any, any>;
11
- callHealthCheck: jest.Mock<any, any>;
12
- testDatasource: jest.Mock<any, any>;
8
+ applyTemplateVariables: jest.Mock<any, any, any>;
9
+ getResource: jest.Mock<any, any, any>;
10
+ postResource: jest.Mock<any, any, any>;
11
+ callHealthCheck: jest.Mock<any, any, any>;
12
+ testDatasource: jest.Mock<any, any, any>;
13
13
  uid: string;
14
14
  name: string;
15
15
  id: number;
16
16
  type: string;
17
17
  interval: string;
18
- importQueries: jest.Mock<any, any>;
19
- init: jest.Mock<any, any>;
20
- getQueryHints: jest.Mock<any, any>;
21
- getQueryDisplayText: jest.Mock<any, any>;
22
- metricFindQuery: jest.Mock<any, any>;
23
- getTagKeys: jest.Mock<any, any>;
24
- getTagValues: jest.Mock<any, any>;
18
+ importQueries: jest.Mock<any, any, any>;
19
+ init: jest.Mock<any, any, any>;
20
+ getQueryHints: jest.Mock<any, any, any>;
21
+ getQueryDisplayText: jest.Mock<any, any, any>;
22
+ metricFindQuery: jest.Mock<any, any, any>;
23
+ getTagKeys: jest.Mock<any, any, any>;
24
+ getTagValues: jest.Mock<any, any, any>;
25
25
  components: {};
26
26
  meta: _grafana_data.DataSourcePluginMeta<{}>;
27
- targetContainsTemplate: jest.Mock<any, any>;
28
- modifyQuery: jest.Mock<any, any>;
29
- getHighlighterExpression: jest.Mock<any, any>;
30
- languageProvider: jest.Mock<any, any>;
31
- getVersion: jest.Mock<any, any>;
32
- interpolateVariablesInQueries: jest.Mock<any, any>;
27
+ targetContainsTemplate: jest.Mock<any, any, any>;
28
+ modifyQuery: jest.Mock<any, any, any>;
29
+ getHighlighterExpression: jest.Mock<any, any, any>;
30
+ languageProvider: jest.Mock<any, any, any>;
31
+ getVersion: jest.Mock<any, any, any>;
32
+ interpolateVariablesInQueries: jest.Mock<any, any, any>;
33
33
  annotations: {};
34
- annotationQuery: jest.Mock<any, any>;
35
- streamOptionsProvider: jest.Mock<any, any>;
36
- getRef: jest.Mock<any, any>;
37
- protected getRequestHeaders: jest.Mock<any, any>;
34
+ annotationQuery: jest.Mock<any, any, any>;
35
+ streamOptionsProvider: jest.Mock<any, any, any>;
36
+ getRef: jest.Mock<any, any, any>;
37
+ protected getRequestHeaders: jest.Mock<any, any, any>;
38
38
  }
39
39
  declare const mockDatasource: () => DatasourceMock;
40
40
  declare const mockDatasourceInstanceSettings: () => DataSourceInstanceSettings;