@grafana/plugin-ui 0.16.1 → 0.17.1

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 (518) hide show
  1. package/dist/cjs/index.cjs +21907 -20495
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +882 -554
  4. package/dist/cjs/test-utils.cjs +3979 -91
  5. package/dist/cjs/test-utils.cjs.map +1 -1
  6. package/dist/cjs/test-utils.d.cts +1 -1
  7. package/dist/esm/_virtual/chance2.js +2 -2
  8. package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js +7 -7
  9. package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js.map +1 -1
  10. package/dist/esm/async-query-data/RunQueryButtons.js +4 -4
  11. package/dist/esm/async-query-data/RunQueryButtons.js.map +1 -1
  12. package/dist/esm/async-query-data/requestLooper.js +6 -6
  13. package/dist/esm/async-query-data/requestLooper.js.map +1 -1
  14. package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
  15. package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
  16. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +7 -7
  17. package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
  18. package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
  19. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
  20. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
  21. package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
  22. package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
  23. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
  24. package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
  25. package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
  26. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
  27. package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
  28. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
  29. package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
  30. package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
  31. package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
  32. package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
  33. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
  34. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
  35. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
  36. package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
  37. package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
  38. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
  39. package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
  40. package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
  41. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js +23 -0
  42. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js.map +1 -0
  43. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js +27 -0
  44. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js.map +1 -0
  45. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js +61 -0
  46. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js.map +1 -0
  47. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/WizardLayout.js +89 -0
  48. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/WizardLayout.js.map +1 -0
  49. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js +75 -0
  50. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js.map +1 -0
  51. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js +262 -0
  52. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js.map +1 -0
  53. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js +354 -0
  54. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js.map +1 -0
  55. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.js +93 -0
  56. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.js.map +1 -0
  57. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js +254 -0
  58. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map +1 -0
  59. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js +106 -0
  60. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js.map +1 -0
  61. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js +52 -0
  62. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js.map +1 -0
  63. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js +32 -0
  64. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js.map +1 -0
  65. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FieldInput.js +110 -0
  66. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FieldInput.js.map +1 -0
  67. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js +112 -0
  68. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js.map +1 -0
  69. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js +140 -0
  70. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js.map +1 -0
  71. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js +201 -0
  72. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js.map +1 -0
  73. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PrimitiveInputs.js +103 -0
  74. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PrimitiveInputs.js.map +1 -0
  75. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js +72 -0
  76. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js.map +1 -0
  77. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js +94 -0
  78. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js.map +1 -0
  79. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/fieldUtils.js +138 -0
  80. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/fieldUtils.js.map +1 -0
  81. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/layoutParts.js +82 -0
  82. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/layoutParts.js.map +1 -0
  83. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js +30 -0
  84. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js.map +1 -0
  85. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js +128 -0
  86. package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js.map +1 -0
  87. package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
  88. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
  89. package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
  90. package/dist/esm/components/DataLinks/DataLink.js +5 -4
  91. package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
  92. package/dist/esm/components/DataLinks/DataLinks.js +3 -3
  93. package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
  94. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +10 -10
  95. package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
  96. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  97. package/dist/esm/components/DatePicker/styles.js +2 -2
  98. package/dist/esm/components/DatePicker/styles.js.map +1 -1
  99. package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
  100. package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
  101. package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
  102. package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
  103. package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
  104. package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
  105. package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
  106. package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
  107. package/dist/esm/components/QueryEditor/ConfirmModal.js +2 -1
  108. package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
  109. package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
  110. package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
  111. package/dist/esm/components/QueryEditor/EditorField.js +5 -5
  112. package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
  113. package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
  114. package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
  115. package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
  116. package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
  117. package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
  118. package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
  119. package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
  120. package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
  121. package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
  122. package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
  123. package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
  124. package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
  125. package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
  126. package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
  127. package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
  128. package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
  129. package/dist/esm/components/QueryEditor/QueryEditor.js +7 -7
  130. package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
  131. package/dist/esm/components/QueryEditor/QueryEditorRow.js.map +1 -0
  132. package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
  133. package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
  134. package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
  135. package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
  136. package/dist/esm/components/QueryEditor/Space.js +2 -2
  137. package/dist/esm/components/QueryEditor/Space.js.map +1 -1
  138. package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
  139. package/dist/esm/components/QueryEditor/defaults.js +7 -7
  140. package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
  141. package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
  142. package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
  143. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +4 -4
  144. package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
  145. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
  146. package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
  147. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +3 -3
  148. package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
  149. package/dist/esm/components/QueryEditor/types.js.map +1 -1
  150. package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
  151. package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
  152. package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
  153. package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
  154. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +28 -27
  155. package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
  156. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
  157. package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
  158. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
  159. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
  160. package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
  161. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
  162. package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
  163. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
  164. package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
  165. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
  166. package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
  167. package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
  168. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
  169. package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
  170. package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
  171. package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
  172. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
  173. package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
  174. package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
  175. package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
  176. package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
  177. package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
  178. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
  179. package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
  180. package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
  181. package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
  182. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
  183. package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
  184. package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
  185. package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
  186. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
  187. package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
  188. package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
  189. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
  190. package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
  191. package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
  192. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
  193. package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
  194. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
  195. package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
  196. package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
  197. package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
  198. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
  199. package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
  200. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
  201. package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
  202. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
  203. package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
  204. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
  205. package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
  206. package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
  207. package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
  208. package/dist/esm/components/SQLEditor/types.js.map +1 -1
  209. package/dist/esm/components/SQLEditor/utils/LinkedToken.js +15 -12
  210. package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
  211. package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
  212. package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
  213. package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
  214. package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
  215. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
  216. package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
  217. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
  218. package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
  219. package/dist/esm/components/SQLEditor/utils/tokenType.js.map +1 -1
  220. package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
  221. package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
  222. package/dist/esm/components/Segment/Segment.js.map +1 -1
  223. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +8 -8
  224. package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
  225. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
  226. package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
  227. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
  228. package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
  229. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
  230. package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
  231. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +3 -2
  232. package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
  233. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
  234. package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
  235. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +8 -5
  236. package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
  237. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +5 -3
  238. package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
  239. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -3
  240. package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
  241. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
  242. package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
  243. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +6 -5
  244. package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
  245. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -2
  246. package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
  247. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
  248. package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
  249. package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
  250. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +2 -2
  251. package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
  252. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
  253. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
  254. package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
  255. package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
  256. package/dist/esm/datasource/SqlDatasource.js +17 -16
  257. package/dist/esm/datasource/SqlDatasource.js.map +1 -1
  258. package/dist/esm/datasource/constants.js.map +1 -1
  259. package/dist/esm/hooks/useDebounce.js.map +1 -1
  260. package/dist/esm/index.d.ts +882 -554
  261. package/dist/esm/index.js +11 -3
  262. package/dist/esm/index.js.map +1 -1
  263. package/dist/esm/node_modules/chance/chance.js +3973 -88
  264. package/dist/esm/node_modules/chance/chance.js.map +1 -1
  265. package/dist/esm/node_modules/immutable/dist/immutable.es.js +6186 -0
  266. package/dist/esm/node_modules/immutable/dist/immutable.es.js.map +1 -0
  267. package/dist/esm/node_modules/js-yaml/dist/js-yaml.js +3059 -0
  268. package/dist/esm/node_modules/js-yaml/dist/js-yaml.js.map +1 -0
  269. package/dist/esm/node_modules/react-hook-form/dist/index.esm.js +2798 -0
  270. package/dist/esm/node_modules/react-hook-form/dist/index.esm.js.map +1 -0
  271. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js +2 -2
  272. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -1
  273. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js +3 -3
  274. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -1
  275. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js +1 -1
  276. package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -1
  277. package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js +1 -6
  278. package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -1
  279. package/dist/esm/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js.map +1 -1
  280. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -1
  281. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js +3 -3
  282. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js.map +1 -1
  283. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js +2 -2
  284. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js.map +1 -1
  285. package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/of.js.map +1 -1
  286. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js +1 -1
  287. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js.map +1 -1
  288. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/catchError.js.map +1 -1
  289. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js +2 -2
  290. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js.map +1 -1
  291. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js +1 -1
  292. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js.map +1 -1
  293. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js.map +1 -1
  294. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js +1 -1
  295. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js.map +1 -1
  296. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js +1 -1
  297. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js.map +1 -1
  298. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js +1 -1
  299. package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js.map +1 -1
  300. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js.map +1 -1
  301. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js.map +1 -1
  302. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js +1 -1
  303. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js.map +1 -1
  304. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js.map +1 -1
  305. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +1 -1
  306. package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -1
  307. package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js.map +1 -1
  308. package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -1
  309. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js +7 -5
  310. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js.map +1 -1
  311. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -1
  312. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -1
  313. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -1
  314. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -1
  315. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js +2 -2
  316. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js.map +1 -1
  317. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js.map +1 -1
  318. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js +1 -1
  319. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js.map +1 -1
  320. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +2 -2
  321. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -1
  322. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js +1 -1
  323. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js.map +1 -1
  324. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js +1 -1
  325. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js.map +1 -1
  326. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js +2 -2
  327. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js.map +1 -1
  328. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js +1 -1
  329. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js.map +1 -1
  330. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -1
  331. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -1
  332. package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -1
  333. package/dist/esm/node_modules/semver/classes/comparator.js.map +1 -1
  334. package/dist/esm/node_modules/semver/classes/range.js +24 -4
  335. package/dist/esm/node_modules/semver/classes/range.js.map +1 -1
  336. package/dist/esm/node_modules/semver/classes/semver.js +27 -10
  337. package/dist/esm/node_modules/semver/classes/semver.js.map +1 -1
  338. package/dist/esm/node_modules/semver/functions/clean.js.map +1 -1
  339. package/dist/esm/node_modules/semver/functions/cmp.js.map +1 -1
  340. package/dist/esm/node_modules/semver/functions/coerce.js.map +1 -1
  341. package/dist/esm/node_modules/semver/functions/compare-build.js.map +1 -1
  342. package/dist/esm/node_modules/semver/functions/diff.js +1 -1
  343. package/dist/esm/node_modules/semver/functions/diff.js.map +1 -1
  344. package/dist/esm/node_modules/semver/functions/inc.js.map +1 -1
  345. package/dist/esm/node_modules/semver/functions/parse.js.map +1 -1
  346. package/dist/esm/node_modules/semver/functions/prerelease.js.map +1 -1
  347. package/dist/esm/node_modules/semver/functions/satisfies.js.map +1 -1
  348. package/dist/esm/node_modules/semver/functions/truncate.js +62 -0
  349. package/dist/esm/node_modules/semver/functions/truncate.js.map +1 -0
  350. package/dist/esm/node_modules/semver/functions/valid.js +5 -5
  351. package/dist/esm/node_modules/semver/functions/valid.js.map +1 -1
  352. package/dist/esm/node_modules/semver/index.js +3 -0
  353. package/dist/esm/node_modules/semver/index.js.map +1 -1
  354. package/dist/esm/node_modules/semver/internal/debug.js.map +1 -1
  355. package/dist/esm/node_modules/semver/internal/identifiers.js.map +1 -1
  356. package/dist/esm/node_modules/semver/internal/lrucache.js.map +1 -1
  357. package/dist/esm/node_modules/semver/internal/parse-options.js.map +1 -1
  358. package/dist/esm/node_modules/semver/internal/re.js +13 -13
  359. package/dist/esm/node_modules/semver/internal/re.js.map +1 -1
  360. package/dist/esm/node_modules/semver/ranges/intersects.js.map +1 -1
  361. package/dist/esm/node_modules/semver/ranges/max-satisfying.js.map +1 -1
  362. package/dist/esm/node_modules/semver/ranges/min-satisfying.js.map +1 -1
  363. package/dist/esm/node_modules/semver/ranges/min-version.js.map +1 -1
  364. package/dist/esm/node_modules/semver/ranges/outside.js.map +1 -1
  365. package/dist/esm/node_modules/semver/ranges/simplify.js.map +1 -1
  366. package/dist/esm/node_modules/semver/ranges/subset.js +3 -3
  367. package/dist/esm/node_modules/semver/ranges/subset.js.map +1 -1
  368. package/dist/esm/node_modules/semver/ranges/valid.js.map +1 -1
  369. package/dist/esm/node_modules/tslib/tslib.es6.js +2 -2
  370. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
  371. package/dist/esm/schema/utils/dsconfig.js +97 -0
  372. package/dist/esm/schema/utils/dsconfig.js.map +1 -0
  373. package/dist/esm/schema/utils/llm.js +54 -0
  374. package/dist/esm/schema/utils/llm.js.map +1 -0
  375. package/dist/esm/schema/utils/provisioning.js +389 -0
  376. package/dist/esm/schema/utils/provisioning.js.map +1 -0
  377. package/dist/esm/schema/utils/registry.js +31 -0
  378. package/dist/esm/schema/utils/registry.js.map +1 -0
  379. package/dist/esm/test/mocks/DataQuery.js.map +1 -1
  380. package/dist/esm/test/mocks/Datasource.js +1 -1
  381. package/dist/esm/test/mocks/Datasource.js.map +1 -1
  382. package/dist/esm/test/mocks/Plugin.js +5 -2
  383. package/dist/esm/test/mocks/Plugin.js.map +1 -1
  384. package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
  385. package/dist/esm/test/mocks/utils.js +2 -2
  386. package/dist/esm/test/mocks/utils.js.map +1 -1
  387. package/dist/esm/test-utils.d.ts +1 -1
  388. package/package.json +67 -66
  389. package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +0 -1
  390. package/dist/esm/schema/registry/alertmanager.schema.json.js +0 -77
  391. package/dist/esm/schema/registry/alertmanager.schema.json.js.map +0 -1
  392. package/dist/esm/schema/registry/cloudwatch.schema.json.js +0 -384
  393. package/dist/esm/schema/registry/cloudwatch.schema.json.js.map +0 -1
  394. package/dist/esm/schema/registry/elasticsearch.schema.json.js +0 -287
  395. package/dist/esm/schema/registry/elasticsearch.schema.json.js.map +0 -1
  396. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js +0 -166
  397. package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js.map +0 -1
  398. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js +0 -145
  399. package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js.map +0 -1
  400. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js +0 -123
  401. package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js.map +0 -1
  402. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js +0 -158
  403. package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js.map +0 -1
  404. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js +0 -204
  405. package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js.map +0 -1
  406. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js +0 -294
  407. package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js.map +0 -1
  408. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js +0 -101
  409. package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js.map +0 -1
  410. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js +0 -125
  411. package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js.map +0 -1
  412. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js +0 -508
  413. package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js.map +0 -1
  414. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js +0 -1400
  415. package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js.map +0 -1
  416. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js +0 -302
  417. package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js.map +0 -1
  418. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js +0 -291
  419. package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js.map +0 -1
  420. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js +0 -155
  421. package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js.map +0 -1
  422. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js +0 -179
  423. package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js.map +0 -1
  424. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js +0 -134
  425. package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js.map +0 -1
  426. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js +0 -156
  427. package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js.map +0 -1
  428. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js +0 -84
  429. package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js.map +0 -1
  430. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js +0 -231
  431. package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js.map +0 -1
  432. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js +0 -87
  433. package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js.map +0 -1
  434. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js +0 -159
  435. package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js.map +0 -1
  436. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js +0 -188
  437. package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js.map +0 -1
  438. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js +0 -82
  439. package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js.map +0 -1
  440. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js +0 -278
  441. package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js.map +0 -1
  442. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js +0 -168
  443. package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js.map +0 -1
  444. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js +0 -129
  445. package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js.map +0 -1
  446. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js +0 -56
  447. package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js.map +0 -1
  448. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js +0 -212
  449. package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js.map +0 -1
  450. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js +0 -186
  451. package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js.map +0 -1
  452. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js +0 -85
  453. package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js.map +0 -1
  454. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js +0 -411
  455. package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js.map +0 -1
  456. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js +0 -41
  457. package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js.map +0 -1
  458. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js +0 -201
  459. package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js.map +0 -1
  460. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js +0 -201
  461. package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js.map +0 -1
  462. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js +0 -208
  463. package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js.map +0 -1
  464. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js +0 -94
  465. package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js.map +0 -1
  466. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js +0 -179
  467. package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js.map +0 -1
  468. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js +0 -304
  469. package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js.map +0 -1
  470. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js +0 -319
  471. package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js.map +0 -1
  472. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js +0 -90
  473. package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js.map +0 -1
  474. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js +0 -74
  475. package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js.map +0 -1
  476. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js +0 -102
  477. package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js.map +0 -1
  478. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js +0 -92
  479. package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js.map +0 -1
  480. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js +0 -145
  481. package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js.map +0 -1
  482. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js +0 -80
  483. package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js.map +0 -1
  484. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js +0 -112
  485. package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js.map +0 -1
  486. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js +0 -114
  487. package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js.map +0 -1
  488. package/dist/esm/schema/registry/graphite.schema.json.js +0 -104
  489. package/dist/esm/schema/registry/graphite.schema.json.js.map +0 -1
  490. package/dist/esm/schema/registry/index.js +0 -27
  491. package/dist/esm/schema/registry/index.js.map +0 -1
  492. package/dist/esm/schema/registry/influxdb.schema.json.js +0 -717
  493. package/dist/esm/schema/registry/influxdb.schema.json.js.map +0 -1
  494. package/dist/esm/schema/registry/jaeger.schema.json.js +0 -59
  495. package/dist/esm/schema/registry/jaeger.schema.json.js.map +0 -1
  496. package/dist/esm/schema/registry/loki.schema.json.js +0 -545
  497. package/dist/esm/schema/registry/loki.schema.json.js.map +0 -1
  498. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js +0 -45
  499. package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js.map +0 -1
  500. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js +0 -36
  501. package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js.map +0 -1
  502. package/dist/esm/schema/registry/mssql.schema.json.js +0 -292
  503. package/dist/esm/schema/registry/mssql.schema.json.js.map +0 -1
  504. package/dist/esm/schema/registry/mysql.schema.json.js +0 -304
  505. package/dist/esm/schema/registry/mysql.schema.json.js.map +0 -1
  506. package/dist/esm/schema/registry/opentsdb.schema.json.js +0 -113
  507. package/dist/esm/schema/registry/opentsdb.schema.json.js.map +0 -1
  508. package/dist/esm/schema/registry/prometheus.schema.json.js +0 -783
  509. package/dist/esm/schema/registry/prometheus.schema.json.js.map +0 -1
  510. package/dist/esm/schema/registry/stackdriver.schema.json.js +0 -224
  511. package/dist/esm/schema/registry/stackdriver.schema.json.js.map +0 -1
  512. package/dist/esm/schema/registry/staticRegistry.js +0 -135
  513. package/dist/esm/schema/registry/staticRegistry.js.map +0 -1
  514. package/dist/esm/schema/registry/tempo.schema.json.js +0 -664
  515. package/dist/esm/schema/registry/tempo.schema.json.js.map +0 -1
  516. package/dist/esm/schema/registry/zipkin.schema.json.js +0 -40
  517. package/dist/esm/schema/registry/zipkin.schema.json.js.map +0 -1
  518. /package/dist/esm/components/{QueryEditorRow → QueryEditor}/QueryEditorRow.js +0 -0
