@grafana/sql 0.0.0 → 13.0.0-23483592685

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 (323) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/README.md +10 -0
  3. package/dist/cjs/ResponseParser.cjs +29 -0
  4. package/dist/cjs/ResponseParser.cjs.map +1 -0
  5. package/dist/cjs/SQLVariableEditor.cjs +86 -0
  6. package/dist/cjs/SQLVariableEditor.cjs.map +1 -0
  7. package/dist/cjs/SQLVariableSupport.cjs +40 -0
  8. package/dist/cjs/SQLVariableSupport.cjs.map +1 -0
  9. package/dist/cjs/SQLVariableUtils.cjs +75 -0
  10. package/dist/cjs/SQLVariableUtils.cjs.map +1 -0
  11. package/dist/cjs/components/ConfirmModal.cjs +56 -0
  12. package/dist/cjs/components/ConfirmModal.cjs.map +1 -0
  13. package/dist/cjs/components/DatasetSelector.cjs +48 -0
  14. package/dist/cjs/components/DatasetSelector.cjs.map +1 -0
  15. package/dist/cjs/components/QueryEditor.cjs +124 -0
  16. package/dist/cjs/components/QueryEditor.cjs.map +1 -0
  17. package/dist/cjs/components/QueryEditorLazy.cjs +44 -0
  18. package/dist/cjs/components/QueryEditorLazy.cjs.map +1 -0
  19. package/dist/cjs/components/QueryHeader.cjs +294 -0
  20. package/dist/cjs/components/QueryHeader.cjs.map +1 -0
  21. package/dist/cjs/components/TableSelector.cjs +41 -0
  22. package/dist/cjs/components/TableSelector.cjs.map +1 -0
  23. package/dist/cjs/components/configuration/ConnectionLimits.cjs +162 -0
  24. package/dist/cjs/components/configuration/ConnectionLimits.cjs.map +1 -0
  25. package/dist/cjs/components/configuration/Divider.cjs +25 -0
  26. package/dist/cjs/components/configuration/Divider.cjs.map +1 -0
  27. package/dist/cjs/components/configuration/MaxLifetimeField.cjs +41 -0
  28. package/dist/cjs/components/configuration/MaxLifetimeField.cjs.map +1 -0
  29. package/dist/cjs/components/configuration/MaxOpenConnectionsField.cjs +53 -0
  30. package/dist/cjs/components/configuration/MaxOpenConnectionsField.cjs.map +1 -0
  31. package/dist/cjs/components/configuration/NumberInput.cjs +37 -0
  32. package/dist/cjs/components/configuration/NumberInput.cjs.map +1 -0
  33. package/dist/cjs/components/configuration/TLSSecretsConfig.cjs +106 -0
  34. package/dist/cjs/components/configuration/TLSSecretsConfig.cjs.map +1 -0
  35. package/dist/cjs/components/configuration/useMigrateDatabaseFields.cjs +52 -0
  36. package/dist/cjs/components/configuration/useMigrateDatabaseFields.cjs.map +1 -0
  37. package/dist/cjs/components/query-editor-raw/QueryEditorRaw.cjs +40 -0
  38. package/dist/cjs/components/query-editor-raw/QueryEditorRaw.cjs.map +1 -0
  39. package/dist/cjs/components/query-editor-raw/QueryToolbox.cjs +108 -0
  40. package/dist/cjs/components/query-editor-raw/QueryToolbox.cjs.map +1 -0
  41. package/dist/cjs/components/query-editor-raw/QueryValidator.cjs +100 -0
  42. package/dist/cjs/components/query-editor-raw/QueryValidator.cjs.map +1 -0
  43. package/dist/cjs/components/query-editor-raw/RawEditor.cjs +116 -0
  44. package/dist/cjs/components/query-editor-raw/RawEditor.cjs.map +1 -0
  45. package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs +273 -0
  46. package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs.map +1 -0
  47. package/dist/cjs/components/visual-query-builder/GroupByRow.cjs +69 -0
  48. package/dist/cjs/components/visual-query-builder/GroupByRow.cjs.map +1 -0
  49. package/dist/cjs/components/visual-query-builder/OrderByRow.cjs +82 -0
  50. package/dist/cjs/components/visual-query-builder/OrderByRow.cjs.map +1 -0
  51. package/dist/cjs/components/visual-query-builder/Preview.cjs +55 -0
  52. package/dist/cjs/components/visual-query-builder/Preview.cjs.map +1 -0
  53. package/dist/cjs/components/visual-query-builder/SQLGroupByRow.cjs +18 -0
  54. package/dist/cjs/components/visual-query-builder/SQLGroupByRow.cjs.map +1 -0
  55. package/dist/cjs/components/visual-query-builder/SQLOrderByRow.cjs +18 -0
  56. package/dist/cjs/components/visual-query-builder/SQLOrderByRow.cjs.map +1 -0
  57. package/dist/cjs/components/visual-query-builder/SQLWhereRow.cjs +56 -0
  58. package/dist/cjs/components/visual-query-builder/SQLWhereRow.cjs.map +1 -0
  59. package/dist/cjs/components/visual-query-builder/SelectColumn.cjs +30 -0
  60. package/dist/cjs/components/visual-query-builder/SelectColumn.cjs.map +1 -0
  61. package/dist/cjs/components/visual-query-builder/SelectCustomFunctionParameters.cjs +135 -0
  62. package/dist/cjs/components/visual-query-builder/SelectCustomFunctionParameters.cjs.map +1 -0
  63. package/dist/cjs/components/visual-query-builder/SelectFunctionParameters.cjs +142 -0
  64. package/dist/cjs/components/visual-query-builder/SelectFunctionParameters.cjs.map +1 -0
  65. package/dist/cjs/components/visual-query-builder/SelectRow.cjs +184 -0
  66. package/dist/cjs/components/visual-query-builder/SelectRow.cjs.map +1 -0
  67. package/dist/cjs/components/visual-query-builder/VisualEditor.cjs +43 -0
  68. package/dist/cjs/components/visual-query-builder/VisualEditor.cjs.map +1 -0
  69. package/dist/cjs/components/visual-query-builder/WhereRow.cjs +84 -0
  70. package/dist/cjs/components/visual-query-builder/WhereRow.cjs.map +1 -0
  71. package/dist/cjs/constants.cjs +77 -0
  72. package/dist/cjs/constants.cjs.map +1 -0
  73. package/dist/cjs/datasource/SqlDatasource.cjs +188 -0
  74. package/dist/cjs/datasource/SqlDatasource.cjs.map +1 -0
  75. package/dist/cjs/defaults.cjs +32 -0
  76. package/dist/cjs/defaults.cjs.map +1 -0
  77. package/dist/cjs/expressions.cjs +23 -0
  78. package/dist/cjs/expressions.cjs.map +1 -0
  79. package/dist/cjs/index.cjs +48 -0
  80. package/dist/cjs/index.cjs.map +1 -0
  81. package/dist/cjs/loadResources.cjs +49 -0
  82. package/dist/cjs/loadResources.cjs.map +1 -0
  83. package/dist/cjs/locales/cs-CZ/grafana-sql.json.cjs +165 -0
  84. package/dist/cjs/locales/cs-CZ/grafana-sql.json.cjs.map +1 -0
  85. package/dist/cjs/locales/de-DE/grafana-sql.json.cjs +165 -0
  86. package/dist/cjs/locales/de-DE/grafana-sql.json.cjs.map +1 -0
  87. package/dist/cjs/locales/en-US/grafana-sql.json.cjs +165 -0
  88. package/dist/cjs/locales/en-US/grafana-sql.json.cjs.map +1 -0
  89. package/dist/cjs/locales/es-ES/grafana-sql.json.cjs +165 -0
  90. package/dist/cjs/locales/es-ES/grafana-sql.json.cjs.map +1 -0
  91. package/dist/cjs/locales/fr-FR/grafana-sql.json.cjs +165 -0
  92. package/dist/cjs/locales/fr-FR/grafana-sql.json.cjs.map +1 -0
  93. package/dist/cjs/locales/hu-HU/grafana-sql.json.cjs +165 -0
  94. package/dist/cjs/locales/hu-HU/grafana-sql.json.cjs.map +1 -0
  95. package/dist/cjs/locales/id-ID/grafana-sql.json.cjs +165 -0
  96. package/dist/cjs/locales/id-ID/grafana-sql.json.cjs.map +1 -0
  97. package/dist/cjs/locales/it-IT/grafana-sql.json.cjs +165 -0
  98. package/dist/cjs/locales/it-IT/grafana-sql.json.cjs.map +1 -0
  99. package/dist/cjs/locales/ja-JP/grafana-sql.json.cjs +165 -0
  100. package/dist/cjs/locales/ja-JP/grafana-sql.json.cjs.map +1 -0
  101. package/dist/cjs/locales/ko-KR/grafana-sql.json.cjs +165 -0
  102. package/dist/cjs/locales/ko-KR/grafana-sql.json.cjs.map +1 -0
  103. package/dist/cjs/locales/nl-NL/grafana-sql.json.cjs +165 -0
  104. package/dist/cjs/locales/nl-NL/grafana-sql.json.cjs.map +1 -0
  105. package/dist/cjs/locales/pl-PL/grafana-sql.json.cjs +165 -0
  106. package/dist/cjs/locales/pl-PL/grafana-sql.json.cjs.map +1 -0
  107. package/dist/cjs/locales/pt-BR/grafana-sql.json.cjs +165 -0
  108. package/dist/cjs/locales/pt-BR/grafana-sql.json.cjs.map +1 -0
  109. package/dist/cjs/locales/pt-PT/grafana-sql.json.cjs +165 -0
  110. package/dist/cjs/locales/pt-PT/grafana-sql.json.cjs.map +1 -0
  111. package/dist/cjs/locales/ru-RU/grafana-sql.json.cjs +165 -0
  112. package/dist/cjs/locales/ru-RU/grafana-sql.json.cjs.map +1 -0
  113. package/dist/cjs/locales/sv-SE/grafana-sql.json.cjs +165 -0
  114. package/dist/cjs/locales/sv-SE/grafana-sql.json.cjs.map +1 -0
  115. package/dist/cjs/locales/tr-TR/grafana-sql.json.cjs +165 -0
  116. package/dist/cjs/locales/tr-TR/grafana-sql.json.cjs.map +1 -0
  117. package/dist/cjs/locales/zh-Hans/grafana-sql.json.cjs +165 -0
  118. package/dist/cjs/locales/zh-Hans/grafana-sql.json.cjs.map +1 -0
  119. package/dist/cjs/locales/zh-Hant/grafana-sql.json.cjs +165 -0
  120. package/dist/cjs/locales/zh-Hant/grafana-sql.json.cjs.map +1 -0
  121. package/dist/cjs/types.cjs +24 -0
  122. package/dist/cjs/types.cjs.map +1 -0
  123. package/dist/cjs/utils/formatSQL.cjs +19 -0
  124. package/dist/cjs/utils/formatSQL.cjs.map +1 -0
  125. package/dist/cjs/utils/getColumnsWithIndices.cjs +33 -0
  126. package/dist/cjs/utils/getColumnsWithIndices.cjs.map +1 -0
  127. package/dist/cjs/utils/logging.cjs +11 -0
  128. package/dist/cjs/utils/logging.cjs.map +1 -0
  129. package/dist/cjs/utils/migration.cjs +24 -0
  130. package/dist/cjs/utils/migration.cjs.map +1 -0
  131. package/dist/cjs/utils/sql.utils.cjs +75 -0
  132. package/dist/cjs/utils/sql.utils.cjs.map +1 -0
  133. package/dist/cjs/utils/testHelpers.cjs +31 -0
  134. package/dist/cjs/utils/testHelpers.cjs.map +1 -0
  135. package/dist/cjs/utils/useSqlChange.cjs +22 -0
  136. package/dist/cjs/utils/useSqlChange.cjs.map +1 -0
  137. package/dist/esm/ResponseParser.mjs +25 -0
  138. package/dist/esm/ResponseParser.mjs.map +1 -0
  139. package/dist/esm/SQLVariableEditor.mjs +82 -0
  140. package/dist/esm/SQLVariableEditor.mjs.map +1 -0
  141. package/dist/esm/SQLVariableSupport.mjs +36 -0
  142. package/dist/esm/SQLVariableSupport.mjs.map +1 -0
  143. package/dist/esm/SQLVariableUtils.mjs +68 -0
  144. package/dist/esm/SQLVariableUtils.mjs.map +1 -0
  145. package/dist/esm/components/ConfirmModal.mjs +52 -0
  146. package/dist/esm/components/ConfirmModal.mjs.map +1 -0
  147. package/dist/esm/components/DatasetSelector.mjs +44 -0
  148. package/dist/esm/components/DatasetSelector.mjs.map +1 -0
  149. package/dist/esm/components/QueryEditor.mjs +122 -0
  150. package/dist/esm/components/QueryEditor.mjs.map +1 -0
  151. package/dist/esm/components/QueryEditorLazy.mjs +38 -0
  152. package/dist/esm/components/QueryEditorLazy.mjs.map +1 -0
  153. package/dist/esm/components/QueryHeader.mjs +290 -0
  154. package/dist/esm/components/QueryHeader.mjs.map +1 -0
  155. package/dist/esm/components/TableSelector.mjs +37 -0
  156. package/dist/esm/components/TableSelector.mjs.map +1 -0
  157. package/dist/esm/components/configuration/ConnectionLimits.mjs +158 -0
  158. package/dist/esm/components/configuration/ConnectionLimits.mjs.map +1 -0
  159. package/dist/esm/components/configuration/Divider.mjs +21 -0
  160. package/dist/esm/components/configuration/Divider.mjs.map +1 -0
  161. package/dist/esm/components/configuration/MaxLifetimeField.mjs +37 -0
  162. package/dist/esm/components/configuration/MaxLifetimeField.mjs.map +1 -0
  163. package/dist/esm/components/configuration/MaxOpenConnectionsField.mjs +49 -0
  164. package/dist/esm/components/configuration/MaxOpenConnectionsField.mjs.map +1 -0
  165. package/dist/esm/components/configuration/NumberInput.mjs +33 -0
  166. package/dist/esm/components/configuration/NumberInput.mjs.map +1 -0
  167. package/dist/esm/components/configuration/TLSSecretsConfig.mjs +102 -0
  168. package/dist/esm/components/configuration/TLSSecretsConfig.mjs.map +1 -0
  169. package/dist/esm/components/configuration/useMigrateDatabaseFields.mjs +48 -0
  170. package/dist/esm/components/configuration/useMigrateDatabaseFields.mjs.map +1 -0
  171. package/dist/esm/components/query-editor-raw/QueryEditorRaw.mjs +36 -0
  172. package/dist/esm/components/query-editor-raw/QueryEditorRaw.mjs.map +1 -0
  173. package/dist/esm/components/query-editor-raw/QueryToolbox.mjs +104 -0
  174. package/dist/esm/components/query-editor-raw/QueryToolbox.mjs.map +1 -0
  175. package/dist/esm/components/query-editor-raw/QueryValidator.mjs +96 -0
  176. package/dist/esm/components/query-editor-raw/QueryValidator.mjs.map +1 -0
  177. package/dist/esm/components/query-editor-raw/RawEditor.mjs +108 -0
  178. package/dist/esm/components/query-editor-raw/RawEditor.mjs.map +1 -0
  179. package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs +266 -0
  180. package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs.map +1 -0
  181. package/dist/esm/components/visual-query-builder/GroupByRow.mjs +65 -0
  182. package/dist/esm/components/visual-query-builder/GroupByRow.mjs.map +1 -0
  183. package/dist/esm/components/visual-query-builder/OrderByRow.mjs +78 -0
  184. package/dist/esm/components/visual-query-builder/OrderByRow.mjs.map +1 -0
  185. package/dist/esm/components/visual-query-builder/Preview.mjs +51 -0
  186. package/dist/esm/components/visual-query-builder/Preview.mjs.map +1 -0
  187. package/dist/esm/components/visual-query-builder/SQLGroupByRow.mjs +14 -0
  188. package/dist/esm/components/visual-query-builder/SQLGroupByRow.mjs.map +1 -0
  189. package/dist/esm/components/visual-query-builder/SQLOrderByRow.mjs +14 -0
  190. package/dist/esm/components/visual-query-builder/SQLOrderByRow.mjs.map +1 -0
  191. package/dist/esm/components/visual-query-builder/SQLWhereRow.mjs +51 -0
  192. package/dist/esm/components/visual-query-builder/SQLWhereRow.mjs.map +1 -0
  193. package/dist/esm/components/visual-query-builder/SelectColumn.mjs +26 -0
  194. package/dist/esm/components/visual-query-builder/SelectColumn.mjs.map +1 -0
  195. package/dist/esm/components/visual-query-builder/SelectCustomFunctionParameters.mjs +131 -0
  196. package/dist/esm/components/visual-query-builder/SelectCustomFunctionParameters.mjs.map +1 -0
  197. package/dist/esm/components/visual-query-builder/SelectFunctionParameters.mjs +138 -0
  198. package/dist/esm/components/visual-query-builder/SelectFunctionParameters.mjs.map +1 -0
  199. package/dist/esm/components/visual-query-builder/SelectRow.mjs +180 -0
  200. package/dist/esm/components/visual-query-builder/SelectRow.mjs.map +1 -0
  201. package/dist/esm/components/visual-query-builder/VisualEditor.mjs +39 -0
  202. package/dist/esm/components/visual-query-builder/VisualEditor.mjs.map +1 -0
  203. package/dist/esm/components/visual-query-builder/WhereRow.mjs +80 -0
  204. package/dist/esm/components/visual-query-builder/WhereRow.mjs.map +1 -0
  205. package/dist/esm/constants.mjs +71 -0
  206. package/dist/esm/constants.mjs.map +1 -0
  207. package/dist/esm/datasource/SqlDatasource.mjs +184 -0
  208. package/dist/esm/datasource/SqlDatasource.mjs.map +1 -0
  209. package/dist/esm/defaults.mjs +28 -0
  210. package/dist/esm/defaults.mjs.map +1 -0
  211. package/dist/esm/expressions.mjs +18 -0
  212. package/dist/esm/expressions.mjs.map +1 -0
  213. package/dist/esm/index.mjs +22 -0
  214. package/dist/esm/index.mjs.map +1 -0
  215. package/dist/esm/loadResources.mjs +43 -0
  216. package/dist/esm/loadResources.mjs.map +1 -0
  217. package/dist/esm/locales/cs-CZ/grafana-sql.json.mjs +163 -0
  218. package/dist/esm/locales/cs-CZ/grafana-sql.json.mjs.map +1 -0
  219. package/dist/esm/locales/de-DE/grafana-sql.json.mjs +163 -0
  220. package/dist/esm/locales/de-DE/grafana-sql.json.mjs.map +1 -0
  221. package/dist/esm/locales/en-US/grafana-sql.json.mjs +163 -0
  222. package/dist/esm/locales/en-US/grafana-sql.json.mjs.map +1 -0
  223. package/dist/esm/locales/es-ES/grafana-sql.json.mjs +163 -0
  224. package/dist/esm/locales/es-ES/grafana-sql.json.mjs.map +1 -0
  225. package/dist/esm/locales/fr-FR/grafana-sql.json.mjs +163 -0
  226. package/dist/esm/locales/fr-FR/grafana-sql.json.mjs.map +1 -0
  227. package/dist/esm/locales/hu-HU/grafana-sql.json.mjs +163 -0
  228. package/dist/esm/locales/hu-HU/grafana-sql.json.mjs.map +1 -0
  229. package/dist/esm/locales/id-ID/grafana-sql.json.mjs +163 -0
  230. package/dist/esm/locales/id-ID/grafana-sql.json.mjs.map +1 -0
  231. package/dist/esm/locales/it-IT/grafana-sql.json.mjs +163 -0
  232. package/dist/esm/locales/it-IT/grafana-sql.json.mjs.map +1 -0
  233. package/dist/esm/locales/ja-JP/grafana-sql.json.mjs +163 -0
  234. package/dist/esm/locales/ja-JP/grafana-sql.json.mjs.map +1 -0
  235. package/dist/esm/locales/ko-KR/grafana-sql.json.mjs +163 -0
  236. package/dist/esm/locales/ko-KR/grafana-sql.json.mjs.map +1 -0
  237. package/dist/esm/locales/nl-NL/grafana-sql.json.mjs +163 -0
  238. package/dist/esm/locales/nl-NL/grafana-sql.json.mjs.map +1 -0
  239. package/dist/esm/locales/pl-PL/grafana-sql.json.mjs +163 -0
  240. package/dist/esm/locales/pl-PL/grafana-sql.json.mjs.map +1 -0
  241. package/dist/esm/locales/pt-BR/grafana-sql.json.mjs +163 -0
  242. package/dist/esm/locales/pt-BR/grafana-sql.json.mjs.map +1 -0
  243. package/dist/esm/locales/pt-PT/grafana-sql.json.mjs +163 -0
  244. package/dist/esm/locales/pt-PT/grafana-sql.json.mjs.map +1 -0
  245. package/dist/esm/locales/ru-RU/grafana-sql.json.mjs +163 -0
  246. package/dist/esm/locales/ru-RU/grafana-sql.json.mjs.map +1 -0
  247. package/dist/esm/locales/sv-SE/grafana-sql.json.mjs +163 -0
  248. package/dist/esm/locales/sv-SE/grafana-sql.json.mjs.map +1 -0
  249. package/dist/esm/locales/tr-TR/grafana-sql.json.mjs +163 -0
  250. package/dist/esm/locales/tr-TR/grafana-sql.json.mjs.map +1 -0
  251. package/dist/esm/locales/zh-Hans/grafana-sql.json.mjs +163 -0
  252. package/dist/esm/locales/zh-Hans/grafana-sql.json.mjs.map +1 -0
  253. package/dist/esm/locales/zh-Hant/grafana-sql.json.mjs +163 -0
  254. package/dist/esm/locales/zh-Hant/grafana-sql.json.mjs.map +1 -0
  255. package/dist/esm/types.mjs +18 -0
  256. package/dist/esm/types.mjs.map +1 -0
  257. package/dist/esm/utils/formatSQL.mjs +11 -0
  258. package/dist/esm/utils/formatSQL.mjs.map +1 -0
  259. package/dist/esm/utils/getColumnsWithIndices.mjs +29 -0
  260. package/dist/esm/utils/getColumnsWithIndices.mjs.map +1 -0
  261. package/dist/esm/utils/logging.mjs +7 -0
  262. package/dist/esm/utils/logging.mjs.map +1 -0
  263. package/dist/esm/utils/migration.mjs +22 -0
  264. package/dist/esm/utils/migration.mjs.map +1 -0
  265. package/dist/esm/utils/sql.utils.mjs +66 -0
  266. package/dist/esm/utils/sql.utils.mjs.map +1 -0
  267. package/dist/esm/utils/testHelpers.mjs +27 -0
  268. package/dist/esm/utils/testHelpers.mjs.map +1 -0
  269. package/dist/esm/utils/useSqlChange.mjs +18 -0
  270. package/dist/esm/utils/useSqlChange.mjs.map +1 -0
  271. package/dist/types/ResponseParser.d.ts +5 -0
  272. package/dist/types/SQLVariableEditor.d.ts +5 -0
  273. package/dist/types/SQLVariableSupport.d.ts +11 -0
  274. package/dist/types/SQLVariableUtils.d.ts +6 -0
  275. package/dist/types/components/ConfirmModal.d.ts +8 -0
  276. package/dist/types/components/DatasetSelector.d.ts +11 -0
  277. package/dist/types/components/ErrorBoundary.d.ts +12 -0
  278. package/dist/types/components/QueryEditor.d.ts +8 -0
  279. package/dist/types/components/QueryEditorLazy.d.ts +2 -0
  280. package/dist/types/components/QueryHeader.d.ts +16 -0
  281. package/dist/types/components/SqlComponents.testHelpers.d.ts +65 -0
  282. package/dist/types/components/TableSelector.d.ts +10 -0
  283. package/dist/types/components/configuration/ConnectionLimits.d.ts +8 -0
  284. package/dist/types/components/configuration/Divider.d.ts +1 -0
  285. package/dist/types/components/configuration/MaxLifetimeField.d.ts +8 -0
  286. package/dist/types/components/configuration/MaxOpenConnectionsField.d.ts +8 -0
  287. package/dist/types/components/configuration/NumberInput.d.ts +8 -0
  288. package/dist/types/components/configuration/TLSSecretsConfig.d.ts +9 -0
  289. package/dist/types/components/configuration/useMigrateDatabaseFields.d.ts +7 -0
  290. package/dist/types/components/index.d.ts +1 -0
  291. package/dist/types/components/query-editor-raw/QueryEditorRaw.d.ts +15 -0
  292. package/dist/types/components/query-editor-raw/QueryToolbox.d.ts +10 -0
  293. package/dist/types/components/query-editor-raw/QueryValidator.d.ts +9 -0
  294. package/dist/types/components/query-editor-raw/RawEditor.d.ts +9 -0
  295. package/dist/types/components/visual-query-builder/AwesomeQueryBuilder.d.ts +6 -0
  296. package/dist/types/components/visual-query-builder/GroupByRow.d.ts +9 -0
  297. package/dist/types/components/visual-query-builder/OrderByRow.d.ts +10 -0
  298. package/dist/types/components/visual-query-builder/Preview.d.ts +6 -0
  299. package/dist/types/components/visual-query-builder/SQLGroupByRow.d.ts +11 -0
  300. package/dist/types/components/visual-query-builder/SQLOrderByRow.d.ts +11 -0
  301. package/dist/types/components/visual-query-builder/SQLWhereRow.d.ts +12 -0
  302. package/dist/types/components/visual-query-builder/SelectColumn.d.ts +8 -0
  303. package/dist/types/components/visual-query-builder/SelectCustomFunctionParameters.d.ts +11 -0
  304. package/dist/types/components/visual-query-builder/SelectFunctionParameters.d.ts +11 -0
  305. package/dist/types/components/visual-query-builder/SelectRow.d.ts +10 -0
  306. package/dist/types/components/visual-query-builder/VisualEditor.d.ts +8 -0
  307. package/dist/types/components/visual-query-builder/WhereRow.d.ts +9 -0
  308. package/dist/types/components/visual-query-builder/index.d.ts +1 -0
  309. package/dist/types/constants.d.ts +12 -0
  310. package/dist/types/datasource/SqlDatasource.d.ts +38 -0
  311. package/dist/types/defaults.d.ts +3 -0
  312. package/dist/types/expressions.d.ts +51 -0
  313. package/dist/types/index.d.ts +21 -0
  314. package/dist/types/loadResources.d.ts +2 -0
  315. package/dist/types/types.d.ts +152 -0
  316. package/dist/types/utils/formatSQL.d.ts +1 -0
  317. package/dist/types/utils/getColumnsWithIndices.d.ts +3 -0
  318. package/dist/types/utils/logging.d.ts +2 -0
  319. package/dist/types/utils/migration.d.ts +3 -0
  320. package/dist/types/utils/sql.utils.d.ts +21 -0
  321. package/dist/types/utils/testHelpers.d.ts +2 -0
  322. package/dist/types/utils/useSqlChange.d.ts +10 -0
  323. package/package.json +80 -4
