@grafana/scenes 6.7.0 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
  3. package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
  4. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
  5. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
  6. package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
  7. package/dist/esm/dist/esm/components/NestedScene.js +95 -0
  8. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
  9. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
  10. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
  11. package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
  12. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
  13. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
  14. package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
  15. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
  16. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
  17. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
  18. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
  19. package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
  20. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
  21. package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
  22. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
  23. package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
  24. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
  25. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
  26. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
  27. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
  28. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  29. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  30. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
  31. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  32. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  33. package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
  34. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
  35. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
  36. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
  37. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  38. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
  39. package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
  40. package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
  41. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
  42. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
  43. package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
  44. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
  45. package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
  46. package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
  47. package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
  48. package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
  49. package/dist/esm/dist/esm/core/events.js +11 -0
  50. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
  51. package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
  52. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
  53. package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
  54. package/dist/esm/dist/esm/core/types.js +15 -0
  55. package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
  56. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
  57. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
  58. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
  59. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
  60. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
  61. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
  62. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
  63. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
  64. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  65. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
  66. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  67. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  68. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
  69. package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
  70. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
  71. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
  72. package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
  73. package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
  74. package/dist/esm/dist/esm/services/utils.js +71 -0
  75. package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
  76. package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
  77. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  78. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  79. package/dist/esm/dist/esm/utils/date.js +15 -0
  80. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
  81. package/dist/esm/dist/esm/utils/explore.js +47 -0
  82. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
  83. package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
  84. package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
  85. package/dist/esm/dist/esm/utils/metricTree.js +53 -0
  86. package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
  87. package/dist/esm/dist/esm/utils/utils.js +11 -0
  88. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
  89. package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
  90. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
  91. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
  92. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
  93. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
  94. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  95. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  96. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  97. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  98. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  99. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  104. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  105. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
  106. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
  107. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
  108. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
  109. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
  110. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
  111. package/dist/esm/dist/esm/variables/constants.js +9 -0
  112. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
  113. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
  114. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  115. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  116. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
  117. package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
  118. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  119. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
  120. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
  121. package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
  122. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
  123. package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
  124. package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
  125. package/dist/esm/dist/esm/variables/macros/index.js +26 -0
  126. package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
  127. package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
  128. package/dist/esm/dist/esm/variables/macros/types.js +11 -0
  129. package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
  130. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
  131. package/dist/esm/dist/esm/variables/types.js +11 -0
  132. package/dist/esm/dist/esm/variables/utils.js +172 -0
  133. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
  134. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
  135. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
  136. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
  137. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
  138. package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
  139. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
  140. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
  141. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
  142. package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
  143. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
  144. package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
  145. package/dist/esm/index.js +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/querying/DataProviderSharer.js +39 -0
  148. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
  149. package/dist/esm/src/behaviors/CursorSync.js +76 -0
  150. package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
  151. package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
  152. package/dist/esm/src/behaviors/index.js +5 -0
  153. package/dist/esm/src/components/EmbeddedScene.js +59 -0
  154. package/dist/esm/src/components/NestedScene.js +95 -0
  155. package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
  156. package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
  157. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
  158. package/dist/esm/src/components/SceneApp/utils.js +42 -0
  159. package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
  160. package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
  161. package/dist/esm/src/components/SceneCanvasText.js +32 -0
  162. package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
  163. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
  164. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
  165. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
  166. package/dist/esm/src/components/SceneReactObject.js +34 -0
  167. package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
  168. package/dist/esm/src/components/SceneTimePicker.js +139 -0
  169. package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
  170. package/dist/esm/src/components/SceneToolbarButton.js +33 -0
  171. package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
  172. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
  173. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
  174. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
  175. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  176. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  177. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
  178. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  179. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  180. package/dist/esm/src/components/layout/LazyLoader.js +103 -0
  181. package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
  182. package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
  183. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
  184. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  185. package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
  186. package/dist/esm/src/components/layout/grid/constants.js +7 -0
  187. package/dist/esm/src/components/layout/grid/utils.js +36 -0
  188. package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
  189. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
  190. package/dist/esm/src/components/layout/split/Splitter.js +386 -0
  191. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
  192. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
  193. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
  194. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
  195. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
  196. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
  197. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
  198. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
  199. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
  200. package/dist/esm/src/core/PanelBuilders/index.js +116 -0
  201. package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
  202. package/dist/esm/src/core/SceneDataNode.js +43 -0
  203. package/dist/esm/src/core/SceneObjectBase.js +286 -0
  204. package/dist/esm/src/core/SceneObjectRef.js +32 -0
  205. package/dist/esm/src/core/SceneTimeRange.js +231 -0
  206. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
  207. package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
  208. package/dist/esm/src/core/events.js +11 -0
  209. package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
  210. package/dist/esm/src/core/sceneGraph/index.js +25 -0
  211. package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
  212. package/dist/esm/src/core/sceneGraph/utils.js +64 -0
  213. package/dist/esm/src/core/types.js +15 -0
  214. package/dist/esm/src/index.js +108 -0
  215. package/dist/esm/src/querying/DataLayersMerger.js +46 -0
  216. package/dist/esm/src/querying/DataProviderProxy.js +37 -0
  217. package/dist/esm/src/querying/DataProviderSharer.js +108 -0
  218. package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
  219. package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
  220. package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
  221. package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
  222. package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
  223. package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
  224. package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
  225. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
  226. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
  227. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  228. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
  229. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  230. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  231. package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
  232. package/dist/esm/src/querying/layers/index.js +2 -0
  233. package/dist/esm/src/querying/registerQueryWithController.js +41 -0
  234. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
  235. package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
  236. package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
  237. package/dist/esm/src/services/UrlSyncManager.js +167 -0
  238. package/dist/esm/src/services/useUrlSync.js +29 -0
  239. package/dist/esm/src/services/utils.js +75 -0
  240. package/dist/esm/src/utils/ControlsLabel.js +107 -0
  241. package/dist/esm/src/utils/LoadingIndicator.js +19 -0
  242. package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
  243. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  244. package/dist/esm/src/utils/date.js +15 -0
  245. package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
  246. package/dist/esm/src/utils/explore.js +47 -0
  247. package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
  248. package/dist/esm/src/utils/getDataSource.js +18 -0
  249. package/dist/esm/src/utils/getMessageFromError.js +24 -0
  250. package/dist/esm/src/utils/metricTree.js +53 -0
  251. package/dist/esm/src/utils/parseUrlParam.js +41 -0
  252. package/dist/esm/src/utils/utils.js +11 -0
  253. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
  254. package/dist/esm/src/utils/writeSceneLog.js +12 -0
  255. package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
  256. package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
  257. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
  258. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
  259. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  260. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  261. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  262. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  263. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  264. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  269. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  270. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
  271. package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
  272. package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
  273. package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
  274. package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
  275. package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
  276. package/dist/esm/src/variables/constants.js +9 -0
  277. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
  278. package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
  279. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  280. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  281. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
  282. package/dist/esm/src/variables/interpolation/defaults.js +21 -0
  283. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
  284. package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
  285. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
  286. package/dist/esm/src/variables/lookupVariable.js +20 -0
  287. package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
  288. package/dist/esm/src/variables/macros/contextMacros.js +43 -0
  289. package/dist/esm/src/variables/macros/dataMacros.js +134 -0
  290. package/dist/esm/src/variables/macros/index.js +35 -0
  291. package/dist/esm/src/variables/macros/templateProxies.js +51 -0
  292. package/dist/esm/src/variables/macros/timeMacros.js +86 -0
  293. package/dist/esm/src/variables/macros/types.js +11 -0
  294. package/dist/esm/src/variables/macros/urlMacros.js +56 -0
  295. package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
  296. package/dist/esm/src/variables/types.js +11 -0
  297. package/dist/esm/src/variables/utils.js +172 -0
  298. package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
  299. package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
  300. package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
  301. package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
  302. package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
  303. package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
  304. package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
  305. package/dist/esm/src/variables/variants/TestVariable.js +117 -0
  306. package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
  307. package/dist/esm/src/variables/variants/guards.js +27 -0
  308. package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
  309. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
  310. package/dist/esm/src/variables/variants/query/guards.js +28 -0
  311. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
  312. package/dist/esm/src/variables/variants/query/utils.js +124 -0
  313. package/dist/esm/variables/components/VariableValueSelect.js +13 -9
  314. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  315. package/dist/esm/variables/variants/ConstantVariable.js +22 -0
  316. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  317. package/dist/esm/variables/variants/CustomVariable.js +3 -2
  318. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  319. package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
  320. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  321. package/dist/esm/variables/variants/JsonVariable.js +96 -0
  322. package/dist/esm/variables/variants/TestVariable.js +3 -2
  323. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  324. package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
  325. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
  326. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  327. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  328. package/dist/index.d.ts +14 -6
  329. package/dist/index.js +35 -13
  330. package/dist/index.js.map +1 -1
  331. package/package.json +2 -2