@@ -0,0 +1,354 @@
1
+ import { getBackendSrv } from '@grafana/runtime';
2
+ import { formKey } from './config.js';
3
+
4
+ const SECURE_FIELD_CONFIGURED = "__CONFIGURED__";
5
+ function resolveSecureKeyTemplate(template, item, index) {
6
+ return template.replace(/\{index1\}/g, String(index + 1)).replace(/\{index\}/g, String(index)).replace(/\{item\.(\w+)\}/g, (_, key) => {
7
+ var _a;
8
+ return String((_a = item[key]) != null ? _a : "");
9
+ });
10
+ }
11
+ function evaluateItemCondition(condition, item) {
12
+ const trimmed = condition.trim();
13
+ if (trimmed === "true") {
14
+ return true;
15
+ }
16
+ const match = trimmed.match(/^item\.(\w+)\s*==\s*(.+)$/);
17
+ if (!match) {
18
+ return false;
19
+ }
20
+ const [, key, rawValue] = match;
21
+ const actualValue = item[key];
22
+ const expected = rawValue.trim();
23
+ if (expected === "true") {
24
+ return actualValue === true;
25
+ }
26
+ if (expected === "false") {
27
+ return actualValue === false;
28
+ }
29
+ const unquoted = expected.replace(/^['"]|['"]$/g, "");
30
+ return String(actualValue) === unquoted;
31
+ }
32
+ function findActiveSecureOverride(itemFields, item, index) {
33
+ for (const field of itemFields) {
34
+ if (!field.overrides) {
35
+ continue;
36
+ }
37
+ for (const override of field.overrides) {
38
+ if (!override.secureKey) {
39
+ continue;
40
+ }
41
+ if (evaluateItemCondition(override.when, item)) {
42
+ return {
43
+ fieldKey: field.key,
44
+ resolvedKey: resolveSecureKeyTemplate(override.secureKey, item, index)
45
+ };
46
+ }
47
+ }
48
+ }
49
+ return null;
50
+ }
51
+ function patternToRegex(pattern) {
52
+ const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
53
+ return new RegExp("^" + escaped.replace("\\{index\\}", "(\\d+)") + "$");
54
+ }
55
+ function findIndicesForPattern(record, pattern) {
56
+ const re = patternToRegex(pattern);
57
+ const indices = [];
58
+ for (const key of Object.keys(record)) {
59
+ const m = key.match(re);
60
+ if (m) {
61
+ const n = Number(m[1]);
62
+ if (!Number.isNaN(n)) {
63
+ indices.push(n);
64
+ }
65
+ }
66
+ }
67
+ return indices.sort((a, b) => a - b);
68
+ }
69
+ function expandIndexedPair(field, ds) {
70
+ var _a, _b, _c;
71
+ const storage = field.storage;
72
+ if ((storage == null ? void 0 : storage.type) !== "indexedPair" || !storage.key || !storage.value) {
73
+ return [];
74
+ }
75
+ const source = storage.key.target === "jsonData" ? (_a = ds.jsonData) != null ? _a : {} : ds;
76
+ const indices = findIndicesForPattern(source, storage.key.pattern);
77
+ const items = [];
78
+ for (const i of indices) {
79
+ const nameKey = storage.key.pattern.replace("{index}", String(i));
80
+ const valueKey = storage.value.pattern.replace("{index}", String(i));
81
+ const nameVal = source[nameKey];
82
+ if (nameVal === void 0 || nameVal === null) {
83
+ continue;
84
+ }
85
+ const hasValue = storage.value.target === "secureJsonData" ? !!((_b = ds.secureJsonFields) == null ? void 0 : _b[valueKey]) : !!((_c = ds.jsonData) == null ? void 0 : _c[valueKey]);
86
+ items.push({
87
+ index: i,
88
+ name: String(nameVal),
89
+ value: hasValue ? SECURE_FIELD_CONFIGURED : ""
90
+ });
91
+ }
92
+ return items;
93
+ }
94
+ function flattenIndexedPair(field, items, jsonData, secureJsonData, secureJsonFields) {
95
+ var _a;
96
+ const storage = field.storage;
97
+ if ((storage == null ? void 0 : storage.type) !== "indexedPair" || !storage.key || !storage.value) {
98
+ return;
99
+ }
100
+ const existingIndices = new Set(
101
+ storage.key.target === "jsonData" ? findIndicesForPattern(jsonData, storage.key.pattern) : []
102
+ );
103
+ const usedIndices = /* @__PURE__ */ new Set();
104
+ const startIdx = (_a = storage.startIndex) != null ? _a : 1;
105
+ let nextIndex = existingIndices.size > 0 ? Math.max(...existingIndices) + 1 : startIdx;
106
+ for (const item of items) {
107
+ let idx = item.index;
108
+ if (idx === 0) {
109
+ idx = nextIndex++;
110
+ }
111
+ usedIndices.add(idx);
112
+ const nameKey = storage.key.pattern.replace("{index}", String(idx));
113
+ const valueKey = storage.value.pattern.replace("{index}", String(idx));
114
+ if (storage.key.target === "jsonData") {
115
+ jsonData[nameKey] = item.name;
116
+ }
117
+ if (storage.value.target === "secureJsonData") {
118
+ if (item.value === SECURE_FIELD_CONFIGURED) {
119
+ secureJsonFields[valueKey] = true;
120
+ } else if (item.value) {
121
+ secureJsonData[valueKey] = item.value;
122
+ secureJsonFields[valueKey] = false;
123
+ }
124
+ } else if (storage.value.target === "jsonData") {
125
+ jsonData[valueKey] = item.value;
126
+ }
127
+ }
128
+ for (const idx of existingIndices) {
129
+ if (usedIndices.has(idx)) {
130
+ continue;
131
+ }
132
+ const nameKey = storage.key.pattern.replace("{index}", String(idx));
133
+ const valueKey = storage.value.pattern.replace("{index}", String(idx));
134
+ if (storage.key.target === "jsonData") {
135
+ delete jsonData[nameKey];
136
+ }
137
+ if (storage.value.target === "secureJsonData") {
138
+ delete secureJsonFields[valueKey];
139
+ delete secureJsonData[valueKey];
140
+ } else if (storage.value.target === "jsonData") {
141
+ delete jsonData[valueKey];
142
+ }
143
+ }
144
+ }
145
+ function resolveRawPath(ref, ds) {
146
+ var _a;
147
+ const trimmed = ref.trim();
148
+ if (trimmed.startsWith("jsonData.")) {
149
+ return (_a = ds.jsonData) == null ? void 0 : _a[trimmed.slice(9)];
150
+ }
151
+ if (trimmed.startsWith("root.")) {
152
+ return ds[trimmed.slice(5)];
153
+ }
154
+ return void 0;
155
+ }
156
+ async function fetchExistingValues(dsUid, fields) {
157
+ var _a, _b, _c, _d, _e, _f;
158
+ try {
159
+ const ds = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`, void 0, void 0, {
160
+ showErrorAlert: false
161
+ });
162
+ const values = {};
163
+ for (const field of fields) {
164
+ if (((_a = field.storage) == null ? void 0 : _a.type) === "indexedPair") {
165
+ values[field.key] = expandIndexedPair(field, ds);
166
+ continue;
167
+ }
168
+ const fk = formKey(field);
169
+ switch (field.target) {
170
+ case "root":
171
+ if (ds[field.key] !== void 0) {
172
+ values[fk] = ds[field.key];
173
+ }
174
+ break;
175
+ case "jsonData":
176
+ if (field.section) {
177
+ const sectionObj = (_b = ds.jsonData) == null ? void 0 : _b[field.section];
178
+ if ((sectionObj == null ? void 0 : sectionObj[field.key]) !== void 0) {
179
+ values[fk] = sectionObj[field.key];
180
+ }
181
+ } else if (((_c = ds.jsonData) == null ? void 0 : _c[field.key]) !== void 0) {
182
+ values[fk] = ds.jsonData[field.key];
183
+ }
184
+ break;
185
+ case "secureJsonData":
186
+ if ((_d = ds.secureJsonFields) == null ? void 0 : _d[field.key]) {
187
+ values[fk] = SECURE_FIELD_CONFIGURED;
188
+ }
189
+ break;
190
+ }
191
+ if (values[fk] === void 0 && ((_e = field.storage) == null ? void 0 : _e.type) === "computed" && field.storage.read) {
192
+ const fallback = resolveRawPath(field.storage.read, ds);
193
+ if (fallback !== void 0) {
194
+ values[fk] = fallback;
195
+ }
196
+ }
197
+ }
198
+ for (const field of fields) {
199
+ if (field.valueType !== "array" || !((_f = field.item) == null ? void 0 : _f.fields)) {
200
+ continue;
201
+ }
202
+ const itemFields = field.item.fields;
203
+ const hasSecureOverride = itemFields.some((f) => {
204
+ var _a2;
205
+ return (_a2 = f.overrides) == null ? void 0 : _a2.some((o) => o.secureKey);
206
+ });
207
+ if (!hasSecureOverride) {
208
+ continue;
209
+ }
210
+ const fk = formKey(field);
211
+ const arr = values[fk];
212
+ if (!Array.isArray(arr)) {
213
+ continue;
214
+ }
215
+ values[fk] = arr.map((item, idx) => {
216
+ var _a2;
217
+ const match = findActiveSecureOverride(itemFields, item, idx);
218
+ if (match && ((_a2 = ds.secureJsonFields) == null ? void 0 : _a2[match.resolvedKey])) {
219
+ return { ...item, [match.fieldKey]: SECURE_FIELD_CONFIGURED };
220
+ }
221
+ return item;
222
+ });
223
+ }
224
+ return { values, readOnly: !!ds.readOnly };
225
+ } catch (err) {
226
+ const message = err instanceof Error ? err.message : "Failed to load datasource configuration";
227
+ return { values: {}, readOnly: false, error: message };
228
+ }
229
+ }
230
+ function buildDatasourceConfigPayload(data, fields, existing, isFieldVisible) {
231
+ var _a, _b, _c, _d, _e, _f, _g, _h;
232
+ const rootFields = {};
233
+ const jsonData = { ...(_a = existing.jsonData) != null ? _a : {} };
234
+ const secureJsonData = {};
235
+ const secureJsonFields = { ...(_b = existing.secureJsonFields) != null ? _b : {} };
236
+ for (const field of fields) {
237
+ if (((_c = field.storage) == null ? void 0 : _c.type) === "indexedPair") {
238
+ const items = Array.isArray(data[field.key]) ? data[field.key] : [];
239
+ flattenIndexedPair(field, items, jsonData, secureJsonData, secureJsonFields);
240
+ continue;
241
+ }
242
+ const isManagedByEffect = (_d = field.tags) == null ? void 0 : _d.some((t) => t.startsWith("managed-by:"));
243
+ if (!isManagedByEffect && !isFieldVisible(field)) {
244
+ continue;
245
+ }
246
+ const fk = formKey(field);
247
+ const value = data[fk];
248
+ if (field.target === "secureJsonData") {
249
+ if (value === SECURE_FIELD_CONFIGURED) {
250
+ secureJsonFields[field.key] = true;
251
+ continue;
252
+ }
253
+ if (value && value !== "") {
254
+ secureJsonData[field.key] = String(value);
255
+ secureJsonFields[field.key] = false;
256
+ } else {
257
+ secureJsonFields[field.key] = false;
258
+ }
259
+ continue;
260
+ }
261
+ if (value === void 0 || value === "") {
262
+ continue;
263
+ }
264
+ switch (field.target) {
265
+ case "root":
266
+ rootFields[field.key] = value;
267
+ break;
268
+ case "jsonData":
269
+ if (field.section) {
270
+ if (!jsonData[field.section] || typeof jsonData[field.section] !== "object") {
271
+ jsonData[field.section] = {};
272
+ }
273
+ jsonData[field.section][field.key] = value;
274
+ } else {
275
+ jsonData[field.key] = value;
276
+ }
277
+ break;
278
+ }
279
+ }
280
+ for (const field of fields) {
281
+ if (field.valueType !== "array" || !((_e = field.item) == null ? void 0 : _e.fields) || field.target !== "jsonData") {
282
+ continue;
283
+ }
284
+ const itemFields = field.item.fields;
285
+ const hasSecureOverride = itemFields.some((f) => {
286
+ var _a2;
287
+ return (_a2 = f.overrides) == null ? void 0 : _a2.some((o) => o.secureKey);
288
+ });
289
+ if (!hasSecureOverride) {
290
+ continue;
291
+ }
292
+ const arr = field.section ? (_f = jsonData[field.section]) == null ? void 0 : _f[field.key] : jsonData[field.key];
293
+ if (!Array.isArray(arr)) {
294
+ continue;
295
+ }
296
+ const secureKeyOverrides = [];
297
+ for (const f of itemFields) {
298
+ for (const o of (_g = f.overrides) != null ? _g : []) {
299
+ if (o.secureKey) {
300
+ secureKeyOverrides.push({ fieldKey: f.key, override: o });
301
+ }
302
+ }
303
+ }
304
+ const activeSecureKeys = /* @__PURE__ */ new Set();
305
+ for (let i = 0; i < arr.length; i++) {
306
+ const item = arr[i];
307
+ const match = findActiveSecureOverride(itemFields, item, i);
308
+ if (!match) {
309
+ continue;
310
+ }
311
+ const resolvedKey = match.resolvedKey;
312
+ activeSecureKeys.add(resolvedKey);
313
+ const itemValue = item[match.fieldKey];
314
+ if (itemValue === SECURE_FIELD_CONFIGURED) {
315
+ secureJsonFields[resolvedKey] = true;
316
+ } else if (itemValue && itemValue !== "") {
317
+ secureJsonData[resolvedKey] = String(itemValue);
318
+ secureJsonFields[resolvedKey] = false;
319
+ item[match.fieldKey] = "";
320
+ }
321
+ }
322
+ const existingSecureFields = (_h = existing.secureJsonFields) != null ? _h : {};
323
+ for (const existingKey of Object.keys(existingSecureFields)) {
324
+ const couldBeFromThisField = secureKeyOverrides.some((sko) => {
325
+ const staticPrefix = sko.override.secureKey.split("{")[0];
326
+ return staticPrefix && existingKey.startsWith(staticPrefix);
327
+ });
328
+ if (couldBeFromThisField && !activeSecureKeys.has(existingKey)) {
329
+ secureJsonFields[existingKey] = false;
330
+ secureJsonData[existingKey] = "";
331
+ }
332
+ }
333
+ }
334
+ return { rootFields, jsonData, secureJsonData, secureJsonFields };
335
+ }
336
+ async function submitDatasourceConfig(dsUid, data, fields, isFieldVisible) {
337
+ const existing = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`);
338
+ const { rootFields, jsonData, secureJsonData, secureJsonFields } = buildDatasourceConfigPayload(
339
+ data,
340
+ fields,
341
+ existing,
342
+ isFieldVisible
343
+ );
344
+ await getBackendSrv().put(`/api/datasources/uid/${dsUid}`, {
345
+ ...existing,
346
+ ...rootFields,
347
+ jsonData,
348
+ secureJsonData,
349
+ secureJsonFields
350
+ });
351
+ }
352
+
353
+ export { SECURE_FIELD_CONFIGURED, buildDatasourceConfigPayload, expandIndexedPair, fetchExistingValues, findActiveSecureOverride, flattenIndexedPair, resolveSecureKeyTemplate, submitDatasourceConfig };
354
+ //# sourceMappingURL=datasource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasource.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/datasource.ts"],"sourcesContent":["import { getBackendSrv } from '@grafana/runtime';\nimport { formKey } from './config';\nimport type { ConfigField, FieldOverride } from '../../../schema/schema';\n\nexport type DatasourceResponse = Record<string, unknown> & {\n name: string;\n id: number;\n uid: string;\n access?: 'proxy' | 'direct';\n type?: string;\n typeLogoUrl?: string;\n url?: string;\n withCredentials?: boolean;\n basicAuth?: boolean;\n basicAuthUser?: string;\n user?: string;\n database?: string;\n jsonData?: Record<string, unknown>;\n secureJsonFields?: Record<string, boolean>;\n readOnly?: boolean;\n};\n\nexport type DatasourceConfigPayload = {\n rootFields: Record<string, unknown>;\n jsonData: Record<string, unknown>;\n secureJsonData: Record<string, string>;\n secureJsonFields: Record<string, boolean>;\n};\n\nexport type FormValues = Record<string, unknown>;\n\nexport const SECURE_FIELD_CONFIGURED = '__CONFIGURED__';\n\n// ============================================================\n// secureKey helpers for per-item secure routing\n// ============================================================\n\n/**\n * Resolve a secureKey template string by replacing placeholders.\n *\n * Supported placeholders:\n * - `{index}` — 0-based array position\n * - `{index1}` — 1-based array position\n * - `{item.KEY}` — value of sibling field `KEY` in the same item object\n */\nexport function resolveSecureKeyTemplate(template: string, item: Record<string, unknown>, index: number): string {\n return template\n .replace(/\\{index1\\}/g, String(index + 1))\n .replace(/\\{index\\}/g, String(index))\n .replace(/\\{item\\.(\\w+)\\}/g, (_, key) => String(item[key] ?? ''));\n}\n\n/**\n * Evaluate a simple item-scoped condition like `item.secure == true`.\n * Only supports `item.KEY == VALUE` and the literal `true`.\n * Returns false for expressions it cannot evaluate.\n */\nfunction evaluateItemCondition(condition: string, item: Record<string, unknown>): boolean {\n const trimmed = condition.trim();\n if (trimmed === 'true') {\n return true;\n }\n // Match: item.KEY == VALUE (with optional quotes)\n const match = trimmed.match(/^item\\.(\\w+)\\s*==\\s*(.+)$/);\n if (!match) {\n return false;\n }\n const [, key, rawValue] = match;\n const actualValue = item[key];\n // Parse the expected value\n const expected = rawValue.trim();\n if (expected === 'true') {\n return actualValue === true;\n }\n if (expected === 'false') {\n return actualValue === false;\n }\n // String comparison (strip quotes)\n const unquoted = expected.replace(/^['\"]|['\"]$/g, '');\n return String(actualValue) === unquoted;\n}\n\n/**\n * For a given item object at a given index, find the first active secureKey\n * override across all item fields. Returns the resolved secureJsonData key\n * and the item field key whose value should be routed, or null if none active.\n */\nexport function findActiveSecureOverride(\n itemFields: ConfigField[],\n item: Record<string, unknown>,\n index: number\n): { fieldKey: string; resolvedKey: string } | null {\n for (const field of itemFields) {\n if (!field.overrides) {\n continue;\n }\n for (const override of field.overrides) {\n if (!override.secureKey) {\n continue;\n }\n if (evaluateItemCondition(override.when, item)) {\n return {\n fieldKey: field.key,\n resolvedKey: resolveSecureKeyTemplate(override.secureKey, item, index),\n };\n }\n }\n }\n return null;\n}\n\nexport type FetchExistingResult = {\n values: FormValues;\n readOnly: boolean;\n error?: string;\n};\n\n/** Indexed pair item as stored in form values. Each item tracks its original storage index. */\nexport type IndexedPairItem = {\n /** Original storage index (e.g. 1 for httpHeaderName1). 0 = new item, not yet persisted. */\n index: number;\n name: string;\n value: string;\n};\n\n/**\n * Build a RegExp that matches keys produced by a pattern like \"httpHeaderName{index}\"\n * and captures the numeric index.\n */\nfunction patternToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp('^' + escaped.replace('\\\\{index\\\\}', '(\\\\d+)') + '$');\n}\n\n/**\n * Find all numeric indices present in a record for a given pattern.\n * E.g. for pattern \"httpHeaderName{index}\" and keys {httpHeaderName1, httpHeaderName3}\n * returns a sorted array [1, 3].\n */\nfunction findIndicesForPattern(record: Record<string, unknown>, pattern: string): number[] {\n const re = patternToRegex(pattern);\n const indices: number[] = [];\n for (const key of Object.keys(record)) {\n const m = key.match(re);\n if (m) {\n const n = Number(m[1]);\n if (!Number.isNaN(n)) {\n indices.push(n);\n }\n }\n }\n return indices.sort((a, b) => a - b);\n}\n\n/**\n * Expand indexed pair storage (e.g. httpHeaderName1..N / httpHeaderValue1..N)\n * into an array of {index, name, value} items for the form.\n * Each item's `index` tracks its storage position so deletes don't shift others.\n * Scans all keys in the source record to find matching indices — no gap heuristics.\n */\nexport function expandIndexedPair(field: ConfigField, ds: DatasourceResponse): IndexedPairItem[] {\n const storage = field.storage;\n if (storage?.type !== 'indexedPair' || !storage.key || !storage.value) {\n return [];\n }\n const source = storage.key.target === 'jsonData' ? (ds.jsonData ?? {}) : (ds as Record<string, unknown>);\n const indices = findIndicesForPattern(source as Record<string, unknown>, storage.key.pattern);\n const items: IndexedPairItem[] = [];\n for (const i of indices) {\n const nameKey = storage.key.pattern.replace('{index}', String(i));\n const valueKey = storage.value.pattern.replace('{index}', String(i));\n const nameVal = (source as Record<string, unknown>)[nameKey];\n if (nameVal === undefined || nameVal === null) {\n continue;\n }\n const hasValue =\n storage.value.target === 'secureJsonData' ? !!ds.secureJsonFields?.[valueKey] : !!ds.jsonData?.[valueKey];\n items.push({\n index: i,\n name: String(nameVal),\n value: hasValue ? SECURE_FIELD_CONFIGURED : '',\n });\n }\n return items;\n}\n\n/**\n * Flatten an array of indexed pair items back into individual indexed keys\n * for jsonData and secureJsonData.\n */\nexport function flattenIndexedPair(\n field: ConfigField,\n items: IndexedPairItem[],\n jsonData: Record<string, unknown>,\n secureJsonData: Record<string, string>,\n secureJsonFields: Record<string, boolean>\n) {\n const storage = field.storage;\n if (storage?.type !== 'indexedPair' || !storage.key || !storage.value) {\n return;\n }\n // Find all existing storage indices by scanning keys in jsonData.\n const existingIndices = new Set(\n storage.key.target === 'jsonData'\n ? findIndicesForPattern(jsonData as Record<string, unknown>, storage.key.pattern)\n : []\n );\n\n // Track which indices are still in use by the surviving items.\n const usedIndices = new Set<number>();\n const startIdx = storage.startIndex ?? 1;\n let nextIndex = existingIndices.size > 0 ? Math.max(...existingIndices) + 1 : startIdx;\n\n // Write each item at its original index. New items (index === 0) get the next available.\n for (const item of items) {\n let idx = item.index;\n if (idx === 0) {\n idx = nextIndex++;\n }\n usedIndices.add(idx);\n const nameKey = storage.key.pattern.replace('{index}', String(idx));\n const valueKey = storage.value.pattern.replace('{index}', String(idx));\n if (storage.key.target === 'jsonData') {\n jsonData[nameKey] = item.name;\n }\n if (storage.value.target === 'secureJsonData') {\n if (item.value === SECURE_FIELD_CONFIGURED) {\n secureJsonFields[valueKey] = true;\n } else if (item.value) {\n secureJsonData[valueKey] = item.value;\n secureJsonFields[valueKey] = false;\n }\n } else if (storage.value.target === 'jsonData') {\n jsonData[valueKey] = item.value;\n }\n }\n\n // Clear deleted indices: indices that existed before but are no longer in use.\n for (const idx of existingIndices) {\n if (usedIndices.has(idx)) {\n continue;\n }\n const nameKey = storage.key.pattern.replace('{index}', String(idx));\n const valueKey = storage.value.pattern.replace('{index}', String(idx));\n if (storage.key.target === 'jsonData') {\n delete jsonData[nameKey];\n }\n if (storage.value.target === 'secureJsonData') {\n delete secureJsonFields[valueKey];\n delete secureJsonData[valueKey];\n } else if (storage.value.target === 'jsonData') {\n delete jsonData[valueKey];\n }\n }\n}\n\n/**\n * Resolve a dotted storage path against the raw API response.\n * Handles: \"jsonData.server\", \"root.database\", \"secureJsonData.password\"\n */\nfunction resolveRawPath(ref: string, ds: DatasourceResponse): unknown {\n const trimmed = ref.trim();\n if (trimmed.startsWith('jsonData.')) {\n return ds.jsonData?.[trimmed.slice(9)];\n }\n if (trimmed.startsWith('root.')) {\n return (ds as Record<string, unknown>)[trimmed.slice(5)];\n }\n return undefined;\n}\n\nexport async function fetchExistingValues(dsUid: string, fields: ConfigField[]): Promise<FetchExistingResult> {\n try {\n const ds: DatasourceResponse = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`, undefined, undefined, {\n showErrorAlert: false,\n });\n\n const values: FormValues = {};\n for (const field of fields) {\n // Expand indexedPair storage: read httpHeaderName1..N + secureJsonFields httpHeaderValue1..N\n if (field.storage?.type === 'indexedPair') {\n values[field.key] = expandIndexedPair(field, ds);\n continue;\n }\n const fk = formKey(field);\n switch (field.target) {\n case 'root':\n if (ds[field.key] !== undefined) {\n values[fk] = ds[field.key];\n }\n break;\n case 'jsonData':\n // Section-scoped fields are stored nested: jsonData.{section}.{key}\n if (field.section) {\n const sectionObj = ds.jsonData?.[field.section] as Record<string, unknown> | undefined;\n if (sectionObj?.[field.key] !== undefined) {\n values[fk] = sectionObj[field.key];\n }\n } else if (ds.jsonData?.[field.key] !== undefined) {\n values[fk] = ds.jsonData[field.key];\n }\n break;\n case 'secureJsonData':\n if (ds.secureJsonFields?.[field.key]) {\n values[fk] = SECURE_FIELD_CONFIGURED;\n }\n break;\n }\n\n // Fallback: if value is still missing and field has storage.read,\n // resolve the expression against the raw API response.\n if (values[fk] === undefined && field.storage?.type === 'computed' && field.storage.read) {\n const fallback = resolveRawPath(field.storage.read, ds);\n if (fallback !== undefined) {\n values[fk] = fallback;\n }\n }\n }\n\n // Post-process arrays with secureKey overrides: for each item, check\n // whether the item's value is stored in secureJsonFields and mark it.\n for (const field of fields) {\n if (field.valueType !== 'array' || !field.item?.fields) {\n continue;\n }\n const itemFields = field.item.fields;\n const hasSecureOverride = itemFields.some((f) => f.overrides?.some((o) => o.secureKey));\n if (!hasSecureOverride) {\n continue;\n }\n const fk = formKey(field);\n const arr = values[fk];\n if (!Array.isArray(arr)) {\n continue;\n }\n values[fk] = arr.map((item: Record<string, unknown>, idx: number) => {\n const match = findActiveSecureOverride(itemFields, item, idx);\n if (match && ds.secureJsonFields?.[match.resolvedKey]) {\n return { ...item, [match.fieldKey]: SECURE_FIELD_CONFIGURED };\n }\n return item;\n });\n }\n\n return { values, readOnly: !!ds.readOnly };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'Failed to load datasource configuration';\n return { values: {}, readOnly: false, error: message };\n }\n}\n\nexport function buildDatasourceConfigPayload(\n data: FormValues,\n fields: ConfigField[],\n existing: DatasourceResponse,\n isFieldVisible: (field: ConfigField) => boolean\n): DatasourceConfigPayload {\n const rootFields: Record<string, unknown> = {};\n const jsonData: Record<string, unknown> = { ...(existing.jsonData ?? {}) };\n const secureJsonData: Record<string, string> = {};\n const secureJsonFields: Record<string, boolean> = { ...(existing.secureJsonFields ?? {}) };\n\n for (const field of fields) {\n // Flatten indexedPair storage back into individual indexed keys\n if (field.storage?.type === 'indexedPair') {\n const items = Array.isArray(data[field.key]) ? (data[field.key] as IndexedPairItem[]) : [];\n flattenIndexedPair(field, items, jsonData, secureJsonData, secureJsonFields);\n continue;\n }\n\n // Always include fields managed by effects (tagged \"managed-by:*\")\n // even when they're hidden from the UI — their values are set by effects.\n const isManagedByEffect = field.tags?.some((t) => t.startsWith('managed-by:'));\n if (!isManagedByEffect && !isFieldVisible(field)) {\n continue;\n }\n const fk = formKey(field);\n const value = data[fk];\n\n if (field.target === 'secureJsonData') {\n if (value === SECURE_FIELD_CONFIGURED) {\n secureJsonFields[field.key] = true;\n continue;\n }\n if (value && value !== '') {\n secureJsonData[field.key] = String(value);\n secureJsonFields[field.key] = false;\n } else {\n secureJsonFields[field.key] = false;\n }\n continue;\n }\n\n if (value === undefined || value === '') {\n continue;\n }\n switch (field.target) {\n case 'root':\n rootFields[field.key] = value;\n break;\n case 'jsonData':\n // Section-scoped fields write to jsonData.{section}.{key}\n if (field.section) {\n if (!jsonData[field.section] || typeof jsonData[field.section] !== 'object') {\n jsonData[field.section] = {};\n }\n (jsonData[field.section] as Record<string, unknown>)[field.key] = value;\n } else {\n jsonData[field.key] = value;\n }\n break;\n }\n }\n\n // Post-process arrays with secureKey overrides: route values to secureJsonData\n // and clean up stale secure keys from previous saves.\n for (const field of fields) {\n if (field.valueType !== 'array' || !field.item?.fields || field.target !== 'jsonData') {\n continue;\n }\n const itemFields = field.item.fields;\n const hasSecureOverride = itemFields.some((f) => f.overrides?.some((o) => o.secureKey));\n if (!hasSecureOverride) {\n continue;\n }\n const arr = (\n field.section ? (jsonData[field.section] as Record<string, unknown>)?.[field.key] : jsonData[field.key]\n ) as Array<Record<string, unknown>> | undefined;\n if (!Array.isArray(arr)) {\n continue;\n }\n\n // Collect all secureKey patterns from this field's item overrides for cleanup\n const secureKeyOverrides: Array<{ fieldKey: string; override: FieldOverride }> = [];\n for (const f of itemFields) {\n for (const o of f.overrides ?? []) {\n if (o.secureKey) {\n secureKeyOverrides.push({ fieldKey: f.key, override: o });\n }\n }\n }\n\n // Track which secure keys are still active so we can remove stale ones\n const activeSecureKeys = new Set<string>();\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n const match = findActiveSecureOverride(itemFields, item, i);\n if (!match) {\n continue;\n }\n const resolvedKey = match.resolvedKey;\n activeSecureKeys.add(resolvedKey);\n const itemValue = item[match.fieldKey];\n\n if (itemValue === SECURE_FIELD_CONFIGURED) {\n // Value already stored in secureJsonData, keep it\n secureJsonFields[resolvedKey] = true;\n } else if (itemValue && itemValue !== '') {\n // New or updated secret value — route to secureJsonData\n secureJsonData[resolvedKey] = String(itemValue);\n secureJsonFields[resolvedKey] = false;\n // Clear the value from the inline array\n item[match.fieldKey] = '';\n }\n }\n\n // Remove stale secure keys that were previously set but are no longer in the array\n const existingSecureFields = existing.secureJsonFields ?? {};\n for (const existingKey of Object.keys(existingSecureFields)) {\n // Check if this key could have been produced by any of this field's secureKey templates\n const couldBeFromThisField = secureKeyOverrides.some((sko) => {\n // Simple heuristic: check if the existing key starts with the static prefix\n // of the template (everything before the first placeholder)\n const staticPrefix = sko.override.secureKey!.split('{')[0];\n return staticPrefix && existingKey.startsWith(staticPrefix);\n });\n if (couldBeFromThisField && !activeSecureKeys.has(existingKey)) {\n secureJsonFields[existingKey] = false;\n secureJsonData[existingKey] = '';\n }\n }\n }\n\n return { rootFields, jsonData, secureJsonData, secureJsonFields };\n}\n\nexport async function submitDatasourceConfig(\n dsUid: string,\n data: FormValues,\n fields: ConfigField[],\n isFieldVisible: (field: ConfigField) => boolean\n): Promise<void> {\n const existing: DatasourceResponse = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`);\n const { rootFields, jsonData, secureJsonData, secureJsonFields } = buildDatasourceConfigPayload(\n data,\n fields,\n existing,\n isFieldVisible\n );\n\n await getBackendSrv().put(`/api/datasources/uid/${dsUid}`, {\n ...existing,\n ...rootFields,\n jsonData,\n secureJsonData,\n secureJsonFields,\n });\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { formKey, getWatchedValue } from '../config.js';
2
+ import { evaluateCelExpression, extractFieldRefs } from '../cel.js';
3
+ import { isFieldRequired } from '../inputs/fieldUtils.js';
4
+ import { SECURE_FIELD_CONFIGURED } from '../datasource.js';
5
+
6
+ function buildFieldCelContext(fieldById, watchedValues) {
7
+ const ctx = {};
8
+ for (const f of fieldById.values()) {
9
+ const fk = formKey(f);
10
+ const val = getWatchedValue(watchedValues, fk);
11
+ if (val !== void 0) {
12
+ const parts = f.id.split(".");
13
+ let current = ctx;
14
+ for (let i = 0; i < parts.length - 1; i++) {
15
+ if (!(parts[i] in current) || typeof current[parts[i]] !== "object" || current[parts[i]] === null) {
16
+ current[parts[i]] = {};
17
+ }
18
+ current = current[parts[i]];
19
+ }
20
+ current[parts[parts.length - 1]] = val;
21
+ }
22
+ }
23
+ return ctx;
24
+ }
25
+ function isFieldVisible(field, fieldById, celContext) {
26
+ function check(f, visited) {
27
+ var _a;
28
+ if (f.kind === "virtual" && !f.ui) {
29
+ return false;
30
+ }
31
+ if ((_a = f.tags) == null ? void 0 : _a.some((t) => t.startsWith("managed-by:"))) {
32
+ return false;
33
+ }
34
+ if (!f.dependsOn) {
35
+ return true;
36
+ }
37
+ const refs = extractFieldRefs(f.dependsOn);
38
+ for (const ref of refs) {
39
+ const depField = fieldById.get(ref);
40
+ if (depField && !visited.has(depField.id)) {
41
+ visited.add(f.id);
42
+ if (!check(depField, visited)) {
43
+ return false;
44
+ }
45
+ }
46
+ }
47
+ return evaluateCelExpression(f.dependsOn, celContext);
48
+ }
49
+ return check(field, /* @__PURE__ */ new Set());
50
+ }
51
+ function isFieldDisabled(field, celContext) {
52
+ if (!field.disabledWhen) {
53
+ return false;
54
+ }
55
+ return evaluateCelExpression(field.disabledWhen, celContext);
56
+ }
57
+ function isGroupValid(group, args) {
58
+ const { watchedValues, fieldById, celContext, errors, isVisible } = args;
59
+ for (const field of group.fields) {
60
+ if (!isVisible(field)) {
61
+ continue;
62
+ }
63
+ if (errors[formKey(field)]) {
64
+ return false;
65
+ }
66
+ if (isFieldRequired(field, watchedValues, fieldById, celContext)) {
67
+ const val = getWatchedValue(watchedValues, formKey(field));
68
+ if (val === SECURE_FIELD_CONFIGURED) {
69
+ continue;
70
+ }
71
+ if (val === void 0 || val === null || val === "") {
72
+ return false;
73
+ }
74
+ }
75
+ }
76
+ return true;
77
+ }
78
+ function groupHasData(group, watchedValues) {
79
+ for (const field of group.fields) {
80
+ const val = getWatchedValue(watchedValues, formKey(field));
81
+ if (val === void 0 || val === null || val === "" || val === false) {
82
+ continue;
83
+ }
84
+ if (val === field.defaultValue) {
85
+ continue;
86
+ }
87
+ return true;
88
+ }
89
+ return false;
90
+ }
91
+
92
+ export { buildFieldCelContext, groupHasData, isFieldDisabled, isFieldVisible, isGroupValid };
93
+ //# sourceMappingURL=formInterpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formInterpreter.js","sources":["../../../../../../src/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.ts"],"sourcesContent":["/**\n * Pure \"interpreter\" helpers for the datasource config form.\n *\n * These derive UI state (CEL context, field visibility/disabled, group\n * validity/data) purely from a schema snapshot + current form values, with no\n * React or form-library dependency. `useDatasourceConfigForm` wires them into\n * memoized callbacks; keeping them pure makes the logic independently testable.\n */\n\nimport type { ConfigField } from '../../../../schema/schema';\nimport { formKey, getWatchedValue, type ResolvedGroup } from '../config';\nimport { extractFieldRefs, evaluateCelExpression } from '../cel';\nimport { isFieldRequired } from '../inputs/fieldUtils';\nimport { SECURE_FIELD_CONFIGURED } from '../datasource';\n\n/**\n * Build a CEL-compatible nested context from flat watched values + field ID mappings.\n * Field IDs like \"jsonData.auth_method\" become { jsonData: { auth_method: value } }.\n */\nexport function buildFieldCelContext(\n fieldById: Map<string, ConfigField>,\n watchedValues: Record<string, unknown>\n): Record<string, unknown> {\n const ctx: Record<string, unknown> = {};\n for (const f of fieldById.values()) {\n const fk = formKey(f);\n const val = getWatchedValue(watchedValues, fk);\n if (val !== undefined) {\n // Set by field ID path (e.g. \"jsonData.oauth2.oauth2_type\")\n const parts = f.id.split('.');\n let current = ctx as Record<string, unknown>;\n for (let i = 0; i < parts.length - 1; i++) {\n if (!(parts[i] in current) || typeof current[parts[i]] !== 'object' || current[parts[i]] === null) {\n current[parts[i]] = {};\n }\n current = current[parts[i]] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = val;\n }\n }\n return ctx;\n}\n\n/**\n * Whether a field should be shown. Hidden when it's a virtual field without UI,\n * managed by an effect, or its (transitive) `dependsOn` chain evaluates falsy.\n */\nexport function isFieldVisible(\n field: ConfigField,\n fieldById: Map<string, ConfigField>,\n celContext: Record<string, unknown>\n): boolean {\n // Inner recursive helper with a visited set to guard against circular deps.\n function check(f: ConfigField, visited: Set<string>): boolean {\n if (f.kind === 'virtual' && !f.ui) {\n return false;\n }\n if (f.tags?.some((t) => t.startsWith('managed-by:'))) {\n return false;\n }\n if (!f.dependsOn) {\n return true;\n }\n\n // Transitive visibility: all referenced dependency fields must themselves be visible.\n const refs = extractFieldRefs(f.dependsOn);\n for (const ref of refs) {\n const depField = fieldById.get(ref);\n if (depField && !visited.has(depField.id)) {\n visited.add(f.id);\n if (!check(depField, visited)) {\n return false;\n }\n }\n }\n\n // Evaluate the full CEL expression\n return evaluateCelExpression(f.dependsOn, celContext);\n }\n return check(field, new Set<string>());\n}\n\n/** Whether a field is currently disabled via its `disabledWhen` CEL expression. */\nexport function isFieldDisabled(field: ConfigField, celContext: Record<string, unknown>): boolean {\n if (!field.disabledWhen) {\n return false;\n }\n return evaluateCelExpression(field.disabledWhen, celContext);\n}\n\n/** Check whether all visible required fields in a group have a value (and no errors). */\nexport function isGroupValid(\n group: ResolvedGroup,\n args: {\n watchedValues: Record<string, unknown>;\n fieldById: Map<string, ConfigField>;\n celContext: Record<string, unknown>;\n errors: Record<string, unknown>;\n isVisible: (field: ConfigField) => boolean;\n }\n): boolean {\n const { watchedValues, fieldById, celContext, errors, isVisible } = args;\n for (const field of group.fields) {\n if (!isVisible(field)) {\n continue;\n }\n if (errors[formKey(field)]) {\n return false;\n }\n if (isFieldRequired(field, watchedValues, fieldById, celContext)) {\n const val = getWatchedValue(watchedValues, formKey(field));\n if (val === SECURE_FIELD_CONFIGURED) {\n continue;\n }\n if (val === undefined || val === null || val === '') {\n return false;\n }\n }\n }\n return true;\n}\n\n/** Whether a group has any field with a non-default, non-empty value. */\nexport function groupHasData(group: ResolvedGroup, watchedValues: Record<string, unknown>): boolean {\n for (const field of group.fields) {\n const val = getWatchedValue(watchedValues, formKey(field));\n if (val === undefined || val === null || val === '' || val === false) {\n continue;\n }\n if (val === field.defaultValue) {\n continue;\n }\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":"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"}