@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 @@
1
+ {"version":3,"file":"MaxLifetimeField.cjs","sources":["../../../../src/components/configuration/MaxLifetimeField.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 onMaxLifetimeChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\nexport function MaxLifetimeField({ labelWidth, onMaxLifetimeChanged, 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-lifetime\">Max lifetime</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-lifetime\">\n The maximum amount of time in seconds a connection may be reused. If set to 0, connections are\n reused forever.\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.connMaxLifetime}\n defaultValue={config.sqlConnectionLimits.connMaxLifetime}\n onChange={onMaxLifetimeChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n"],"names":["jsx","Field","Label","jsxs","Stack","Trans","Tooltip","Icon","NumberInput","config"],"mappings":";;;;;;;;;;;AAaO,SAAS,gBAAA,CAAiB,EAAE,UAAA,EAAY,oBAAA,EAAsB,UAAS,EAAU;AACtF,EAAA,uBACEA,cAAA;AAAA,IAACC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAQ,IAAA;AAAA,MACR,uBACED,cAAA,CAACE,QAAA,EAAA,EACC,QAAA,kBAAAC,eAAA,CAACC,QAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,wBAAAJ,cAAA,CAAC,UACC,QAAA,kBAAAA,cAAA,CAACK,UAAA,EAAA,EAAM,OAAA,EAAQ,uDAAA,EAAwD,0BAAY,CAAA,EACrF,CAAA;AAAA,wBACAL,cAAA;AAAA,UAACM,UAAA;AAAA,UAAA;AAAA,YACC,OAAA,iCACG,MAAA,EAAA,EACC,QAAA,kBAAAN,cAAA,CAACK,cAAM,OAAA,EAAQ,+DAAA,EAAgE,4HAG/E,CAAA,EACF,CAAA;AAAA,YAGF,QAAA,kBAAAL,cAAA,CAACO,OAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,kBAAAP,cAAA;AAAA,QAACQ,uBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,CAAS,eAAA;AAAA,UAChB,YAAA,EAAcC,eAAO,mBAAA,CAAoB,eAAA;AAAA,UACzC,QAAA,EAAU,oBAAA;AAAA,UACV,KAAA,EAAO;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var i18n = require('@grafana/i18n');
7
+ var runtime = require('@grafana/runtime');
8
+ var ui = require('@grafana/ui');
9
+ var NumberInput = require('./NumberInput.cjs');
10
+
11
+ "use strict";
12
+ function MaxOpenConnectionsField({ labelWidth, onMaxConnectionsChanged, jsonData }) {
13
+ return /* @__PURE__ */ jsxRuntime.jsx(
14
+ ui.Field,
15
+ {
16
+ noMargin: true,
17
+ label: /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { gap: 0.5, children: [
18
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(i18n.Trans, { i18nKey: "grafana-sql.components.connection-limits.max-open", children: "Max open" }) }),
19
+ /* @__PURE__ */ jsxRuntime.jsx(
20
+ ui.Tooltip,
21
+ {
22
+ content: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsxs(i18n.Trans, { i18nKey: "grafana-sql.components.connection-limits.content-max-open", children: [
23
+ "The maximum number of open connections to the database. If ",
24
+ /* @__PURE__ */ jsxRuntime.jsx("i", { children: "Max idle connections" }),
25
+ " is greater than 0 and the ",
26
+ /* @__PURE__ */ jsxRuntime.jsx("i", { children: "Max open connections" }),
27
+ " is less than ",
28
+ /* @__PURE__ */ jsxRuntime.jsx("i", { children: "Max idle connections" }),
29
+ ", then",
30
+ /* @__PURE__ */ jsxRuntime.jsx("i", { children: "Max idle connections" }),
31
+ " will be reduced to match the ",
32
+ /* @__PURE__ */ jsxRuntime.jsx("i", { children: "Max open connections" }),
33
+ " limit. If set to 0, there is no limit on the number of open connections."
34
+ ] }) }),
35
+ children: /* @__PURE__ */ jsxRuntime.jsx(ui.Icon, { name: "info-circle", size: "sm" })
36
+ }
37
+ )
38
+ ] }) }),
39
+ children: /* @__PURE__ */ jsxRuntime.jsx(
40
+ NumberInput.NumberInput,
41
+ {
42
+ value: jsonData.maxOpenConns,
43
+ defaultValue: runtime.config.sqlConnectionLimits.maxOpenConns,
44
+ onChange: onMaxConnectionsChanged,
45
+ width: labelWidth
46
+ }
47
+ )
48
+ }
49
+ );
50
+ }
51
+
52
+ exports.MaxOpenConnectionsField = MaxOpenConnectionsField;
53
+ //# sourceMappingURL=MaxOpenConnectionsField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaxOpenConnectionsField.cjs","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":["jsx","Field","Label","jsxs","Stack","Trans","Tooltip","Icon","NumberInput","config"],"mappings":";;;;;;;;;;;AAcO,SAAS,uBAAA,CAAwB,EAAE,UAAA,EAAY,uBAAA,EAAyB,UAAS,EAAU;AAChG,EAAA,uBACEA,cAAA;AAAA,IAACC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAQ,IAAA;AAAA,MACR,uBACED,cAAA,CAACE,QAAA,EAAA,EACC,QAAA,kBAAAC,eAAA,CAACC,QAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,wBAAAJ,cAAA,CAAC,UACC,QAAA,kBAAAA,cAAA,CAACK,UAAA,EAAA,EAAM,OAAA,EAAQ,mDAAA,EAAoD,sBAAQ,CAAA,EAC7E,CAAA;AAAA,wBACAL,cAAA;AAAA,UAACM,UAAA;AAAA,UAAA;AAAA,YACC,yBACEN,cAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAG,eAAA,CAACE,UAAA,EAAA,EAAM,SAAQ,2DAAA,EAA4D,QAAA,EAAA;AAAA,cAAA,6DAAA;AAAA,8BACdL,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,6BAAA;AAAA,8BACvEA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gBAAA;AAAA,8BAAcA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,QAAA;AAAA,8BACnFA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gCAAA;AAAA,8BAA8BA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI;AAAA,aAAA,EAEtF,CAAA,EACF,CAAA;AAAA,YAGF,QAAA,kBAAAA,cAAA,CAACO,OAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,kBAAAP,cAAA;AAAA,QAACQ,uBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,CAAS,YAAA;AAAA,UAChB,YAAA,EAAcC,eAAO,mBAAA,CAAoB,YAAA;AAAA,UACzC,QAAA,EAAU,uBAAA;AAAA,UACV,KAAA,EAAO;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var ui = require('@grafana/ui');
8
+
9
+ "use strict";
10
+ function NumberInput({ value, defaultValue, onChange, width }) {
11
+ const [isEmpty, setIsEmpty] = react.useState(false);
12
+ return /* @__PURE__ */ jsxRuntime.jsx(
13
+ ui.Input,
14
+ {
15
+ type: "number",
16
+ placeholder: String(defaultValue),
17
+ value: isEmpty ? "" : value,
18
+ onChange: (e) => {
19
+ var _a;
20
+ if (((_a = e.currentTarget.value) == null ? void 0 : _a.trim()) === "") {
21
+ setIsEmpty(true);
22
+ onChange(defaultValue);
23
+ } else {
24
+ setIsEmpty(false);
25
+ const newVal = Number(e.currentTarget.value);
26
+ if (!Number.isNaN(newVal)) {
27
+ onChange(newVal);
28
+ }
29
+ }
30
+ },
31
+ width
32
+ }
33
+ );
34
+ }
35
+
36
+ exports.NumberInput = NumberInput;
37
+ //# sourceMappingURL=NumberInput.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberInput.cjs","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":["useState","jsx","Input"],"mappings":";;;;;;;;;AAWO,SAAS,YAAY,EAAE,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,OAAM,EAAqB;AACtF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,uBACEC,cAAA;AAAA,IAACC,QAAA;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,106 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var data = require('@grafana/data');
7
+ var i18n = require('@grafana/i18n');
8
+ var ui = require('@grafana/ui');
9
+
10
+ "use strict";
11
+ const TLSSecretsConfig = (props) => {
12
+ const { editorProps, showCACert, showKeyPair = true } = props;
13
+ const { secureJsonFields } = editorProps.options;
14
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15
+ showKeyPair ? /* @__PURE__ */ jsxRuntime.jsx(
16
+ ui.Field,
17
+ {
18
+ noMargin: true,
19
+ label: /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { gap: 0.5, children: [
20
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(i18n.Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.tlsssl-client-certificate", children: "TLS/SSL Client Certificate" }) }),
21
+ /* @__PURE__ */ jsxRuntime.jsx(
22
+ ui.Tooltip,
23
+ {
24
+ content: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(i18n.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." }) }),
25
+ children: /* @__PURE__ */ jsxRuntime.jsx(ui.Icon, { name: "info-circle", size: "sm" })
26
+ }
27
+ )
28
+ ] }) }),
29
+ children: /* @__PURE__ */ jsxRuntime.jsx(
30
+ ui.SecretTextArea,
31
+ {
32
+ placeholder: "-----BEGIN CERTIFICATE-----",
33
+ cols: 45,
34
+ rows: 7,
35
+ isConfigured: secureJsonFields && secureJsonFields.tlsClientCert,
36
+ onChange: data.onUpdateDatasourceSecureJsonDataOption(editorProps, "tlsClientCert"),
37
+ onReset: () => {
38
+ data.updateDatasourcePluginResetOption(editorProps, "tlsClientCert");
39
+ }
40
+ }
41
+ )
42
+ }
43
+ ) : null,
44
+ showCACert ? /* @__PURE__ */ jsxRuntime.jsx(
45
+ ui.Field,
46
+ {
47
+ noMargin: true,
48
+ label: /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { gap: 0.5, children: [
49
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(i18n.Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.tlsssl-root-certificate", children: "TLS/SSL Root Certificate" }) }),
50
+ /* @__PURE__ */ jsxRuntime.jsx(
51
+ ui.Tooltip,
52
+ {
53
+ content: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(i18n.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" }) }),
54
+ children: /* @__PURE__ */ jsxRuntime.jsx(ui.Icon, { name: "info-circle", size: "sm" })
55
+ }
56
+ )
57
+ ] }) }),
58
+ children: /* @__PURE__ */ jsxRuntime.jsx(
59
+ ui.SecretTextArea,
60
+ {
61
+ placeholder: "-----BEGIN CERTIFICATE-----",
62
+ cols: 45,
63
+ rows: 7,
64
+ isConfigured: secureJsonFields && secureJsonFields.tlsCACert,
65
+ onChange: data.onUpdateDatasourceSecureJsonDataOption(editorProps, "tlsCACert"),
66
+ onReset: () => {
67
+ data.updateDatasourcePluginResetOption(editorProps, "tlsCACert");
68
+ }
69
+ }
70
+ )
71
+ }
72
+ ) : null,
73
+ showKeyPair ? /* @__PURE__ */ jsxRuntime.jsx(
74
+ ui.Field,
75
+ {
76
+ noMargin: true,
77
+ label: /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { gap: 0.5, children: [
78
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(i18n.Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.tlsssl-client-key", children: "TLS/SSL Client Key" }) }),
79
+ /* @__PURE__ */ jsxRuntime.jsx(
80
+ ui.Tooltip,
81
+ {
82
+ content: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(i18n.Trans, { i18nKey: "grafana-sql.components.tlssecrets-config.content-tlsssl-client-key", children: "To authenticate with a client TLS/SSL certificate, provide the key here." }) }),
83
+ children: /* @__PURE__ */ jsxRuntime.jsx(ui.Icon, { name: "info-circle", size: "sm" })
84
+ }
85
+ )
86
+ ] }) }),
87
+ children: /* @__PURE__ */ jsxRuntime.jsx(
88
+ ui.SecretTextArea,
89
+ {
90
+ placeholder: "-----BEGIN RSA PRIVATE KEY-----",
91
+ cols: 45,
92
+ rows: 7,
93
+ isConfigured: secureJsonFields && secureJsonFields.tlsClientKey,
94
+ onChange: data.onUpdateDatasourceSecureJsonDataOption(editorProps, "tlsClientKey"),
95
+ onReset: () => {
96
+ data.updateDatasourcePluginResetOption(editorProps, "tlsClientKey");
97
+ }
98
+ }
99
+ )
100
+ }
101
+ ) : null
102
+ ] });
103
+ };
104
+
105
+ exports.TLSSecretsConfig = TLSSecretsConfig;
106
+ //# sourceMappingURL=TLSSecretsConfig.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TLSSecretsConfig.cjs","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":["jsxs","Fragment","jsx","Field","Label","Stack","Trans","Tooltip","Icon","SecretTextArea","onUpdateDatasourceSecureJsonDataOption","updateDatasourcePluginResetOption"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var runtime = require('@grafana/runtime');
7
+ var logging = require('../../utils/logging.cjs');
8
+
9
+ "use strict";
10
+ function useMigrateDatabaseFields({
11
+ onOptionsChange,
12
+ options
13
+ }) {
14
+ react.useEffect(() => {
15
+ const jsonData = options.jsonData;
16
+ let newOptions = { ...options };
17
+ let optionsUpdated = false;
18
+ if (options.database) {
19
+ logging.sqlPluginLogger.logDebug(`Migrating from options.database with value ${options.database} for ${options.name}`);
20
+ newOptions.database = "";
21
+ newOptions.jsonData = { ...jsonData, database: options.database };
22
+ optionsUpdated = true;
23
+ }
24
+ if (jsonData.maxOpenConns === void 0 && jsonData.maxIdleConns === void 0 && jsonData.maxIdleConnsAuto === void 0) {
25
+ const { maxOpenConns, maxIdleConns } = runtime.config.sqlConnectionLimits;
26
+ logging.sqlPluginLogger.logDebug(
27
+ `Setting default max open connections to ${maxOpenConns} and setting max idle connection to ${maxIdleConns}`
28
+ );
29
+ newOptions.jsonData = {
30
+ ...newOptions.jsonData,
31
+ maxOpenConns,
32
+ maxIdleConns,
33
+ maxIdleConnsAuto: true
34
+ };
35
+ optionsUpdated = true;
36
+ }
37
+ if (jsonData.connMaxLifetime === void 0) {
38
+ const { connMaxLifetime } = runtime.config.sqlConnectionLimits;
39
+ newOptions.jsonData = {
40
+ ...newOptions.jsonData,
41
+ connMaxLifetime
42
+ };
43
+ optionsUpdated = true;
44
+ }
45
+ if (optionsUpdated) {
46
+ onOptionsChange(newOptions);
47
+ }
48
+ }, [onOptionsChange, options]);
49
+ }
50
+
51
+ exports.useMigrateDatabaseFields = useMigrateDatabaseFields;
52
+ //# sourceMappingURL=useMigrateDatabaseFields.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMigrateDatabaseFields.cjs","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":["useEffect","sqlPluginLogger","config"],"mappings":";;;;;;;;;AAYO,SAAS,wBAAA,CAAuD;AAAA,EACrE,eAAA;AAAA,EACA;AACF,CAAA,EAA6C;AAC3C,EAAAA,eAAA,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,MAAAC,uBAAA,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,GAAIC,cAAA,CAAO,mBAAA;AAE9C,MAAAD,uBAAA,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,GAAIC,cAAA,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,40 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var pluginUi = require('@grafana/plugin-ui');
8
+
9
+ "use strict";
10
+ function QueryEditorRaw({ children, onChange, query, width, height, editorLanguageDefinition }) {
11
+ const queryRef = react.useRef(query);
12
+ react.useEffect(() => {
13
+ queryRef.current = query;
14
+ }, [query]);
15
+ const onRawQueryChange = react.useCallback(
16
+ (rawSql, processQuery) => {
17
+ const newQuery = {
18
+ ...queryRef.current,
19
+ rawQuery: true,
20
+ rawSql
21
+ };
22
+ onChange(newQuery, processQuery);
23
+ },
24
+ [onChange]
25
+ );
26
+ return /* @__PURE__ */ jsxRuntime.jsx(
27
+ pluginUi.SQLEditor,
28
+ {
29
+ width,
30
+ height,
31
+ query: query.rawSql,
32
+ onChange: onRawQueryChange,
33
+ language: editorLanguageDefinition,
34
+ children
35
+ }
36
+ );
37
+ }
38
+
39
+ exports.QueryEditorRaw = QueryEditorRaw;
40
+ //# sourceMappingURL=QueryEditorRaw.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryEditorRaw.cjs","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":["useRef","useEffect","useCallback","jsx","SQLEditor"],"mappings":";;;;;;;;;AAgBO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,QAAA,EAAU,OAAO,KAAA,EAAO,MAAA,EAAQ,0BAAyB,EAAU;AAE5G,EAAA,MAAM,QAAA,GAAWA,aAAiB,KAAK,CAAA;AACvC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAAA,EACrB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,gBAAA,GAAmBC,iBAAA;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,uBACEC,cAAA;AAAA,IAACC,kBAAA;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,108 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var css = require('@emotion/css');
7
+ var react = require('react');
8
+ var i18n = require('@grafana/i18n');
9
+ var runtime = require('@grafana/runtime');
10
+ var ui = require('@grafana/ui');
11
+ var QueryValidator = require('./QueryValidator.cjs');
12
+
13
+ "use strict";
14
+ function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }) {
15
+ const theme = ui.useTheme2();
16
+ const [validationResult, setValidationResult] = react.useState();
17
+ const styles = react.useMemo(() => {
18
+ return {
19
+ container: css.css({
20
+ border: `1px solid ${theme.colors.border.medium}`,
21
+ borderTop: "none",
22
+ padding: theme.spacing(0.5, 0.5, 0.5, 0.5),
23
+ display: "flex",
24
+ flexGrow: 1,
25
+ justifyContent: "space-between",
26
+ fontSize: theme.typography.bodySmall.fontSize
27
+ }),
28
+ error: css.css({
29
+ color: theme.colors.error.text,
30
+ fontSize: theme.typography.bodySmall.fontSize,
31
+ fontFamily: theme.typography.fontFamilyMonospace
32
+ }),
33
+ valid: css.css({
34
+ color: theme.colors.success.text
35
+ }),
36
+ info: css.css({
37
+ color: theme.colors.text.secondary
38
+ }),
39
+ hint: css.css({
40
+ color: theme.colors.text.disabled,
41
+ whiteSpace: "nowrap",
42
+ cursor: "help"
43
+ })
44
+ };
45
+ }, [theme]);
46
+ let style = {};
47
+ if (!showTools && validationResult === void 0) {
48
+ style = { height: 0, padding: 0, visibility: "hidden" };
49
+ }
50
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.container, style, children: [
51
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: validatorProps.onValidate && /* @__PURE__ */ jsxRuntime.jsx(
52
+ QueryValidator.QueryValidator,
53
+ {
54
+ ...validatorProps,
55
+ onValidate: (result) => {
56
+ setValidationResult(result);
57
+ validatorProps.onValidate(result);
58
+ }
59
+ }
60
+ ) }),
61
+ showTools && /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { gap: 1, children: [
62
+ onFormatCode && /* @__PURE__ */ jsxRuntime.jsx(
63
+ ui.IconButton,
64
+ {
65
+ onClick: () => {
66
+ var _a;
67
+ runtime.reportInteraction("grafana_sql_query_formatted", {
68
+ datasource: (_a = validatorProps.query.datasource) == null ? void 0 : _a.type
69
+ });
70
+ onFormatCode();
71
+ },
72
+ name: "brackets-curly",
73
+ size: "xs",
74
+ tooltip: i18n.t("grafana-sql.components.query-toolbox.tooltip-format-query", "Format query")
75
+ }
76
+ ),
77
+ onExpand && /* @__PURE__ */ jsxRuntime.jsx(
78
+ ui.IconButton,
79
+ {
80
+ onClick: () => {
81
+ var _a;
82
+ runtime.reportInteraction("grafana_sql_editor_expand", {
83
+ datasource: (_a = validatorProps.query.datasource) == null ? void 0 : _a.type,
84
+ expanded: !isExpanded
85
+ });
86
+ onExpand(!isExpanded);
87
+ },
88
+ name: isExpanded ? "angle-up" : "angle-down",
89
+ size: "xs",
90
+ tooltip: isExpanded ? i18n.t("grafana-sql.components.query-toolbox.tooltip-collapse", "Collapse editor") : i18n.t("grafana-sql.components.query-toolbox.tooltip-expand", "Expand editor")
91
+ }
92
+ ),
93
+ /* @__PURE__ */ jsxRuntime.jsx(
94
+ ui.Tooltip,
95
+ {
96
+ content: i18n.t(
97
+ "grafana-sql.components.query-toolbox.content-hit-ctrlcmdreturn-to-run-query",
98
+ "Hit CTRL/CMD+Return to run query"
99
+ ),
100
+ children: /* @__PURE__ */ jsxRuntime.jsx(ui.Icon, { className: styles.hint, name: "keyboard" })
101
+ }
102
+ )
103
+ ] }) })
104
+ ] });
105
+ }
106
+
107
+ exports.QueryToolbox = QueryToolbox;
108
+ //# sourceMappingURL=QueryToolbox.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryToolbox.cjs","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":["useTheme2","useState","useMemo","css","jsxs","jsx","QueryValidator","Stack","IconButton","reportInteraction","t","Tooltip","Icon"],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var css = require('@emotion/css');
7
+ var react = require('react');
8
+ var reactUse = require('react-use');
9
+ var data = require('@grafana/data');
10
+ var i18n = require('@grafana/i18n');
11
+ var ui = require('@grafana/ui');
12
+
13
+ "use strict";
14
+ function QueryValidator({ db, query, onValidate, range }) {
15
+ var _a;
16
+ const [validationResult, setValidationResult] = react.useState();
17
+ const theme = ui.useTheme2();
18
+ const valueFormatter = react.useMemo(() => data.getValueFormat("bytes"), []);
19
+ const styles = react.useMemo(() => {
20
+ return {
21
+ error: css.css({
22
+ color: theme.colors.error.text,
23
+ fontSize: theme.typography.bodySmall.fontSize,
24
+ fontFamily: theme.typography.fontFamilyMonospace
25
+ }),
26
+ valid: css.css({
27
+ color: theme.colors.success.text
28
+ }),
29
+ info: css.css({
30
+ color: theme.colors.text.secondary
31
+ })
32
+ };
33
+ }, [theme]);
34
+ const [state, validateQuery] = reactUse.useAsyncFn(
35
+ async (q) => {
36
+ var _a2;
37
+ if (((_a2 = q.rawSql) == null ? void 0 : _a2.trim()) === "") {
38
+ return null;
39
+ }
40
+ return await db.validateQuery(q, range);
41
+ },
42
+ [db]
43
+ );
44
+ const [,] = reactUse.useDebounce(
45
+ async () => {
46
+ const result = await validateQuery(query);
47
+ if (result) {
48
+ setValidationResult(result);
49
+ }
50
+ return null;
51
+ },
52
+ 1e3,
53
+ [query, validateQuery]
54
+ );
55
+ react.useEffect(() => {
56
+ if (validationResult == null ? void 0 : validationResult.isError) {
57
+ onValidate(false);
58
+ }
59
+ if (validationResult == null ? void 0 : validationResult.isValid) {
60
+ onValidate(true);
61
+ }
62
+ }, [validationResult, onValidate]);
63
+ if (!state.value && !state.loading) {
64
+ return null;
65
+ }
66
+ const error = ((_a = state.value) == null ? void 0 : _a.error) ? processErrorMessage(state.value.error) : "";
67
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
68
+ state.loading && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.info, children: [
69
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Spinner, { inline: true, size: "xs" }),
70
+ " ",
71
+ /* @__PURE__ */ jsxRuntime.jsx(i18n.Trans, { i18nKey: "grafana-sql.components.query-validator.validating-query", children: "Validating query..." })
72
+ ] }),
73
+ !state.loading && state.value && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
74
+ /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: state.value.isValid && state.value.statistics && /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.valid, children: /* @__PURE__ */ jsxRuntime.jsxs(
75
+ i18n.Trans,
76
+ {
77
+ i18nKey: "grafana-sql.components.query-validator.query-will-process",
78
+ values: { bytes: data.formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed)) },
79
+ children: [
80
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Icon, { name: "check" }),
81
+ " This query will process ",
82
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "{{bytes}}" }),
83
+ " when run."
84
+ ]
85
+ }
86
+ ) }) }),
87
+ /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: state.value.isError && /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.error, children: error }) })
88
+ ] })
89
+ ] });
90
+ }
91
+ function processErrorMessage(error) {
92
+ const splat = error.split(":");
93
+ if (splat.length > 2) {
94
+ return splat.slice(2).join(":");
95
+ }
96
+ return error;
97
+ }
98
+
99
+ exports.QueryValidator = QueryValidator;
100
+ //# sourceMappingURL=QueryValidator.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryValidator.cjs","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":["useState","useTheme2","useMemo","getValueFormat","css","useAsyncFn","_a","useDebounce","useEffect","jsxs","Fragment","jsx","Spinner","Trans","formattedValueToString","Icon"],"mappings":"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"}