@@ -0,0 +1,49 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Trans } from '@grafana/i18n';
3
+ import { config } from '@grafana/runtime';
4
+ import { Field, Label, Stack, Tooltip, Icon } from '@grafana/ui';
5
+ import { NumberInput } from './NumberInput.mjs';
6
+
7
+ "use strict";
8
+ function MaxOpenConnectionsField({ labelWidth, onMaxConnectionsChanged, jsonData }) {
9
+ return /* @__PURE__ */ jsx(
10
+ Field,
11
+ {
12
+ noMargin: true,
13
+ label: /* @__PURE__ */ jsx(Label, { children: /* @__PURE__ */ jsxs(Stack, { gap: 0.5, children: [
14
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.connection-limits.max-open", children: "Max open" }) }),
15
+ /* @__PURE__ */ jsx(
16
+ Tooltip,
17
+ {
18
+ content: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsxs(Trans, { i18nKey: "grafana-sql.components.connection-limits.content-max-open", children: [
19
+ "The maximum number of open connections to the database. If ",
20
+ /* @__PURE__ */ jsx("i", { children: "Max idle connections" }),
21
+ " is greater than 0 and the ",
22
+ /* @__PURE__ */ jsx("i", { children: "Max open connections" }),
23
+ " is less than ",
24
+ /* @__PURE__ */ jsx("i", { children: "Max idle connections" }),
25
+ ", then",
26
+ /* @__PURE__ */ jsx("i", { children: "Max idle connections" }),
27
+ " will be reduced to match the ",
28
+ /* @__PURE__ */ jsx("i", { children: "Max open connections" }),
29
+ " limit. If set to 0, there is no limit on the number of open connections."
30
+ ] }) }),
31
+ children: /* @__PURE__ */ jsx(Icon, { name: "info-circle", size: "sm" })
32
+ }
33
+ )
34
+ ] }) }),
35
+ children: /* @__PURE__ */ jsx(
36
+ NumberInput,
37
+ {
38
+ value: jsonData.maxOpenConns,
39
+ defaultValue: config.sqlConnectionLimits.maxOpenConns,
40
+ onChange: onMaxConnectionsChanged,
41
+ width: labelWidth
42
+ }
43
+ )
44
+ }
45
+ );
46
+ }
47
+
48
+ export { MaxOpenConnectionsField };
49
+ //# sourceMappingURL=MaxOpenConnectionsField.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaxOpenConnectionsField.mjs","sources":["../../../../src/components/configuration/MaxOpenConnectionsField.tsx"],"sourcesContent":["import { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, Label, Stack, Tooltip } from '@grafana/ui';\n\nimport { SQLOptions } from '../../types';\n\nimport { NumberInput } from './NumberInput';\n\ninterface Props {\n labelWidth: number;\n onMaxConnectionsChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\n\nexport function MaxOpenConnectionsField({ labelWidth, onMaxConnectionsChanged, jsonData }: Props) {\n return (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-open\">Max open</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-open\">\n The maximum number of open connections to the database. If <i>Max idle connections</i> is greater\n than 0 and the <i>Max open connections</i> is less than <i>Max idle connections</i>, then\n <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If set\n to 0, there is no limit on the number of open connections.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <NumberInput\n value={jsonData.maxOpenConns}\n defaultValue={config.sqlConnectionLimits.maxOpenConns}\n onChange={onMaxConnectionsChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAcO,SAAS,uBAAA,CAAwB,EAAE,UAAA,EAAY,uBAAA,EAAyB,UAAS,EAAU;AAChG,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAQ,IAAA;AAAA,MACR,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UACC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,mDAAA,EAAoD,sBAAQ,CAAA,EAC7E,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,yBACE,GAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,SAAQ,2DAAA,EAA4D,QAAA,EAAA;AAAA,cAAA,6DAAA;AAAA,8BACd,GAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,6BAAA;AAAA,8BACvE,GAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gBAAA;AAAA,8BAAc,GAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,QAAA;AAAA,8BACnF,GAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gCAAA;AAAA,8BAA8B,GAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI;AAAA,aAAA,EAEtF,CAAA,EACF,CAAA;AAAA,YAGF,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,kBAAA,GAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,CAAS,YAAA;AAAA,UAChB,YAAA,EAAc,OAAO,mBAAA,CAAoB,YAAA;AAAA,UACzC,QAAA,EAAU,uBAAA;AAAA,UACV,KAAA,EAAO;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,33 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
3
+ import { Input } from '@grafana/ui';
4
+
5
+ "use strict";
6
+ function NumberInput({ value, defaultValue, onChange, width }) {
7
+ const [isEmpty, setIsEmpty] = useState(false);
8
+ return /* @__PURE__ */ jsx(
9
+ Input,
10
+ {
11
+ type: "number",
12
+ placeholder: String(defaultValue),
13
+ value: isEmpty ? "" : value,
14
+ onChange: (e) => {
15
+ var _a;
16
+ if (((_a = e.currentTarget.value) == null ? void 0 : _a.trim()) === "") {
17
+ setIsEmpty(true);
18
+ onChange(defaultValue);
19
+ } else {
20
+ setIsEmpty(false);
21
+ const newVal = Number(e.currentTarget.value);
22
+ if (!Number.isNaN(newVal)) {
23
+ onChange(newVal);
24
+ }
25
+ }
26
+ },
27
+ width
28
+ }
29
+ );
30
+ }
31
+
32
+ export { NumberInput };
33
+ //# sourceMappingURL=NumberInput.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberInput.mjs","sources":["../../../../src/components/configuration/NumberInput.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Input } from '@grafana/ui';\n\ntype NumberInputProps = {\n value: number;\n defaultValue: number;\n onChange: (value: number) => void;\n width: number;\n};\n\nexport function NumberInput({ value, defaultValue, onChange, width }: NumberInputProps) {\n const [isEmpty, setIsEmpty] = useState(false);\n return (\n <Input\n type=\"number\"\n placeholder={String(defaultValue)}\n value={isEmpty ? '' : value}\n onChange={(e) => {\n if (e.currentTarget.value?.trim() === '') {\n setIsEmpty(true);\n onChange(defaultValue);\n } else {\n setIsEmpty(false);\n const newVal = Number(e.currentTarget.value);\n if (!Number.isNaN(newVal)) {\n onChange(newVal);\n }\n }\n }}\n width={width}\n />\n );\n}\n"],"names":[],"mappings":";;;;;AAWO,SAAS,YAAY,EAAE,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,OAAM,EAAqB;AACtF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,WAAA,EAAa,OAAO,YAAY,CAAA;AAAA,MAChC,KAAA,EAAO,UAAU,EAAA,GAAK,KAAA;AAAA,MACtB,QAAA,EAAU,CAAC,CAAA,KAAM;AAlBvB,QAAA,IAAA,EAAA;AAmBQ,QAAA,IAAA,CAAA,CAAI,EAAA,GAAA,CAAA,CAAE,aAAA,CAAc,KAAA,KAAhB,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,YAAW,EAAA,EAAI;AACxC,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA,QAAA,CAAS,YAAY,CAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,KAAK,CAAA;AAChB,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,CAAA,CAAE,aAAA,CAAc,KAAK,CAAA;AAC3C,UAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACzB,YAAA,QAAA,CAAS,MAAM,CAAA;AAAA,UACjB;AAAA,QACF;AAAA,MACF,CAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,102 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { updateDatasourcePluginResetOption, onUpdateDatasourceSecureJsonDataOption } from '@grafana/data';
3
+ import { Trans } from '@grafana/i18n';
4
+ import { Field, SecretTextArea, Label, Stack, Tooltip, Icon } from '@grafana/ui';
5
+
6
+ "use strict";
7
+ const TLSSecretsConfig = (props) => {
8
+ const { editorProps, showCACert, showKeyPair = true } = props;
9
+ const { secureJsonFields } = editorProps.options;
10
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
11
+ showKeyPair ? /* @__PURE__ */ jsx(
12
+ Field,
13
+ {
14
+ noMargin: true,
15
+ label: /* @__PURE__ */ jsx(Label, { children: /* @__PURE__ */ jsxs(Stack, { gap: 0.5, children: [
16
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.tlsssl-client-certificate", children: "TLS/SSL Client Certificate" }) }),
17
+ /* @__PURE__ */ jsx(
18
+ Tooltip,
19
+ {
20
+ content: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.content-tlsssl-client-certificate", children: "To authenticate with an TLS/SSL client certificate, provide the client certificate here." }) }),
21
+ children: /* @__PURE__ */ jsx(Icon, { name: "info-circle", size: "sm" })
22
+ }
23
+ )
24
+ ] }) }),
25
+ children: /* @__PURE__ */ jsx(
26
+ SecretTextArea,
27
+ {
28
+ placeholder: "-----BEGIN CERTIFICATE-----",
29
+ cols: 45,
30
+ rows: 7,
31
+ isConfigured: secureJsonFields && secureJsonFields.tlsClientCert,
32
+ onChange: onUpdateDatasourceSecureJsonDataOption(editorProps, "tlsClientCert"),
33
+ onReset: () => {
34
+ updateDatasourcePluginResetOption(editorProps, "tlsClientCert");
35
+ }
36
+ }
37
+ )
38
+ }
39
+ ) : null,
40
+ showCACert ? /* @__PURE__ */ jsx(
41
+ Field,
42
+ {
43
+ noMargin: true,
44
+ label: /* @__PURE__ */ jsx(Label, { children: /* @__PURE__ */ jsxs(Stack, { gap: 0.5, children: [
45
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.tlsssl-root-certificate", children: "TLS/SSL Root Certificate" }) }),
46
+ /* @__PURE__ */ jsx(
47
+ Tooltip,
48
+ {
49
+ content: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.content-tlsssl-root-certificate", children: "If the selected TLS/SSL mode requires a server root certificate, provide it here" }) }),
50
+ children: /* @__PURE__ */ jsx(Icon, { name: "info-circle", size: "sm" })
51
+ }
52
+ )
53
+ ] }) }),
54
+ children: /* @__PURE__ */ jsx(
55
+ SecretTextArea,
56
+ {
57
+ placeholder: "-----BEGIN CERTIFICATE-----",
58
+ cols: 45,
59
+ rows: 7,
60
+ isConfigured: secureJsonFields && secureJsonFields.tlsCACert,
61
+ onChange: onUpdateDatasourceSecureJsonDataOption(editorProps, "tlsCACert"),
62
+ onReset: () => {
63
+ updateDatasourcePluginResetOption(editorProps, "tlsCACert");
64
+ }
65
+ }
66
+ )
67
+ }
68
+ ) : null,
69
+ showKeyPair ? /* @__PURE__ */ jsx(
70
+ Field,
71
+ {
72
+ noMargin: true,
73
+ label: /* @__PURE__ */ jsx(Label, { children: /* @__PURE__ */ jsxs(Stack, { gap: 0.5, children: [
74
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.tlsssl-client-key", children: "TLS/SSL Client Key" }) }),
75
+ /* @__PURE__ */ jsx(
76
+ Tooltip,
77
+ {
78
+ content: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.content-tlsssl-client-key", children: "To authenticate with a client TLS/SSL certificate, provide the key here." }) }),
79
+ children: /* @__PURE__ */ jsx(Icon, { name: "info-circle", size: "sm" })
80
+ }
81
+ )
82
+ ] }) }),
83
+ children: /* @__PURE__ */ jsx(
84
+ SecretTextArea,
85
+ {
86
+ placeholder: "-----BEGIN RSA PRIVATE KEY-----",
87
+ cols: 45,
88
+ rows: 7,
89
+ isConfigured: secureJsonFields && secureJsonFields.tlsClientKey,
90
+ onChange: onUpdateDatasourceSecureJsonDataOption(editorProps, "tlsClientKey"),
91
+ onReset: () => {
92
+ updateDatasourcePluginResetOption(editorProps, "tlsClientKey");
93
+ }
94
+ }
95
+ )
96
+ }
97
+ ) : null
98
+ ] });
99
+ };
100
+
101
+ export { TLSSecretsConfig };
102
+ //# sourceMappingURL=TLSSecretsConfig.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TLSSecretsConfig.mjs","sources":["../../../../src/components/configuration/TLSSecretsConfig.tsx"],"sourcesContent":["import {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n KeyValue,\n onUpdateDatasourceSecureJsonDataOption,\n updateDatasourcePluginResetOption,\n} from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Field, Icon, Label, SecretTextArea, Tooltip, Stack } from '@grafana/ui';\n\nexport interface Props<T extends DataSourceJsonData, S> {\n editorProps: DataSourcePluginOptionsEditorProps<T, S>;\n showCACert?: boolean;\n showKeyPair?: boolean;\n secureJsonFields?: KeyValue<Boolean>;\n labelWidth?: number;\n}\n\nexport const TLSSecretsConfig = <T extends DataSourceJsonData, S extends {} = {}>(props: Props<T, S>) => {\n const { editorProps, showCACert, showKeyPair = true } = props;\n const { secureJsonFields } = editorProps.options;\n return (\n <>\n {showKeyPair ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-certificate\">\n TLS/SSL Client Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-certificate\">\n To authenticate with an TLS/SSL client certificate, provide the client certificate here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientCert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientCert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientCert');\n }}\n />\n </Field>\n ) : null}\n {showCACert ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-root-certificate\">\n TLS/SSL Root Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-root-certificate\">\n If the selected TLS/SSL mode requires a server root certificate, provide it here\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsCACert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsCACert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsCACert');\n }}\n />\n </Field>\n ) : null}\n {showKeyPair ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-key\">TLS/SSL Client Key</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-key\">\n To authenticate with a client TLS/SSL certificate, provide the key here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN RSA PRIVATE KEY-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientKey}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientKey')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientKey');\n }}\n />\n </Field>\n ) : null}\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;AAkBO,MAAM,gBAAA,GAAmB,CAAkD,KAAA,KAAuB;AACvG,EAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,WAAA,GAAc,MAAK,GAAI,KAAA;AACxD,EAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,WAAA,CAAY,OAAA;AACzC,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,WAAA,mBACC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAQ,IAAA;AAAA,QACR,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UACC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,oEAAA,EAAqE,wCAEpF,CAAA,EACF,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,OAAA,sBACG,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,SAAM,OAAA,EAAQ,4EAAA,EAA6E,sGAE5F,CAAA,EACF,CAAA;AAAA,cAGF,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,SAAA,EACF,CAAA,EACF,CAAA;AAAA,QAGF,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YAEC,WAAA,EAAY,6BAAA;AAAA,YACZ,IAAA,EAAM,EAAA;AAAA,YACN,IAAA,EAAM,CAAA;AAAA,YACN,YAAA,EAAc,oBAAoB,gBAAA,CAAiB,aAAA;AAAA,YACnD,QAAA,EAAU,sCAAA,CAAuC,WAAA,EAAa,eAAe,CAAA;AAAA,YAC7E,SAAS,MAAM;AACb,cAAA,iCAAA,CAAkC,aAAa,eAAe,CAAA;AAAA,YAChE;AAAA;AAAA;AACF;AAAA,KACF,GACE,IAAA;AAAA,IACH,UAAA,mBACC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAQ,IAAA;AAAA,QACR,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UACC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,kEAAA,EAAmE,sCAElF,CAAA,EACF,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,OAAA,sBACG,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,SAAM,OAAA,EAAQ,0EAAA,EAA2E,8FAE1F,CAAA,EACF,CAAA;AAAA,cAGF,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,SAAA,EACF,CAAA,EACF,CAAA;AAAA,QAGF,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YAEC,WAAA,EAAY,6BAAA;AAAA,YACZ,IAAA,EAAM,EAAA;AAAA,YACN,IAAA,EAAM,CAAA;AAAA,YACN,YAAA,EAAc,oBAAoB,gBAAA,CAAiB,SAAA;AAAA,YACnD,QAAA,EAAU,sCAAA,CAAuC,WAAA,EAAa,WAAW,CAAA;AAAA,YACzE,SAAS,MAAM;AACb,cAAA,iCAAA,CAAkC,aAAa,WAAW,CAAA;AAAA,YAC5D;AAAA;AAAA;AACF;AAAA,KACF,GACE,IAAA;AAAA,IACH,WAAA,mBACC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAQ,IAAA;AAAA,QACR,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UACC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,4DAAA,EAA6D,gCAAkB,CAAA,EAChG,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,OAAA,sBACG,MAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,SAAM,OAAA,EAAQ,oEAAA,EAAqE,sFAEpF,CAAA,EACF,CAAA;AAAA,cAGF,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,SAAA,EACF,CAAA,EACF,CAAA;AAAA,QAGF,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YAEC,WAAA,EAAY,iCAAA;AAAA,YACZ,IAAA,EAAM,EAAA;AAAA,YACN,IAAA,EAAM,CAAA;AAAA,YACN,YAAA,EAAc,oBAAoB,gBAAA,CAAiB,YAAA;AAAA,YACnD,QAAA,EAAU,sCAAA,CAAuC,WAAA,EAAa,cAAc,CAAA;AAAA,YAC5E,SAAS,MAAM;AACb,cAAA,iCAAA,CAAkC,aAAa,cAAc,CAAA;AAAA,YAC/D;AAAA;AAAA;AACF;AAAA,KACF,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;;;;"}
@@ -0,0 +1,48 @@
1
+ import { useEffect } from 'react';
2
+ import { config } from '@grafana/runtime';
3
+ import { sqlPluginLogger } from '../../utils/logging.mjs';
4
+
5
+ "use strict";
6
+ function useMigrateDatabaseFields({
7
+ onOptionsChange,
8
+ options
9
+ }) {
10
+ useEffect(() => {
11
+ const jsonData = options.jsonData;
12
+ let newOptions = { ...options };
13
+ let optionsUpdated = false;
14
+ if (options.database) {
15
+ sqlPluginLogger.logDebug(`Migrating from options.database with value ${options.database} for ${options.name}`);
16
+ newOptions.database = "";
17
+ newOptions.jsonData = { ...jsonData, database: options.database };
18
+ optionsUpdated = true;
19
+ }
20
+ if (jsonData.maxOpenConns === void 0 && jsonData.maxIdleConns === void 0 && jsonData.maxIdleConnsAuto === void 0) {
21
+ const { maxOpenConns, maxIdleConns } = config.sqlConnectionLimits;
22
+ sqlPluginLogger.logDebug(
23
+ `Setting default max open connections to ${maxOpenConns} and setting max idle connection to ${maxIdleConns}`
24
+ );
25
+ newOptions.jsonData = {
26
+ ...newOptions.jsonData,
27
+ maxOpenConns,
28
+ maxIdleConns,
29
+ maxIdleConnsAuto: true
30
+ };
31
+ optionsUpdated = true;
32
+ }
33
+ if (jsonData.connMaxLifetime === void 0) {
34
+ const { connMaxLifetime } = config.sqlConnectionLimits;
35
+ newOptions.jsonData = {
36
+ ...newOptions.jsonData,
37
+ connMaxLifetime
38
+ };
39
+ optionsUpdated = true;
40
+ }
41
+ if (optionsUpdated) {
42
+ onOptionsChange(newOptions);
43
+ }
44
+ }, [onOptionsChange, options]);
45
+ }
46
+
47
+ export { useMigrateDatabaseFields };
48
+ //# sourceMappingURL=useMigrateDatabaseFields.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMigrateDatabaseFields.mjs","sources":["../../../../src/components/configuration/useMigrateDatabaseFields.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { SQLOptions } from '../../types';\nimport { sqlPluginLogger } from '../../utils/logging';\n\n/**\n * 1. Moves the database field from the options object to jsonData.database and empties the database field.\n * 2. If max open connections, max idle connections, and auto idle are all undefined set these to default values.\n */\nexport function useMigrateDatabaseFields<T extends SQLOptions, S = {}>({\n onOptionsChange,\n options,\n}: DataSourcePluginOptionsEditorProps<T, S>) {\n useEffect(() => {\n const jsonData = options.jsonData;\n let newOptions = { ...options };\n let optionsUpdated = false;\n\n // Migrate the database field from the column into the jsonData object\n if (options.database) {\n sqlPluginLogger.logDebug(`Migrating from options.database with value ${options.database} for ${options.name}`);\n newOptions.database = '';\n newOptions.jsonData = { ...jsonData, database: options.database };\n optionsUpdated = true;\n }\n\n // Set default values for max open connections, max idle connection,\n // and auto idle if they're all undefined\n if (\n jsonData.maxOpenConns === undefined &&\n jsonData.maxIdleConns === undefined &&\n jsonData.maxIdleConnsAuto === undefined\n ) {\n const { maxOpenConns, maxIdleConns } = config.sqlConnectionLimits;\n\n sqlPluginLogger.logDebug(\n `Setting default max open connections to ${maxOpenConns} and setting max idle connection to ${maxIdleConns}`\n );\n\n // Spread from the jsonData in new options in case\n // the database field was migrated as well\n newOptions.jsonData = {\n ...newOptions.jsonData,\n maxOpenConns: maxOpenConns,\n maxIdleConns: maxIdleConns,\n maxIdleConnsAuto: true,\n };\n\n // Make sure we issue an update if options changed\n optionsUpdated = true;\n }\n\n // If the maximum connection lifetime hasn't been\n // otherwise set fill in with the default from configuration\n if (jsonData.connMaxLifetime === undefined) {\n const { connMaxLifetime } = config.sqlConnectionLimits;\n\n // Spread new options and add our value\n newOptions.jsonData = {\n ...newOptions.jsonData,\n connMaxLifetime: connMaxLifetime,\n };\n\n // Note that we've updated the options\n optionsUpdated = true;\n }\n\n // Only issue an update if we changed options\n if (optionsUpdated) {\n onOptionsChange(newOptions);\n }\n }, [onOptionsChange, options]);\n}\n"],"names":[],"mappings":";;;;;AAYO,SAAS,wBAAA,CAAuD;AAAA,EACrE,eAAA;AAAA,EACA;AACF,CAAA,EAA6C;AAC3C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,IAAA,IAAI,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAC9B,IAAA,IAAI,cAAA,GAAiB,KAAA;AAGrB,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,eAAA,CAAgB,SAAS,CAAA,2CAAA,EAA8C,OAAA,CAAQ,QAAQ,CAAA,KAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAC7G,MAAA,UAAA,CAAW,QAAA,GAAW,EAAA;AACtB,MAAA,UAAA,CAAW,WAAW,EAAE,GAAG,QAAA,EAAU,QAAA,EAAU,QAAQ,QAAA,EAAS;AAChE,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAIA,IAAA,IACE,QAAA,CAAS,iBAAiB,KAAA,CAAA,IAC1B,QAAA,CAAS,iBAAiB,KAAA,CAAA,IAC1B,QAAA,CAAS,qBAAqB,KAAA,CAAA,EAC9B;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAI,MAAA,CAAO,mBAAA;AAE9C,MAAA,eAAA,CAAgB,QAAA;AAAA,QACd,CAAA,wCAAA,EAA2C,YAAY,CAAA,oCAAA,EAAuC,YAAY,CAAA;AAAA,OAC5G;AAIA,MAAA,UAAA,CAAW,QAAA,GAAW;AAAA,QACpB,GAAG,UAAA,CAAW,QAAA;AAAA,QACd,YAAA;AAAA,QACA,YAAA;AAAA,QACA,gBAAA,EAAkB;AAAA,OACpB;AAGA,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAIA,IAAA,IAAI,QAAA,CAAS,oBAAoB,KAAA,CAAA,EAAW;AAC1C,MAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAA,CAAO,mBAAA;AAGnC,MAAA,UAAA,CAAW,QAAA,GAAW;AAAA,QACpB,GAAG,UAAA,CAAW,QAAA;AAAA,QACd;AAAA,OACF;AAGA,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAGA,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,eAAA,CAAgB,UAAU,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,OAAO,CAAC,CAAA;AAC/B;;;;"}
@@ -0,0 +1,36 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useRef, useEffect, useCallback } from 'react';
3
+ import { SQLEditor } from '@grafana/plugin-ui';
4
+
5
+ "use strict";
6
+ function QueryEditorRaw({ children, onChange, query, width, height, editorLanguageDefinition }) {
7
+ const queryRef = useRef(query);
8
+ useEffect(() => {
9
+ queryRef.current = query;
10
+ }, [query]);
11
+ const onRawQueryChange = useCallback(
12
+ (rawSql, processQuery) => {
13
+ const newQuery = {
14
+ ...queryRef.current,
15
+ rawQuery: true,
16
+ rawSql
17
+ };
18
+ onChange(newQuery, processQuery);
19
+ },
20
+ [onChange]
21
+ );
22
+ return /* @__PURE__ */ jsx(
23
+ SQLEditor,
24
+ {
25
+ width,
26
+ height,
27
+ query: query.rawSql,
28
+ onChange: onRawQueryChange,
29
+ language: editorLanguageDefinition,
30
+ children
31
+ }
32
+ );
33
+ }
34
+
35
+ export { QueryEditorRaw };
36
+ //# sourceMappingURL=QueryEditorRaw.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryEditorRaw.mjs","sources":["../../../../src/components/query-editor-raw/QueryEditorRaw.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { LanguageDefinition, SQLEditor } from '@grafana/plugin-ui';\n\nimport { SQLQuery } from '../../types';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n editorLanguageDefinition: LanguageDefinition;\n};\n\nexport function QueryEditorRaw({ children, onChange, query, width, height, editorLanguageDefinition }: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={editorLanguageDefinition}\n >\n {children}\n </SQLEditor>\n );\n}\n"],"names":[],"mappings":";;;;;AAgBO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,QAAA,EAAU,OAAO,KAAA,EAAO,MAAA,EAAQ,0BAAyB,EAAU;AAE5G,EAAA,MAAM,QAAA,GAAW,OAAiB,KAAK,CAAA;AACvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAAA,EACrB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,QAAgB,YAAA,KAA0B;AACzC,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,GAAG,QAAA,CAAS,OAAA;AAAA,QACZ,QAAA,EAAU,IAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,QAAA,CAAS,UAAU,YAAY,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,QAAA,EAAU,gBAAA;AAAA,MACV,QAAA,EAAU,wBAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;;;;"}
@@ -0,0 +1,104 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { css } from '@emotion/css';
3
+ import { useState, useMemo } from 'react';
4
+ import { t } from '@grafana/i18n';
5
+ import { reportInteraction } from '@grafana/runtime';
6
+ import { useTheme2, Stack, IconButton, Tooltip, Icon } from '@grafana/ui';
7
+ import { QueryValidator } from './QueryValidator.mjs';
8
+
9
+ "use strict";
10
+ function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }) {
11
+ const theme = useTheme2();
12
+ const [validationResult, setValidationResult] = useState();
13
+ const styles = useMemo(() => {
14
+ return {
15
+ container: css({
16
+ border: `1px solid ${theme.colors.border.medium}`,
17
+ borderTop: "none",
18
+ padding: theme.spacing(0.5, 0.5, 0.5, 0.5),
19
+ display: "flex",
20
+ flexGrow: 1,
21
+ justifyContent: "space-between",
22
+ fontSize: theme.typography.bodySmall.fontSize
23
+ }),
24
+ error: css({
25
+ color: theme.colors.error.text,
26
+ fontSize: theme.typography.bodySmall.fontSize,
27
+ fontFamily: theme.typography.fontFamilyMonospace
28
+ }),
29
+ valid: css({
30
+ color: theme.colors.success.text
31
+ }),
32
+ info: css({
33
+ color: theme.colors.text.secondary
34
+ }),
35
+ hint: css({
36
+ color: theme.colors.text.disabled,
37
+ whiteSpace: "nowrap",
38
+ cursor: "help"
39
+ })
40
+ };
41
+ }, [theme]);
42
+ let style = {};
43
+ if (!showTools && validationResult === void 0) {
44
+ style = { height: 0, padding: 0, visibility: "hidden" };
45
+ }
46
+ return /* @__PURE__ */ jsxs("div", { className: styles.container, style, children: [
47
+ /* @__PURE__ */ jsx("div", { children: validatorProps.onValidate && /* @__PURE__ */ jsx(
48
+ QueryValidator,
49
+ {
50
+ ...validatorProps,
51
+ onValidate: (result) => {
52
+ setValidationResult(result);
53
+ validatorProps.onValidate(result);
54
+ }
55
+ }
56
+ ) }),
57
+ showTools && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(Stack, { gap: 1, children: [
58
+ onFormatCode && /* @__PURE__ */ jsx(
59
+ IconButton,
60
+ {
61
+ onClick: () => {
62
+ var _a;
63
+ reportInteraction("grafana_sql_query_formatted", {
64
+ datasource: (_a = validatorProps.query.datasource) == null ? void 0 : _a.type
65
+ });
66
+ onFormatCode();
67
+ },
68
+ name: "brackets-curly",
69
+ size: "xs",
70
+ tooltip: t("grafana-sql.components.query-toolbox.tooltip-format-query", "Format query")
71
+ }
72
+ ),
73
+ onExpand && /* @__PURE__ */ jsx(
74
+ IconButton,
75
+ {
76
+ onClick: () => {
77
+ var _a;
78
+ reportInteraction("grafana_sql_editor_expand", {
79
+ datasource: (_a = validatorProps.query.datasource) == null ? void 0 : _a.type,
80
+ expanded: !isExpanded
81
+ });
82
+ onExpand(!isExpanded);
83
+ },
84
+ name: isExpanded ? "angle-up" : "angle-down",
85
+ size: "xs",
86
+ tooltip: isExpanded ? t("grafana-sql.components.query-toolbox.tooltip-collapse", "Collapse editor") : t("grafana-sql.components.query-toolbox.tooltip-expand", "Expand editor")
87
+ }
88
+ ),
89
+ /* @__PURE__ */ jsx(
90
+ Tooltip,
91
+ {
92
+ content: t(
93
+ "grafana-sql.components.query-toolbox.content-hit-ctrlcmdreturn-to-run-query",
94
+ "Hit CTRL/CMD+Return to run query"
95
+ ),
96
+ children: /* @__PURE__ */ jsx(Icon, { className: styles.hint, name: "keyboard" })
97
+ }
98
+ )
99
+ ] }) })
100
+ ] });
101
+ }
102
+
103
+ export { QueryToolbox };
104
+ //# sourceMappingURL=QueryToolbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryToolbox.mjs","sources":["../../../../src/components/query-editor-raw/QueryToolbox.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Stack, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, QueryValidatorProps } from './QueryValidator';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css({\n border: `1px solid ${theme.colors.border.medium}`,\n borderTop: 'none',\n padding: theme.spacing(0.5, 0.5, 0.5, 0.5),\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'space-between',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n error: css({\n color: theme.colors.error.text,\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n valid: css({\n color: theme.colors.success.text,\n }),\n info: css({\n color: theme.colors.text.secondary,\n }),\n hint: css({\n color: theme.colors.text.disabled,\n whiteSpace: 'nowrap',\n cursor: 'help',\n }),\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <Stack gap={1}>\n {onFormatCode && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_query_formatted', {\n datasource: validatorProps.query.datasource?.type,\n });\n onFormatCode();\n }}\n name=\"brackets-curly\"\n size=\"xs\"\n tooltip={t('grafana-sql.components.query-toolbox.tooltip-format-query', 'Format query')}\n />\n )}\n {onExpand && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_editor_expand', {\n datasource: validatorProps.query.datasource?.type,\n expanded: !isExpanded,\n });\n\n onExpand(!isExpanded);\n }}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={\n isExpanded\n ? t('grafana-sql.components.query-toolbox.tooltip-collapse', 'Collapse editor')\n : t('grafana-sql.components.query-toolbox.tooltip-expand', 'Expand editor')\n }\n />\n )}\n <Tooltip\n content={t(\n 'grafana-sql.components.query-toolbox.content-hit-ctrlcmdreturn-to-run-query',\n 'Hit CTRL/CMD+Return to run query'\n )}\n >\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </Stack>\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { css } from '@emotion/css';
3
+ import { useState, useMemo, useEffect } from 'react';
4
+ import { useAsyncFn, useDebounce } from 'react-use';
5
+ import { getValueFormat, formattedValueToString } from '@grafana/data';
6
+ import { Trans } from '@grafana/i18n';
7
+ import { useTheme2, Spinner, Icon } from '@grafana/ui';
8
+
9
+ "use strict";
10
+ function QueryValidator({ db, query, onValidate, range }) {
11
+ var _a;
12
+ const [validationResult, setValidationResult] = useState();
13
+ const theme = useTheme2();
14
+ const valueFormatter = useMemo(() => getValueFormat("bytes"), []);
15
+ const styles = useMemo(() => {
16
+ return {
17
+ error: css({
18
+ color: theme.colors.error.text,
19
+ fontSize: theme.typography.bodySmall.fontSize,
20
+ fontFamily: theme.typography.fontFamilyMonospace
21
+ }),
22
+ valid: css({
23
+ color: theme.colors.success.text
24
+ }),
25
+ info: css({
26
+ color: theme.colors.text.secondary
27
+ })
28
+ };
29
+ }, [theme]);
30
+ const [state, validateQuery] = useAsyncFn(
31
+ async (q) => {
32
+ var _a2;
33
+ if (((_a2 = q.rawSql) == null ? void 0 : _a2.trim()) === "") {
34
+ return null;
35
+ }
36
+ return await db.validateQuery(q, range);
37
+ },
38
+ [db]
39
+ );
40
+ const [,] = useDebounce(
41
+ async () => {
42
+ const result = await validateQuery(query);
43
+ if (result) {
44
+ setValidationResult(result);
45
+ }
46
+ return null;
47
+ },
48
+ 1e3,
49
+ [query, validateQuery]
50
+ );
51
+ useEffect(() => {
52
+ if (validationResult == null ? void 0 : validationResult.isError) {
53
+ onValidate(false);
54
+ }
55
+ if (validationResult == null ? void 0 : validationResult.isValid) {
56
+ onValidate(true);
57
+ }
58
+ }, [validationResult, onValidate]);
59
+ if (!state.value && !state.loading) {
60
+ return null;
61
+ }
62
+ const error = ((_a = state.value) == null ? void 0 : _a.error) ? processErrorMessage(state.value.error) : "";
63
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
64
+ state.loading && /* @__PURE__ */ jsxs("div", { className: styles.info, children: [
65
+ /* @__PURE__ */ jsx(Spinner, { inline: true, size: "xs" }),
66
+ " ",
67
+ /* @__PURE__ */ jsx(Trans, { i18nKey: "grafana-sql.components.query-validator.validating-query", children: "Validating query..." })
68
+ ] }),
69
+ !state.loading && state.value && /* @__PURE__ */ jsxs(Fragment, { children: [
70
+ /* @__PURE__ */ jsx(Fragment, { children: state.value.isValid && state.value.statistics && /* @__PURE__ */ jsx("div", { className: styles.valid, children: /* @__PURE__ */ jsxs(
71
+ Trans,
72
+ {
73
+ i18nKey: "grafana-sql.components.query-validator.query-will-process",
74
+ values: { bytes: formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed)) },
75
+ children: [
76
+ /* @__PURE__ */ jsx(Icon, { name: "check" }),
77
+ " This query will process ",
78
+ /* @__PURE__ */ jsx("strong", { children: "{{bytes}}" }),
79
+ " when run."
80
+ ]
81
+ }
82
+ ) }) }),
83
+ /* @__PURE__ */ jsx(Fragment, { children: state.value.isError && /* @__PURE__ */ jsx("div", { className: styles.error, children: error }) })
84
+ ] })
85
+ ] });
86
+ }
87
+ function processErrorMessage(error) {
88
+ const splat = error.split(":");
89
+ if (splat.length > 2) {
90
+ return splat.slice(2).join(":");
91
+ }
92
+ return error;
93
+ }
94
+
95
+ export { QueryValidator };
96
+ //# sourceMappingURL=QueryValidator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryValidator.mjs","sources":["../../../../src/components/query-editor-raw/QueryValidator.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useState, useMemo, useEffect } from 'react';\nimport { useAsyncFn, useDebounce } from 'react-use';\n\nimport { formattedValueToString, getValueFormat, TimeRange } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Icon, Spinner, useTheme2 } from '@grafana/ui';\n\nimport { DB, SQLQuery, ValidationResults } from '../../types';\n\nexport interface QueryValidatorProps {\n db: DB;\n query: SQLQuery;\n range?: TimeRange;\n onValidate: (isValid: boolean) => void;\n}\n\nexport function QueryValidator({ db, query, onValidate, range }: QueryValidatorProps) {\n const [validationResult, setValidationResult] = useState<ValidationResults | null>();\n const theme = useTheme2();\n const valueFormatter = useMemo(() => getValueFormat('bytes'), []);\n\n const styles = useMemo(() => {\n return {\n error: css({\n color: theme.colors.error.text,\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n valid: css({\n color: theme.colors.success.text,\n }),\n info: css({\n color: theme.colors.text.secondary,\n }),\n };\n }, [theme]);\n\n const [state, validateQuery] = useAsyncFn(\n async (q: SQLQuery) => {\n if (q.rawSql?.trim() === '') {\n return null;\n }\n\n return await db.validateQuery(q, range);\n },\n [db]\n );\n\n const [,] = useDebounce(\n async () => {\n const result = await validateQuery(query);\n if (result) {\n setValidationResult(result);\n }\n\n return null;\n },\n 1000,\n [query, validateQuery]\n );\n\n useEffect(() => {\n if (validationResult?.isError) {\n onValidate(false);\n }\n if (validationResult?.isValid) {\n onValidate(true);\n }\n }, [validationResult, onValidate]);\n\n if (!state.value && !state.loading) {\n return null;\n }\n\n const error = state.value?.error ? processErrorMessage(state.value.error) : '';\n\n return (\n <>\n {state.loading && (\n <div className={styles.info}>\n <Spinner inline={true} size=\"xs\" />{' '}\n <Trans i18nKey=\"grafana-sql.components.query-validator.validating-query\">Validating query...</Trans>\n </div>\n )}\n {!state.loading && state.value && (\n <>\n <>\n {state.value.isValid && state.value.statistics && (\n <div className={styles.valid}>\n <Trans\n i18nKey=\"grafana-sql.components.query-validator.query-will-process\"\n values={{ bytes: formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed)) }}\n >\n <Icon name=\"check\" /> This query will process <strong>{'{{bytes}}'}</strong> when run.\n </Trans>\n </div>\n )}\n </>\n\n <>{state.value.isError && <div className={styles.error}>{error}</div>}</>\n </>\n )}\n </>\n );\n}\n\nfunction processErrorMessage(error: string) {\n const splat = error.split(':');\n if (splat.length > 2) {\n return splat.slice(2).join(':');\n }\n return error;\n}\n"],"names":["_a"],"mappings":"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"}