@@ -0,0 +1,139 @@
1
+ import { lastValueFrom, of, from, mergeMap, filter, take, throwError, catchError } from 'rxjs';
2
+ import { v4 } from 'uuid';
3
+ import { VariableRefresh, VariableSort, LoadingState, CoreApp } from '@grafana/data';
4
+ import { sceneGraph } from '../../../core/sceneGraph/index.js';
5
+ import { VariableDependencyConfig } from '../../VariableDependencyConfig.js';
6
+ import { renderSelectForVariable } from '../../components/VariableValueSelect.js';
7
+ import { MultiValueVariable } from '../MultiValueVariable.js';
8
+ import { createQueryVariableRunner } from './createQueryVariableRunner.js';
9
+ import { metricNamesToVariableValues } from './utils.js';
10
+ import { toMetricFindValues } from './toMetricFindValues.js';
11
+ import { getDataSource } from '../../../utils/getDataSource.js';
12
+ import { safeStringifyValue } from '../../utils.js';
13
+ import { SEARCH_FILTER_VARIABLE } from '../../constants.js';
14
+ import { debounce } from 'lodash';
15
+ import { registerQueryWithController } from '../../../querying/registerQueryWithController.js';
16
+ import { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject.js';
17
+
18
+ var __defProp = Object.defineProperty;
19
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
20
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
21
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
22
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
23
+ var __spreadValues = (a, b) => {
24
+ for (var prop in b || (b = {}))
25
+ if (__hasOwnProp.call(b, prop))
26
+ __defNormalProp(a, prop, b[prop]);
27
+ if (__getOwnPropSymbols)
28
+ for (var prop of __getOwnPropSymbols(b)) {
29
+ if (__propIsEnum.call(b, prop))
30
+ __defNormalProp(a, prop, b[prop]);
31
+ }
32
+ return a;
33
+ };
34
+ class QueryVariable extends MultiValueVariable {
35
+ constructor(initialState) {
36
+ super(__spreadValues({
37
+ type: "query",
38
+ name: "",
39
+ value: "",
40
+ text: "",
41
+ options: [],
42
+ datasource: null,
43
+ regex: "",
44
+ query: "",
45
+ refresh: VariableRefresh.onDashboardLoad,
46
+ sort: VariableSort.disabled
47
+ }, initialState));
48
+ this._variableDependency = new VariableDependencyConfig(this, {
49
+ statePaths: ["regex", "query", "datasource"]
50
+ });
51
+ this.onSearchChange = (searchFilter) => {
52
+ if (!containsSearchFilter(this.state.query)) {
53
+ return;
54
+ }
55
+ this._updateOptionsBasedOnSearchFilter(searchFilter);
56
+ };
57
+ this._updateOptionsBasedOnSearchFilter = debounce(async (searchFilter) => {
58
+ const result = await lastValueFrom(this.getValueOptions({ searchFilter }));
59
+ this.setState({ options: result, loading: false });
60
+ }, 400);
61
+ }
62
+ getValueOptions(args) {
63
+ if (!this.state.query) {
64
+ return of([]);
65
+ }
66
+ this.setState({ loading: true, error: null });
67
+ return from(
68
+ getDataSource(this.state.datasource, {
69
+ __sceneObject: wrapInSafeSerializableSceneObject(this)
70
+ })
71
+ ).pipe(
72
+ mergeMap((ds) => {
73
+ const runner = createQueryVariableRunner(ds);
74
+ const target = runner.getTarget(this);
75
+ const request = this.getRequest(target, args.searchFilter);
76
+ return runner.runRequest({ variable: this, searchFilter: args.searchFilter }, request).pipe(
77
+ registerQueryWithController({
78
+ type: "variable",
79
+ request,
80
+ origin: this
81
+ }),
82
+ filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error),
83
+ take(1),
84
+ mergeMap((data) => {
85
+ if (data.state === LoadingState.Error) {
86
+ return throwError(() => data.error);
87
+ }
88
+ return of(data);
89
+ }),
90
+ toMetricFindValues(),
91
+ mergeMap((values) => {
92
+ let regex = "";
93
+ if (this.state.regex) {
94
+ regex = sceneGraph.interpolate(this, this.state.regex, void 0, "regex");
95
+ }
96
+ return of(metricNamesToVariableValues(regex, this.state.sort, values));
97
+ }),
98
+ catchError((error) => {
99
+ if (error.cancelled) {
100
+ return of([]);
101
+ }
102
+ return throwError(() => error);
103
+ })
104
+ );
105
+ })
106
+ );
107
+ }
108
+ getRequest(target, searchFilter) {
109
+ const scopedVars = {
110
+ __sceneObject: wrapInSafeSerializableSceneObject(this)
111
+ };
112
+ if (searchFilter) {
113
+ scopedVars.__searchFilter = { value: searchFilter, text: searchFilter };
114
+ }
115
+ const range = sceneGraph.getTimeRange(this).state.value;
116
+ const request = {
117
+ app: CoreApp.Dashboard,
118
+ requestId: v4(),
119
+ timezone: "",
120
+ range,
121
+ interval: "",
122
+ intervalMs: 0,
123
+ targets: [target],
124
+ scopedVars,
125
+ startTime: Date.now()
126
+ };
127
+ return request;
128
+ }
129
+ }
130
+ QueryVariable.Component = ({ model }) => {
131
+ return renderSelectForVariable(model);
132
+ };
133
+ function containsSearchFilter(query) {
134
+ const str = safeStringifyValue(query);
135
+ return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
136
+ }
137
+
138
+ export { QueryVariable };
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlWYXJpYWJsZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3ZhcmlhYmxlcy92YXJpYW50cy9xdWVyeS9RdWVyeVZhcmlhYmxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgZmlsdGVyLCB0YWtlLCBtZXJnZU1hcCwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciwgZnJvbSwgbGFzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7XG4gIENvcmVBcHAsXG4gIERhdGFRdWVyeVJlcXVlc3QsXG4gIExvYWRpbmdTdGF0ZSxcbiAgUGFuZWxEYXRhLFxuICBTY29wZWRWYXJzLFxuICBWYXJpYWJsZVJlZnJlc2gsXG4gIFZhcmlhYmxlU29ydCxcbn0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5cbmltcG9ydCB7IHNjZW5lR3JhcGggfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NjZW5lR3JhcGgnO1xuaW1wb3J0IHsgU2NlbmVDb21wb25lbnRQcm9wcywgU2NlbmVEYXRhUXVlcnkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IFZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZyB9IGZyb20gJy4uLy4uL1ZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZyc7XG5pbXBvcnQgeyByZW5kZXJTZWxlY3RGb3JWYXJpYWJsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvVmFyaWFibGVWYWx1ZVNlbGVjdCc7XG5pbXBvcnQgeyBWYXJpYWJsZVZhbHVlT3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgTXVsdGlWYWx1ZVZhcmlhYmxlLCBNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZSwgVmFyaWFibGVHZXRPcHRpb25zQXJncyB9IGZyb20gJy4uL011bHRpVmFsdWVWYXJpYWJsZSc7XG5cbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXIgfSBmcm9tICcuL2NyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXInO1xuaW1wb3J0IHsgbWV0cmljTmFtZXNUb1ZhcmlhYmxlVmFsdWVzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB0b01ldHJpY0ZpbmRWYWx1ZXMgfSBmcm9tICcuL3RvTWV0cmljRmluZFZhbHVlcyc7XG5pbXBvcnQgeyBnZXREYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZ2V0RGF0YVNvdXJjZSc7XG5pbXBvcnQgeyBzYWZlU3RyaW5naWZ5VmFsdWUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBEYXRhUXVlcnksIERhdGFTb3VyY2VSZWYgfSBmcm9tICdAZ3JhZmFuYS9zY2hlbWEnO1xuaW1wb3J0IHsgU0VBUkNIX0ZJTFRFUl9WQVJJQUJMRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyByZWdpc3RlclF1ZXJ5V2l0aENvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi8uLi9xdWVyeWluZy9yZWdpc3RlclF1ZXJ5V2l0aENvbnRyb2xsZXInO1xuaW1wb3J0IHsgd3JhcEluU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvd3JhcEluU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVZhcmlhYmxlU3RhdGUgZXh0ZW5kcyBNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZSB7XG4gIHR5cGU6ICdxdWVyeSc7XG4gIGRhdGFzb3VyY2U6IERhdGFTb3VyY2VSZWYgfCBudWxsO1xuICBxdWVyeTogc3RyaW5nIHwgU2NlbmVEYXRhUXVlcnk7XG4gIHJlZ2V4OiBzdHJpbmc7XG4gIHJlZnJlc2g6IFZhcmlhYmxlUmVmcmVzaDtcbiAgc29ydDogVmFyaWFibGVTb3J0O1xuICAvKiogQGludGVybmFsIE9ubHkgZm9yIHVzZSBpbnNpZGUgY29yZSBkYXNoYm9hcmRzICovXG4gIGRlZmluaXRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVZhcmlhYmxlIGV4dGVuZHMgTXVsdGlWYWx1ZVZhcmlhYmxlPFF1ZXJ5VmFyaWFibGVTdGF0ZT4ge1xuICBwcm90ZWN0ZWQgX3ZhcmlhYmxlRGVwZW5kZW5jeSA9IG5ldyBWYXJpYWJsZURlcGVuZGVuY3lDb25maWcodGhpcywge1xuICAgIHN0YXRlUGF0aHM6IFsncmVnZXgnLCAncXVlcnknLCAnZGF0YXNvdXJjZSddLFxuICB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFF1ZXJ5VmFyaWFibGVTdGF0ZT4pIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAncXVlcnknLFxuICAgICAgbmFtZTogJycsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgZGF0YXNvdXJjZTogbnVsbCxcbiAgICAgIHJlZ2V4OiAnJyxcbiAgICAgIHF1ZXJ5OiAnJyxcbiAgICAgIHJlZnJlc2g6IFZhcmlhYmxlUmVmcmVzaC5vbkRhc2hib2FyZExvYWQsXG4gICAgICBzb3J0OiBWYXJpYWJsZVNvcnQuZGlzYWJsZWQsXG4gICAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWVPcHRpb25zKGFyZ3M6IFZhcmlhYmxlR2V0T3B0aW9uc0FyZ3MpOiBPYnNlcnZhYmxlPFZhcmlhYmxlVmFsdWVPcHRpb25bXT4ge1xuICAgIGlmICghdGhpcy5zdGF0ZS5xdWVyeSkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwgfSk7XG5cbiAgICByZXR1cm4gZnJvbShcbiAgICAgIGdldERhdGFTb3VyY2UodGhpcy5zdGF0ZS5kYXRhc291cmNlLCB7XG4gICAgICAgIF9fc2NlbmVPYmplY3Q6IHdyYXBJblNhZmVTZXJpYWxpemFibGVTY2VuZU9iamVjdCh0aGlzKSxcbiAgICAgIH0pXG4gICAgKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKGRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1bm5lciA9IGNyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXIoZHMpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBydW5uZXIuZ2V0VGFyZ2V0KHRoaXMpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5nZXRSZXF1ZXN0KHRhcmdldCwgYXJncy5zZWFyY2hGaWx0ZXIpO1xuXG4gICAgICAgIHJldHVybiBydW5uZXIucnVuUmVxdWVzdCh7IHZhcmlhYmxlOiB0aGlzLCBzZWFyY2hGaWx0ZXI6IGFyZ3Muc2VhcmNoRmlsdGVyIH0sIHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgcmVnaXN0ZXJRdWVyeVdpdGhDb250cm9sbGVyKHtcbiAgICAgICAgICAgIHR5cGU6ICd2YXJpYWJsZScsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZpbHRlcigoZGF0YSkgPT4gZGF0YS5zdGF0ZSA9PT0gTG9hZGluZ1N0YXRlLkRvbmUgfHwgZGF0YS5zdGF0ZSA9PT0gTG9hZGluZ1N0YXRlLkVycm9yKSwgLy8gd2Ugb25seSBjYXJlIGFib3V0IGRvbmUgb3IgZXJyb3IgZm9yIG5vd1xuICAgICAgICAgIHRha2UoMSksIC8vIHRha2UgdGhlIGZpcnN0IHJlc3VsdCwgdXNpbmcgZmlyc3QgY2F1c2VkIGEgYnVnIHdoZXJlIGl0IGluIHNvbWUgc2l0dWF0aW9ucyB0aHJvdyBhbiB1bmNhdWdodCBlcnJvciBiZWNhdXNlIG9mIG5vIHJlc3VsdHMgaGFkIGJlZW4gcmVjZWl2ZWQgeWV0XG4gICAgICAgICAgbWVyZ2VNYXAoKGRhdGE6IFBhbmVsRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEuc3RhdGUgPT09IExvYWRpbmdTdGF0ZS5FcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBkYXRhLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0b01ldHJpY0ZpbmRWYWx1ZXMoKSxcbiAgICAgICAgICBtZXJnZU1hcCgodmFsdWVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVnZXggPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnJlZ2V4KSB7XG4gICAgICAgICAgICAgIHJlZ2V4ID0gc2NlbmVHcmFwaC5pbnRlcnBvbGF0ZSh0aGlzLCB0aGlzLnN0YXRlLnJlZ2V4LCB1bmRlZmluZWQsICdyZWdleCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKG1ldHJpY05hbWVzVG9WYXJpYWJsZVZhbHVlcyhyZWdleCwgdGhpcy5zdGF0ZS5zb3J0LCB2YWx1ZXMpKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlcXVlc3QodGFyZ2V0OiBEYXRhUXVlcnkgfCBzdHJpbmcsIHNlYXJjaEZpbHRlcj86IHN0cmluZykge1xuICAgIGNvbnN0IHNjb3BlZFZhcnM6IFNjb3BlZFZhcnMgPSB7XG4gICAgICBfX3NjZW5lT2JqZWN0OiB3cmFwSW5TYWZlU2VyaWFsaXphYmxlU2NlbmVPYmplY3QodGhpcyksXG4gICAgfTtcblxuICAgIGlmIChzZWFyY2hGaWx0ZXIpIHtcbiAgICAgIHNjb3BlZFZhcnMuX19zZWFyY2hGaWx0ZXIgPSB7IHZhbHVlOiBzZWFyY2hGaWx0ZXIsIHRleHQ6IHNlYXJjaEZpbHRlciB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gc2NlbmVHcmFwaC5nZXRUaW1lUmFuZ2UodGhpcykuc3RhdGUudmFsdWU7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBEYXRhUXVlcnlSZXF1ZXN0ID0ge1xuICAgICAgYXBwOiBDb3JlQXBwLkRhc2hib2FyZCxcbiAgICAgIHJlcXVlc3RJZDogdXVpZHY0KCksXG4gICAgICB0aW1lem9uZTogJycsXG4gICAgICByYW5nZSxcbiAgICAgIGludGVydmFsOiAnJyxcbiAgICAgIGludGVydmFsTXM6IDAsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0YXJnZXRzOiBbdGFyZ2V0XSxcbiAgICAgIHNjb3BlZFZhcnMsXG4gICAgICBzdGFydFRpbWU6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgb25TZWFyY2hDaGFuZ2UgPSAoc2VhcmNoRmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5zU2VhcmNoRmlsdGVyKHRoaXMuc3RhdGUucXVlcnkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlT3B0aW9uc0Jhc2VkT25TZWFyY2hGaWx0ZXIoc2VhcmNoRmlsdGVyKTtcbiAgfTtcblxuICBwcml2YXRlIF91cGRhdGVPcHRpb25zQmFzZWRPblNlYXJjaEZpbHRlciA9IGRlYm91bmNlKGFzeW5jIChzZWFyY2hGaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy5nZXRWYWx1ZU9wdGlvbnMoeyBzZWFyY2hGaWx0ZXIgfSkpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBvcHRpb25zOiByZXN1bHQsIGxvYWRpbmc6IGZhbHNlIH0pO1xuICB9LCA0MDApO1xuXG4gIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50ID0gKHsgbW9kZWwgfTogU2NlbmVDb21wb25lbnRQcm9wczxNdWx0aVZhbHVlVmFyaWFibGU+KSA9PiB7XG4gICAgcmV0dXJuIHJlbmRlclNlbGVjdEZvclZhcmlhYmxlKG1vZGVsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNTZWFyY2hGaWx0ZXIocXVlcnk6IHN0cmluZyB8IERhdGFRdWVyeSkge1xuICBjb25zdCBzdHIgPSBzYWZlU3RyaW5naWZ5VmFsdWUocXVlcnkpO1xuICByZXR1cm4gc3RyLmluZGV4T2YoU0VBUkNIX0ZJTFRFUl9WQVJJQUJMRSkgPiAtMTtcbn1cbiJdLCJuYW1lcyI6WyJ1dWlkdjQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBDTyxNQUFNLHNCQUFzQixrQkFBdUMsQ0FBQTtBQUFBLEVBS2pFLFlBQVksWUFBMkMsRUFBQTtBQUM1RCxJQUFNLEtBQUEsQ0FBQSxjQUFBLENBQUE7QUFBQSxNQUNKLElBQU0sRUFBQSxPQUFBO0FBQUEsTUFDTixJQUFNLEVBQUEsRUFBQTtBQUFBLE1BQ04sS0FBTyxFQUFBLEVBQUE7QUFBQSxNQUNQLElBQU0sRUFBQSxFQUFBO0FBQUEsTUFDTixTQUFTLEVBQUM7QUFBQSxNQUNWLFVBQVksRUFBQSxJQUFBO0FBQUEsTUFDWixLQUFPLEVBQUEsRUFBQTtBQUFBLE1BQ1AsS0FBTyxFQUFBLEVBQUE7QUFBQSxNQUNQLFNBQVMsZUFBZ0IsQ0FBQSxlQUFBO0FBQUEsTUFDekIsTUFBTSxZQUFhLENBQUEsUUFBQTtBQUFBLEtBQUEsRUFDaEIsWUFDSixDQUFBLENBQUEsQ0FBQTtBQWpCSCxJQUFVLElBQUEsQ0FBQSxtQkFBQSxHQUFzQixJQUFJLHdCQUFBLENBQXlCLElBQU0sRUFBQTtBQUFBLE1BQ2pFLFVBQVksRUFBQSxDQUFDLE9BQVMsRUFBQSxPQUFBLEVBQVMsWUFBWSxDQUFBO0FBQUEsS0FDNUMsQ0FB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
@@ -0,0 +1,129 @@
1
+ import { from, mergeMap, of } from 'rxjs';
2
+ import { LoadingState, getDefaultTimeRange } from '@grafana/data';
3
+ import { getRunRequest } from '@grafana/runtime';
4
+ import { hasStandardVariableSupport, hasLegacyVariableSupport, hasCustomVariableSupport } from './guards.js';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __defProps = Object.defineProperties;
8
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
9
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ class StandardQueryRunner {
26
+ constructor(datasource, _runRequest = getRunRequest()) {
27
+ this.datasource = datasource;
28
+ this._runRequest = _runRequest;
29
+ }
30
+ getTarget(variable) {
31
+ if (hasStandardVariableSupport(this.datasource)) {
32
+ return this.datasource.variables.toDataQuery(ensureVariableQueryModelIsADataQuery(variable));
33
+ }
34
+ throw new Error("Couldn't create a target with supplied arguments.");
35
+ }
36
+ runRequest(_, request) {
37
+ if (!hasStandardVariableSupport(this.datasource)) {
38
+ return getEmptyMetricFindValueObservable();
39
+ }
40
+ if (!this.datasource.variables.query) {
41
+ return this._runRequest(this.datasource, request);
42
+ }
43
+ return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));
44
+ }
45
+ }
46
+ class LegacyQueryRunner {
47
+ constructor(datasource) {
48
+ this.datasource = datasource;
49
+ }
50
+ getTarget(variable) {
51
+ if (hasLegacyVariableSupport(this.datasource)) {
52
+ return variable.state.query;
53
+ }
54
+ throw new Error("Couldn't create a target with supplied arguments.");
55
+ }
56
+ runRequest({ variable, searchFilter }, request) {
57
+ if (!hasLegacyVariableSupport(this.datasource)) {
58
+ return getEmptyMetricFindValueObservable();
59
+ }
60
+ return from(
61
+ this.datasource.metricFindQuery(variable.state.query, __spreadProps(__spreadValues({}, request), {
62
+ variable: {
63
+ name: variable.state.name,
64
+ type: variable.state.type
65
+ },
66
+ searchFilter
67
+ }))
68
+ ).pipe(
69
+ mergeMap((values) => {
70
+ if (!values || !values.length) {
71
+ return getEmptyMetricFindValueObservable();
72
+ }
73
+ const series = values;
74
+ return of({ series, state: LoadingState.Done, timeRange: request.range });
75
+ })
76
+ );
77
+ }
78
+ }
79
+ class CustomQueryRunner {
80
+ constructor(datasource, _runRequest = getRunRequest()) {
81
+ this.datasource = datasource;
82
+ this._runRequest = _runRequest;
83
+ }
84
+ getTarget(variable) {
85
+ if (hasCustomVariableSupport(this.datasource)) {
86
+ return variable.state.query;
87
+ }
88
+ throw new Error("Couldn't create a target with supplied arguments.");
89
+ }
90
+ runRequest(_, request) {
91
+ if (!hasCustomVariableSupport(this.datasource)) {
92
+ return getEmptyMetricFindValueObservable();
93
+ }
94
+ if (!this.datasource.variables.query) {
95
+ return this._runRequest(this.datasource, request);
96
+ }
97
+ return this._runRequest(this.datasource, request, this.datasource.variables.query.bind(this.datasource.variables));
98
+ }
99
+ }
100
+ function getEmptyMetricFindValueObservable() {
101
+ return of({ state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange() });
102
+ }
103
+ function createQueryVariableRunnerFactory(datasource) {
104
+ if (hasStandardVariableSupport(datasource)) {
105
+ return new StandardQueryRunner(datasource, getRunRequest());
106
+ }
107
+ if (hasLegacyVariableSupport(datasource)) {
108
+ return new LegacyQueryRunner(datasource);
109
+ }
110
+ if (hasCustomVariableSupport(datasource)) {
111
+ return new CustomQueryRunner(datasource);
112
+ }
113
+ throw new Error(`Couldn't create a query runner for datasource ${datasource.type}`);
114
+ }
115
+ let createQueryVariableRunner = createQueryVariableRunnerFactory;
116
+ function ensureVariableQueryModelIsADataQuery(variable) {
117
+ var _a;
118
+ const query = (_a = variable.state.query) != null ? _a : "";
119
+ if (typeof query === "string") {
120
+ return { query, refId: `variable-${variable.state.name}` };
121
+ }
122
+ if (query.refId == null) {
123
+ return __spreadProps(__spreadValues({}, query), { refId: `variable-${variable.state.name}` });
124
+ }
125
+ return variable.state.query;
126
+ }
127
+
128
+ export { createQueryVariableRunner };
129
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUXVlcnlWYXJpYWJsZVJ1bm5lci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3ZhcmlhYmxlcy92YXJpYW50cy9xdWVyeS9jcmVhdGVRdWVyeVZhcmlhYmxlUnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb20sIG1lcmdlTWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBEYXRhUXVlcnlSZXF1ZXN0LFxuICBEYXRhU291cmNlQXBpLFxuICBnZXREZWZhdWx0VGltZVJhbmdlLFxuICBMb2FkaW5nU3RhdGUsXG4gIFBhbmVsRGF0YSxcbiAgU3RhbmRhcmRWYXJpYWJsZVF1ZXJ5LFxufSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IGdldFJ1blJlcXVlc3QgfSBmcm9tICdAZ3JhZmFuYS9ydW50aW1lJztcblxuaW1wb3J0IHsgaGFzQ3VzdG9tVmFyaWFibGVTdXBwb3J0LCBoYXNMZWdhY3lWYXJpYWJsZVN1cHBvcnQsIGhhc1N0YW5kYXJkVmFyaWFibGVTdXBwb3J0IH0gZnJvbSAnLi9ndWFyZHMnO1xuXG5pbXBvcnQgeyBRdWVyeVZhcmlhYmxlIH0gZnJvbSAnLi9RdWVyeVZhcmlhYmxlJztcbmltcG9ydCB7IERhdGFRdWVyeSB9IGZyb20gJ0BncmFmYW5hL3NjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmVyQXJncyB7XG4gIHNlYXJjaEZpbHRlcj86IHN0cmluZztcbiAgdmFyaWFibGU6IFF1ZXJ5VmFyaWFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlSdW5uZXIge1xuICBnZXRUYXJnZXQ6ICh2YXJpYWJsZTogUXVlcnlWYXJpYWJsZSkgPT4gRGF0YVF1ZXJ5IHwgc3RyaW5nO1xuICBydW5SZXF1ZXN0OiAoYXJnczogUnVubmVyQXJncywgcmVxdWVzdDogRGF0YVF1ZXJ5UmVxdWVzdCkgPT4gT2JzZXJ2YWJsZTxQYW5lbERhdGE+O1xufVxuXG5jbGFzcyBTdGFuZGFyZFF1ZXJ5UnVubmVyIGltcGxlbWVudHMgUXVlcnlSdW5uZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhc291cmNlOiBEYXRhU291cmNlQXBpLCBwcml2YXRlIF9ydW5SZXF1ZXN0ID0gZ2V0UnVuUmVxdWVzdCgpKSB7fVxuXG4gIHB1YmxpYyBnZXRUYXJnZXQodmFyaWFibGU6IFF1ZXJ5VmFyaWFibGUpIHtcbiAgICBpZiAoaGFzU3RhbmRhcmRWYXJpYWJsZVN1cHBvcnQodGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS52YXJpYWJsZXMudG9EYXRhUXVlcnkoZW5zdXJlVmFyaWFibGVRdWVyeU1vZGVsSXNBRGF0YVF1ZXJ5KHZhcmlhYmxlKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgY3JlYXRlIGEgdGFyZ2V0IHdpdGggc3VwcGxpZWQgYXJndW1lbnRzLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBydW5SZXF1ZXN0KF86IFJ1bm5lckFyZ3MsIHJlcXVlc3Q6IERhdGFRdWVyeVJlcXVlc3QpIHtcbiAgICBpZiAoIWhhc1N0YW5kYXJkVmFyaWFibGVTdXBwb3J0KHRoaXMuZGF0YXNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBnZXRFbXB0eU1ldHJpY0ZpbmRWYWx1ZU9ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YXNvdXJjZS52YXJpYWJsZXMucXVlcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9ydW5SZXF1ZXN0KHRoaXMuZGF0YXNvdXJjZSwgcmVxdWVzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3J1blJlcXVlc3QodGhpcy5kYXRhc291cmNlLCByZXF1ZXN0LCB0aGlzLmRhdGFzb3VyY2UudmFyaWFibGVzLnF1ZXJ5LmJpbmQodGhpcy5kYXRhc291cmNlLnZhcmlhYmxlcykpO1xuICB9XG59XG5cbmNsYXNzIExlZ2FjeVF1ZXJ5UnVubmVyIGltcGxlbWVudHMgUXVlcnlSdW5uZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhc291cmNlOiBEYXRhU291cmNlQXBpKSB7fVxuXG4gIHB1YmxpYyBnZXRUYXJnZXQodmFyaWFibGU6IFF1ZXJ5VmFyaWFibGUpIHtcbiAgICBpZiAoaGFzTGVnYWN5VmFyaWFibGVTdXBwb3J0KHRoaXMuZGF0YXNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB2YXJpYWJsZS5zdGF0ZS5xdWVyeTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBjcmVhdGUgYSB0YXJnZXQgd2l0aCBzdXBwbGllZCBhcmd1bWVudHMuXCIpO1xuICB9XG5cbiAgcHVibGljIHJ1blJlcXVlc3QoeyB2YXJpYWJsZSwgc2VhcmNoRmlsdGVyIH06IFJ1bm5lckFyZ3MsIHJlcXVlc3Q6IERhdGFRdWVyeVJlcXVlc3QpIHtcbiAgICBpZiAoIWhhc0xlZ2FjeVZhcmlhYmxlU3VwcG9ydCh0aGlzLmRhdGFzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gZ2V0RW1wdHlNZXRyaWNGaW5kVmFsdWVPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmRhdGFzb3VyY2UubWV0cmljRmluZFF1ZXJ5KHZhcmlhYmxlLnN0YXRlLnF1ZXJ5LCB7XG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIC8vIHZhcmlhYmxlIGlzIHVzZWQgYnkgU1FMIGNvbW1vbiBkYXRhIHNvdXJjZVxuICAgICAgICB2YXJpYWJsZToge1xuICAgICAgICAgIG5hbWU6IHZhcmlhYmxlLnN0YXRlLm5hbWUsXG4gICAgICAgICAgdHlwZTogdmFyaWFibGUuc3RhdGUudHlwZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoRmlsdGVyLFxuICAgICAgfSlcbiAgICApLnBpcGUoXG4gICAgICBtZXJnZU1hcCgodmFsdWVzKSA9PiB7XG4gICAgICAgIGlmICghdmFsdWVzIHx8ICF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEVtcHR5TWV0cmljRmluZFZhbHVlT2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VyaWVzOiBhbnkgPSB2YWx1ZXM7XG4gICAgICAgIHJldHVybiBvZih7IHNlcmllcywgc3RhdGU6IExvYWRpbmdTdGF0ZS5Eb25lLCB0aW1lUmFuZ2U6IHJlcXVlc3QucmFuZ2UgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQ3VzdG9tUXVlcnlSdW5uZXIgaW1wbGVtZW50cyBRdWVyeVJ1bm5lciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFzb3VyY2U6IERhdGFTb3VyY2VBcGksIHByaXZhdGUgX3J1blJlcXVlc3QgPSBnZXRSdW5SZXF1ZXN0KCkpIHt9XG5cbiAgcHVibGljIGdldFRhcmdldCh2YXJpYWJsZTogUXVlcnlWYXJpYWJsZSkge1xuICAgIGlmIChoYXNDdXN0b21WYXJpYWJsZVN1cHBvcnQodGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnF1ZXJ5O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGNyZWF0ZSBhIHRhcmdldCB3aXRoIHN1cHBsaWVkIGFyZ3VtZW50cy5cIik7XG4gIH1cblxuICBwdWJsaWMgcnVuUmVxdWVzdChfOiBSdW5uZXJBcmdzLCByZXF1ZXN0OiBEYXRhUXVlcnlSZXF1ZXN0KSB7XG4gICAgaWYgKCFoYXNDdXN0b21WYXJpYWJsZVN1cHBvcnQodGhpcy5kYXRhc291cmNlKSkge1xuICAgICAgcmV0dXJuIGdldEVtcHR5TWV0cmljRmluZFZhbHVlT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRhc291cmNlLnZhcmlhYmxlcy5xdWVyeSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3J1blJlcXVlc3QodGhpcy5kYXRhc291cmNlLCByZXF1ZXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3J1blJlcXVlc3QodGhpcy5kYXRhc291cmNlLCByZXF1ZXN0LCB0aGlzLmRhdGFzb3VyY2UudmFyaWFibGVzLnF1ZXJ5LmJpbmQodGhpcy5kYXRhc291cmNlLnZhcmlhYmxlcykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVtcHR5TWV0cmljRmluZFZhbHVlT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPFBhbmVsRGF0YT4ge1xuICByZXR1cm4gb2YoeyBzdGF0ZTogTG9hZGluZ1N0YXRlLkRvbmUsIHNlcmllczogW10sIHRpbWVSYW5nZTogZ2V0RGVmYXVsdFRpbWVSYW5nZSgpIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWVyeVZhcmlhYmxlUnVubmVyRmFjdG9yeShkYXRhc291cmNlOiBEYXRhU291cmNlQXBpKTogUXVlcnlSdW5uZXIge1xuICBpZiAoaGFzU3RhbmRhcmRWYXJpYWJsZVN1cHBvcnQoZGF0YXNvdXJjZSkpIHtcbiAgICByZXR1cm4gbmV3IFN0YW5kYXJkUXVlcnlSdW5uZXIoZGF0YXNvdXJjZSwgZ2V0UnVuUmVxdWVzdCgpKTtcbiAgfVxuXG4gIGlmIChoYXNMZWdhY3lWYXJpYWJsZVN1cHBvcnQoZGF0YXNvdXJjZSkpIHtcbiAgICByZXR1cm4gbmV3IExlZ2FjeVF1ZXJ5UnVubmVyKGRhdGFzb3VyY2UpO1xuICB9XG5cbiAgaWYgKGhhc0N1c3RvbVZhcmlhYmxlU3VwcG9ydChkYXRhc291cmNlKSkge1xuICAgIHJldHVybiBuZXcgQ3VzdG9tUXVlcnlSdW5uZXIoZGF0YXNvdXJjZSk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGNyZWF0ZSBhIHF1ZXJ5IHJ1bm5lciBmb3IgZGF0YXNvdXJjZSAke2RhdGFzb3VyY2UudHlwZX1gKTtcbn1cblxuZXhwb3J0IGxldCBjcmVhdGVRdWVyeVZhcmlhYmxlUnVubmVyID0gY3JlYXRlUXVlcnlWYXJpYWJsZVJ1bm5lckZhY3Rvcnk7XG5cbi8qKlxuICogVXNlIG9ubHkgaW4gdGVzdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENyZWF0ZVF1ZXJ5VmFyaWFibGVSdW5uZXJGYWN0b3J5KGZuOiAoZGF0YXNvdXJjZTogRGF0YVNvdXJjZUFwaSkgPT4gUXVlcnlSdW5uZXIpIHtcbiAgY3JlYXRlUXVlcnlWYXJpYWJsZVJ1bm5lciA9IGZuO1xufVxuXG4vKipcbiAqIEZpeGVzIG9sZCBsZWdhY3kgcXVlcnkgc3RyaW5nIG1vZGVscyBhbmQgYWRkcyByZWZJZCBpZiBtaXNzaW5nXG4gKi9cbmZ1bmN0aW9uIGVuc3VyZVZhcmlhYmxlUXVlcnlNb2RlbElzQURhdGFRdWVyeSh2YXJpYWJsZTogUXVlcnlWYXJpYWJsZSk6IFN0YW5kYXJkVmFyaWFibGVRdWVyeSB7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFyaWFibGUuc3RhdGUucXVlcnkgPz8gJyc7XG5cbiAgLy8gVHVybiBpbnRvIHF1ZXJ5IG9iamVjdCBpZiBpdCdzIGp1c3QgYSBzdHJpbmdcbiAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyBxdWVyeSwgcmVmSWQ6IGB2YXJpYWJsZS0ke3ZhcmlhYmxlLnN0YXRlLm5hbWV9YCB9O1xuICB9XG5cbiAgLy8gQWRkIHBvdGVudGlhbGx5IG1pc3NpbmcgcmVmSWRcbiAgaWYgKHF1ZXJ5LnJlZklkID09IG51bGwpIHtcbiAgICByZXR1cm4geyAuLi5xdWVyeSwgcmVmSWQ6IGB2YXJpYWJsZS0ke3ZhcmlhYmxlLnN0YXRlLm5hbWV9YCB9IGFzIFN0YW5kYXJkVmFyaWFibGVRdWVyeTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZS5zdGF0ZS5xdWVyeSBhcyBTdGFuZGFyZFZhcmlhYmxlUXVlcnk7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBLE1BQU0sbUJBQTJDLENBQUE7QUFBQSxFQUN4QyxXQUFvQixDQUFBLFVBQUEsRUFBbUMsV0FBYyxHQUFBLGFBQUEsRUFBaUIsRUFBQTtBQUFsRSxJ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
@@ -0,0 +1,28 @@
1
+ import { VariableSupportType } from '@grafana/data';
2
+
3
+ const hasLegacyVariableSupport = (datasource) => {
4
+ return Boolean(datasource.metricFindQuery) && !Boolean(datasource.variables);
5
+ };
6
+ const hasStandardVariableSupport = (datasource) => {
7
+ if (!datasource.variables) {
8
+ return false;
9
+ }
10
+ if (datasource.variables.getType() !== VariableSupportType.Standard) {
11
+ return false;
12
+ }
13
+ const variableSupport = datasource.variables;
14
+ return "toDataQuery" in variableSupport && Boolean(variableSupport.toDataQuery);
15
+ };
16
+ const hasCustomVariableSupport = (datasource) => {
17
+ if (!datasource.variables) {
18
+ return false;
19
+ }
20
+ if (datasource.variables.getType() !== VariableSupportType.Custom) {
21
+ return false;
22
+ }
23
+ const variableSupport = datasource.variables;
24
+ return "query" in variableSupport && "editor" in variableSupport && Boolean(variableSupport.query) && Boolean(variableSupport.editor);
25
+ };
26
+
27
+ export { hasCustomVariableSupport, hasLegacyVariableSupport, hasStandardVariableSupport };
28
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL3F1ZXJ5L2d1YXJkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEYXRhUXVlcnksXG4gIERhdGFTb3VyY2VKc29uRGF0YSxcbiAgRGF0YVNvdXJjZUFwaSxcbiAgTWV0cmljRmluZFZhbHVlLFxuICBWYXJpYWJsZVN1cHBvcnRUeXBlLFxuICBTdGFuZGFyZFZhcmlhYmxlUXVlcnksXG4gIERhdGFRdWVyeVJlcXVlc3QsXG4gIERhdGFRdWVyeVJlc3BvbnNlLFxuICBRdWVyeUVkaXRvclByb3BzLFxufSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IFRlbXBsYXRlU3J2IH0gZnJvbSAnQGdyYWZhbmEvcnVudGltZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogSW50ZXJmYWNlcyBhbmQgZ3VhcmRzIGJlbG93IGFyZSBjb3BpZWQgZnJvbSBjb3JlLlxuICogTm90IGV4cG9zaW5nIHZpYSBncmFmYW5hL2RhdGEgYXMgdGhlc2UgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGluIGNvbnRleHQgb3RoZXIgdGhhbiB2YXJpYWJsZXMuXG4gKi9cblxuaW50ZXJmYWNlIERhdGFTb3VyY2VXaXRoTGVnYWN5VmFyaWFibGVTdXBwb3J0PFxuICBUUXVlcnkgZXh0ZW5kcyBEYXRhUXVlcnkgPSBEYXRhUXVlcnksXG4gIFRPcHRpb25zIGV4dGVuZHMgRGF0YVNvdXJjZUpzb25EYXRhID0gRGF0YVNvdXJjZUpzb25EYXRhXG4+IGV4dGVuZHMgRGF0YVNvdXJjZUFwaTxUUXVlcnksIFRPcHRpb25zPiB7XG4gIG1ldHJpY0ZpbmRRdWVyeShxdWVyeTogYW55LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxNZXRyaWNGaW5kVmFsdWVbXT47XG4gIHZhcmlhYmxlczogdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgRGF0YVNvdXJjZVdpdGhTdGFuZGFyZFZhcmlhYmxlU3VwcG9ydDxcbiAgVFF1ZXJ5IGV4dGVuZHMgRGF0YVF1ZXJ5ID0gRGF0YVF1ZXJ5LFxuICBUT3B0aW9ucyBleHRlbmRzIERhdGFTb3VyY2VKc29uRGF0YSA9IERhdGFTb3VyY2VKc29uRGF0YVxuPiBleHRlbmRzIERhdGFTb3VyY2VBcGk8VFF1ZXJ5LCBUT3B0aW9ucz4ge1xuICB2YXJpYWJsZXM6IHtcbiAgICBnZXRUeXBlKCk6IFZhcmlhYmxlU3VwcG9ydFR5cGU7XG4gICAgdG9EYXRhUXVlcnkocXVlcnk6IFN0YW5kYXJkVmFyaWFibGVRdWVyeSk6IFRRdWVyeTtcbiAgICBxdWVyeShyZXF1ZXN0OiBEYXRhUXVlcnlSZXF1ZXN0PFRRdWVyeT4pOiBPYnNlcnZhYmxlPERhdGFRdWVyeVJlc3BvbnNlPjtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIERhdGFTb3VyY2VXaXRoQ3VzdG9tVmFyaWFibGVTdXBwb3J0PFxuICBUUXVlcnkgZXh0ZW5kcyBEYXRhUXVlcnkgPSBEYXRhUXVlcnksXG4gIFRPcHRpb25zIGV4dGVuZHMgRGF0YVNvdXJjZUpzb25EYXRhID0gRGF0YVNvdXJjZUpzb25EYXRhXG4+IGV4dGVuZHMgRGF0YVNvdXJjZUFwaTxUUXVlcnksIFRPcHRpb25zPiB7XG4gIHZhcmlhYmxlczoge1xuICAgIGdldFR5cGUoKTogVmFyaWFibGVTdXBwb3J0VHlwZTtcbiAgICBlZGl0b3I6IFZhcmlhYmxlUXVlcnlFZGl0b3JUeXBlO1xuICAgIHF1ZXJ5KHJlcXVlc3Q6IERhdGFRdWVyeVJlcXVlc3Q8VFF1ZXJ5Pik6IE9ic2VydmFibGU8RGF0YVF1ZXJ5UmVzcG9uc2U+O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgVmFyaWFibGVRdWVyeUVkaXRvclByb3BzIHtcbiAgcXVlcnk6IGFueTtcbiAgb25DaGFuZ2U6IChxdWVyeTogYW55LCBkZWZpbml0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGRhdGFzb3VyY2U6IGFueTtcbiAgdGVtcGxhdGVTcnY6IFRlbXBsYXRlU3J2O1xufVxuXG50eXBlIFZhcmlhYmxlUXVlcnlFZGl0b3JUeXBlPFxuICBUUXVlcnkgZXh0ZW5kcyBEYXRhUXVlcnkgPSBEYXRhUXVlcnksXG4gIFRPcHRpb25zIGV4dGVuZHMgRGF0YVNvdXJjZUpzb25EYXRhID0gRGF0YVNvdXJjZUpzb25EYXRhXG4+ID0gQ29tcG9uZW50VHlwZTxWYXJpYWJsZVF1ZXJ5RWRpdG9yUHJvcHM+IHwgQ29tcG9uZW50VHlwZTxRdWVyeUVkaXRvclByb3BzPGFueSwgVFF1ZXJ5LCBUT3B0aW9ucywgYW55Pj4gfCBudWxsO1xuXG5leHBvcnQgY29uc3QgaGFzTGVnYWN5VmFyaWFibGVTdXBwb3J0ID0gPFxuICBUUXVlcnkgZXh0ZW5kcyBEYXRhUXVlcnkgPSBEYXRhUXVlcnksXG4gIFRPcHRpb25zIGV4dGVuZHMgRGF0YVNvdXJjZUpzb25EYXRhID0gRGF0YVNvdXJjZUpzb25EYXRhXG4+KFxuICBkYXRhc291cmNlOiBEYXRhU291cmNlQXBpPFRRdWVyeSwgVE9wdGlvbnM+XG4pOiBkYXRhc291cmNlIGlzIERhdGFTb3VyY2VXaXRoTGVnYWN5VmFyaWFibGVTdXBwb3J0PFRRdWVyeSwgVE9wdGlvbnM+ID0+IHtcbiAgcmV0dXJuIEJvb2xlYW4oZGF0YXNvdXJjZS5tZXRyaWNGaW5kUXVlcnkpICYmICFCb29sZWFuKGRhdGFzb3VyY2UudmFyaWFibGVzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTdGFuZGFyZFZhcmlhYmxlU3VwcG9ydCA9IDxcbiAgVFF1ZXJ5IGV4dGVuZHMgRGF0YVF1ZXJ5ID0gRGF0YVF1ZXJ5LFxuICBUT3B0aW9ucyBleHRlbmRzIERhdGFTb3VyY2VKc29uRGF0YSA9IERhdGFTb3VyY2VKc29uRGF0YVxuPihcbiAgZGF0YXNvdXJjZTogRGF0YVNvdXJjZUFwaTxUUXVlcnksIFRPcHRpb25zPlxuKTogZGF0YXNvdXJjZSBpcyBEYXRhU291cmNlV2l0aFN0YW5kYXJkVmFyaWFibGVTdXBwb3J0PFRRdWVyeSwgVE9wdGlvbnM+ID0+IHtcbiAgaWYgKCFkYXRhc291cmNlLnZhcmlhYmxlcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChkYXRhc291cmNlLnZhcmlhYmxlcy5nZXRUeXBlKCkgIT09IFZhcmlhYmxlU3VwcG9ydFR5cGUuU3RhbmRhcmQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB2YXJpYWJsZVN1cHBvcnQgPSBkYXRhc291cmNlLnZhcmlhYmxlcztcbiAgcmV0dXJuICd0b0RhdGFRdWVyeScgaW4gdmFyaWFibGVTdXBwb3J0ICYmIEJvb2xlYW4odmFyaWFibGVTdXBwb3J0LnRvRGF0YVF1ZXJ5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNDdXN0b21WYXJpYWJsZVN1cHBvcnQgPSA8XG4gIFRRdWVyeSBleHRlbmRzIERhdGFRdWVyeSA9IERhdGFRdWVyeSxcbiAgVE9wdGlvbnMgZXh0ZW5kcyBEYXRhU291cmNlSnNvbkRhdGEgPSBEYXRhU291cmNlSnNvbkRhdGFcbj4oXG4gIGRhdGFzb3VyY2U6IERhdGFTb3VyY2VBcGk8VFF1ZXJ5LCBUT3B0aW9ucz5cbik6IGRhdGFzb3VyY2UgaXMgRGF0YVNvdXJjZVdpdGhDdXN0b21WYXJpYWJsZVN1cHBvcnQ8VFF1ZXJ5LCBUT3B0aW9ucz4gPT4ge1xuICBpZiAoIWRhdGFzb3VyY2UudmFyaWFibGVzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGRhdGFzb3VyY2UudmFyaWFibGVzLmdldFR5cGUoKSAhPT0gVmFyaWFibGVTdXBwb3J0VHlwZS5DdXN0b20pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB2YXJpYWJsZVN1cHBvcnQgPSBkYXRhc291cmNlLnZhcmlhYmxlcztcbiAgcmV0dXJuIChcbiAgICAncXVlcnknIGluIHZhcmlhYmxlU3VwcG9ydCAmJlxuICAgICdlZGl0b3InIGluIHZhcmlhYmxlU3VwcG9ydCAmJlxuICAgIEJvb2xlYW4odmFyaWFibGVTdXBwb3J0LnF1ZXJ5KSAmJlxuICAgIEJvb2xlYW4odmFyaWFibGVTdXBwb3J0LmVkaXRvcilcbiAgKTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErRGEsTUFBQSx3QkFBQSxHQUEyQixDQUl0QyxVQUN3RSxLQUFBO0FBQ3hFLEVBQUEsT0FBTyxRQUFRLFVBQVcsQ0FBQSxlQUFlLEtBQUssQ0FBQyxPQUFBLENBQVEsV0FBVyxTQUFTLENBQUEsQ0FBQTtBQUM3RSxFQUFBO0FBRWEsTUFBQSwwQkFBQSxHQUE2QixDQUl4QyxVQUMwRSxLQUFBO0FBQzFFLEVBQUksSUFBQSxDQUFDLFdBQVcsU0FBVyxFQUFBO0FBQ3pCLElBQU8sT0FBQSxLQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxJQUFJLFVBQVcsQ0FBQSxTQUFBLENBQVUsT0FBUSxFQUFBLEtBQU0sb0JBQW9CLFFBQVUsRUFBQTtBQUNuRSxJQUFPLE9BQUEsS0FBQSxDQUFBO0FBQUEsR0FDVDtBQUVBLEVBQUEsTUFBTSxrQkFBa0IsVUFBVyxDQUFBLFNBQUEsQ0FBQTtBQUNuQyxFQUFBLE9BQU8sYUFBaUIsSUFBQSxlQUFBLElBQW1CLE9BQVEsQ0FBQSxlQUFBLENBQWdCLFdBQVcsQ0FBQSxDQUFBO0FBQ2hGLEVBQUE7QUFFYSxNQUFBLHdCQUFBLEdBQTJCLENBSXRDLFVBQ3dFLEtBQUE7QUFDeEUsRUFBSSxJQUFBLENBQUMsV0FBVyxTQUFXLEVBQUE7QUFDekIsSUFBTyxPQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQ1Q7QUFFQSxFQUFBLElBQUksVUFBVyxDQUFBLFNBQUEsQ0FBVSxPQUFRLEVBQUEsS0FBTSxvQkFBb0IsTUFBUSxFQUFBO0FBQ2pFLElBQU8sT0FBQSxLQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxNQUFNLGtCQUFrQixVQUFXLENBQUEsU0FBQSxDQUFBO0FBQ25DLEVBQ0UsT0FBQSxPQUFBLElBQVcsZUFDWCxJQUFBLFFBQUEsSUFBWSxlQUNaLElBQUEsT0FBQSxDQUFRLGdCQUFnQixLQUFLLENBQUEsSUFDN0IsT0FBUSxDQUFBLGVBQUEsQ0FBZ0IsTUFBTSxDQUFBLENBQUE7QUFFbEM7Ozs7In0=
@@ -0,0 +1,96 @@
1
+ import { getProcessedDataFrames, getFieldDisplayName, FieldType, isDataFrame } from '@grafana/data';
2
+ import { map } from 'rxjs';
3
+
4
+ function toMetricFindValues() {
5
+ return (source) => source.pipe(
6
+ map((panelData) => {
7
+ const frames = panelData.series;
8
+ if (!frames || !frames.length) {
9
+ return [];
10
+ }
11
+ if (areMetricFindValues(frames)) {
12
+ return frames;
13
+ }
14
+ if (frames[0].fields.length === 0) {
15
+ return [];
16
+ }
17
+ const processedDataFrames = getProcessedDataFrames(frames);
18
+ const metrics = [];
19
+ let valueIndex = -1;
20
+ let textIndex = -1;
21
+ let stringIndex = -1;
22
+ let expandableIndex = -1;
23
+ for (const frame of processedDataFrames) {
24
+ for (let index = 0; index < frame.fields.length; index++) {
25
+ const field = frame.fields[index];
26
+ const fieldName = getFieldDisplayName(field, frame, frames).toLowerCase();
27
+ if (field.type === FieldType.string && stringIndex === -1) {
28
+ stringIndex = index;
29
+ }
30
+ if (fieldName === "text" && field.type === FieldType.string && textIndex === -1) {
31
+ textIndex = index;
32
+ }
33
+ if (fieldName === "value" && field.type === FieldType.string && valueIndex === -1) {
34
+ valueIndex = index;
35
+ }
36
+ if (fieldName === "expandable" && (field.type === FieldType.boolean || field.type === FieldType.number) && expandableIndex === -1) {
37
+ expandableIndex = index;
38
+ }
39
+ }
40
+ }
41
+ if (stringIndex === -1) {
42
+ throw new Error("Couldn't find any field of type string in the results.");
43
+ }
44
+ for (const frame of frames) {
45
+ for (let index = 0; index < frame.length; index++) {
46
+ const expandable = expandableIndex !== -1 ? frame.fields[expandableIndex].values.get(index) : void 0;
47
+ const string = frame.fields[stringIndex].values.get(index);
48
+ const text = textIndex !== -1 ? frame.fields[textIndex].values.get(index) : "";
49
+ const value = valueIndex !== -1 ? frame.fields[valueIndex].values.get(index) : "";
50
+ if (valueIndex === -1 && textIndex === -1) {
51
+ metrics.push({ text: string, value: string, expandable });
52
+ continue;
53
+ }
54
+ if (valueIndex === -1 && textIndex !== -1) {
55
+ metrics.push({ text, value: text, expandable });
56
+ continue;
57
+ }
58
+ if (valueIndex !== -1 && textIndex === -1) {
59
+ metrics.push({ text: value, value, expandable });
60
+ continue;
61
+ }
62
+ metrics.push({ text, value, expandable });
63
+ }
64
+ }
65
+ return metrics;
66
+ })
67
+ );
68
+ }
69
+ function areMetricFindValues(data) {
70
+ if (!data) {
71
+ return false;
72
+ }
73
+ if (!data.length) {
74
+ return true;
75
+ }
76
+ const firstValue = data[0];
77
+ if (isDataFrame(firstValue)) {
78
+ return false;
79
+ }
80
+ for (const firstValueKey in firstValue) {
81
+ if (!firstValue.hasOwnProperty(firstValueKey)) {
82
+ continue;
83
+ }
84
+ if (firstValue[firstValueKey] !== null && typeof firstValue[firstValueKey] !== "string" && typeof firstValue[firstValueKey] !== "number") {
85
+ continue;
86
+ }
87
+ const key = firstValueKey.toLowerCase();
88
+ if (key === "text" || key === "value") {
89
+ return true;
90
+ }
91
+ }
92
+ return false;
93
+ }
94
+
95
+ export { toMetricFindValues };
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9NZXRyaWNGaW5kVmFsdWVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL3F1ZXJ5L3RvTWV0cmljRmluZFZhbHVlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBGaWVsZFR5cGUsXG4gIGdldEZpZWxkRGlzcGxheU5hbWUsXG4gIGlzRGF0YUZyYW1lLFxuICBNZXRyaWNGaW5kVmFsdWUsXG4gIFBhbmVsRGF0YSxcbiAgZ2V0UHJvY2Vzc2VkRGF0YUZyYW1lcyxcbn0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyBtYXAsIE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRvTWV0cmljRmluZFZhbHVlcygpOiBPcGVyYXRvckZ1bmN0aW9uPFBhbmVsRGF0YSwgTWV0cmljRmluZFZhbHVlW10+IHtcbiAgcmV0dXJuIChzb3VyY2UpID0+XG4gICAgc291cmNlLnBpcGUoXG4gICAgICBtYXAoKHBhbmVsRGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBmcmFtZXMgPSBwYW5lbERhdGEuc2VyaWVzO1xuICAgICAgICBpZiAoIWZyYW1lcyB8fCAhZnJhbWVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmVNZXRyaWNGaW5kVmFsdWVzKGZyYW1lcykpIHtcbiAgICAgICAgICByZXR1cm4gZnJhbWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyYW1lc1swXS5maWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkRGF0YUZyYW1lcyA9IGdldFByb2Nlc3NlZERhdGFGcmFtZXMoZnJhbWVzKTtcbiAgICAgICAgY29uc3QgbWV0cmljczogTWV0cmljRmluZFZhbHVlW10gPSBbXTtcblxuICAgICAgICBsZXQgdmFsdWVJbmRleCA9IC0xO1xuICAgICAgICBsZXQgdGV4dEluZGV4ID0gLTE7XG4gICAgICAgIGxldCBzdHJpbmdJbmRleCA9IC0xO1xuICAgICAgICBsZXQgZXhwYW5kYWJsZUluZGV4ID0gLTE7XG5cbiAgICAgICAgZm9yIChjb25zdCBmcmFtZSBvZiBwcm9jZXNzZWREYXRhRnJhbWVzKSB7XG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZyYW1lLmZpZWxkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZnJhbWUuZmllbGRzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGdldEZpZWxkRGlzcGxheU5hbWUoZmllbGQsIGZyYW1lLCBmcmFtZXMpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuc3RyaW5nICYmIHN0cmluZ0luZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICBzdHJpbmdJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGROYW1lID09PSAndGV4dCcgJiYgZmllbGQudHlwZSA9PT0gRmllbGRUeXBlLnN0cmluZyAmJiB0ZXh0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRleHRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGROYW1lID09PSAndmFsdWUnICYmIGZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5zdHJpbmcgJiYgdmFsdWVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgdmFsdWVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkTmFtZSA9PT0gJ2V4cGFuZGFibGUnICYmXG4gICAgICAgICAgICAgIChmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuYm9vbGVhbiB8fCBmaWVsZC50eXBlID09PSBGaWVsZFR5cGUubnVtYmVyKSAmJlxuICAgICAgICAgICAgICBleHBhbmRhYmxlSW5kZXggPT09IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmluZ0luZGV4ID09PSAtMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYW55IGZpZWxkIG9mIHR5cGUgc3RyaW5nIGluIHRoZSByZXN1bHRzLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgZnJhbWVzKSB7XG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZyYW1lLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kYWJsZSA9IGV4cGFuZGFibGVJbmRleCAhPT0gLTEgPyBmcmFtZS5maWVsZHNbZXhwYW5kYWJsZUluZGV4XS52YWx1ZXMuZ2V0KGluZGV4KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IGZyYW1lLmZpZWxkc1tzdHJpbmdJbmRleF0udmFsdWVzLmdldChpbmRleCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gdGV4dEluZGV4ICE9PSAtMSA/IGZyYW1lLmZpZWxkc1t0ZXh0SW5kZXhdLnZhbHVlcy5nZXQoaW5kZXgpIDogJyc7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlSW5kZXggIT09IC0xID8gZnJhbWUuZmllbGRzW3ZhbHVlSW5kZXhdLnZhbHVlcy5nZXQoaW5kZXgpIDogJyc7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZUluZGV4ID09PSAtMSAmJiB0ZXh0SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1ldHJpY3MucHVzaCh7IHRleHQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgZXhwYW5kYWJsZSB9KTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZUluZGV4ID09PSAtMSAmJiB0ZXh0SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIG1ldHJpY3MucHVzaCh7IHRleHQsIHZhbHVlOiB0ZXh0LCBleHBhbmRhYmxlIH0pO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlSW5kZXggIT09IC0xICYmIHRleHRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgbWV0cmljcy5wdXNoKHsgdGV4dDogdmFsdWUsIHZhbHVlLCBleHBhbmRhYmxlIH0pO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWV0cmljcy5wdXNoKHsgdGV4dCwgdmFsdWUsIGV4cGFuZGFibGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1ldHJpY3M7XG4gICAgICB9KVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGFyZU1ldHJpY0ZpbmRWYWx1ZXMoZGF0YTogYW55W10pOiBkYXRhIGlzIE1ldHJpY0ZpbmRWYWx1ZVtdIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZmlyc3RWYWx1ZTogYW55ID0gZGF0YVswXTtcblxuICBpZiAoaXNEYXRhRnJhbWUoZmlyc3RWYWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGZpcnN0VmFsdWVLZXkgaW4gZmlyc3RWYWx1ZSkge1xuICAgIGlmICghZmlyc3RWYWx1ZS5oYXNPd25Qcm9wZXJ0eShmaXJzdFZhbHVlS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmlyc3RWYWx1ZVtmaXJzdFZhbHVlS2V5XSAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIGZpcnN0VmFsdWVbZmlyc3RWYWx1ZUtleV0gIT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2YgZmlyc3RWYWx1ZVtmaXJzdFZhbHVlS2V5XSAhPT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGZpcnN0VmFsdWVLZXkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChrZXkgPT09ICd0ZXh0JyB8fCBrZXkgPT09ICd2YWx1ZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVTyxTQUFTLGtCQUFxRSxHQUFBO0FBQ25GLEVBQU8sT0FBQSxDQUFDLFdBQ04sTUFBTyxDQUFBLElBQUE7QUFBQSxJQUNMLEdBQUEsQ0FBSSxDQUFDLFNBQWMsS0FBQTtBQUNqQixNQUFBLE1BQU0sU0FBUyxTQUFVLENBQUEsTUFBQSxDQUFBO0FBQ3pCLE1BQUEsSUFBSSxDQUFDLE1BQUEsSUFBVSxDQUFDLE1BQUEsQ0FBTyxNQUFRLEVBQUE7QUFDN0IsUUFBQSxPQUFPLEVBQUMsQ0FBQTtBQUFBLE9BQ1Y7QUFFQSxNQUFJLElBQUEsbUJBQUEsQ0FBb0IsTUFBTSxDQUFHLEVBQUE7QUFDL0IsUUFBTyxPQUFBLE1BQUEsQ0FBQTtBQUFBLE9BQ1Q7QUFFQSxNQUFBLElBQUksTUFBTyxDQUFBLENBQUEsQ0FBQSxDQUFHLE1BQU8sQ0FBQSxNQUFBLEtBQVcsQ0FBRyxFQUFBO0FBQ2pDLFFBQUEsT0FBTyxFQUFDLENBQUE7QUFBQSxPQUNWO0FBRUEsTUFBTSxNQUFBLG1CQUFBLEdBQXNCLHVCQUF1QixNQUFNLENBQUEsQ0FBQTtBQUN6RCxNQUFBLE1BQU0sVUFBNkIsRUFBQyxDQUFBO0FBRXBDLE1BQUEsSUFBSSxVQUFhLEdBQUEsQ0FBQSxDQUFBLENBQUE7QUFDakIsTUFBQSxJQUFJLFNBQVksR0FBQSxDQUFBLENBQUEsQ0FBQTtBQUNoQixNQUFBLElBQUksV0FBYyxHQUFBLENBQUEsQ0FBQSxDQUFBO0FBQ2xCLE1BQUEsSUFBSSxlQUFrQixHQUFBLENBQUEsQ0FBQSxDQUFBO0FBRXRCLE1BQUEsS0FBQSxNQUFXLFNBQVMsbUJBQXFCLEVBQUE7QUFDdkMsUUFBQSxLQUFBLElBQVMsUUFBUSxDQUFHLEVBQUEsS0FBQSxHQUFRLEtBQU0sQ0FBQSxNQUFBLENBQU8sUUFBUSxLQUFTLEVBQUEsRUFBQTtBQUN4RCxVQUFNLE1BQUEsS0FBQSxHQUFRLE1BQU0sTUFBTyxDQUFBLEtBQUEsQ0FBQSxDQUFBO0FBQzNCLFVBQUEsTUFBTSxZQUFZLG1CQUFvQixDQUFBLEtBQUEsRUFBTyxLQUFPLEVBQUEsTUFBTSxFQUFFLFdBQVksRUFBQSxDQUFBO0FBRXhFLFVBQUEsSUFBSSxLQUFNLENBQUEsSUFBQSxLQUFTLFNBQVUsQ0FBQSxNQUFBLElBQVUsZ0JBQWdCLENBQUksQ0FBQSxFQUFBO0FBQ3pELFlBQWMsV0FBQSxHQUFBLEtBQUEsQ0FBQTtBQUFBLFdBQ2hCO0FBRUEsVUFBQSxJQUFJLGNBQWMsTUFBVSxJQUFBLEtBQUEsQ0FBTSxTQUFTLFNBQVUsQ0FBQSxNQUFBLElBQVUsY0FBYyxDQUFJLENBQUEsRUFBQTtBQUMvRSxZQUFZLFNBQUEsR0FBQSxLQUFBLENBQUE7QUFBQSxXQUNkO0FBRUEsVUFBQSxJQUFJLGNBQWMsT0FBVyxJQUFBLEtBQUEsQ0FBTSxTQUFTLFNBQVUsQ0FBQSxNQUFBLElBQVUsZUFBZSxDQUFJLENBQUEsRUFBQTtBQUNqRixZQUFhLFVBQUEsR0FBQSxLQUFBLENBQUE7QUFBQSxXQUNmO0FBRUEsVUFDRSxJQUFBLFNBQUEsS0FBYyxZQUNiLEtBQUEsS0FBQSxDQUFNLElBQVMsS0FBQSxTQUFBLENBQVUsT0FBVyxJQUFBLEtBQUEsQ0FBTSxJQUFTLEtBQUEsU0FBQSxDQUFVLE1BQzlELENBQUEsSUFBQSxlQUFBLEtBQW9CLENBQ3BCLENBQUEsRUFBQTtBQUNBLFlBQWtCLGVBQUEsR0FBQSxLQUFBLENBQUE7QUFBQSxXQUNwQjtBQUFBLFNBQ0Y7QUFBQSxPQUNGO0FBRUEsTUFBQSxJQUFJLGdCQUFnQixDQUFJLENBQUEsRUFBQTtBQUN0QixRQUFNLE1BQUEsSUFBSSxNQUFNLHdEQUF3RCxDQUFBLENBQUE7QUFBQSxPQUMxRTtBQUVBLE1BQUEsS0FBQSxNQUFXLFNBQVMsTUFBUSxFQUFBO0FBQzFCLFFBQUEsS0FBQSxJQUFTLEtBQVEsR0FBQSxDQUFBLEVBQUcsS0FBUSxHQUFBLEtBQUEsQ0FBTSxRQUFRLEtBQVMsRUFBQSxFQUFBO0FBQ2pELFVBQU0sTUFBQSxVQUFBLEdBQWEsb0JBQW9CLENBQUssQ0FBQSxHQUFBLEtBQUEsQ0FBTSxPQUFPLGVBQWlCLENBQUEsQ0FBQSxNQUFBLENBQU8sR0FBSSxDQUFBLEtBQUssQ0FBSSxHQUFBLEtBQUEsQ0FBQSxDQUFBO0FBQzlGLFVBQUEsTUFBTSxTQUFTLEtBQU0sQ0FBQSxNQUFBLENBQU8sV0FBYSxDQUFBLENBQUEsTUFBQSxDQUFPLElBQUksS0FBSyxDQUFBLENBQUE7QUFDekQsVUFBTSxNQUFBLElBQUEsR0FBTyxjQUFjLENBQUssQ0FBQSxHQUFBLEtBQUEsQ0FBTSxPQUFPLFNBQVcsQ0FBQSxDQUFBLE1BQUEsQ0FBTyxHQUFJLENBQUEsS0FBSyxDQUFJLEdBQUEsRUFBQSxDQUFBO0FBQzVFLFVBQU0sTUFBQSxLQUFBLEdBQVEsZUFBZSxDQUFLLENBQUEsR0FBQSxLQUFBLENBQU0sT0FBTyxVQUFZLENBQUEsQ0FBQSxNQUFBLENBQU8sR0FBSSxDQUFBLEtBQUssQ0FBSSxHQUFBLEVBQUEsQ0FBQTtBQUUvRSxVQUFJLElBQUEsVUFBQSxLQUFlLENBQU0sQ0FBQSxJQUFBLFNBQUEsS0FBYyxDQUFJLENBQUEsRUFBQTtBQUN6QyxZQUFBLE9BQUEsQ0FBUSxLQUFLLEVBQUUsSUFBQSxFQUFNLFFBQVEsS0FBTyxFQUFBLE1BQUEsRUFBUSxZQUFZLENBQUEsQ0FBQTtBQUN4RCxZQUFBLFNBQUE7QUFBQSxXQUNGO0FBRUEsVUFBSSxJQUFBLFVBQUEsS0FBZSxDQUFNLENBQUEsSUFBQSxTQUFBLEtBQWMsQ0FBSSxDQUFBLEVBQUE7QUFDekMsWUFBQSxPQUFBLENBQVEsS0FBSyxFQUFFLElBQUEsRUFBTSxLQUFPLEVBQUEsSUFBQSxFQUFNLFlBQVksQ0FBQSxDQUFBO0FBQzlDLFlBQUEsU0FBQTtBQUFBLFdBQ0Y7QUFFQSxVQUFJLElBQUEsVUFBQSxLQUFlLENBQU0sQ0FBQSxJQUFBLFNBQUEsS0FBYyxDQUFJLENBQUEsRUFBQTtBQUN6QyxZQUFBLE9BQUEsQ0FBUSxLQUFLLEVBQUUsSUFBQSxFQUFNLEtBQU8sRUFBQSxLQUFBLEVBQU8sWUFBWSxDQUFBLENBQUE7QUFDL0MsWUFBQSxTQUFBO0FBQUEsV0FDRjtBQUVBLFVBQUEsT0FBQSxDQUFRLElBQUssQ0FBQSxFQUFFLElBQU0sRUFBQSxLQUFBLEVBQU8sWUFBWSxDQUFBLENBQUE7QUFBQSxTQUMxQztBQUFBLE9BQ0Y7QUFFQSxNQUFPLE9BQUEsT0FBQSxDQUFBO0FBQUEsS0FDUixDQUFBO0FBQUEsR0FDSCxDQUFBO0FBQ0osQ0FBQTtBQUVBLFNBQVMsb0JBQW9CLElBQXdDLEVBQUE7QUFDbkUsRUFBQSxJQUFJLENBQUMsSUFBTSxFQUFBO0FBQ1QsSUFBTyxPQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQ1Q7QUFFQSxFQUFJLElBQUEsQ0FBQyxLQUFLLE1BQVEsRUFBQTtBQUNoQixJQUFPLE9BQUEsSUFBQSxDQUFBO0FBQUEsR0FDVDtBQUVBLEVBQUEsTUFBTSxhQUFrQixJQUFLLENBQUEsQ0FBQSxDQUFBLENBQUE7QUFFN0IsRUFBSSxJQUFBLFdBQUEsQ0FBWSxVQUFVLENBQUcsRUFBQTtBQUMzQixJQUFPLE9BQUEsS0FBQSxDQUFBO0FBQUEsR0FDVDtBQUVBLEVBQUEsS0FBQSxNQUFXLGlCQUFpQixVQUFZLEVBQUE7QUFDdEMsSUFBQSxJQUFJLENBQUMsVUFBQSxDQUFXLGNBQWUsQ0FBQSxhQUFhLENBQUcsRUFBQTtBQUM3QyxNQUFBLFNBQUE7QUFBQSxLQUNGO0FBRUEsSUFDRSxJQUFBLFVBQUEsQ0FBVyxhQUFtQixDQUFBLEtBQUEsSUFBQSxJQUM5QixPQUFPLFVBQUEsQ0FBVyxtQkFBbUIsUUFDckMsSUFBQSxPQUFPLFVBQVcsQ0FBQSxhQUFBLENBQUEsS0FBbUIsUUFDckMsRUFBQTtBQUNBLE1BQUEsU0FBQTtBQUFBLEtBQ0Y7QUFFQSxJQUFNLE1BQUEsR0FBQSxHQUFNLGNBQWMsV0FBWSxFQUFBLENBQUE7QUFFdEMsSUFBSSxJQUFBLEdBQUEsS0FBUSxNQUFVLElBQUEsR0FBQSxLQUFRLE9BQVMsRUFBQTtBQUNyQyxNQUFPLE9BQUEsSUFBQSxDQUFBO0FBQUEsS0FDVDtBQUFBLEdBQ0Y7QUFFQSxFQUFPLE9BQUEsS0FBQSxDQUFBO0FBQ1Q7Ozs7In0=
@@ -0,0 +1,124 @@
1
+ import { isNumber, uniqBy, sortBy, toLower } from 'lodash';
2
+ import { stringToJsRegex, VariableSort } from '@grafana/data';
3
+
4
+ function metricNamesToVariableValues(variableRegEx, sort, metricNames) {
5
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
6
+ let regex;
7
+ let options = [];
8
+ if (variableRegEx) {
9
+ regex = stringToJsRegex(variableRegEx);
10
+ }
11
+ for (let i = 0; i < metricNames.length; i++) {
12
+ const item = metricNames[i];
13
+ let text = (_b = (_a = item.text) != null ? _a : item.value) != null ? _b : "";
14
+ let value = (_d = (_c = item.value) != null ? _c : item.text) != null ? _d : "";
15
+ if (isNumber(value)) {
16
+ value = value.toString();
17
+ }
18
+ if (isNumber(text)) {
19
+ text = text.toString();
20
+ }
21
+ if (regex) {
22
+ const matches = getAllMatches(value, regex);
23
+ if (!matches.length) {
24
+ continue;
25
+ }
26
+ const valueGroup = matches.find((m) => m.groups && m.groups.value);
27
+ const textGroup = matches.find((m) => m.groups && m.groups.text);
28
+ const firstMatch = matches.find((m) => m.length > 1);
29
+ const manyMatches = matches.length > 1 && firstMatch;
30
+ if (valueGroup || textGroup) {
31
+ value = (_g = (_e = valueGroup == null ? void 0 : valueGroup.groups) == null ? void 0 : _e.value) != null ? _g : (_f = textGroup == null ? void 0 : textGroup.groups) == null ? void 0 : _f.text;
32
+ text = (_j = (_h = textGroup == null ? void 0 : textGroup.groups) == null ? void 0 : _h.text) != null ? _j : (_i = valueGroup == null ? void 0 : valueGroup.groups) == null ? void 0 : _i.value;
33
+ } else if (manyMatches) {
34
+ for (let j = 0; j < matches.length; j++) {
35
+ const match = matches[j];
36
+ options.push({ label: match[1], value: match[1] });
37
+ }
38
+ continue;
39
+ } else if (firstMatch) {
40
+ text = firstMatch[1];
41
+ value = firstMatch[1];
42
+ }
43
+ }
44
+ options.push({ label: text, value });
45
+ }
46
+ options = uniqBy(options, "value");
47
+ return sortVariableValues(options, sort);
48
+ }
49
+ const getAllMatches = (str, regex) => {
50
+ const results = [];
51
+ let matches = null;
52
+ regex.lastIndex = 0;
53
+ do {
54
+ matches = regex.exec(str);
55
+ if (matches) {
56
+ results.push(matches);
57
+ }
58
+ } while (regex.global && matches && matches[0] !== "" && matches[0] !== void 0);
59
+ return results;
60
+ };
61
+ const sortVariableValues = (options, sortOrder) => {
62
+ if (sortOrder === VariableSort.disabled) {
63
+ return options;
64
+ }
65
+ const sortByNumeric = (opt) => {
66
+ if (!opt.text) {
67
+ return -1;
68
+ }
69
+ const matches = opt.text.match(/.*?(\d+).*/);
70
+ if (!matches || matches.length < 2) {
71
+ return -1;
72
+ } else {
73
+ return parseInt(matches[1], 10);
74
+ }
75
+ };
76
+ const sortByNaturalSort = (options2) => {
77
+ return options2.sort((a, b) => {
78
+ if (!a.text) {
79
+ return -1;
80
+ }
81
+ if (!b.text) {
82
+ return 1;
83
+ }
84
+ return a.text.localeCompare(b.text, void 0, { numeric: true });
85
+ });
86
+ };
87
+ switch (sortOrder) {
88
+ case VariableSort.alphabeticalAsc:
89
+ options = sortBy(options, "label");
90
+ break;
91
+ case VariableSort.alphabeticalDesc:
92
+ options = sortBy(options, "label").reverse();
93
+ break;
94
+ case VariableSort.numericalAsc:
95
+ options = sortBy(options, sortByNumeric);
96
+ break;
97
+ case VariableSort.numericalDesc:
98
+ options = sortBy(options, sortByNumeric);
99
+ options = options.reverse();
100
+ break;
101
+ case VariableSort.alphabeticalCaseInsensitiveAsc:
102
+ options = sortBy(options, (opt) => {
103
+ return toLower(opt.label);
104
+ });
105
+ break;
106
+ case VariableSort.alphabeticalCaseInsensitiveDesc:
107
+ options = sortBy(options, (opt) => {
108
+ return toLower(opt.label);
109
+ });
110
+ options = options.reverse();
111
+ break;
112
+ case (VariableSort.naturalAsc || 7):
113
+ options = sortByNaturalSort(options);
114
+ break;
115
+ case (VariableSort.naturalDesc || 8):
116
+ options = sortByNaturalSort(options);
117
+ options = options.reverse();
118
+ break;
119
+ }
120
+ return options;
121
+ };
122
+
123
+ export { metricNamesToVariableValues, sortVariableValues };
124
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy92YXJpYWJsZXMvdmFyaWFudHMvcXVlcnkvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdW1iZXIsIHNvcnRCeSwgdG9Mb3dlciwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgc3RyaW5nVG9Kc1JlZ2V4LCBWYXJpYWJsZVNvcnQgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcblxuaW1wb3J0IHsgVmFyaWFibGVWYWx1ZU9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1ldHJpY05hbWVzVG9WYXJpYWJsZVZhbHVlcyh2YXJpYWJsZVJlZ0V4OiBzdHJpbmcsIHNvcnQ6IFZhcmlhYmxlU29ydCwgbWV0cmljTmFtZXM6IGFueVtdKSB7XG4gIGxldCByZWdleDtcbiAgbGV0IG9wdGlvbnM6IFZhcmlhYmxlVmFsdWVPcHRpb25bXSA9IFtdO1xuXG4gIGlmICh2YXJpYWJsZVJlZ0V4KSB7XG4gICAgcmVnZXggPSBzdHJpbmdUb0pzUmVnZXgodmFyaWFibGVSZWdFeCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldHJpY05hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaXRlbSA9IG1ldHJpY05hbWVzW2ldO1xuICAgIGxldCB0ZXh0ID0gaXRlbS50ZXh0ID8/IGl0ZW0udmFsdWUgPz8gJyc7XG4gICAgbGV0IHZhbHVlID0gaXRlbS52YWx1ZSA/PyBpdGVtLnRleHQgPz8gJyc7XG5cbiAgICBpZiAoaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTnVtYmVyKHRleHQpKSB7XG4gICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChyZWdleCkge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldEFsbE1hdGNoZXModmFsdWUsIHJlZ2V4KTtcbiAgICAgIGlmICghbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSBtYXRjaGVzLmZpbmQoKG0pID0+IG0uZ3JvdXBzICYmIG0uZ3JvdXBzLnZhbHVlKTtcbiAgICAgIGNvbnN0IHRleHRHcm91cCA9IG1hdGNoZXMuZmluZCgobSkgPT4gbS5ncm91cHMgJiYgbS5ncm91cHMudGV4dCk7XG4gICAgICBjb25zdCBmaXJzdE1hdGNoID0gbWF0Y2hlcy5maW5kKChtKSA9PiBtLmxlbmd0aCA+IDEpO1xuICAgICAgY29uc3QgbWFueU1hdGNoZXMgPSBtYXRjaGVzLmxlbmd0aCA+IDEgJiYgZmlyc3RNYXRjaDtcblxuICAgICAgaWYgKHZhbHVlR3JvdXAgfHwgdGV4dEdyb3VwKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVHcm91cD8uZ3JvdXBzPy52YWx1ZSA/PyB0ZXh0R3JvdXA/Lmdyb3Vwcz8udGV4dDtcbiAgICAgICAgdGV4dCA9IHRleHRHcm91cD8uZ3JvdXBzPy50ZXh0ID8/IHZhbHVlR3JvdXA/Lmdyb3Vwcz8udmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKG1hbnlNYXRjaGVzKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWF0Y2hlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tqXTtcbiAgICAgICAgICBvcHRpb25zLnB1c2goeyBsYWJlbDogbWF0Y2hbMV0sIHZhbHVlOiBtYXRjaFsxXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZmlyc3RNYXRjaCkge1xuICAgICAgICB0ZXh0ID0gZmlyc3RNYXRjaFsxXTtcbiAgICAgICAgdmFsdWUgPSBmaXJzdE1hdGNoWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMucHVzaCh7IGxhYmVsOiB0ZXh0LCB2YWx1ZTogdmFsdWUgfSk7XG4gIH1cblxuICBvcHRpb25zID0gdW5pcUJ5KG9wdGlvbnMsICd2YWx1ZScpO1xuICByZXR1cm4gc29ydFZhcmlhYmxlVmFsdWVzKG9wdGlvbnMsIHNvcnQpO1xufVxuXG5jb25zdCBnZXRBbGxNYXRjaGVzID0gKHN0cjogc3RyaW5nLCByZWdleDogUmVnRXhwKTogUmVnRXhwRXhlY0FycmF5W10gPT4ge1xuICBjb25zdCByZXN1bHRzOiBSZWdFeHBFeGVjQXJyYXlbXSA9IFtdO1xuICBsZXQgbWF0Y2hlcyA9IG51bGw7XG5cbiAgcmVnZXgubGFzdEluZGV4ID0gMDtcblxuICBkbyB7XG4gICAgbWF0Y2hlcyA9IHJlZ2V4LmV4ZWMoc3RyKTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgcmVzdWx0cy5wdXNoKG1hdGNoZXMpO1xuICAgIH1cbiAgfSB3aGlsZSAocmVnZXguZ2xvYmFsICYmIG1hdGNoZXMgJiYgbWF0Y2hlc1swXSAhPT0gJycgJiYgbWF0Y2hlc1swXSAhPT0gdW5kZWZpbmVkKTtcblxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0VmFyaWFibGVWYWx1ZXMgPSAob3B0aW9uczogYW55W10sIHNvcnRPcmRlcjogVmFyaWFibGVTb3J0KSA9PiB7XG4gIGlmIChzb3J0T3JkZXIgPT09IFZhcmlhYmxlU29ydC5kaXNhYmxlZCkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBzb3J0QnlOdW1lcmljID0gKG9wdCkgPT4ge1xuICAgIGlmICghb3B0LnRleHQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlcyA9IG9wdC50ZXh0Lm1hdGNoKC8uKj8oXFxkKykuKi8pO1xuICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBzb3J0QnlOYXR1cmFsU29ydCA9IChvcHRpb25zKSA9PiB7XG4gICAgLy9AdHMtaWdub3JlXG4gICAgcmV0dXJuIG9wdGlvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKCFhLnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWIudGV4dCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGEudGV4dC5sb2NhbGVDb21wYXJlKGIudGV4dCwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgc3dpdGNoIChzb3J0T3JkZXIpIHtcbiAgICBjYXNlIFZhcmlhYmxlU29ydC5hbHBoYWJldGljYWxBc2M6XG4gICAgICBvcHRpb25zID0gc29ydEJ5KG9wdGlvbnMsICdsYWJlbCcpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYXJpYWJsZVNvcnQuYWxwaGFiZXRpY2FsRGVzYzpcbiAgICAgIG9wdGlvbnMgPSBzb3J0Qnkob3B0aW9ucywgJ2xhYmVsJykucmV2ZXJzZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYXJpYWJsZVNvcnQubnVtZXJpY2FsQXNjOlxuICAgICAgb3B0aW9ucyA9IHNvcnRCeShvcHRpb25zLCBzb3J0QnlOdW1lcmljKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmFyaWFibGVTb3J0Lm51bWVyaWNhbERlc2M6XG4gICAgICBvcHRpb25zID0gc29ydEJ5KG9wdGlvbnMsIHNvcnRCeU51bWVyaWMpO1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmV2ZXJzZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYXJpYWJsZVNvcnQuYWxwaGFiZXRpY2FsQ2FzZUluc2Vuc2l0aXZlQXNjOlxuICAgICAgb3B0aW9ucyA9IHNvcnRCeShvcHRpb25zLCAob3B0KSA9PiB7XG4gICAgICAgIHJldHVybiB0b0xvd2VyKG9wdC5sYWJlbCk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmFyaWFibGVTb3J0LmFscGhhYmV0aWNhbENhc2VJbnNlbnNpdGl2ZURlc2M6XG4gICAgICBvcHRpb25zID0gc29ydEJ5KG9wdGlvbnMsIChvcHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRvTG93ZXIob3B0LmxhYmVsKTtcbiAgICAgIH0pO1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmV2ZXJzZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYXJpYWJsZVNvcnQubmF0dXJhbEFzYyB8fCA3OlxuICAgICAgLy8gU29ydCBieSBuYXR1cmFsIHNvcnRcbiAgICAgIG9wdGlvbnMgPSBzb3J0QnlOYXR1cmFsU29ydChvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmFyaWFibGVTb3J0Lm5hdHVyYWxEZXNjIHx8IDg6XG4gICAgICBvcHRpb25zID0gc29ydEJ5TmF0dXJhbFNvcnQob3B0aW9ucyk7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5yZXZlcnNlKCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59O1xuIl0sIm5hbWVzIjpbIm9wdGlvbnMiXSwibWFwcGluZ3MiOiI7OztBQU1nQixTQUFBLDJCQUFBLENBQTRCLGFBQXVCLEVBQUEsSUFBQSxFQUFvQixXQUFvQixFQUFBO0FBTjNHLEVBQUEsSUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQUE7QUFPRSxFQUFJLElBQUEsS0FBQSxDQUFBO0FBQ0osRUFBQSxJQUFJLFVBQWlDLEVBQUMsQ0FBQTtBQUV0QyxFQUFBLElBQUksYUFBZSxFQUFBO0FBQ2pCLElBQUEs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