/usr/share/grafana/public/app/plugins/datasource/azuremonitor/dist
{"version":3,"file":"module.js","mappings":"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,mBAAjB,GACA2D,EAAAA,KAAAA,kBAAAA,GACAV,EAAAA,KAAAA,yBAAAA,GACA+B,EAAAA,KAAAA,qCAAAA,GACAL,EAAAA,KAAAA,0BAAAA,GACAI,EAAAA,KAAAA,2BAAAA,GACA/H,EAAAA,KAAAA,6BAAAA,GACAiI,EAAAA,KAAAA,wBAAAA,GACA7H,EAAAA,KAAAA,oBAAAA,GAAAA,KAMmBN,YAAAA,EAAAA,KAbnB6G,WAAa,kBACbV,kBAAoB,0BACpB+B,8BAAgC,kBAChCL,mBAAqB,kBACrBI,oBAAsB,aAYpBnmB,KAAKohB,aAAce,EAAAA,EAAAA,GAAerB,GAElC9gB,KAAKoe,sBAAwB0C,EAAiBC,SAAS9C,eACvDje,KAAKqmB,iBAAmBvF,EAAiBC,SAASsF,iBAElDrmB,KAAKwe,aAAe4D,EAAAA,GAAWE,YACjC,E,oeC3CF,MAAMgE,ECW2B,CAC/B,+BACA,kCACA,2BACA,qCACA,qCACA,kCACA,oCACA,iDACA,+BACA,6CACA,0CACA,mDACA,oDACA,qDACA,8BACA,gDACA,4CACA,iCACA,4DACA,gCACA,+BACA,yCACA,oCACA,mCACA,wBACA,kCACA,4CACA,kDACA,yBACA,mCACA,8BACA,uCACA,2CACA,iDACA,2CACA,4CACA,uCACA,gDACA,yCACA,0BACA,oCACA,4CACA,0CACA,2CACA,sCACA,kDACA,wCACA,8CACA,8CACA,yCACA,oCACA,6CACA,kCACA,8CACA,2CACA,8BACA,2CACA,kCACA,yCACA,sCACA,kCACA,uCACA,mCACA,wCACA,+BACA,iCACA,uCACA,+BACA,4CACA,2CACA,oCACA,sCACA,oDACA,oDACA,4CACA,+CACA,6CACA,iCACA,+CACA,4BACA,yCACA,uCACA,+CACA,yCACA,wCACA,qCACA,8BACA,iCACA,wCACA,oCACA,mCACA,6BACA,8BACA,gCACA,iDACA,yCACA,qDACA,+BACA,oCACA,oDACA,mDACA,oDACA,8CACA,uCACA,gCACA,yCACA,yBACA,+BACA,iCACA,4BACA,yCACA,2BACA,sCACA,sCACA,iDACA,4BACA,+CA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WAM1Bi6B,EAA0D,CACrE,yBAAyB,EACzB,sCAAsC,EACtC,6CAA6C,EAC7C,yCAAyC,EACzC,8BAA8B,EAC9B,4CAA4C,EAC5C,oCAAoC,EACpC,yCAAyC,EACzC,4CAA4C,EAC5C,iDAAiD,EACjD,yDAAyD,EACzD,wDAAwD,EACxD,6BAA6B,EAC7B,qCAAqC,EACrC,mCAAmC,EACnC,sCAAsC,EACtC,6CAA6C,EAC7C,qCAAqC,EACrC,sCAAsC,GAG3BljB,EAAgB,CAC3B,+BACA,kCACA,qCACA,kCACA,8BACA,qBACA,oCACA,iDACA,+BACA,0CACA,8BACA,iCACA,mCACA,4DACA,gCACA,+BACA,0BACA,mCACA,4CACA,+CACA,6CACA,oCACA,gDACA,gDACA,wBACA,kCACA,kDACA,yBACA,uCACA,mDACA,2CACA,2CACA,wDACA,wDACA,yDACA,yDACA,kCACA,4BACA,8BACA,4CACA,uCACA,gDACA,kCACA,wCACA,0BACA,oCACA,4CACA,4DACA,sCACA,kDACA,wCACA,8CACA,8CACA,iDACA,yCACA,6CACA,kCACA,8CACA,8BACA,2CACA,kCACA,yCACA,sCACA,kCACA,uCACA,mCACA,wCACA,+BACA,iCACA,uCACA,+BACA,4CACA,2CACA,oCACA,sCACA,iCACA,4BACA,yCACA,uCACA,+CACA,yCACA,wCACA,qCACA,gCACA,mCACA,8CACA,8BACA,yCACA,sCACA,iCACA,wCACA,oCACA,mCACA,6BACA,8BACA,gCACA,yCACA,+BACA,oCACA,oDACA,mDACA,oDACA,qCACA,uDACA,2CACA,kDACA,uCACA,gCACA,yCACA,+BACA,4BACA,iCACA,4BACA,yCACA,+CACA,2BACA,iDACA,4BACA,+CACA,+DACA,2EACA,kDACA,oDACA,oDACA,gDACA,0BACA,gCACA,2CACA,mDACA,iCACA,2CACA,iDACA,gDACA,+CACA,kDACA,uEACA,8CACA,6BACA,gDACA,wDACA,wCACA,mCACA,iCACA,gCACA,0CACA,wCACA,iCACA,6BACA,yCACA,kDACA,yCACA,sCACA,+BACA,kCACA,gCACA,sCACA,8CACA,6CACA,oCACA,uDACA,mCACA,oCACA,qCACA,wCACA,sCACA,qCACA,2CACA,gCACA,2CACA,oCACA,mCACA,gCACA,4CACA,2CACA,yCACA,kCACA,2CACA,mDACA,yDACA,2CACA,2CACA,oCACA,kCACA,gCACA,8BACA,6BACA,oCACA,2BACA,wCACA,gDACA,6BACA,oCACA,6BACA,oCACA,kCACA,wCACA,0DACA,kCACA,2CACA,iDACA,mCACA,4CACA,qCACA,8CACA,iCACA,iCACA,kCACA,qCACA,kCACA,wCACA,oCACA,iDACA,iDACA,8DACA,kDACA,iDACA,kDACA,iCACA,wCACA,gCACA,uCACA,4CACA,sCACA,0CACA,+BACA,4CACA,0CACA,0CACA,wCACA,4CACA,yDACA,8CACA,iDACA,8BACA,oCACA,mDACA,gDACA,4BACA,sBACA,4BACA,4BACA,mCACA,sCACA,kCACA,kCACA,qEACA,4BACA,+CACA,+CACA,+C,8BC3rBF,MAAMhO,EAAU,EAAQ,MAExB1a,EAAOC,QADc,CAACu0B,EAAGQ,IAAMta,EAAQ8Z,EAAGQ,GAAG,E,8BCD7C,MAAM,0BACJ6wC,EAAyB,sBACzBC,EAAqB,WACrBF,GACE,EAAQ,MACNlxC,EAAQ,EAAQ,MAIhB5xB,GAHN7C,EAAUD,EAAOC,QAAU,CAAC,GAGT6C,GAAK,GAClBD,EAAS5C,EAAQ4C,OAAS,GAC1BsZ,EAAMlc,EAAQkc,IAAM,GACpBmpE,EAAUrlF,EAAQqlF,QAAU,GAC5BviF,EAAI9C,EAAQ8C,EAAI,CAAC,EACvB,IAAIwiF,EAAI,EAER,MAAMC,EAAmB,eAQnBC,EAAwB,CAC5B,CAAC,MAAO,GACR,CAAC,MAAO7f,GACR,CAAC4f,EAAkB1f,IAYf4f,EAAc,CAAC7/E,EAAMnG,EAAOimF,KAChC,MAAMC,EAVc,CAAClmF,IACrB,IAAK,MAAOmmF,EAAOtlF,KAAQklF,EACzB/lF,EAAQA,EACL0Y,MAAM,GAAGytE,MAAUjkF,KAAK,GAAGikF,OAAWtlF,MACtC6X,MAAM,GAAGytE,MAAUjkF,KAA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","sources":["webpack://grafana-azure-monitor-datasource/webpack/runtime/async module","webpack://grafana-azure-monitor-datasource/webpack/runtime/load script","webpack://grafana-azure-monitor-datasource/./time_grain_converter.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/ltr.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/internal/lrucache.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/valid.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/css-loader/dist/runtime/api.js","webpack://grafana-azure-monitor-datasource/external amd \"i18next\"","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/intersects.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/coerce.js","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/AdvancedMulti.tsx","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/EntryIcon.tsx","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/styles.ts","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/NestedEntry.tsx","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/NestedRow.tsx","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/Search.tsx","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/ResourcePicker.tsx","webpack://grafana-azure-monitor-datasource/./components/ResourceField/ResourceField.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/AdvancedResourcePicker.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/void-elements/index.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/index.js","webpack://grafana-azure-monitor-datasource/./azure_log_analytics/utils.ts","webpack://grafana-azure-monitor-datasource/./azure_log_analytics/azure_log_analytics_datasource.ts","webpack://grafana-azure-monitor-datasource/./azure_monitor/azure_monitor_datasource.ts","webpack://grafana-azure-monitor-datasource/./resourcePicker/resourcePickerData.ts","webpack://grafana-azure-monitor-datasource/./azureMetadata/logsResourceTypes.ts","webpack://grafana-azure-monitor-datasource/./azure_resource_graph/azure_resource_graph_datasource.ts","webpack://grafana-azure-monitor-datasource/./utils/migrateAnnotation.ts","webpack://grafana-azure-monitor-datasource/./grafanaTemplateVariableFns.ts","webpack://grafana-azure-monitor-datasource/./components/VariableEditor/GrafanaTemplateVariableFn.tsx","webpack://grafana-azure-monitor-datasource/./components/VariableEditor/VariableEditor.tsx","webpack://grafana-azure-monitor-datasource/./variables.ts","webpack://grafana-azure-monitor-datasource/./datasource.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/major.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/internal/debug.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/rsort.js","webpack://grafana-azure-monitor-datasource/external amd \"rxjs\"","webpack://grafana-azure-monitor-datasource/external amd \"module\"","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/eq.js","webpack://grafana-azure-monitor-datasource/./types/types.ts","webpack://grafana-azure-monitor-datasource/./components/shared/FormatAsField.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/utils.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/unescape.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/defaults.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/i18nInstance.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/TransWithoutContext.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/initReactI18next.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/context.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/Trans.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-i18next/dist/es/useSSR.js","webpack://grafana-azure-monitor-datasource/../../../../../packages/grafana-i18n/src/constants.ts","webpack://grafana-azure-monitor-datasource/../../../../../packages/grafana-i18n/src/i18n.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/RawQuery.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/syntax.ts","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/AzureCheatSheet.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/AzureCheatSheetModal.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/AdvancedResourcePicker.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/AggregationField.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/DimensionFields.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/LegendFormatField.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/MetricNameField.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/MetricNamespaceField.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/TimeGrainField.tsx","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/TopField.tsx","webpack://grafana-azure-monitor-datasource/./utils/useAsyncState.ts","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/dataHooks.ts","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/MetricsQueryEditor.tsx","webpack://grafana-azure-monitor-datasource/../../../../../packages/grafana-e2e-selectors/src/resolver.ts","webpack://grafana-azure-monitor-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/constants.ts","webpack://grafana-azure-monitor-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/components.ts","webpack://grafana-azure-monitor-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/index.ts","webpack://grafana-azure-monitor-datasource/../../../../../packages/grafana-e2e-selectors/src/selectors/pages.ts","webpack://grafana-azure-monitor-datasource/./components/TracesQueryEditor/Filter.tsx","webpack://grafana-azure-monitor-datasource/./components/TracesQueryEditor/consts.ts","webpack://grafana-azure-monitor-datasource/./components/TracesQueryEditor/setQueryValue.ts","webpack://grafana-azure-monitor-datasource/./components/TracesQueryEditor/Filters.tsx","webpack://grafana-azure-monitor-datasource/./components/TracesQueryEditor/TraceTypeField.tsx","webpack://grafana-azure-monitor-datasource/./components/TracesQueryEditor/TracesQueryEditor.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-use/esm/usePrevious.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorHeader.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/InlineSelect.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/FlexItem.js","webpack://grafana-azure-monitor-datasource/./components/QueryEditor/QueryHeader.tsx","webpack://grafana-azure-monitor-datasource/./components/QueryEditor/usePreparedQuery.ts","webpack://grafana-azure-monitor-datasource/./components/QueryEditor/QueryEditor.tsx","webpack://grafana-azure-monitor-datasource/external amd \"@grafana/ui\"","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/subset.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/internal/constants.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/lt.js","webpack://grafana-azure-monitor-datasource/./credentials.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/InputGroup.js","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/utils.ts","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/AggregateItem.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/AggregationSection.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/AzureMonitorKustoQueryBuilder.ts","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/FilterItem.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/FilterSection.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/FuzzySearch.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/GroupByItem.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/GroupBySection.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/prismjs/themes/prism-tomorrow.min.css?2dd5","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/KQLPreview.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/LimitSection.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/OrderBySection.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/TableSection.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryBuilder/LogsQueryBuilder.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/LogsManagement.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/QueryField.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/TimeManagement.tsx","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/useMigrations.ts","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/utils.ts","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/LogsQueryEditor.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/min-satisfying.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/inc.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/AccessoryButton.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/classes/range.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/prismjs/components/prism-kusto.js","webpack://grafana-azure-monitor-datasource/external amd \"rxjs/operators\"","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/satisfies.js","webpack://grafana-azure-monitor-datasource/external amd \"lodash\"","webpack://grafana-azure-monitor-datasource/./dataquery.gen.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/to-comparators.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/prismjs/themes/prism-tomorrow.min.css","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/compare.js","webpack://grafana-azure-monitor-datasource/./azure_monitor/response_parser.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/sort.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorRows.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react-use/esm/useEffectOnce.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/internal/identifiers.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/gte.js","webpack://grafana-azure-monitor-datasource/./module.ts","webpack://grafana-azure-monitor-datasource/./components/MetricsQueryEditor/setQueryValue.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/parse.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorField.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/fast-deep-equal/index.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/lte.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/classes/semver.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://grafana-azure-monitor-datasource/external amd \"@kusto/monaco-kusto\"","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/diff.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/cmp.js","webpack://grafana-azure-monitor-datasource/./tracking.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/patch.js","webpack://grafana-azure-monitor-datasource/./azureMetadata/resourceTypes.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/compare-loose.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/internal/re.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/DataSourceDescription.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js","webpack://grafana-azure-monitor-datasource/./components/ConfigEditor/AppRegistrationCredentials.tsx","webpack://grafana-azure-monitor-datasource/./components/ConfigEditor/CurrentUserFallbackCredentials.tsx","webpack://grafana-azure-monitor-datasource/./components/ConfigEditor/AzureCredentialsForm.tsx","webpack://grafana-azure-monitor-datasource/./components/ConfigEditor/BasicLogsToggle.tsx","webpack://grafana-azure-monitor-datasource/./components/ConfigEditor/DefaultSubscription.tsx","webpack://grafana-azure-monitor-datasource/./components/ConfigEditor/MonitorConfig.tsx","webpack://grafana-azure-monitor-datasource/./components/ConfigEditor/ConfigEditor.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorStack.js","webpack://grafana-azure-monitor-datasource/external amd \"react\"","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/neq.js","webpack://grafana-azure-monitor-datasource/./utils/messageFromError.ts","webpack://grafana-azure-monitor-datasource/external amd \"@emotion/css\"","webpack://grafana-azure-monitor-datasource/./azure_monitor/url_builder.ts","webpack://grafana-azure-monitor-datasource/./e2e/selectors.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://grafana-azure-monitor-datasource/./utils/migrateQuery.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/prerelease.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/max-satisfying.js","webpack://grafana-azure-monitor-datasource/./components/LogsQueryEditor/setQueryValue.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorList.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/gtr.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/min-version.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/compare-build.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/rcompare.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/outside.js","webpack://grafana-azure-monitor-datasource/external amd \"@grafana/data\"","webpack://grafana-azure-monitor-datasource/./components/shared/Field.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://grafana-azure-monitor-datasource/external amd \"prismjs\"","webpack://grafana-azure-monitor-datasource/./components/ArgQueryEditor/QueryField.tsx","webpack://grafana-azure-monitor-datasource/./components/ArgQueryEditor/SubscriptionField.tsx","webpack://grafana-azure-monitor-datasource/./components/ArgQueryEditor/ArgQueryEditor.tsx","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/ranges/simplify.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorRow.js","webpack://grafana-azure-monitor-datasource/./utils/useLastError.ts","webpack://grafana-azure-monitor-datasource/external amd \"@grafana/runtime\"","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/types.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/clean.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/EditorFieldGroup.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/classes/comparator.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/gt.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/minor.js","webpack://grafana-azure-monitor-datasource/./utils/common.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/internal/parse-options.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/immer/dist/immer.mjs","webpack://grafana-azure-monitor-datasource/./components/ResourcePicker/utils.ts","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/azure-sdk/dist/esm/credentials/AzureCredentials.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/azure-sdk/dist/esm/clouds.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/@grafana/azure-sdk/dist/esm/credentials/AzureCredentialsConfig.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/react/jsx-runtime.js","webpack://grafana-azure-monitor-datasource/./node_modules/grafana-public-path.js","webpack://grafana-azure-monitor-datasource/../../../../../node_modules/semver/functions/valid.js","webpack://grafana-azure-monitor-datasource/webpack/bootstrap","webpack://grafana-azure-monitor-datasource/webpack/runtime/compat get default export","webpack://grafana-azure-monitor-datasource/webpack/runtime/define property getters","webpack://grafana-azure-monitor-datasource/webpack/runtime/ensure chunk","webpack://grafana-azure-monitor-datasource/webpack/runtime/get javascript chunk filename","webpack://grafana-azure-monitor-datasource/webpack/runtime/hasOwnProperty shorthand","webpack://grafana-azure-monitor-datasource/webpack/runtime/make namespace object","webpack://grafana-azure-monitor-datasource/webpack/runtime/publicPath","webpack://grafana-azure-monitor-datasource/webpack/runtime/jsonp chunk loading","webpack://grafana-azure-monitor-datasource/webpack/runtime/nonce","webpack://grafana-azure-monitor-datasource/webpack/startup"],"sourcesContent":["var hasSymbol = typeof Symbol === \"function\";\nvar webpackQueues = hasSymbol ? Symbol(\"webpack queues\") : \"__webpack_queues__\";\nvar webpackExports = hasSymbol ? Symbol(\"webpack exports\") : \"__webpack_exports__\";\nvar webpackError = hasSymbol ? Symbol(\"webpack error\") : \"__webpack_error__\";\n\n\nvar resolveQueue = (queue) => {\n\tif(queue && queue.d < 1) {\n\t\tqueue.d = 1;\n\t\tqueue.forEach((fn) => (fn.r--));\n\t\tqueue.forEach((fn) => (fn.r-- ? fn.r++ : fn()));\n\t}\n}\nvar wrapDeps = (deps) => (deps.map((dep) => {\n\tif(dep !== null && typeof dep === \"object\") {\n\n\t\tif(dep[webpackQueues]) return dep;\n\t\tif(dep.then) {\n\t\t\tvar queue = [];\n\t\t\tqueue.d = 0;\n\t\t\tdep.then((r) => {\n\t\t\t\tobj[webpackExports] = r;\n\t\t\t\tresolveQueue(queue);\n\t\t\t}, (e) => {\n\t\t\t\tobj[webpackError] = e;\n\t\t\t\tresolveQueue(queue);\n\t\t\t});\n\t\t\tvar obj = {};\n\n\t\t\tobj[webpackQueues] = (fn) => (fn(queue));\n\t\t\treturn obj;\n\t\t}\n\t}\n\tvar ret = {};\n\tret[webpackQueues] = x => {};\n\tret[webpackExports] = dep;\n\treturn ret;\n}));\n__webpack_require__.a = (module, body, hasAwait) => {\n\tvar queue;\n\thasAwait && ((queue = []).d = -1);\n\tvar depQueues = new Set();\n\tvar exports = module.exports;\n\tvar currentDeps;\n\tvar outerResolve;\n\tvar reject;\n\tvar promise = new Promise((resolve, rej) => {\n\t\treject = rej;\n\t\touterResolve = resolve;\n\t});\n\tpromise[webpackExports] = exports;\n\tpromise[webpackQueues] = (fn) => (queue && fn(queue), depQueues.forEach(fn), promise[\"catch\"](x => {}));\n\tmodule.exports = promise;\n\tvar handle = (deps) => {\n\t\tcurrentDeps = wrapDeps(deps);\n\t\tvar fn;\n\t\tvar getResult = () => (currentDeps.map((d) => {\n\n\t\t\tif(d[webpackError]) throw d[webpackError];\n\t\t\treturn d[webpackExports];\n\t\t}))\n\t\tvar promise = new Promise((resolve) => {\n\t\t\tfn = () => (resolve(getResult));\n\t\t\tfn.r = 0;\n\t\t\tvar fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn))));\n\t\t\tcurrentDeps.map((dep) => (dep[webpackQueues](fnQueue)));\n\t\t});\n\t\treturn fn.r ? promise : getResult();\n\t}\n\tvar done = (err) => ((err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue))\n\tbody(handle, done);\n\tqueue && queue.d < 0 && (queue.d = 0);\n};","var inProgress = {};\nvar dataWebpackPrefix = \"grafana-azure-monitor-datasource:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { includes, filter } from 'lodash';\n\nimport { rangeUtil } from '@grafana/data';\n\nexport default class TimeGrainConverter {\n static createISO8601Duration(timeGrain: string | number, timeGrainUnit: string) {\n const timeIntervals = ['hour', 'minute', 'h', 'm'];\n if (includes(timeIntervals, timeGrainUnit)) {\n return `PT${timeGrain}${timeGrainUnit[0].toUpperCase()}`;\n }\n\n return `P${timeGrain}${timeGrainUnit[0].toUpperCase()}`;\n }\n\n static createISO8601DurationFromInterval(interval: string) {\n const timeGrain = +interval.slice(0, interval.length - 1);\n const unit = interval[interval.length - 1];\n\n if (interval.indexOf('ms') > -1) {\n return TimeGrainConverter.createISO8601Duration(1, 'm');\n }\n\n if (interval[interval.length - 1] === 's') {\n let toMinutes = (timeGrain * 60) % 60;\n\n if (toMinutes < 1) {\n toMinutes = 1;\n }\n\n return TimeGrainConverter.createISO8601Duration(toMinutes, 'm');\n }\n\n return TimeGrainConverter.createISO8601Duration(timeGrain, unit);\n }\n\n static findClosestTimeGrain(interval: string, allowedTimeGrains: string[]) {\n const timeGrains = filter(allowedTimeGrains, (o) => o !== 'auto');\n\n let closest = timeGrains[0];\n const intervalMs = rangeUtil.intervalToMs(interval);\n\n for (let i = 0; i < timeGrains.length; i++) {\n // abs (num - val) < abs (num - curr):\n if (intervalMs > rangeUtil.intervalToMs(timeGrains[i])) {\n if (i + 1 < timeGrains.length) {\n closest = timeGrains[i + 1];\n } else {\n closest = timeGrains[i];\n }\n }\n }\n\n return closest;\n }\n\n static createTimeGrainFromISO8601Duration(duration: string) {\n let offset = 1;\n if (duration.substring(0, 2) === 'PT') {\n offset = 2;\n }\n\n const value = duration.substring(offset, duration.length - 1);\n const unit = duration.substring(duration.length - 1);\n\n return value + ' ' + TimeGrainConverter.timeUnitToText(+value, unit);\n }\n\n static timeUnitToText(value: number, unit: string) {\n let text = '';\n\n if (unit === 'S') {\n text = 'second';\n }\n if (unit === 'M') {\n text = 'minute';\n }\n if (unit === 'H') {\n text = 'hour';\n }\n if (unit === 'D') {\n text = 'day';\n }\n\n if (value > 1) {\n return text + 's';\n }\n\n return text;\n }\n\n static createKbnUnitFromISO8601Duration(duration: string) {\n if (duration === 'auto') {\n return 'auto';\n }\n\n let offset = 1;\n if (duration.substring(0, 2) === 'PT') {\n offset = 2;\n }\n\n const value = duration.substring(offset, duration.length - 1);\n const unit = duration.substring(duration.length - 1);\n\n return value + TimeGrainConverter.timeUnitToKbn(+value, unit);\n }\n\n static timeUnitToKbn(value: number, unit: string) {\n if (unit === 'S') {\n return 's';\n }\n if (unit === 'M') {\n return 'm';\n }\n if (unit === 'H') {\n return 'h';\n }\n if (unit === 'D') {\n return 'd';\n }\n\n return '';\n }\n}\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","module.exports = __WEBPACK_EXTERNAL_MODULE__211__;","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","import { useState } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Collapse, Space } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorResource } from '../../types/query';\n\nexport interface ResourcePickerProps<T> {\n resources: T[];\n onChange: (resources: T[]) => void;\n renderAdvanced: (resources: T[], onChange: (resources: T[]) => void) => React.ReactNode;\n}\n\nconst AdvancedMulti = ({ resources, onChange, renderAdvanced }: ResourcePickerProps<string | AzureMonitorResource>) => {\n const [isAdvancedOpen, setIsAdvancedOpen] = useState(!!resources.length && JSON.stringify(resources).includes('$'));\n\n return (\n <div data-testid={selectors.components.queryEditor.resourcePicker.advanced.collapse}>\n <Collapse\n label={t('components.advanced-multi.label-advanced', 'Advanced')}\n isOpen={isAdvancedOpen}\n onToggle={() => setIsAdvancedOpen(!isAdvancedOpen)}\n >\n {renderAdvanced(resources, onChange)}\n <Space v={2} />\n </Collapse>\n </div>\n );\n};\n\nexport default AdvancedMulti;\n","import { Icon } from '@grafana/ui';\n\nimport { ResourceRow, ResourceRowType } from './types';\n\ninterface EntryIconProps {\n entry: ResourceRow;\n isOpen: boolean;\n}\n\nexport const EntryIcon = ({ isOpen, entry: { type } }: EntryIconProps) => {\n switch (type) {\n case ResourceRowType.Subscription:\n return <Icon name=\"layer-group\" />;\n\n case ResourceRowType.ResourceGroup:\n return <Icon name={isOpen ? 'folder-open' : 'folder'} />;\n\n case ResourceRowType.Resource:\n return <Icon name=\"cube\" />;\n\n case ResourceRowType.VariableGroup:\n return <Icon name=\"x\" />;\n\n case ResourceRowType.Variable:\n return <Icon name=\"x\" />;\n\n default:\n return null;\n }\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { ResourcePickerQueryType } from '../../resourcePicker/resourcePickerData';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n table: css({\n width: '100%',\n tableLayout: 'fixed',\n overflow: 'scroll',\n }),\n\n scrollableTable: css({\n overflow: 'auto',\n }),\n\n tableScroller: css({\n maxHeight: '35vh',\n }),\n\n selectedTableScroller: css({\n maxHeight: '35vh',\n }),\n\n header: css({\n background: theme.colors.background.secondary,\n }),\n\n row: css({\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n\n '&:last-of-type': {\n borderBottomColor: theme.colors.border.medium,\n },\n }),\n\n disabledRow: css({\n opacity: 0.5,\n }),\n\n cell: css({\n padding: theme.spacing(1, 1, 1, 0),\n width: '25%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '&:first-of-type': {\n width: '50%',\n padding: theme.spacing(1, 1, 1, 2),\n },\n }),\n\n collapseButton: css({ margin: 0 }),\n\n loadingCell: css({\n textAlign: 'center',\n }),\n\n spinner: css({\n marginBottom: 0,\n }),\n\n nestedEntry: css({\n display: 'flex',\n alignItems: 'center',\n }),\n\n entryContentItem: css({\n margin: theme.spacing(0, 1, 0, 0),\n }),\n\n truncated: css({\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }),\n\n resourceField: css({\n maxWidth: theme.spacing(36),\n overflow: 'hidden',\n }),\n\n resourceFieldButton: css({\n padding: '7px',\n textAlign: 'left',\n }),\n\n nestedRowCheckbox: css({\n zIndex: 0,\n }),\n\n selectionFooter: css({\n background: theme.colors.background.primary,\n paddingTop: theme.spacing(2),\n }),\n\n loadingWrapper: css({\n textAlign: 'center',\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n }),\n\n resultLimit: css({\n margin: '4px 0',\n fontStyle: 'italic',\n }),\n\n modal: css({\n width: theme.breakpoints.values.lg,\n maxHeight: '80vh',\n }),\n\n filterInput: (queryType: ResourcePickerQueryType) =>\n css({\n width: queryType === 'metrics' ? '30%' : '50%',\n marginTop: '10px',\n }),\n});\n\nexport default getStyles;\n","import { cx } from '@emotion/css';\nimport { useCallback, useEffect } from 'react';\nimport * as React from 'react';\n\nimport { Checkbox, IconButton, useStyles2, useTheme2, Space } from '@grafana/ui';\n\nimport { EntryIcon } from './EntryIcon';\nimport getStyles from './styles';\nimport { ResourceRow } from './types';\n\ninterface NestedEntryProps {\n level: number;\n entry: ResourceRow;\n isSelected: boolean;\n isSelectable: boolean;\n isOpen: boolean;\n isDisabled: boolean;\n scrollIntoView?: boolean;\n onToggleCollapse: (row: ResourceRow) => void;\n onSelectedChange: (row: ResourceRow, selected: boolean) => void;\n}\n\nexport const NestedEntry = ({\n entry,\n isSelected,\n isDisabled,\n isOpen,\n isSelectable,\n level,\n scrollIntoView,\n onToggleCollapse,\n onSelectedChange,\n}: NestedEntryProps) => {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const hasChildren = !!entry.children;\n\n const handleToggleCollapse = useCallback(() => {\n onToggleCollapse(entry);\n }, [onToggleCollapse, entry]);\n\n const handleSelectedChanged = useCallback(\n (ev: React.ChangeEvent<HTMLInputElement>) => {\n const isSelected = ev.target.checked;\n onSelectedChange(entry, isSelected);\n },\n [entry, onSelectedChange]\n );\n\n const checkboxId = `${scrollIntoView ? 'table' : 'summary'}_checkbox_${entry.uri}`;\n\n // Scroll to the selected element if it's not in the view\n // Only do it once, when the component is mounted\n useEffect(() => {\n if (isSelected && scrollIntoView) {\n document.getElementById(checkboxId)?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div className={styles.nestedEntry} style={{ marginLeft: level * (3 * theme.spacing.gridSize) }}>\n {hasChildren ? (\n <IconButton\n className={styles.collapseButton}\n name={isOpen ? 'angle-down' : 'angle-right'}\n aria-label={isOpen ? `Collapse ${entry.name}` : `Expand ${entry.name}`}\n onClick={handleToggleCollapse}\n id={entry.id}\n />\n ) : (\n <Space layout=\"inline\" h={2} />\n )}\n\n <Space layout=\"inline\" h={2} />\n\n {isSelectable && (\n <>\n <Checkbox\n id={checkboxId}\n onChange={handleSelectedChanged}\n disabled={isDisabled}\n value={isSelected}\n className={styles.nestedRowCheckbox}\n />\n <Space layout=\"inline\" h={2} />\n </>\n )}\n\n <EntryIcon entry={entry} isOpen={isOpen} />\n <Space layout=\"inline\" h={1} />\n\n <label htmlFor={checkboxId} className={cx(styles.entryContentItem, styles.truncated)}>\n {entry.name}\n </label>\n </div>\n );\n};\n","import { cx } from '@emotion/css';\nimport { useEffect, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { FadeTransition, LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\nimport { NestedEntry } from './NestedEntry';\nimport getStyles from './styles';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from './types';\nimport { findRow, parseResourceURI } from './utils';\n\ninterface NestedRowProps {\n row: ResourceRow;\n level: number;\n selectedRows: ResourceRowGroup;\n requestNestedRows: (row: ResourceRow) => Promise<void>;\n onRowSelectedChange: (row: ResourceRow, selected: boolean) => void;\n selectableEntryTypes: ResourceRowType[];\n disableRow: (row: ResourceRow, selectedRows: ResourceRowGroup) => boolean;\n scrollIntoView?: boolean;\n}\n\nconst NestedRow = ({\n row,\n selectedRows,\n level,\n requestNestedRows,\n onRowSelectedChange,\n selectableEntryTypes,\n scrollIntoView,\n disableRow,\n}: NestedRowProps) => {\n const styles = useStyles2(getStyles);\n const [rowStatus, setRowStatus] = useState<'open' | 'closed' | 'loading'>('closed');\n\n const isSelected = !!selectedRows.find((v) => v.uri.toLowerCase() === row.uri.toLowerCase());\n const isDisabled = !isSelected && disableRow(row, selectedRows);\n const isOpen = rowStatus === 'open';\n const parsedURI = parseResourceURI(row.uri);\n\n const onRowToggleCollapse = async () => {\n if (rowStatus === 'open') {\n setRowStatus('closed');\n return;\n }\n setRowStatus('loading');\n requestNestedRows(row)\n .then(() => setRowStatus('open'))\n .catch(() => setRowStatus('closed'));\n };\n\n // opens the resource group on load of component if there was a previously saved selection\n useEffect(() => {\n // Assuming we don't have multi-select yet\n const selectedRow = selectedRows[0];\n\n const containsChild = selectedRow && !!findRow(row.children ?? [], selectedRow.uri);\n\n if (containsChild) {\n setRowStatus('open');\n }\n }, [selectedRows, row]);\n\n return (\n <>\n <tr className={cx(styles.row, isDisabled && styles.disabledRow)} key={row.id}>\n <td className={styles.cell} title={row.name}>\n <NestedEntry\n level={level}\n isSelected={isSelected}\n isDisabled={isDisabled}\n isOpen={isOpen}\n entry={row}\n onToggleCollapse={onRowToggleCollapse}\n onSelectedChange={onRowSelectedChange}\n isSelectable={selectableEntryTypes.some((type) => type === row.type)}\n scrollIntoView={scrollIntoView}\n />\n </td>\n\n <td\n className={styles.cell}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n title={parsedURI.resourceGroup && row.type === ResourceRowType.Resource ? parsedURI.resourceGroup : '-'}\n >\n {\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n parsedURI.resourceGroup && row.type === ResourceRowType.Resource ? parsedURI.resourceGroup : '-'\n }\n </td>\n <td className={styles.cell} title={row.typeLabel}>\n {row.typeLabel}\n </td>\n\n <td className={styles.cell} title={row.location ?? '-'}>\n {row.location ?? '-'}\n </td>\n </tr>\n\n {isOpen &&\n row.children &&\n Object.keys(row.children).length > 0 &&\n row.children.map((childRow) => (\n <NestedRow\n key={childRow.uri}\n row={childRow}\n selectedRows={selectedRows}\n level={level + 1}\n requestNestedRows={requestNestedRows}\n onRowSelectedChange={onRowSelectedChange}\n selectableEntryTypes={selectableEntryTypes}\n scrollIntoView={scrollIntoView}\n disableRow={disableRow}\n />\n ))}\n\n <FadeTransition visible={rowStatus === 'loading'}>\n <tr>\n <td className={cx(styles.cell, styles.loadingCell)} colSpan={3}>\n <LoadingPlaceholder\n text={t('components.nested-row.text-loading', 'Loading...')}\n className={styles.spinner}\n />\n </td>\n </tr>\n </FadeTransition>\n </>\n );\n};\n\nexport default NestedRow;\n","import { debounce } from 'lodash';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Icon, Input } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\n\nconst Search = ({ searchFn }: { searchFn: (searchPhrase: string) => void }) => {\n const [searchFilter, setSearchFilter] = useState('');\n\n const debouncedSearch = useMemo(() => debounce(searchFn, 600), [searchFn]);\n useEffect(() => {\n return () => {\n // Stop the invocation of the debounced function after unmounting\n debouncedSearch.cancel();\n };\n }, [debouncedSearch]);\n\n return (\n <Input\n aria-label={t('components.search.aria-label-resource-search', 'Resource search')}\n prefix={<Icon name=\"search\" />}\n value={searchFilter}\n onChange={(event) => {\n const searchPhrase = event.currentTarget.value;\n setSearchFilter(searchPhrase);\n debouncedSearch(searchPhrase);\n }}\n placeholder={t('components.search.placeholder-resource-search', 'Search for a resource')}\n data-testid={selectors.components.queryEditor.resourcePicker.search.input}\n style={{ marginBottom: '10px' }}\n />\n );\n};\n\nexport default Search;\n","import { cx } from '@emotion/css';\nimport { uniqBy } from 'lodash';\nimport { useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { LocalStorageValueProvider } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config, reportInteraction } from '@grafana/runtime';\nimport {\n Alert,\n Button,\n LoadingPlaceholder,\n Modal,\n useStyles2,\n Space,\n Stack,\n Field,\n ComboboxOption,\n MultiCombobox,\n TabsBar,\n TabContent,\n Tab,\n} from '@grafana/ui';\n\nimport { resourceTypeDisplayNames } from '../../azureMetadata/resourceTypes';\nimport Datasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport ResourcePickerData, { ResourcePickerQueryType } from '../../resourcePicker/resourcePickerData';\nimport { AzureMonitorResource } from '../../types/query';\nimport { ResourceGraphFilters } from '../../types/types';\nimport messageFromError from '../../utils/messageFromError';\n\nimport AdvancedMulti from './AdvancedMulti';\nimport NestedRow from './NestedRow';\nimport Search from './Search';\nimport getStyles from './styles';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from './types';\nimport { findRows, parseMultipleResourceDetails, resourcesToStrings, matchURI, resourceToString } from './utils';\n\ninterface ResourcePickerProps<T> {\n resourcePickerData: ResourcePickerData;\n resources: T[];\n selectableEntryTypes: ResourceRowType[];\n queryType: ResourcePickerQueryType;\n datasource: Datasource;\n\n onApply: (resources: T[]) => void;\n onCancel: () => void;\n disableRow: (row: ResourceRow, selectedRows: ResourceRowGroup) => boolean;\n renderAdvanced: (resources: T[], onChange: (resources: T[]) => void) => React.ReactNode;\n selectionNotice?: (selectedRows: ResourceRowGroup) => string;\n}\n\nexport const RECENT_RESOURCES_KEY = (queryType: ResourcePickerQueryType) =>\n `grafana.datasources.azuremonitor.recent-resources.${queryType}`;\n\nconst ResourcePicker = ({\n resourcePickerData,\n resources,\n datasource,\n onApply,\n onCancel,\n selectableEntryTypes,\n queryType,\n disableRow,\n renderAdvanced,\n selectionNotice,\n}: ResourcePickerProps<string | AzureMonitorResource>) => {\n const styles = useStyles2(getStyles);\n\n const [isLoading, setIsLoading] = useState(false);\n const [rows, setRows] = useState<ResourceRowGroup>([]);\n const [selectedRows, setSelectedRows] = useState<ResourceRowGroup>([]);\n const [internalSelected, setInternalSelected] = useState(resources);\n const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);\n const [shouldShowLimitFlag, setShouldShowLimitFlag] = useState(false);\n const selectionNoticeText = selectionNotice?.(selectedRows);\n const [subscriptions, setSubscriptions] = useState<Array<ComboboxOption<string>>>([]);\n const [isLoadingSubscriptions, setIsLoadingSubscriptions] = useState(false);\n const [namespaces, setNamespaces] = useState<Array<ComboboxOption<string>>>([]);\n const [isLoadingNamespaces, setIsLoadingNamespaces] = useState(false);\n const [locations, setLocations] = useState<Array<ComboboxOption<string>>>([]);\n const [isLoadingLocations, setIsLoadingLocations] = useState(false);\n const [filters, setFilters] = useState<ResourceGraphFilters>({\n subscriptions: [],\n types: [],\n locations: [],\n });\n const [view, setView] = useState<'picker' | 'recent'>('picker');\n\n // Sync the resourceURI prop to internal state\n useEffect(() => {\n setInternalSelected(resources);\n }, [resources]);\n\n const loadFilterOptions = useCallback(async () => {\n setIsLoadingSubscriptions(true);\n const subscriptions = await datasource.getSubscriptions();\n setSubscriptions(subscriptions.map((sub) => ({ label: sub.text, value: sub.value })));\n setIsLoadingSubscriptions(false);\n\n if (queryType === 'metrics') {\n setIsLoadingNamespaces(true);\n const initialNamespaces = await datasource.getMetricNamespaces(\n subscriptions[0]?.value || datasource.getDefaultSubscriptionId()\n );\n setNamespaces(\n initialNamespaces?.map((ns) => ({\n label: resourceTypeDisplayNames[ns.value.toLowerCase()] || ns.value,\n value: ns.value,\n }))\n );\n setIsLoadingNamespaces(false);\n }\n\n setIsLoadingLocations(true);\n // We only retrieve locations from the first 3 subscriptions to avoid performance issues.\n const initialLocations = await datasource.getLocations(subscriptions.map((s) => s.value).slice(0, 3));\n setLocations(\n Array.from(initialLocations.values()).map((location) => ({\n label: location.displayName,\n value: location.name,\n }))\n );\n setIsLoadingLocations(false);\n }, [datasource, queryType]);\n\n const loadInitialData = useCallback(async () => {\n if (!isLoading) {\n try {\n setIsLoading(true);\n\n const resources = await resourcePickerData.fetchInitialRows(\n queryType,\n parseMultipleResourceDetails(internalSelected ?? {})\n );\n setRows(resources);\n } catch (error) {\n setErrorMessage(messageFromError(error));\n }\n setIsLoading(false);\n }\n }, [internalSelected, isLoading, resourcePickerData, queryType]);\n\n useEffectOnce(() => {\n loadInitialData();\n if (config.featureToggles.azureResourcePickerUpdates) {\n loadFilterOptions();\n }\n });\n\n // Avoid using empty resources\n const isValid = (r: string | AzureMonitorResource) =>\n typeof r === 'string' ? r !== '' : r.subscription && r.resourceGroup && r.resourceName && r.metricNamespace;\n\n // set selected row data whenever row or selection changes\n useEffect(() => {\n if (!internalSelected) {\n setSelectedRows([]);\n }\n\n const sanitized = internalSelected.filter((r) => isValid(r));\n const found = internalSelected && findRows(rows, resourcesToStrings(sanitized));\n if (sanitized?.length > found.length) {\n // Not all the selected items are in the current rows, so we need to generate the row\n // information for those.\n return setSelectedRows(resourcePickerData.parseRows(sanitized));\n }\n if (found && found.length) {\n return setSelectedRows(found);\n }\n return setSelectedRows([]);\n }, [internalSelected, rows, resourcePickerData]);\n\n // Request resources for an expanded resource group\n const requestNestedRows = useCallback(\n async (parentRow: ResourceRow) => {\n // clear error message (also when loading cached resources)\n setErrorMessage(undefined);\n\n // If we already have children, we don't need to re-fetch them.\n if (parentRow.children?.length) {\n return;\n }\n\n try {\n const nestedRows = await resourcePickerData.fetchAndAppendNestedRow(rows, parentRow, queryType, filters);\n setRows(nestedRows);\n } catch (error) {\n setErrorMessage(messageFromError(error));\n throw error;\n }\n },\n [resourcePickerData, rows, queryType, filters]\n );\n\n const handleSelectionChanged = useCallback(\n (row: ResourceRow, isSelected: boolean) => {\n if (isSelected) {\n const newRes = queryType === 'logs' ? row.uri : parseMultipleResourceDetails([row.uri], row.location)[0];\n const newSelected = internalSelected ? internalSelected.concat(newRes) : [newRes];\n setInternalSelected(newSelected.filter((r) => isValid(r)));\n } else {\n const newInternalSelected = internalSelected?.filter((r) => {\n return !matchURI(resourceToString(r), row.uri);\n });\n setInternalSelected(newInternalSelected);\n }\n },\n [queryType, internalSelected, setInternalSelected]\n );\n\n const handleApply = useCallback(() => {\n if (internalSelected) {\n onApply(queryType === 'logs' ? internalSelected : parseMultipleResourceDetails(internalSelected));\n }\n }, [queryType, internalSelected, onApply]);\n\n // Once the azureResourcePickerUpdates feature toggle is removed this will replace handleApply above\n const handleApplyWithLocalStorage = useCallback(\n (recentResources: ResourceRowGroup, onRecentResourcesSave: (value: ResourceRowGroup) => void) => {\n if (internalSelected) {\n const resourcesToSave = uniqBy([...selectedRows, ...recentResources], 'id');\n\n onRecentResourcesSave(resourcesToSave.slice(0, 30));\n onApply(queryType === 'logs' ? internalSelected : parseMultipleResourceDetails(internalSelected));\n }\n },\n [queryType, internalSelected, selectedRows, onApply]\n );\n\n const handleSearch = useCallback(\n async (searchWord: string) => {\n // clear errors and warnings\n setErrorMessage(undefined);\n setShouldShowLimitFlag(false);\n\n if (!searchWord) {\n loadInitialData();\n return;\n }\n\n try {\n setIsLoading(true);\n const searchResults = await resourcePickerData.search(searchWord, queryType, filters);\n setRows(searchResults);\n if (searchResults.length >= resourcePickerData.resultLimit) {\n setShouldShowLimitFlag(true);\n }\n } catch (err) {\n setErrorMessage(messageFromError(err));\n }\n setIsLoading(false);\n },\n [loadInitialData, resourcePickerData, queryType, filters]\n );\n\n const loadFilteredRows = useCallback(\n async (filters: ResourceGraphFilters) => {\n try {\n setIsLoading(true);\n const filteredRows = await resourcePickerData.fetchInitialRows(queryType, undefined, filters);\n setRows(filteredRows);\n } catch (error) {\n setErrorMessage(messageFromError(error));\n }\n setIsLoading(false);\n },\n [resourcePickerData, queryType]\n );\n\n const updateFilters = (value: Array<ComboboxOption<string>>, filterType: 'subscriptions' | 'types' | 'locations') => {\n const updatedFilters = { ...filters };\n const values = value.map((v) => v.value);\n switch (filterType) {\n case 'subscriptions':\n updatedFilters.subscriptions = values;\n break;\n case 'types':\n updatedFilters.types = values;\n break;\n case 'locations':\n updatedFilters.locations = values;\n break;\n }\n setFilters(updatedFilters);\n reportInteraction('grafana_ds_azuremonitor_resource_picker_filters', {\n subscriptionsFilters: updatedFilters.subscriptions.length,\n typesFilters: updatedFilters.types.length,\n locationsFilters: updatedFilters.locations.length,\n });\n if (\n updatedFilters.subscriptions.length === 0 &&\n updatedFilters.types.length === 0 &&\n updatedFilters.locations.length === 0\n ) {\n loadInitialData();\n return;\n }\n loadFilteredRows(updatedFilters);\n };\n\n const resourceTable = (resourceRows: ResourceRowGroup) => {\n return (\n <>\n <table className={styles.table}>\n <thead>\n <tr className={cx(styles.row, styles.header)}>\n <td className={styles.cell}>\n <Trans i18nKey=\"components.resource-picker.header-scope\">Scope</Trans>\n </td>\n <td className={styles.cell}>\n <Trans i18nKey=\"components.resource-picker.header-resource-group\">Resource Group</Trans>\n </td>\n <td className={styles.cell}>\n <Trans i18nKey=\"components.resource-picker.header-type\">Type</Trans>\n </td>\n <td className={styles.cell}>\n <Trans i18nKey=\"components.resource-picker.header-location\">Location</Trans>\n </td>\n </tr>\n </thead>\n </table>\n\n <div className={cx(styles.scrollableTable, styles.tableScroller)}>\n <table className={styles.table}>\n <tbody>\n {isLoading && (\n <tr className={cx(styles.row)}>\n <td className={styles.cell}>\n <LoadingPlaceholder text={t('components.resource-picker.text-loading', 'Loading...')} />\n </td>\n </tr>\n )}\n {!isLoading && resourceRows?.length === 0 && (\n <tr className={cx(styles.row)}>\n <td className={styles.cell} aria-live=\"polite\">\n {view === 'picker' ? (\n <Trans i18nKey=\"components.resource-picker.text-no-resources\">No resources found</Trans>\n ) : (\n <Trans i18nKey=\"components.resource-picker.text-no-recent-resources\">\n No recent resources found\n </Trans>\n )}\n </td>\n </tr>\n )}\n {!isLoading &&\n resourceRows?.map((row) => (\n <NestedRow\n key={row.uri}\n row={row}\n selectedRows={selectedRows}\n level={0}\n requestNestedRows={requestNestedRows}\n onRowSelectedChange={handleSelectionChanged}\n selectableEntryTypes={selectableEntryTypes}\n scrollIntoView={true}\n disableRow={disableRow}\n />\n ))}\n </tbody>\n </table>\n </div>\n\n <footer className={styles.selectionFooter}>\n {selectedRows.length > 0 && (\n <>\n <h5>\n <Trans i18nKey=\"components.resource-picker.heading-selection\">Selection</Trans>\n </h5>\n\n <div className={cx(styles.scrollableTable, styles.selectedTableScroller)}>\n <table className={styles.table}>\n <tbody>\n {selectedRows.map((row) => (\n <NestedRow\n key={row.uri}\n row={row}\n selectedRows={selectedRows}\n level={0}\n requestNestedRows={requestNestedRows}\n onRowSelectedChange={handleSelectionChanged}\n selectableEntryTypes={selectableEntryTypes}\n disableRow={() => false}\n />\n ))}\n </tbody>\n </table>\n </div>\n <Space v={2} />\n {selectionNoticeText?.length ? (\n <Alert title=\"\" severity=\"info\">\n {selectionNoticeText}\n </Alert>\n ) : null}\n </>\n )}\n\n {view === 'picker' && (\n <AdvancedMulti\n resources={internalSelected}\n onChange={(r) => setInternalSelected(r)}\n renderAdvanced={renderAdvanced}\n />\n )}\n {errorMessage && (\n <>\n <Space v={2} />\n <Alert\n severity=\"error\"\n title={t(\n 'components.resource-picker.title-error-occurred',\n 'An error occurred while requesting resources from Azure Monitor'\n )}\n >\n {errorMessage}\n </Alert>\n </>\n )}\n </footer>\n </>\n );\n };\n\n const baseResourcePicker = (\n recentResources?: ResourceRowGroup,\n localStorageSave?: (value: ResourceRowGroup) => void\n ) => {\n return (\n <>\n <Search searchFn={handleSearch} />\n {config.featureToggles.azureResourcePickerUpdates && (\n <Stack direction={'row'} alignItems=\"flex-start\" justifyContent={'space-between'} gap={1}>\n <Field\n label={t('components.resource-picker.subscriptions-filter', 'Subscriptions')}\n noMargin\n className={styles.filterInput(queryType)}\n >\n <MultiCombobox\n aria-label={t('components.resource-picker.subscriptions-filter', 'Subscriptions')}\n value={filters.subscriptions}\n options={subscriptions}\n onChange={(value) => updateFilters(value, 'subscriptions')}\n isClearable\n enableAllOption\n loading={isLoadingSubscriptions}\n data-testid={selectors.components.queryEditor.resourcePicker.filters.subscription.input}\n placeholder={t('components.resource-picker.subscriptions-filter-placeholder', 'Select a subscription')}\n />\n </Field>\n {queryType === 'metrics' && (\n <Field\n label={t('components.resource-picker.types-filter', 'Resource Types')}\n noMargin\n className={styles.filterInput(queryType)}\n >\n <MultiCombobox\n aria-label={t('components.resource-picker.types-filter', 'Resource Types')}\n value={filters.types}\n options={namespaces}\n onChange={(value) => updateFilters(value, 'types')}\n isClearable\n enableAllOption\n loading={isLoadingNamespaces}\n data-testid={selectors.components.queryEditor.resourcePicker.filters.type.input}\n placeholder={t('components.resource-picker.types-filter-placeholder', 'Select a resource type')}\n />\n </Field>\n )}\n <Field\n label={t('components.resource-picker.locations-filter', 'Locations')}\n noMargin\n className={styles.filterInput(queryType)}\n >\n <MultiCombobox\n aria-label={t('components.resource-picker.locations-filter', 'Locations')}\n value={filters.locations}\n options={locations}\n onChange={(value) => updateFilters(value, 'locations')}\n isClearable\n enableAllOption\n loading={isLoadingLocations}\n data-testid={selectors.components.queryEditor.resourcePicker.filters.location.input}\n placeholder={t('components.resource-picker.locations-filter-placeholder', 'Select a location')}\n />\n </Field>\n </Stack>\n )}\n {shouldShowLimitFlag ? (\n <p className={styles.resultLimit}>\n <Trans\n i18nKey=\"components.resource-picker.result-limit\"\n values={{ numResults: resourcePickerData.resultLimit }}\n >\n Showing first {'{{numResults}}'} results\n </Trans>\n </p>\n ) : (\n <Space v={2} />\n )}\n\n {resourceTable(rows)}\n\n <Modal.ButtonRow>\n <Button onClick={onCancel} variant=\"secondary\" fill=\"outline\">\n <Trans i18nKey=\"components.resource-picker.button-cancel\">Cancel</Trans>\n </Button>\n <Button\n disabled={!!errorMessage || !internalSelected.every(isValid)}\n onClick={\n localStorageSave && recentResources\n ? () => handleApplyWithLocalStorage(recentResources, localStorageSave)\n : handleApply\n }\n data-testid={selectors.components.queryEditor.resourcePicker.apply.button}\n >\n <Trans i18nKey=\"components.resource-picker.button-apply\">Apply</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n );\n };\n\n // Once the azureResourcePickerUpdates feature toggle is removed, baseResourcePicker can be merged into this function\n const tabbedResourcePicker = () => {\n return (\n <LocalStorageValueProvider<ResourceRowGroup> storageKey={RECENT_RESOURCES_KEY(queryType)} defaultValue={[]}>\n {(recentResources, onRecentResourcesSave) => {\n return (\n <>\n <TabsBar>\n <Tab\n key={'picker'}\n label={t('components.resource-picker.browse-tab', 'Browse')}\n active={view === 'picker'}\n onChangeTab={() => setView('picker')}\n />\n <Tab\n key={'recent'}\n label={t('components.resource-picker.recent-tab', 'Recent')}\n active={view === 'recent'}\n onChangeTab={() => {\n reportInteraction('grafana_ds_azuremonitor_resource_picker_recent_used', {\n recentResourcesCount: recentResources.length,\n });\n setView('recent');\n }}\n />\n </TabsBar>\n <TabContent style={{ margin: '10px' }}>\n {view === 'picker' && baseResourcePicker(recentResources, onRecentResourcesSave)}\n {view === 'recent' && (\n <>\n {resourceTable(recentResources)}\n\n <Modal.ButtonRow>\n <Button onClick={onCancel} variant=\"secondary\" fill=\"outline\">\n <Trans i18nKey=\"components.resource-picker.button-cancel\">Cancel</Trans>\n </Button>\n <Button\n disabled={!!errorMessage || !internalSelected.every(isValid)}\n onClick={handleApply}\n data-testid={selectors.components.queryEditor.resourcePicker.apply.button}\n >\n <Trans i18nKey=\"components.resource-picker.button-apply\">Apply</Trans>\n </Button>\n </Modal.ButtonRow>\n </>\n )}\n </TabContent>\n </>\n );\n }}\n </LocalStorageValueProvider>\n );\n };\n\n return config.featureToggles.azureResourcePickerUpdates ? tabbedResourcePicker() : baseResourcePicker();\n};\n\nexport default ResourcePicker;\n","import { cx } from '@emotion/css';\nimport { useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Icon, Modal, useStyles2, IconName } from '@grafana/ui';\n\nimport Datasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { ResourcePickerQueryType } from '../../resourcePicker/resourcePickerData';\nimport { AzureMonitorResource } from '../../types/query';\nimport { AzureQueryEditorFieldProps } from '../../types/types';\nimport ResourcePicker from '../ResourcePicker/ResourcePicker';\nimport getStyles from '../ResourcePicker/styles';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from '../ResourcePicker/types';\nimport { parseMultipleResourceDetails, setResources } from '../ResourcePicker/utils';\nimport { Field } from '../shared/Field';\n\ninterface ResourceFieldProps<T> extends AzureQueryEditorFieldProps {\n selectableEntryTypes: ResourceRowType[];\n queryType: ResourcePickerQueryType;\n resources: T[];\n inlineField?: boolean;\n labelWidth?: number;\n disableRow: (row: ResourceRow, selectedRows: ResourceRowGroup) => boolean;\n renderAdvanced: (resources: T[], onChange: (resources: T[]) => void) => React.ReactNode;\n selectionNotice?: (selectedRows: ResourceRowGroup) => string;\n}\n\ntype Props = ResourceFieldProps<string | AzureMonitorResource>;\n\nconst ResourceField = ({\n query,\n datasource,\n onQueryChange,\n selectableEntryTypes,\n queryType,\n resources,\n inlineField,\n labelWidth,\n disableRow,\n renderAdvanced,\n selectionNotice,\n}: Props) => {\n const styles = useStyles2(getStyles);\n const [pickerIsOpen, setPickerIsOpen] = useState(false);\n\n const handleOpenPicker = useCallback(() => {\n setPickerIsOpen(true);\n }, []);\n\n const closePicker = useCallback(() => {\n setPickerIsOpen(false);\n }, []);\n\n const handleApply = useCallback(\n (resources: Array<string | AzureMonitorResource>) => {\n onQueryChange(setResources(query, queryType, resources));\n closePicker();\n },\n [closePicker, onQueryChange, query, queryType]\n );\n\n return (\n <span data-testid={selectors.components.queryEditor.resourcePicker.select.button}>\n <Modal\n className={styles.modal}\n title={t('components.resource-field.title-select-resource', 'Select a resource')}\n isOpen={pickerIsOpen}\n onDismiss={closePicker}\n // The growing number of rows added to the modal causes a focus\n // error in the modal, making it impossible to click on new elements\n trapFocus={false}\n >\n <ResourcePicker\n resourcePickerData={datasource.resourcePickerData}\n resources={resources}\n onApply={handleApply}\n onCancel={closePicker}\n selectableEntryTypes={selectableEntryTypes}\n queryType={queryType}\n disableRow={disableRow}\n renderAdvanced={renderAdvanced}\n selectionNotice={selectionNotice}\n datasource={datasource}\n />\n </Modal>\n <Field\n label={t('components.resource-field.label-resource', 'Resource')}\n inlineField={inlineField}\n labelWidth={labelWidth}\n >\n <Button className={styles.resourceFieldButton} variant=\"secondary\" onClick={handleOpenPicker} type=\"button\">\n <ResourceLabel resources={resources} datasource={datasource} />\n </Button>\n </Field>\n </span>\n );\n};\n\ninterface ResourceLabelProps<T> {\n resources: T[];\n datasource: Datasource;\n}\n\nconst ResourceLabel = ({ resources, datasource }: ResourceLabelProps<string | AzureMonitorResource>) => {\n const [resourcesComponents, setResourcesComponents] = useState(parseMultipleResourceDetails(resources));\n\n useEffect(() => {\n setResourcesComponents(parseMultipleResourceDetails(resources));\n }, [resources]);\n\n if (!resources.length) {\n return <Trans i18nKey=\"components.resource-label.select-resource\">Select a resource</Trans>;\n }\n\n return <FormattedResource resources={resourcesComponents} />;\n};\n\ninterface FormattedResourceProps {\n resources: AzureMonitorResource[];\n}\n\nconst FormattedResource = ({ resources }: FormattedResourceProps) => {\n const styles = useStyles2(getStyles);\n\n let icon: IconName = 'cube';\n const items: string[] = [];\n resources.forEach((resource) => {\n if (resource.resourceName) {\n items.push(resource.resourceName.split('/')[0]);\n return;\n }\n if (resource.resourceGroup) {\n icon = 'folder';\n items.push(resource.resourceGroup);\n return;\n }\n if (resource.subscription) {\n icon = 'layer-group';\n items.push(resource.subscription);\n return;\n }\n });\n return (\n <span className={cx(styles.truncated, styles.resourceField)}>\n <Icon name={icon} />\n {items.join(', ')}\n </span>\n );\n};\n\nexport default ResourceField;\n","import { css } from '@emotion/css';\nimport { useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { AccessoryButton } from '@grafana/plugin-ui';\nimport { Icon, Input, Tooltip, Label, Button, useStyles2, TextLink } from '@grafana/ui';\n\nexport interface ResourcePickerProps<T> {\n resources: T[];\n onChange: (resources: T[]) => void;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n resourceList: css({ width: '100%', display: 'flex', marginBlock: theme.spacing(1) }),\n});\n\nconst AdvancedResourcePicker = ({ resources, onChange }: ResourcePickerProps<string>) => {\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n // Ensure there is at least one resource\n if (resources.length === 0) {\n onChange(['']);\n }\n }, [resources, onChange]);\n\n const onResourceChange = (index: number, resource: string) => {\n const newResources = [...resources];\n newResources[index] = resource;\n onChange(newResources);\n };\n\n const removeResource = (index: number) => {\n const newResources = [...resources];\n newResources.splice(index, 1);\n onChange(newResources);\n };\n\n const addResource = () => {\n onChange(resources.concat(''));\n };\n\n return (\n <>\n <Label>\n <h6>\n <Trans i18nKey=\"components.advanced-resource-picker.label-resource-uri\">Resource URI(s) </Trans>\n <Tooltip\n content={\n <Trans i18nKey=\"components.advanced-resource-picker.tooltip-resource-uri\">\n Manually edit the{' '}\n <TextLink\n href=\"https://docs.microsoft.com/en-us/azure/azure-monitor/logs/log-standard-columns#_resourceid\"\n external\n >\n resource uri\n </TextLink>\n . Supports the use of multiple template variables (ex: /subscriptions/$subId/resourceGroups/$rg)\n </Trans>\n }\n placement=\"right\"\n interactive={true}\n >\n <Icon name=\"info-circle\" />\n </Tooltip>\n </h6>\n </Label>\n {resources.map((resource, index) => (\n <div key={`resource-${index + 1}`}>\n <div className={styles.resourceList}>\n <Input\n id={`input-advanced-resource-picker-${index + 1}`}\n value={resource}\n onChange={(event) => onResourceChange(index, event.currentTarget.value)}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"ex: /subscriptions/$subId\"\n data-testid={`input-advanced-resource-picker-${index + 1}`}\n />\n <AccessoryButton\n aria-label={t('components.advanced-resource-picker.aria-label-remove', 'Remove')}\n icon=\"times\"\n variant=\"secondary\"\n onClick={() => removeResource(index)}\n data-testid={`remove-resource`}\n hidden={resources.length === 1}\n />\n </div>\n </div>\n ))}\n <Button\n aria-label={t('components.advanced-resource-picker.aria-label-add', 'Add')}\n icon=\"plus\"\n variant=\"secondary\"\n onClick={addResource}\n type=\"button\"\n >\n <Trans i18nKey=\"components.advanced-resource-picker.button-add-resource-uri\">Add resource URI</Trans>\n </Button>\n </>\n );\n};\n\nexport default AdvancedResourcePicker;\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import { TypedVariableModel } from '@grafana/data';\n\nimport { AzureLogAnalyticsMetadata } from '../types/logAnalyticsMetadata';\nimport { EngineSchema } from '../types/types';\n\n// matches (name):(type) = (defaultValue)\n// e.g. fromRangeStart:datetime = datetime(null)\n// - name: fromRangeStart\n// - type: datetime\n// - defaultValue: datetime(null)\nconst METADATA_FUNCTION_PARAMS = /([\\w\\W]+):([\\w]+)(?:\\s?=\\s?([\\w\\W]+))?/;\n\nfunction transformMetadataFunction(sourceSchema: AzureLogAnalyticsMetadata) {\n if (!sourceSchema.functions) {\n return [];\n }\n\n return sourceSchema.functions.map((fn) => {\n const params =\n fn.parameters &&\n fn.parameters\n .split(', ')\n .map((arg) => {\n const match = arg.match(METADATA_FUNCTION_PARAMS);\n if (!match) {\n return;\n }\n\n const [, name, type, defaultValue] = match;\n\n return {\n name,\n type,\n defaultValue,\n cslDefaultValue: defaultValue,\n };\n })\n .filter(<T>(v: T): v is Exclude<T, undefined> => !!v);\n\n return {\n name: fn.name,\n body: fn.body,\n inputParameters: params || [],\n };\n });\n}\n\nexport function transformMetadataToKustoSchema(\n sourceSchema: AzureLogAnalyticsMetadata,\n nameOrIdOrSomething: string,\n templateVariables: TypedVariableModel[]\n): EngineSchema {\n const database = {\n name: nameOrIdOrSomething,\n tables: sourceSchema.tables,\n functions: transformMetadataFunction(sourceSchema),\n majorVersion: 0,\n minorVersion: 0,\n entityGroups: [],\n };\n\n // Adding macros as known functions\n database.functions.push(\n {\n name: '$__timeFilter',\n body: '{ true }',\n inputParameters: [\n {\n name: 'timeColumn',\n type: 'System.String',\n defaultValue: '\"\"',\n cslDefaultValue: '\"\"',\n },\n ],\n },\n {\n name: '$__timeFrom',\n body: '{ datetime(2018-06-05T18:09:58.907Z) }',\n inputParameters: [],\n },\n {\n name: '$__timeTo',\n body: '{ datetime(2018-06-05T20:09:58.907Z) }',\n inputParameters: [],\n },\n {\n name: '$__escapeMulti',\n body: `{ @'\\\\grafana-vm\\Network(eth0)\\Total', @'\\\\hello!'}`,\n inputParameters: [\n {\n name: '$myVar',\n type: 'System.String',\n defaultValue: '$myVar',\n cslDefaultValue: '$myVar',\n },\n ],\n },\n {\n name: '$__contains',\n body: `{ colName in ('value1','value2') }`,\n inputParameters: [\n {\n name: 'colName',\n type: 'System.String',\n defaultValue: 'colName',\n cslDefaultValue: 'colName',\n },\n {\n name: '$myVar',\n type: 'System.String',\n defaultValue: '$myVar',\n cslDefaultValue: '$myVar',\n },\n ],\n }\n );\n\n // Adding macros as global parameters\n const globalScalarParameters = templateVariables.map((v) => {\n return {\n name: `$${v.name}`,\n type: 'dynamic',\n };\n });\n\n return {\n clusterType: 'Engine',\n cluster: {\n connectionString: nameOrIdOrSomething,\n databases: [database],\n },\n database: database,\n globalScalarParameters,\n };\n}\n","import { map } from 'lodash';\n\nimport { AzureCredentials } from '@grafana/azure-sdk';\nimport { ScopedVars } from '@grafana/data';\nimport { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport ResponseParser from '../azure_monitor/response_parser';\nimport { getCredentials } from '../credentials';\nimport { AzureMonitorQuery, AzureQueryType } from '../types/query';\nimport {\n AzureMonitorDataSourceJsonData,\n AzureMonitorDataSourceInstanceSettings,\n AzureAPIResponse,\n AzureLogsVariable,\n Workspace,\n DatasourceValidationResult,\n Subscription,\n} from '../types/types';\nimport { interpolateVariable, routeNames } from '../utils/common';\n\nimport { transformMetadataToKustoSchema } from './utils';\n\nexport default class AzureLogAnalyticsDatasource extends DataSourceWithBackend<\n AzureMonitorQuery,\n AzureMonitorDataSourceJsonData\n> {\n readonly credentials: AzureCredentials;\n resourcePath: string;\n declare applicationId: string;\n\n defaultSubscriptionId?: string;\n\n azureMonitorPath: string;\n firstWorkspace?: string;\n\n constructor(\n private instanceSettings: AzureMonitorDataSourceInstanceSettings,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.credentials = getCredentials(instanceSettings);\n\n this.resourcePath = `${routeNames.logAnalytics}`;\n this.azureMonitorPath = `${routeNames.azureMonitor}/subscriptions`;\n\n this.defaultSubscriptionId = this.instanceSettings.jsonData.subscriptionId || '';\n }\n\n isConfigured(): boolean {\n // If validation didn't return any error then the data source is properly configured\n return !this.validateDatasource();\n }\n\n filterQuery(item: AzureMonitorQuery): boolean {\n return (\n item.hide !== true &&\n ((!!item.azureLogAnalytics?.query &&\n (!!item.azureLogAnalytics.resources?.length || !!item.azureLogAnalytics.workspace)) ||\n !!item.azureTraces?.resources?.length)\n );\n }\n\n async getSubscriptions(): Promise<Array<{ text: string; value: string }>> {\n if (!this.isConfigured()) {\n return [];\n }\n\n const path = `${this.azureMonitorPath}?api-version=2019-03-01`;\n return await this.getResource<AzureAPIResponse<Subscription>>(path).then((result) => {\n return ResponseParser.parseSubscriptions(result);\n });\n }\n\n async getWorkspaces(subscription: string): Promise<AzureLogsVariable[]> {\n const response = await this.getWorkspaceList(subscription);\n\n return (\n map(response.value, (val: Workspace) => {\n return {\n text: val.name,\n value: val.id,\n };\n }) || []\n );\n }\n\n private getWorkspaceList(subscription: string): Promise<AzureAPIResponse<Workspace>> {\n const subscriptionId = this.templateSrv.replace(subscription || this.defaultSubscriptionId);\n\n const workspaceListUrl =\n this.azureMonitorPath +\n `/${subscriptionId}/providers/Microsoft.OperationalInsights/workspaces?api-version=2017-04-26-preview`;\n return this.getResource<AzureAPIResponse<Workspace>>(workspaceListUrl);\n }\n\n async getMetadata(resourceUri: string) {\n const path = `${this.resourcePath}/v1${resourceUri}/metadata`;\n\n const resp = await this.getResource(path);\n return resp;\n }\n\n async getKustoSchema(resourceUri: string) {\n const interpolatedUri = this.templateSrv.replace(resourceUri, {}, interpolateVariable);\n const metadata = await this.getMetadata(interpolatedUri);\n return transformMetadataToKustoSchema(metadata, interpolatedUri, this.templateSrv.getVariables());\n }\n\n applyTemplateVariables(target: AzureMonitorQuery, scopedVars: ScopedVars): AzureMonitorQuery {\n let item;\n if (target.queryType === AzureQueryType.LogAnalytics && target.azureLogAnalytics) {\n item = target.azureLogAnalytics;\n const resources = this.expandResourcesForMultipleVariables(item.resources, scopedVars);\n let workspace = this.templateSrv.replace(item.workspace, scopedVars);\n\n if (!workspace && !resources && this.firstWorkspace) {\n workspace = this.firstWorkspace;\n }\n\n const query = this.templateSrv.replace(item.query, scopedVars, interpolateVariable);\n\n return {\n ...target,\n queryType: target.queryType || AzureQueryType.LogAnalytics,\n\n azureLogAnalytics: {\n builderQuery: item.builderQuery,\n resultFormat: item.resultFormat,\n query,\n resources,\n // Workspace was removed in Grafana 8, but remains for backwards compat\n workspace,\n dashboardTime: item.dashboardTime,\n basicLogsQuery: item.basicLogsQuery,\n timeColumn: this.templateSrv.replace(item.timeColumn, scopedVars),\n },\n };\n }\n\n if (target.queryType === AzureQueryType.AzureTraces && target.azureTraces) {\n item = target.azureTraces;\n const resources = this.expandResourcesForMultipleVariables(item.resources, scopedVars);\n const query = this.templateSrv.replace(item.query, scopedVars, interpolateVariable);\n const traceTypes = item.traceTypes?.map((t) => this.templateSrv.replace(t, scopedVars));\n const filters = (item.filters ?? [])\n .filter((f) => !!f.property)\n .map((f) => {\n const filtersReplaced = f.filters?.map((filter) => this.templateSrv.replace(filter ?? '', scopedVars));\n return {\n property: this.templateSrv.replace(f.property, scopedVars),\n operation: f.operation || 'eq',\n filters: filtersReplaced || [],\n };\n });\n\n return {\n ...target,\n queryType: target.queryType || AzureQueryType.AzureTraces,\n\n azureTraces: {\n resultFormat: item.resultFormat,\n query,\n resources,\n operationId: this.templateSrv.replace(target.azureTraces?.operationId, scopedVars),\n filters,\n traceTypes,\n },\n };\n }\n\n return target;\n }\n\n private expandResourcesForMultipleVariables(\n resources: string[] | undefined,\n scopedVars: ScopedVars\n ): string[] | undefined {\n if (!resources) {\n return undefined;\n }\n const expandedResources: string[] = [];\n resources.forEach((r: string) => {\n const tempVars = this.templateSrv.replace(r, scopedVars, 'raw');\n const values = tempVars.split(',');\n values.forEach((value) => {\n expandedResources.push(value);\n });\n });\n return expandedResources;\n }\n\n /*\n In 7.5.x it used to be possible to set a default workspace id in the config on the auth page.\n This has been deprecated, however is still used by a few legacy template queries.\n */\n getDeprecatedDefaultWorkSpace() {\n return this.instanceSettings.jsonData.logAnalyticsDefaultWorkspace;\n }\n\n async getDefaultOrFirstSubscription(): Promise<string | undefined> {\n if (this.defaultSubscriptionId) {\n return this.defaultSubscriptionId;\n }\n const subscriptions = await this.getSubscriptions();\n return subscriptions[0]?.value;\n }\n\n async getFirstWorkspace(): Promise<string | undefined> {\n if (this.firstWorkspace) {\n return this.firstWorkspace;\n }\n\n const subscriptionId = await this.getDefaultOrFirstSubscription();\n if (!subscriptionId) {\n return undefined;\n }\n\n const workspaces = await this.getWorkspaces(subscriptionId);\n const workspace = workspaces[0]?.value;\n\n if (workspace) {\n this.firstWorkspace = workspace;\n }\n\n return workspace;\n }\n\n private validateDatasource(): DatasourceValidationResult | undefined {\n if (this.credentials.authType === 'clientsecret') {\n if (!this.isValidConfigField(this.credentials.tenantId)) {\n return {\n status: 'error',\n message: 'The Tenant Id field is required.',\n };\n }\n\n if (!this.isValidConfigField(this.credentials.clientId)) {\n return {\n status: 'error',\n message: 'The Client Id field is required.',\n };\n }\n }\n\n return undefined;\n }\n\n private isValidConfigField(field: string | undefined): boolean {\n return typeof field === 'string' && field.length > 0;\n }\n\n async getAzureLogAnalyticsCheatsheetQueries() {\n return await this.getResource(`${this.resourcePath}/v1/metadata`);\n }\n\n async getBasicLogsQueryUsage(query: AzureMonitorQuery, table: string): Promise<number> {\n const templateSrv = getTemplateSrv();\n\n const data = {\n table: table,\n resource: templateSrv.replace(query.azureLogAnalytics?.resources?.[0]),\n queryType: query.queryType,\n from: templateSrv.replace('$__from'),\n to: templateSrv.replace('$__to'),\n };\n return await this.postResource(`${this.resourcePath}/usage/basiclogs`, data);\n }\n}\n","import { find } from 'lodash';\n\nimport { AzureCredentials } from '@grafana/azure-sdk';\nimport { ScopedVars } from '@grafana/data';\nimport { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport { getCredentials } from '../credentials';\nimport TimegrainConverter from '../time_grain_converter';\nimport { AzureMetricQuery, AzureMonitorQuery, AzureQueryType } from '../types/query';\nimport {\n AzureAPIResponse,\n AzureMonitorDataSourceInstanceSettings,\n AzureMonitorDataSourceJsonData,\n AzureMonitorLocations,\n AzureMonitorMetricsMetadataResponse,\n AzureMonitorProvidersResponse,\n DatasourceValidationResult,\n GetLogAnalyticsTableResponse,\n GetMetricMetadataQuery,\n GetMetricNamespacesQuery,\n GetMetricNamesQuery,\n instanceOfLogAnalyticsTableError,\n Location,\n Metric,\n MetricNamespace,\n Subscription,\n TablePlan,\n} from '../types/types';\nimport { replaceTemplateVariables, routeNames } from '../utils/common';\nimport migrateQuery from '../utils/migrateQuery';\n\nimport ResponseParser from './response_parser';\nimport UrlBuilder from './url_builder';\n\nconst defaultDropdownValue = 'select';\n\nfunction hasValue(item?: string) {\n return !!(item && item !== defaultDropdownValue);\n}\n\nexport default class AzureMonitorDatasource extends DataSourceWithBackend<\n AzureMonitorQuery,\n AzureMonitorDataSourceJsonData\n> {\n private readonly credentials: AzureCredentials;\n apiVersion = '2018-01-01';\n apiPreviewVersion = '2017-12-01-preview';\n listByResourceGroupApiVersion = '2021-04-01';\n providerApiVersion = '2021-04-01';\n locationsApiVersion = '2020-01-01';\n defaultSubscriptionId?: string;\n basicLogsEnabled?: boolean;\n resourcePath: string;\n declare resourceGroup: string;\n declare resourceName: string;\n\n constructor(\n instanceSettings: AzureMonitorDataSourceInstanceSettings,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.credentials = getCredentials(instanceSettings);\n\n this.defaultSubscriptionId = instanceSettings.jsonData.subscriptionId;\n this.basicLogsEnabled = instanceSettings.jsonData.basicLogsEnabled;\n\n this.resourcePath = routeNames.azureMonitor;\n }\n\n isConfigured(): boolean {\n // If validation didn't return any error then the data source is properly configured\n return !this.validateDatasource();\n }\n\n filterQuery(item: AzureMonitorQuery): boolean {\n const hasResource =\n item?.azureMonitor?.resources &&\n item.azureMonitor.resources.length > 0 &&\n item.azureMonitor.resources.every((r) => hasValue(r.resourceGroup) && hasValue(r.resourceName)) &&\n hasValue(item?.azureMonitor?.metricDefinition || item?.azureMonitor?.metricNamespace);\n const hasResourceUri = hasValue(item.azureMonitor?.resourceUri);\n\n return !!(\n item.hide !== true &&\n (hasResource || hasResourceUri) &&\n hasValue(item?.azureMonitor?.metricName) &&\n hasValue(item?.azureMonitor?.aggregation)\n );\n }\n\n applyTemplateVariables(target: AzureMonitorQuery, scopedVars: ScopedVars): AzureMonitorQuery {\n const preMigrationQuery = target.azureMonitor;\n\n if (!preMigrationQuery) {\n throw new Error('Query is not a valid Azure Monitor Metrics query');\n }\n\n // These properties need to be replaced pre-migration to ensure values are correctly interpolated\n if (preMigrationQuery.resourceUri) {\n preMigrationQuery.resourceUri = this.templateSrv.replace(preMigrationQuery.resourceUri, scopedVars);\n }\n if (preMigrationQuery.metricDefinition) {\n preMigrationQuery.metricDefinition = this.templateSrv.replace(preMigrationQuery.metricDefinition, scopedVars);\n }\n\n // fix for timeGrainUnit which is a deprecated/removed field name\n if (preMigrationQuery.timeGrain && preMigrationQuery.timeGrainUnit && preMigrationQuery.timeGrain !== 'auto') {\n preMigrationQuery.timeGrain = TimegrainConverter.createISO8601Duration(\n preMigrationQuery.timeGrain,\n preMigrationQuery.timeGrainUnit\n );\n }\n\n const migratedTarget = migrateQuery(target);\n const migratedQuery = migratedTarget.azureMonitor;\n // This should never be triggered because the above error would've been thrown\n if (!migratedQuery) {\n throw new Error('Query is not a valid Azure Monitor Metrics query');\n }\n\n const subscriptionId = this.templateSrv.replace(\n migratedTarget.subscription || this.defaultSubscriptionId,\n scopedVars\n );\n const resources = migratedQuery.resources\n ?.map((r) => replaceTemplateVariables(this.templateSrv, r, scopedVars))\n .flat();\n const metricNamespace = this.templateSrv.replace(migratedQuery.metricNamespace, scopedVars);\n const customNamespace = this.templateSrv.replace(migratedQuery.customNamespace, scopedVars);\n const timeGrain = this.templateSrv.replace((migratedQuery.timeGrain || '').toString(), scopedVars);\n const aggregation = this.templateSrv.replace(migratedQuery.aggregation, scopedVars);\n const top = this.templateSrv.replace(migratedQuery.top || '', scopedVars);\n\n const dimensionFilters = (migratedQuery.dimensionFilters ?? [])\n .filter((f) => f.dimension && f.dimension !== 'None')\n .map((f) => {\n const filters = f.filters?.map((filter) => this.templateSrv.replace(filter ?? '', scopedVars));\n return {\n dimension: this.templateSrv.replace(f.dimension, scopedVars),\n operator: f.operator || 'eq',\n filters: filters || [],\n };\n });\n\n const azMonitorQuery: AzureMetricQuery = {\n ...migratedQuery,\n resources,\n metricNamespace,\n customNamespace,\n timeGrain,\n allowedTimeGrainsMs: migratedQuery.allowedTimeGrainsMs,\n metricName: this.templateSrv.replace(migratedQuery.metricName, scopedVars),\n region: this.templateSrv.replace(migratedQuery.region, scopedVars),\n aggregation: aggregation,\n dimensionFilters,\n top: top || '10',\n alias: migratedQuery.alias,\n };\n\n return {\n ...target,\n subscription: subscriptionId,\n queryType: AzureQueryType.AzureMonitor,\n azureMonitor: azMonitorQuery,\n };\n }\n\n async getSubscriptions(): Promise<Array<{ text: string; value: string }>> {\n if (!this.isConfigured()) {\n return [];\n }\n\n return this.getResource<AzureAPIResponse<Subscription>>(\n `${this.resourcePath}/subscriptions?api-version=2019-03-01`\n ).then((result) => {\n return ResponseParser.parseSubscriptions(result);\n });\n }\n\n // Note globalRegion should be false when querying custom metric namespaces\n getMetricNamespaces(query: GetMetricNamespacesQuery, globalRegion: boolean, region?: string, custom?: boolean) {\n const url = UrlBuilder.buildAzureMonitorGetMetricNamespacesUrl(\n this.resourcePath,\n this.apiPreviewVersion,\n // Only use the first query, as the metric namespaces should be the same for all queries\n this.replaceSingleTemplateVariables(query),\n globalRegion,\n this.templateSrv,\n region\n );\n return this.getResource(url)\n .then((result: AzureAPIResponse<MetricNamespace>) => {\n if (custom) {\n result.value = result.value.filter((namespace) => namespace.classification === 'Custom');\n }\n return ResponseParser.parseResponseValues(\n result,\n 'properties.metricNamespaceName',\n 'properties.metricNamespaceName'\n );\n })\n .then((result) => {\n if (url.toLowerCase().includes('microsoft.storage/storageaccounts')) {\n const storageNamespaces = [\n 'microsoft.storage/storageaccounts',\n 'microsoft.storage/storageaccounts/blobservices',\n 'microsoft.storage/storageaccounts/fileservices',\n 'microsoft.storage/storageaccounts/tableservices',\n 'microsoft.storage/storageaccounts/queueservices',\n ];\n for (const namespace of storageNamespaces) {\n if (!find(result, ['value', namespace.toLowerCase()])) {\n result.push({ value: namespace, text: namespace });\n }\n }\n }\n return result;\n })\n .catch((reason) => {\n console.error(`Failed to get metric namespaces: ${reason}`);\n return [];\n });\n }\n\n getMetricNames(query: GetMetricNamesQuery, multipleResources?: boolean, region?: string) {\n const apiVersion = multipleResources ? this.apiPreviewVersion : this.apiVersion;\n const url = UrlBuilder.buildAzureMonitorGetMetricNamesUrl(\n this.resourcePath,\n apiVersion,\n // Only use the first query, as the metric names should be the same for all queries\n this.replaceSingleTemplateVariables(query),\n this.templateSrv,\n multipleResources,\n region\n );\n return this.getResource(url).then((result: AzureAPIResponse<Metric>) => {\n return ResponseParser.parseResponseValues(result, 'name.localizedValue', 'name.value');\n });\n }\n\n getMetricMetadata(query: GetMetricMetadataQuery, multipleResources?: boolean, region?: string) {\n const { metricName } = query;\n const apiVersion = multipleResources ? this.apiPreviewVersion : this.apiVersion;\n const url = UrlBuilder.buildAzureMonitorGetMetricNamesUrl(\n this.resourcePath,\n apiVersion,\n // Only use the first query, as the metric metadata should be the same for all queries\n this.replaceSingleTemplateVariables(query),\n this.templateSrv,\n multipleResources,\n region\n );\n return this.getResource(url).then((result: AzureMonitorMetricsMetadataResponse) => {\n return ResponseParser.parseMetadata(result, this.templateSrv.replace(metricName));\n });\n }\n\n private validateDatasource(): DatasourceValidationResult | undefined {\n if (this.credentials.authType === 'clientsecret') {\n if (!this.isValidConfigField(this.credentials.tenantId)) {\n return {\n status: 'error',\n message: 'The Tenant Id field is required.',\n };\n }\n\n if (!this.isValidConfigField(this.credentials.clientId)) {\n return {\n status: 'error',\n message: 'The Client Id field is required.',\n };\n }\n }\n\n return undefined;\n }\n\n async getWorkspaceTablePlan(resources: string[], tableName: string): Promise<TablePlan> {\n let workspaceUri = '';\n\n if (resources) {\n workspaceUri = resources[0];\n }\n\n if (!workspaceUri) {\n return TablePlan.Analytics;\n }\n\n if (workspaceUri && !workspaceUri.toLowerCase().includes('microsoft.operationalinsights/workspaces')) {\n // Not a Log Analytics workspace so default to Analytics\n return TablePlan.Analytics;\n }\n\n const url = UrlBuilder.buildAzureMonitorGetLogsTableUrl(\n this.resourcePath,\n this.templateSrv.replace(workspaceUri),\n this.templateSrv.replace(tableName)\n );\n const tableResult = await this.getResource<GetLogAnalyticsTableResponse>(url);\n\n if (!tableResult || instanceOfLogAnalyticsTableError(tableResult)) {\n return TablePlan.Analytics;\n }\n\n return tableResult.properties.plan || TablePlan.Analytics;\n }\n\n private isValidConfigField(field?: string): boolean {\n return typeof field === 'string' && field.length > 0;\n }\n\n private replaceSingleTemplateVariables<T extends { [K in keyof T]: string }>(query: T, scopedVars?: ScopedVars) {\n // This method evaluates template variables supporting multiple values but only returns the first value.\n // This will work as far as the first combination of variables is valid.\n // For example if 'rg1' contains 'res1' and 'rg2' contains 'res2' then\n // { resourceGroup: ['rg1', 'rg2'], resourceName: ['res1', 'res2'] } would return\n // { resourceGroup: 'rg1', resourceName: 'res1' } which is valid but\n // { resourceGroup: ['rg1', 'rg2'], resourceName: ['res2'] } would result in\n // { resourceGroup: 'rg1', resourceName: 'res2' } which is not.\n return replaceTemplateVariables(this.templateSrv, query, scopedVars)[0];\n }\n\n async getProvider(providerName: string) {\n return await this.getResource<AzureMonitorProvidersResponse>(\n `${routeNames.azureMonitor}/providers/${providerName}?api-version=${this.providerApiVersion}`\n );\n }\n\n async getLocations(subscriptions: string[]) {\n const locationMap = new Map<string, AzureMonitorLocations>();\n for (const subscription of subscriptions) {\n const subLocations = ResponseParser.parseLocations(\n await this.getResource<AzureAPIResponse<Location>>(\n `${routeNames.azureMonitor}/subscriptions/${this.templateSrv.replace(subscription)}/locations?api-version=${\n this.locationsApiVersion\n }`\n )\n );\n for (const location of subLocations) {\n locationMap.set(location.name, location);\n }\n }\n\n return locationMap;\n }\n}\n","import { DataSourceWithBackend, reportInteraction } from '@grafana/runtime';\n\nimport { logsResourceTypes } from '../azureMetadata/logsResourceTypes';\nimport { resourceTypeDisplayNames, resourceTypes } from '../azureMetadata/resourceTypes';\nimport AzureMonitorDatasource from '../azure_monitor/azure_monitor_datasource';\nimport AzureResourceGraphDatasource from '../azure_resource_graph/azure_resource_graph_datasource';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from '../components/ResourcePicker/types';\nimport {\n addResources,\n findRow,\n parseMultipleResourceDetails,\n parseResourceDetails,\n parseResourceURI,\n resourceToString,\n} from '../components/ResourcePicker/utils';\nimport { AzureMonitorQuery, AzureMonitorResource } from '../types/query';\nimport {\n AzureMonitorDataSourceInstanceSettings,\n AzureMonitorDataSourceJsonData,\n AzureResourceSummaryItem,\n RawAzureResourceItem,\n ResourceGraphFilters,\n} from '../types/types';\n\nconst logsSupportedResourceTypesKusto = logsResourceTypes.map((v) => `\"${v}\"`).join(',');\n\nexport type ResourcePickerQueryType = 'logs' | 'metrics' | 'traces';\n\nexport default class ResourcePickerData extends DataSourceWithBackend<\n AzureMonitorQuery,\n AzureMonitorDataSourceJsonData\n> {\n resultLimit = 200;\n azureMonitorDatasource;\n azureResourceGraphDatasource;\n supportedMetricNamespaces = '';\n\n constructor(\n instanceSettings: AzureMonitorDataSourceInstanceSettings,\n azureMonitorDatasource: AzureMonitorDatasource,\n azureResourceGraphDatasource: AzureResourceGraphDatasource\n ) {\n super(instanceSettings);\n this.azureMonitorDatasource = azureMonitorDatasource;\n this.azureResourceGraphDatasource = azureResourceGraphDatasource;\n }\n\n async fetchInitialRows(\n type: ResourcePickerQueryType,\n currentSelection?: AzureMonitorResource[],\n filters?: ResourceGraphFilters\n ): Promise<ResourceRowGroup> {\n try {\n const subscriptions = await this.getSubscriptions(filters);\n\n if (!currentSelection) {\n return subscriptions;\n }\n\n let resources = subscriptions;\n const promises = currentSelection.map((selection) => async () => {\n if (selection.subscription) {\n const resourceGroupURI = `/subscriptions/${selection.subscription}/resourceGroups/${selection.resourceGroup}`;\n\n if (selection.resourceGroup && !findRow(resources, resourceGroupURI)) {\n const resourceGroups = await this.getResourceGroupsBySubscriptionId(selection.subscription, type);\n resources = addResources(resources, `/subscriptions/${selection.subscription}`, resourceGroups);\n }\n\n const resourceURI = resourceToString(selection);\n if (selection.resourceName && !findRow(resources, resourceURI)) {\n const resourcesForResourceGroup = await this.getResourcesForResourceGroup(resourceGroupURI, type);\n resources = addResources(resources, resourceGroupURI, resourcesForResourceGroup);\n }\n }\n });\n\n for (const promise of promises) {\n // Fetch resources one by one, avoiding re-fetching the same resource\n // and race conditions updating the resources array\n await promise();\n }\n\n return resources;\n } catch (err) {\n if (err instanceof Error) {\n if (err.message !== 'No subscriptions were found') {\n throw err;\n }\n if (filters) {\n return [];\n }\n }\n throw err;\n }\n }\n\n async fetchAndAppendNestedRow(\n rows: ResourceRowGroup,\n parentRow: ResourceRow,\n type: ResourcePickerQueryType,\n filters?: ResourceGraphFilters\n ): Promise<ResourceRowGroup> {\n const nestedRows =\n parentRow.type === ResourceRowType.Subscription\n ? await this.getResourceGroupsBySubscriptionId(parentRow.id, type, filters)\n : await this.getResourcesForResourceGroup(parentRow.uri, type, filters);\n\n return addResources(rows, parentRow.uri, nestedRows);\n }\n\n search = async (\n searchPhrase: string,\n searchType: ResourcePickerQueryType,\n filters: ResourceGraphFilters\n ): Promise<ResourceRowGroup> => {\n let searchQuery = 'resources';\n if (searchType === 'logs') {\n searchQuery += `\n | union resourcecontainers`;\n }\n\n const filtersQuery = createFilter(filters);\n searchQuery += `\n | where id contains \"${searchPhrase}\"\n ${await this.filterByType(searchType)}\n ${filtersQuery}\n | order by tolower(name) asc\n | limit ${this.resultLimit}\n `;\n const response =\n await this.azureResourceGraphDatasource.pagedResourceGraphRequest<RawAzureResourceItem>(searchQuery);\n return response.map((item) => {\n const parsedUri = parseResourceURI(item.id);\n if (!parsedUri || !(parsedUri.resourceName || parsedUri.resourceGroup || parsedUri.subscription)) {\n throw new Error('unable to fetch resource details');\n }\n let id = parsedUri.subscription ?? '';\n let type = ResourceRowType.Subscription;\n if (parsedUri.resourceName) {\n id = parsedUri.resourceName;\n type = ResourceRowType.Resource;\n } else if (parsedUri.resourceGroup) {\n id = parsedUri.resourceGroup;\n type = ResourceRowType.ResourceGroup;\n }\n return {\n name: item.name,\n id,\n uri: item.id,\n resourceGroupName: item.resourceGroup,\n type,\n typeLabel: resourceTypeDisplayNames[item.type] || item.type,\n location: item.location,\n };\n });\n };\n\n async getSubscriptions(filters?: ResourceGraphFilters): Promise<ResourceRowGroup> {\n const subscriptions = await this.azureResourceGraphDatasource.getSubscriptions(filters);\n\n if (!subscriptions.length) {\n throw new Error('No subscriptions were found');\n }\n\n return subscriptions.map((subscription) => ({\n name: subscription.subscriptionName,\n id: subscription.subscriptionId,\n uri: `/subscriptions/${subscription.subscriptionId}`,\n typeLabel: 'Subscription',\n type: ResourceRowType.Subscription,\n children: [],\n }));\n }\n\n async getResourceGroupsBySubscriptionId(\n subscriptionId: string,\n type: ResourcePickerQueryType,\n filters?: ResourceGraphFilters\n ): Promise<ResourceRowGroup> {\n const filter = await this.filterByType(type);\n\n const resourceGroups = await this.azureResourceGraphDatasource.getResourceGroups(subscriptionId, filter, filters);\n\n return resourceGroups.map((r) => {\n const parsedUri = parseResourceURI(r.resourceGroupURI);\n if (!parsedUri || !parsedUri.resourceGroup) {\n throw new Error('unable to fetch resource groups');\n }\n return {\n name: r.resourceGroupName,\n uri: r.resourceGroupURI,\n id: parsedUri.resourceGroup,\n type: ResourceRowType.ResourceGroup,\n typeLabel: 'Resource Group',\n children: [],\n };\n });\n }\n\n // Refactor this one out at a later date\n async getResourcesForResourceGroup(\n uri: string,\n type: ResourcePickerQueryType,\n filters?: ResourceGraphFilters\n ): Promise<ResourceRowGroup> {\n const resources = await this.azureResourceGraphDatasource.getResourceNames(\n { uri },\n await this.filterByType(type),\n filters\n );\n\n return resources.map((resource) => {\n return {\n name: resource.name,\n id: resource.name,\n uri: resource.id,\n resourceGroupName: resource.resourceGroup,\n type: ResourceRowType.Resource,\n typeLabel: resourceTypeDisplayNames[resource.type] || resource.type,\n locationDisplayName: resource.location,\n location: resource.location,\n };\n });\n }\n\n // used to make the select resource button that launches the resource picker show a nicer file path to users\n async getResourceURIDisplayProperties(resourceURI: string): Promise<AzureMonitorResource> {\n const { subscription, resourceGroup, resourceName } = parseResourceDetails(resourceURI) ?? {};\n\n if (!subscription) {\n throw new Error('Invalid resource URI passed');\n }\n\n // resourceGroupURI and resourceURI could be invalid values, but that's okay because the join\n // will just silently fail as expected\n const subscriptionURI = `/subscriptions/${subscription}`;\n const resourceGroupURI = `${subscriptionURI}/resourceGroups/${resourceGroup}`;\n\n const query = `\n resourcecontainers\n | where type == \"microsoft.resources/subscriptions\"\n | where id =~ \"${subscriptionURI}\"\n | project subscriptionName=name, subscriptionId\n\n | join kind=leftouter (\n resourcecontainers \n | where type == \"microsoft.resources/subscriptions/resourcegroups\"\n | where id =~ \"${resourceGroupURI}\"\n | project resourceGroupName=name, resourceGroup, subscriptionId\n ) on subscriptionId\n\n | join kind=leftouter (\n resources\n | where id =~ \"${resourceURI}\"\n | project resourceName=name, subscriptionId\n ) on subscriptionId\n\n | project subscriptionName, resourceGroupName, resourceName\n `;\n\n const response = await this.azureResourceGraphDatasource.pagedResourceGraphRequest<AzureResourceSummaryItem>(query);\n\n if (!response.length) {\n throw new Error('unable to fetch resource details');\n }\n\n const { subscriptionName, resourceGroupName, resourceName: responseResourceName } = response[0];\n // if the name is undefined it could be because the id is undefined or because we are using a template variable.\n // Either way we can use it as a fallback. We don't really want to interpolate these variables because we want\n // to show the user when they are using template variables `$sub/$rg/$resource`\n return {\n subscription: subscriptionName || subscription,\n resourceGroup: resourceGroupName || resourceGroup,\n resourceName: responseResourceName || resourceName,\n };\n }\n\n async getResourceURIFromWorkspace(workspace: string) {\n const response = await this.azureResourceGraphDatasource.pagedResourceGraphRequest<RawAzureResourceItem>(`\n resources\n | where properties['customerId'] == \"${workspace}\"\n | project id\n `);\n\n if (!response.length) {\n throw new Error('unable to find resource for workspace ' + workspace);\n }\n\n return response[0].id;\n }\n\n private filterByType = async (t: ResourcePickerQueryType) => {\n if (this.supportedMetricNamespaces === '' && t !== 'logs') {\n await this.fetchAllNamespaces();\n }\n return t === 'logs'\n ? `| where type in (${logsSupportedResourceTypesKusto})`\n : `| where type in (${this.supportedMetricNamespaces})`;\n };\n\n private async fetchAllNamespaces() {\n const subscriptions = await this.getSubscriptions();\n reportInteraction('grafana_ds_azuremonitor_subscriptions_loaded', { subscriptions: subscriptions.length });\n\n let supportedMetricNamespaces: Set<string> = new Set();\n // Include a predefined set of metric namespaces as a fallback in the case the user cannot query subscriptions\n resourceTypes.forEach((namespace) => {\n supportedMetricNamespaces.add(`\"${namespace}\"`);\n });\n\n // We make use of these three regions as they *should* contain every possible namespace\n const regions = ['westeurope', 'eastus', 'japaneast'];\n const getNamespacesForRegion = async (region: string) => {\n const namespaces = await this.azureMonitorDatasource.getMetricNamespaces(\n {\n // We only need to run this request against the first available subscription\n resourceUri: `/subscriptions/${subscriptions[0].id}`,\n },\n false,\n region\n );\n if (namespaces) {\n for (const namespace of namespaces) {\n supportedMetricNamespaces.add(`\"${namespace.value.toLocaleLowerCase()}\"`);\n }\n }\n };\n\n const promises = regions.map((region) => getNamespacesForRegion(region));\n await Promise.all(promises);\n\n if (supportedMetricNamespaces.size === 0) {\n throw new Error(\n 'Unable to resolve a list of valid metric namespaces. Validate the datasource configuration is correct and required permissions have been granted for all subscriptions. Grafana requires at least the Reader role to be assigned.'\n );\n }\n\n this.supportedMetricNamespaces = Array.from(supportedMetricNamespaces).join(',');\n }\n\n parseRows(resources: Array<string | AzureMonitorResource>): ResourceRow[] {\n const resourceObjs = parseMultipleResourceDetails(resources);\n const newSelectedRows: ResourceRow[] = [];\n resourceObjs.forEach((resource, i) => {\n let id = resource.resourceName;\n let name = resource.resourceName;\n let rtype = ResourceRowType.Resource;\n if (!id) {\n id = resource.resourceGroup;\n name = resource.resourceGroup;\n rtype = ResourceRowType.ResourceGroup;\n if (!id) {\n id = resource.subscription;\n name = resource.subscription;\n rtype = ResourceRowType.Subscription;\n }\n }\n newSelectedRows.push({\n id: id ?? '',\n name: name ?? '',\n type: rtype,\n uri: resourceToString(resource),\n typeLabel:\n resourceTypeDisplayNames[resource.metricNamespace?.toLowerCase() ?? ''] ?? resource.metricNamespace ?? '',\n location: resource.region,\n });\n });\n return newSelectedRows;\n }\n}\nexport const createFilter = (filters: ResourceGraphFilters) => {\n let filtersQuery = '';\n if (filters) {\n if (filters.subscriptions && filters.subscriptions.length > 0) {\n filtersQuery += `| where subscriptionId in (${filters.subscriptions.map((s) => `\"${s.toLowerCase()}\"`).join(',')})\\n`;\n }\n if (filters.types && filters.types.length > 0) {\n filtersQuery += `| where type in (${filters.types.map((t) => `\"${t.toLowerCase()}\"`).join(',')})\\n`;\n }\n if (filters.locations && filters.locations.length > 0) {\n filtersQuery += `| where location in (${filters.locations.map((l) => `\"${l.toLowerCase()}\"`).join(',')})\\n`;\n }\n }\n\n return filtersQuery;\n};\n","/**\nThis list is obtained parsing https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/resource-logs-categories\nTo programatically get the list, execute in the browser console:\n \n const namespaces = []\n document.querySelectorAll('tr').forEach((tr, index) => {\n if(index !== 0) {\n const tds = tr.cells\n const resourceProvider = tds[0].innerText.replace(\"\\n\", \"\")\n if(tds[2].innerText === \"N/A\" || !resourceProvider.match(/^(microsoft|Microsoft|Wandisco)/)) {\n return;\n }\n const logsCategories = tds[2].innerText.split(\"\\n\")\n logsCategories.forEach((category) => {\n if(category === \"\") {\n return;\n }\n const string =resourceProvider+'/'+category\n namespaces.push(string.toLowerCase())\n })\n }\n })\n namespaces;\n \nNote: Validate that the output makes sense, the format of the page may change.\n \nThat list is not complete so we should merge it with the one below. You can do with a node console:\n \n const u = require('lodash')\n const newList = [list from above]\n const logsResourceTypes = [this list]\n console.dir(u.uniq(logsResourceTypes.concat(newList)).sort(), {'maxArrayLength': null})\n \n */\n\nexport const logsResourceTypes = [\n 'microsoft.aad/domainservices',\n 'microsoft.aadiam/azureadmetrics',\n 'microsoft.aadiam/tenants',\n 'microsoft.agfoodplatform/farmbeats',\n 'microsoft.analysisservices/servers',\n 'microsoft.apimanagement/service',\n 'microsoft.app/managedenvironments',\n 'microsoft.appconfiguration/configurationstores',\n 'microsoft.appplatform/spring',\n 'microsoft.attestation/attestationproviders',\n 'microsoft.automation/automationaccounts',\n 'microsoft.autonomousdevelopmentplatform/accounts',\n 'microsoft.autonomousdevelopmentplatform/datapools',\n 'microsoft.autonomousdevelopmentplatform/workspaces',\n 'microsoft.avs/privateclouds',\n 'microsoft.azuredatatransfer/connections/flows',\n 'microsoft.azureplaywrightservice/accounts',\n 'microsoft.azuresphere/catalogs',\n 'microsoft.azurestackresourcemonitor/storageaccountmonitor',\n 'microsoft.batch/batchaccounts',\n 'microsoft.batchai/workspaces',\n 'microsoft.blockchain/blockchainmembers',\n 'microsoft.blockchain/cordamembers',\n 'microsoft.botservice/botservices',\n 'microsoft.cache/redis',\n 'microsoft.cache/redisenterprise',\n 'microsoft.cache/redisenterprise/databases',\n 'microsoft.cdn/cdnwebapplicationfirewallpolicies',\n 'microsoft.cdn/profiles',\n 'microsoft.cdn/profiles/endpoints',\n 'microsoft.chaos/experiments',\n 'microsoft.classiccompute/domainnames',\n 'microsoft.classiccompute/virtualmachines',\n 'microsoft.classicnetwork/networksecuritygroups',\n 'microsoft.classicstorage/storageaccounts',\n 'microsoft.codesigning/codesigningaccounts',\n 'microsoft.cognitiveservices/accounts',\n 'microsoft.communication/communicationservices',\n 'microsoft.community/communitytrainings',\n 'microsoft.compute/disks',\n 'microsoft.compute/virtualmachines',\n 'microsoft.compute/virtualmachinescalesets',\n 'microsoft.confidentialledger/managedccf',\n 'microsoft.confidentialledger/managedccfs',\n 'microsoft.connectedcache/cachenodes',\n 'microsoft.connectedcache/enterprisemcccustomers',\n 'microsoft.connectedcache/ispcustomers',\n 'microsoft.connectedvehicle/platformaccounts',\n 'microsoft.containerinstance/containergroups',\n 'microsoft.containerregistry/registries',\n 'microsoft.containerservice/fleets',\n 'microsoft.containerservice/managedclusters',\n 'microsoft.customerinsights/hubs',\n 'microsoft.customproviders/resourceproviders',\n 'microsoft.d365customerinsights/instances',\n 'microsoft.dashboard/grafana',\n 'microsoft.databoxedge/databoxedgedevices',\n 'microsoft.databricks/workspaces',\n 'microsoft.datacollaboration/workspaces',\n 'microsoft.datafactory/datafactories',\n 'microsoft.datafactory/factories',\n 'microsoft.datalakeanalytics/accounts',\n 'microsoft.datalakestore/accounts',\n 'microsoft.dataprotection/backupvaults',\n 'microsoft.datashare/accounts',\n 'microsoft.dbformariadb/servers',\n 'microsoft.dbformysql/flexibleservers',\n 'microsoft.dbformysql/servers',\n 'microsoft.dbforpostgresql/flexibleservers',\n 'microsoft.dbforpostgresql/servergroupsv2',\n 'microsoft.dbforpostgresql/servers',\n 'microsoft.dbforpostgresql/serversv2',\n 'microsoft.desktopvirtualization/appattachpackages',\n 'microsoft.desktopvirtualization/applicationgroups',\n 'microsoft.desktopvirtualization/hostpools',\n 'microsoft.desktopvirtualization/scalingplans',\n 'microsoft.desktopvirtualization/workspaces',\n 'microsoft.devcenter/devcenters',\n 'microsoft.devices/elasticpools/iothubtenants',\n 'microsoft.devices/iothubs',\n 'microsoft.devices/provisioningservices',\n 'microsoft.devopsinfrastructure/pools',\n 'microsoft.digitaltwins/digitaltwinsinstances',\n 'microsoft.documentdb/cassandraclusters',\n 'microsoft.documentdb/databaseaccounts',\n 'microsoft.documentdb/mongoclusters',\n 'microsoft.eventgrid/domains',\n 'microsoft.eventgrid/namespaces',\n 'microsoft.eventgrid/partnernamespaces',\n 'microsoft.eventgrid/partnertopics',\n 'microsoft.eventgrid/systemtopics',\n 'microsoft.eventgrid/topics',\n 'microsoft.eventhub/clusters',\n 'microsoft.eventhub/namespaces',\n 'microsoft.experimentation/experimentworkspaces',\n 'microsoft.fabric.admin/fabriclocations',\n 'microsoft.hardwaresecuritymodules/cloudhsmclusters',\n 'microsoft.hdinsight/clusters',\n 'microsoft.healthcareapis/services',\n 'microsoft.healthcareapis/workspaces/dicomservices',\n 'microsoft.healthcareapis/workspaces/fhirservices',\n 'microsoft.healthcareapis/workspaces/iotconnectors',\n 'microsoft.healthdataaiservices/deidservices',\n 'microsoft.insights/autoscalesettings',\n 'microsoft.insights/components',\n 'microsoft.insights/datacollectionrules',\n 'microsoft.insights/qos',\n 'microsoft.iotcentral/iotapps',\n 'microsoft.keyvault/managedhsms',\n 'microsoft.keyvault/vaults',\n 'microsoft.kubernetes/connectedclusters',\n 'microsoft.kusto/clusters',\n 'microsoft.loadtestservice/loadtests',\n 'microsoft.logic/integrationaccounts',\n 'microsoft.logic/integrationserviceenvironments',\n 'microsoft.logic/workflows',\n 'microsoft.machinelearningservices/registries',\n 'microsoft.machinelearningservices/workspaces',\n 'microsoft.machinelearningservices/workspaces/onlineendpoints',\n 'microsoft.managednetworkfabric/networkdevices',\n 'microsoft.media/mediaservices',\n 'microsoft.media/mediaservices/liveevents',\n 'microsoft.media/mediaservices/streamingendpoints',\n 'microsoft.media/videoanalyzers',\n 'microsoft.monitor/accounts',\n 'microsoft.netapp/netappaccounts/capacitypools',\n 'microsoft.netapp/netappaccounts/capacitypools/volumes',\n 'microsoft.network/applicationgateways',\n 'microsoft.network/azurefirewalls',\n 'microsoft.network/bastionhosts',\n 'microsoft.network/connections',\n 'microsoft.network/dnsresolverpolicies',\n 'microsoft.network/dnszones',\n 'microsoft.network/expressroutecircuits',\n 'microsoft.network/expressroutegateways',\n 'microsoft.network/expressrouteports',\n 'microsoft.network/frontdoors',\n 'microsoft.network/loadbalancers',\n 'microsoft.network/natgateways',\n 'microsoft.network/networkinterfaces',\n 'microsoft.network/networkmanagers',\n 'microsoft.network/networkmanagers/ipampools',\n 'microsoft.network/networksecuritygroups',\n 'microsoft.network/networksecurityperimeters',\n 'microsoft.network/networksecurityperimeters/profiles',\n 'microsoft.network/networkvirtualappliances',\n 'microsoft.network/networkwatchers',\n 'microsoft.network/networkwatchers/connectionmonitors',\n 'microsoft.network/p2svpngateways',\n 'microsoft.network/privateendpoints',\n 'microsoft.network/privatelinkservices',\n 'microsoft.network/publicipaddresses',\n 'microsoft.network/publicipprefixes',\n 'microsoft.network/trafficmanagerprofiles',\n 'microsoft.network/virtualnetworkgateways',\n 'microsoft.network/virtualnetworks',\n 'microsoft.network/vpngateways',\n 'microsoft.networkanalytics/dataproducts',\n 'microsoft.networkcloud/baremetalmachines',\n 'microsoft.networkcloud/clustermanagers',\n 'microsoft.networkcloud/clusters',\n 'microsoft.networkcloud/storageappliances',\n 'microsoft.networkfunction/azuretrafficcollectors',\n 'microsoft.notificationhubs/namespaces',\n 'microsoft.notificationhubs/namespaces/notificationhubs',\n 'microsoft.openlogisticsplatform/workspaces',\n 'microsoft.operationalinsights/workspaces',\n 'microsoft.operationsmanagement/solutions',\n 'microsoft.peering/peeringservices',\n 'microsoft.playfab/titles',\n 'microsoft.powerbi/tenants',\n 'microsoft.powerbi/tenants/workspaces',\n 'microsoft.powerbidedicated/capacities',\n 'microsoft.providerhub/providerregistrations',\n 'microsoft.purview/accounts',\n 'microsoft.recoveryservices/vaults',\n 'microsoft.relay/namespaces',\n 'microsoft.resources/subscriptions',\n 'microsoft.resources/subscriptions/resourcegroups',\n 'microsoft.search/searchservices',\n 'microsoft.security/antimalwaresettings',\n 'microsoft.security/defenderforstoragesettings',\n 'microsoft.securityinsights/settings',\n 'microsoft.servicebus/namespaces',\n 'microsoft.servicenetworking/trafficcontrollers',\n 'microsoft.signalrservice/signalr',\n 'microsoft.signalrservice/signalr/replicas',\n 'microsoft.signalrservice/webpubsub',\n 'microsoft.signalrservice/webpubsub/replicas',\n 'microsoft.singularity/accounts',\n 'microsoft.sql/managedinstances',\n 'microsoft.sql/managedinstances/databases',\n 'microsoft.sql/servers/databases',\n 'microsoft.sql/servers/elasticpools',\n 'microsoft.storage/storageaccounts',\n 'microsoft.storage/storageaccounts/blobservices',\n 'microsoft.storage/storageaccounts/fileservices',\n 'microsoft.storage/storageaccounts/queueservices',\n 'microsoft.storage/storageaccounts/tableservices',\n 'microsoft.storagecache/amlfilesystems',\n 'microsoft.storagecache/caches',\n 'microsoft.storagemover/storagemovers',\n 'microsoft.storagesync/storagesyncservices',\n 'microsoft.streamanalytics/streamingjobs',\n 'microsoft.synapse/workspaces',\n 'microsoft.synapse/workspaces/bigdatapools',\n 'microsoft.synapse/workspaces/kustopools',\n 'microsoft.synapse/workspaces/scopepools',\n 'microsoft.synapse/workspaces/sqlpools',\n 'microsoft.timeseriesinsights/environments',\n 'microsoft.timeseriesinsights/environments/eventsources',\n 'microsoft.videoindexer/accounts',\n 'microsoft.vmwarecloudsimple/virtualmachines',\n 'microsoft.web/hostingenvironments',\n 'microsoft.web/hostingenvironments/workerpools',\n 'microsoft.web/serverfarms',\n 'microsoft.web/sites',\n 'microsoft.web/sites/slots',\n 'microsoft.web/staticsites',\n 'microsoft.workloads/sapvirtualinstances',\n];\n","import { filter, find, includes, startsWith } from 'lodash';\n\nimport { ScopedVars } from '@grafana/data';\nimport { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport { resourceTypes } from '../azureMetadata/resourceTypes';\nimport { ARGScope } from '../dataquery.gen';\nimport { createFilter } from '../resourcePicker/resourcePickerData';\nimport { AzureMonitorQuery, AzureQueryType } from '../types/query';\nimport {\n AzureGetResourceNamesQuery,\n AzureGraphResponse,\n AzureMonitorDataSourceInstanceSettings,\n AzureMonitorDataSourceJsonData,\n AzureResourceGraphOptions,\n RawAzureResourceGroupItem,\n RawAzureResourceItem,\n RawAzureSubscriptionItem,\n ResourceGraphFilters,\n} from '../types/types';\nimport { interpolateVariable, replaceTemplateVariables, routeNames } from '../utils/common';\n\nexport default class AzureResourceGraphDatasource extends DataSourceWithBackend<\n AzureMonitorQuery,\n AzureMonitorDataSourceJsonData\n> {\n resourcePath: string;\n resourceGraphURL = '/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01';\n constructor(\n instanceSettings: AzureMonitorDataSourceInstanceSettings,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.resourcePath = routeNames.resourceGraph;\n }\n\n filterQuery(item: AzureMonitorQuery): boolean {\n return (\n !!item.azureResourceGraph?.query &&\n (item.azureResourceGraph.scope === ARGScope.Directory || (!!item.subscriptions && item.subscriptions.length > 0))\n );\n }\n\n applyTemplateVariables(target: AzureMonitorQuery, scopedVars: ScopedVars): AzureMonitorQuery {\n const ts = getTemplateSrv();\n const item = target.azureResourceGraph;\n if (!item) {\n return target;\n }\n const variableNames = ts.getVariables().map((v) => `$${v.name}`);\n const subscriptionVar = find(target.subscriptions, (sub) => includes(variableNames, sub));\n const interpolatedSubscriptions = ts\n .replace(subscriptionVar, scopedVars, (v: string[] | string) => v)\n .split(',')\n .filter((v) => v.length > 0);\n const subscriptions = [\n ...interpolatedSubscriptions,\n ...filter(target.subscriptions, (sub) => !includes(variableNames, sub)),\n ];\n const query = ts.replace(item.query, scopedVars, interpolateVariable);\n\n return {\n ...target,\n queryType: AzureQueryType.AzureResourceGraph,\n subscriptions,\n azureResourceGraph: {\n resultFormat: 'table',\n query,\n scope: item.scope,\n },\n };\n }\n\n async pagedResourceGraphRequest<T>(query: string, maxRetries = 1): Promise<T[]> {\n try {\n let allFetched = false;\n let $skipToken = undefined;\n let response: T[] = [];\n while (!allFetched) {\n // The response may include several pages\n let options: Partial<AzureResourceGraphOptions> = {};\n if ($skipToken) {\n options = {\n $skipToken,\n };\n }\n const queryResponse = await this.postResource<AzureGraphResponse<T[]>>(\n this.resourcePath + this.resourceGraphURL,\n {\n query: query,\n options: {\n resultFormat: 'objectArray',\n ...options,\n },\n }\n );\n response = response.concat(queryResponse.data);\n $skipToken = queryResponse.$skipToken;\n allFetched = !$skipToken;\n }\n\n return response;\n } catch (error) {\n if (maxRetries > 0) {\n return this.pagedResourceGraphRequest(query, maxRetries - 1);\n }\n\n throw error;\n }\n }\n\n async getSubscriptions(filters?: ResourceGraphFilters) {\n const filtersQuery = filters ? createFilter(filters) : '';\n const query = `\n resources\n | join kind=inner (\n ResourceContainers\n | where type == 'microsoft.resources/subscriptions'\n | project subscriptionName=name, subscriptionURI=id, subscriptionId\n ) on subscriptionId\n ${filtersQuery}\n | summarize count=count() by subscriptionName, subscriptionURI, subscriptionId\n | order by subscriptionName desc\n `;\n\n const subscriptions = await this.pagedResourceGraphRequest<RawAzureSubscriptionItem>(query, 1);\n\n return subscriptions;\n }\n\n async getResourceGroups(subscriptionId: string, metricNamespacesFilter?: string, filters?: ResourceGraphFilters) {\n // When retrieving resource groups we only need to filter by the input subscription ID\n const filtersQuery = filters ? createFilter({ ...filters, subscriptions: [subscriptionId] }) : '';\n // We can use subscription ID for the filtering here as they're unique\n // The logic of this query is:\n // Retrieve _all_ resources a user/app registration/identity has access to\n // Filter by the namespaces that support metrics (if this request is from the resource picker)\n // Filter to resources contained within the subscription\n // Conduct a left-outer join on the resourcecontainers table to allow us to get the case-sensitive resource group name\n // Return the count of resources in a group, the URI, and name of the group in ascending order\n const query = `resources \n ${metricNamespacesFilter || ''}\n | where subscriptionId == '${subscriptionId}'\n ${filtersQuery}\n | extend resourceGroupURI = strcat(\"/subscriptions/\", subscriptionId, \"/resourcegroups/\", resourceGroup) \n | join kind=leftouter (resourcecontainers \n | where type =~ 'microsoft.resources/subscriptions/resourcegroups' \n | project resourceGroupName=name, resourceGroupURI=tolower(id)) on resourceGroupURI \n | project resourceGroupName=iff(resourceGroupName != \"\", resourceGroupName, resourceGroup), resourceGroupURI\n | summarize count=count() by resourceGroupName, resourceGroupURI\n | order by tolower(resourceGroupName) asc `;\n\n const resourceGroups = await this.pagedResourceGraphRequest<RawAzureResourceGroupItem>(query);\n\n return resourceGroups;\n }\n\n async getResourceNames(\n query: AzureGetResourceNamesQuery,\n metricNamespacesFilter?: string,\n resourceFilters?: ResourceGraphFilters\n ) {\n const promises = replaceTemplateVariables(this.templateSrv, query).map(\n async ({ metricNamespace, subscriptionId, resourceGroup, region, uri }) => {\n const validMetricNamespace = startsWith(metricNamespace?.toLowerCase(), 'microsoft.storage/storageaccounts/')\n ? 'microsoft.storage/storageaccounts'\n : metricNamespace;\n\n // URI takes precedence over subscription ID and resource group\n let prefix = uri;\n if (!prefix) {\n if (subscriptionId) {\n prefix = `/subscriptions/${subscriptionId}`;\n }\n if (resourceGroup) {\n prefix += `/resourceGroups/${resourceGroup}`;\n }\n }\n\n const filters: string[] = [];\n if (validMetricNamespace) {\n // Ensure the namespace is always lowercase as that's how it's stored in Resource Graph\n filters.push(`type == '${validMetricNamespace.toLowerCase()}'`);\n }\n if (region) {\n filters.push(`location == '${region}'`);\n }\n\n const filtersQuery = resourceFilters ? createFilter(resourceFilters) : '';\n // We use URIs for the filtering here because resource group names are not unique across subscriptions\n // We also add a slash at the end of the URI to ensure we do not pull resources from a resource group\n // that has a similar naming prefix e.g. resourceGroup1 and resourceGroup10\n const query = `resources${metricNamespacesFilter ? '\\n' + metricNamespacesFilter : ''}\n | where id hasprefix \"${prefix}/\"${filtersQuery !== '' ? `\\n${filtersQuery}` : ''}\n ${filters.length > 0 ? `| where ${filters.join(' and ')}` : ''}\n | order by tolower(name) asc`;\n\n const resources = await this.pagedResourceGraphRequest<RawAzureResourceItem>(query);\n\n return resources;\n }\n );\n return (await Promise.all(promises)).flat();\n }\n\n // Retrieve metric namespaces relevant to a subscription/resource group/resource\n async getMetricNamespaces(resourceUri: string) {\n const promises = replaceTemplateVariables(this.templateSrv, { resourceUri }).map(async ({ resourceUri }) => {\n const namespacesFilter = resourceTypes.map((type) => `\"${type}\"`).join(',');\n const query = `\n resources\n | where id hasprefix \"${resourceUri}\"\n | where type in (${namespacesFilter})\n | project type\n | distinct type\n | order by tolower(type) asc`;\n\n const namespaces = await this.pagedResourceGraphRequest<RawAzureResourceItem>(query);\n\n return namespaces.map((r) => {\n return {\n text: r.type,\n value: r.type,\n };\n });\n });\n return (await Promise.all(promises)).flat();\n }\n}\n","import { AnnotationQuery } from '@grafana/data';\n\nimport { AzureMonitorQuery, AzureQueryType } from '../types/query';\n\n// The old Angular annotations editor put some properties (rawQuery, workspace, subscription)\n// on the root annotation object, rather than down in the 'targets' query value\n// This migration moves them to a Log Analytics query compatible with the React query editor\n// The old Angular annotations editor did not support any other query types.\nexport default function migrateAnnotation(annotation: AnnotationQuery<AzureMonitorQuery>) {\n const oldQuery = typeof annotation.rawQuery === 'string' ? annotation.rawQuery : null;\n const oldWorkspace = typeof annotation.workspace === 'string' ? annotation.workspace : null;\n\n if (!(oldQuery && oldWorkspace && !annotation.target?.azureLogAnalytics?.query)) {\n return annotation;\n }\n\n const newQuery: AzureMonitorQuery = {\n ...(annotation.target ?? {}),\n refId: annotation.target?.refId ?? 'Anno',\n queryType: AzureQueryType.LogAnalytics,\n azureLogAnalytics: {\n query: oldQuery,\n resources: [oldWorkspace],\n },\n };\n\n return {\n ...annotation,\n rawQuery: undefined,\n workspace: undefined,\n subscription: undefined,\n queryType: undefined,\n target: newQuery,\n };\n}\n","import { isGUIDish } from './components/ResourcePicker/utils';\nimport DataSource from './datasource';\nimport { AzureMonitorQuery, AzureQueryType } from './types/query';\nimport {\n AppInsightsGroupByQuery,\n AppInsightsMetricNameQuery,\n GrafanaTemplateVariableQuery,\n MetricNamespaceQuery,\n MetricNamesQuery,\n ResourceGroupsQuery,\n ResourceNamesQuery,\n SubscriptionsQuery,\n WorkspacesQuery,\n} from './types/templateVariables';\n\n/* \n Grafana Template Variable Functions\n ex: Subscriptions()\n\n These are helper functions we have created and exposed to users to make the writing of template variables easier. \n Due to legacy reasons, we still need to parse strings to determine if a query is a Grafana Template Variable Function \n or if it's a KQL-type query\n*/\n\nexport const grafanaTemplateVariableFnMatches = (query: string) => {\n return {\n subscriptions: query.match(/^Subscriptions\\(\\)/i),\n resourceGroups: query.match(/^ResourceGroups\\(\\)/i),\n resourceGroupsWithSub: query.match(/^ResourceGroups\\(([^\\)]+?)(,\\s?([^,]+?))?\\)/i),\n namespaces: query.match(/^Namespaces\\(([^\\)]+?)(,\\s?([^,]+?))?\\)/i),\n namespacesWithSub: query.match(/^Namespaces\\(([^,]+?),\\s?([^,]+?)\\)/i),\n resourceNames: query.match(/^ResourceNames\\(([^,]+?),\\s?([^,]+?)\\)/i),\n resourceNamesWithSub: query.match(/^ResourceNames\\(([^,]+?),\\s?([^,]+?),\\s?(.+?)\\)/i),\n metricNamespace: query.match(/^MetricNamespace\\(([^,]+?),\\s?([^,]+?),\\s?([^,]+?)\\)/i),\n metricNamespaceWithSub: query.match(/^metricnamespace\\(([^,]+?),\\s?([^,]+?),\\s?([^,]+?),\\s?([^,]+?)\\)/i),\n metricNames: query.match(/^MetricNames\\(([^,]+?),\\s?([^,]+?),\\s?([^,]+?),\\s?([^,]+?)\\)/i),\n metricNamesWithSub: query.match(/^MetricNames\\(([^,]+?),\\s?([^,]+?),\\s?([^,]+?),\\s?([^,]+?),\\s?(.+?)\\)/i),\n appInsightsMetricNameQuery: query.match(/^AppInsightsMetricNames\\(\\)/i),\n appInsightsGroupByQuery: query.match(/^AppInsightsGroupBys\\(([^\\)]+?)(,\\s?([^,]+?))?\\)/i),\n workspacesQuery: query.match(/^workspaces\\(\\)/i),\n workspacesQueryWithSub: query.match(/^workspaces\\([\"']?([^\\)]+?)[\"']?\\)/i),\n };\n};\n\nconst isGrafanaTemplateVariableFnQuery = (query: string) => {\n const matches: Record<string, RegExpMatchArray | null> = grafanaTemplateVariableFnMatches(query);\n return Object.keys(matches).some((key) => !!matches[key]);\n};\n\nconst createGrafanaTemplateVariableQuery = (rawQuery: string, datasource: DataSource): AzureMonitorQuery => {\n const matchesForQuery = grafanaTemplateVariableFnMatches(rawQuery);\n const defaultSubscriptionId = datasource.azureMonitorDatasource.defaultSubscriptionId;\n const createGrafanaTemplateVariableDetails = (): GrafanaTemplateVariableQuery => {\n // deprecated app insights template variables (will most likely remove in grafana 9)\n if (matchesForQuery.appInsightsMetricNameQuery) {\n const queryDetails: AppInsightsMetricNameQuery = { rawQuery, kind: 'AppInsightsMetricNameQuery' };\n return queryDetails;\n }\n\n if (matchesForQuery.appInsightsGroupByQuery) {\n const queryDetails: AppInsightsGroupByQuery = {\n kind: 'AppInsightsGroupByQuery',\n rawQuery,\n metricName: matchesForQuery.appInsightsGroupByQuery[1],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.subscriptions) {\n const queryDetails: SubscriptionsQuery = {\n kind: 'SubscriptionsQuery',\n rawQuery,\n };\n return queryDetails;\n }\n\n if (matchesForQuery.resourceGroupsWithSub) {\n const queryDetails: ResourceGroupsQuery = {\n kind: 'ResourceGroupsQuery',\n rawQuery,\n subscription: matchesForQuery.resourceGroupsWithSub[1],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.resourceGroups && defaultSubscriptionId) {\n const queryDetails: ResourceGroupsQuery = {\n kind: 'ResourceGroupsQuery',\n rawQuery,\n subscription: defaultSubscriptionId,\n };\n return queryDetails;\n }\n\n if (matchesForQuery.namespacesWithSub) {\n const queryDetails: MetricNamespaceQuery = {\n kind: 'MetricNamespaceQuery',\n rawQuery,\n subscription: matchesForQuery.namespacesWithSub[1],\n resourceGroup: matchesForQuery.namespacesWithSub[2],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.namespaces && defaultSubscriptionId) {\n const queryDetails: MetricNamespaceQuery = {\n kind: 'MetricNamespaceQuery',\n rawQuery,\n subscription: defaultSubscriptionId,\n resourceGroup: matchesForQuery.namespaces[1],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.resourceNamesWithSub) {\n const queryDetails: ResourceNamesQuery = {\n kind: 'ResourceNamesQuery',\n rawQuery,\n subscription: matchesForQuery.resourceNamesWithSub[1],\n resourceGroup: matchesForQuery.resourceNamesWithSub[2],\n metricNamespace: matchesForQuery.resourceNamesWithSub[3],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.resourceNames && defaultSubscriptionId) {\n const queryDetails: ResourceNamesQuery = {\n kind: 'ResourceNamesQuery',\n rawQuery,\n subscription: defaultSubscriptionId,\n resourceGroup: matchesForQuery.resourceNames[1],\n metricNamespace: matchesForQuery.resourceNames[2],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.metricNamespaceWithSub) {\n const queryDetails: MetricNamespaceQuery = {\n kind: 'MetricNamespaceQuery',\n rawQuery,\n subscription: matchesForQuery.metricNamespaceWithSub[1],\n resourceGroup: matchesForQuery.metricNamespaceWithSub[2],\n metricNamespace: matchesForQuery.metricNamespaceWithSub[3],\n resourceName: matchesForQuery.metricNamespaceWithSub[4],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.metricNamespace && defaultSubscriptionId) {\n const queryDetails: MetricNamespaceQuery = {\n kind: 'MetricNamespaceQuery',\n rawQuery,\n subscription: defaultSubscriptionId,\n resourceGroup: matchesForQuery.metricNamespace[1],\n metricNamespace: matchesForQuery.metricNamespace[2],\n resourceName: matchesForQuery.metricNamespace[3],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.metricNames && defaultSubscriptionId) {\n if (matchesForQuery.metricNames[3].indexOf(',') === -1) {\n const queryDetails: MetricNamesQuery = {\n kind: 'MetricNamesQuery',\n rawQuery,\n subscription: defaultSubscriptionId,\n resourceGroup: matchesForQuery.metricNames[1],\n metricNamespace: matchesForQuery.metricNames[2],\n resourceName: matchesForQuery.metricNames[3],\n };\n return queryDetails;\n }\n }\n\n if (matchesForQuery.metricNamesWithSub) {\n const queryDetails: MetricNamesQuery = {\n kind: 'MetricNamesQuery',\n rawQuery,\n subscription: matchesForQuery.metricNamesWithSub[1],\n resourceGroup: matchesForQuery.metricNamesWithSub[2],\n metricNamespace: matchesForQuery.metricNamesWithSub[3],\n resourceName: matchesForQuery.metricNamesWithSub[4],\n };\n return queryDetails;\n }\n\n if (matchesForQuery.workspacesQueryWithSub) {\n const queryDetails: WorkspacesQuery = {\n kind: 'WorkspacesQuery',\n rawQuery,\n subscription: (matchesForQuery.workspacesQueryWithSub[1] || '').trim(),\n };\n return queryDetails;\n }\n\n if (matchesForQuery.workspacesQuery && defaultSubscriptionId) {\n const queryDetails: WorkspacesQuery = {\n kind: 'WorkspacesQuery',\n rawQuery,\n subscription: defaultSubscriptionId,\n };\n return queryDetails;\n }\n\n // fallback\n const queryDetails: SubscriptionsQuery = { kind: 'SubscriptionsQuery', rawQuery };\n return queryDetails;\n };\n\n const query: AzureMonitorQuery = {\n refId: 'A',\n queryType: AzureQueryType.GrafanaTemplateVariableFn,\n grafanaTemplateVariableFn: createGrafanaTemplateVariableDetails(),\n subscription: defaultSubscriptionId,\n };\n return query;\n};\n\nconst createLogAnalyticsTemplateVariableQuery = async (\n rawQuery: string,\n datasource: DataSource\n): Promise<AzureMonitorQuery> => {\n const defaultSubscriptionId = datasource.azureMonitorDatasource.defaultSubscriptionId;\n let resource = '';\n // if there's an existing query, we try to get the resourcesuri from a deprecated default workspace\n // a note this is very similar logic to what is used in useMigrations but moved out of the react-hook land\n if (rawQuery) {\n const defaultWorkspaceId = datasource.azureLogAnalyticsDatasource.getDeprecatedDefaultWorkSpace();\n if (defaultWorkspaceId) {\n const isWorkspaceGUID = isGUIDish(defaultWorkspaceId);\n if (isWorkspaceGUID) {\n resource = await datasource.resourcePickerData.getResourceURIFromWorkspace(defaultWorkspaceId);\n } else {\n resource = defaultWorkspaceId;\n }\n } else {\n const maybeFirstWorkspace = await datasource.azureLogAnalyticsDatasource.getFirstWorkspace();\n resource = maybeFirstWorkspace || '';\n }\n }\n\n return {\n refId: 'A',\n queryType: AzureQueryType.LogAnalytics,\n azureLogAnalytics: {\n query: rawQuery,\n resources: resource ? [resource] : [],\n },\n subscription: defaultSubscriptionId,\n };\n};\n\nconst migrateGrafanaTemplateVariableFn = (query: AzureMonitorQuery) => {\n const { queryType, grafanaTemplateVariableFn } = query;\n if (queryType !== AzureQueryType.GrafanaTemplateVariableFn || !grafanaTemplateVariableFn) {\n return query;\n }\n\n const migratedQuery: AzureMonitorQuery = {\n ...query,\n };\n if ('subscription' in grafanaTemplateVariableFn) {\n migratedQuery.subscription = grafanaTemplateVariableFn.subscription;\n }\n if ('resourceGroup' in grafanaTemplateVariableFn) {\n migratedQuery.resourceGroup = grafanaTemplateVariableFn.resourceGroup;\n }\n if ('metricNamespace' in grafanaTemplateVariableFn) {\n migratedQuery.namespace = grafanaTemplateVariableFn.metricNamespace;\n }\n if ('resourceName' in grafanaTemplateVariableFn) {\n migratedQuery.resource = grafanaTemplateVariableFn.resourceName;\n }\n\n switch (grafanaTemplateVariableFn.kind) {\n case 'SubscriptionsQuery':\n migratedQuery.queryType = AzureQueryType.SubscriptionsQuery;\n break;\n case 'ResourceGroupsQuery':\n migratedQuery.queryType = AzureQueryType.ResourceGroupsQuery;\n break;\n case 'ResourceNamesQuery':\n migratedQuery.queryType = AzureQueryType.ResourceNamesQuery;\n break;\n case 'MetricNamespaceQuery':\n migratedQuery.queryType = AzureQueryType.NamespacesQuery;\n break;\n case 'MetricDefinitionsQuery':\n migratedQuery.queryType = AzureQueryType.NamespacesQuery;\n break;\n case 'MetricNamesQuery':\n migratedQuery.queryType = AzureQueryType.MetricNamesQuery;\n break;\n case 'WorkspacesQuery':\n migratedQuery.queryType = AzureQueryType.WorkspacesQuery;\n break;\n }\n\n return migratedQuery;\n};\n\nexport const migrateStringQueriesToObjectQueries = async (\n rawQuery: string | AzureMonitorQuery,\n options: { datasource: DataSource }\n): Promise<AzureMonitorQuery> => {\n // no need to migrate already migrated queries\n if (typeof rawQuery !== 'string') {\n return rawQuery;\n }\n\n return isGrafanaTemplateVariableFnQuery(rawQuery)\n ? createGrafanaTemplateVariableQuery(rawQuery, options.datasource)\n : createLogAnalyticsTemplateVariableQuery(rawQuery, options.datasource);\n};\n\nexport const migrateQuery = async (\n rawQuery: string | AzureMonitorQuery,\n options: { datasource: DataSource }\n): Promise<AzureMonitorQuery> => {\n let query = await migrateStringQueriesToObjectQueries(rawQuery, options);\n\n if (query.queryType === AzureQueryType.GrafanaTemplateVariableFn) {\n query = migrateGrafanaTemplateVariableFn(query);\n }\n\n return query;\n};\n","import { ChangeEvent, useCallback, useEffect, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { InlineField, Input } from '@grafana/ui';\n\nimport DataSource from '../../datasource';\nimport { migrateStringQueriesToObjectQueries } from '../../grafanaTemplateVariableFns';\nimport { AzureMonitorQuery, AzureQueryType } from '../../types/query';\n\nconst GrafanaTemplateVariableFnInput = ({\n query,\n updateQuery,\n datasource,\n}: {\n query: AzureMonitorQuery;\n updateQuery: (val: AzureMonitorQuery) => void;\n datasource: DataSource;\n}) => {\n const [inputVal, setInputVal] = useState('');\n\n useEffect(() => {\n setInputVal(query.grafanaTemplateVariableFn?.rawQuery || '');\n }, [query.grafanaTemplateVariableFn?.rawQuery]);\n\n const onRunQuery = useCallback(\n (newQuery: string) => {\n migrateStringQueriesToObjectQueries(newQuery, { datasource }).then((updatedQuery) => {\n if (updatedQuery.queryType === AzureQueryType.GrafanaTemplateVariableFn) {\n updateQuery(updatedQuery);\n } else {\n updateQuery({\n ...query,\n grafanaTemplateVariableFn: {\n kind: 'UnknownQuery',\n rawQuery: newQuery,\n },\n });\n }\n });\n },\n [datasource, query, updateQuery]\n );\n\n const onChange = (event: ChangeEvent<HTMLInputElement>) => {\n setInputVal(event.target.value);\n };\n\n return (\n <InlineField\n label={t(\n 'components.grafana-template-variable-fn-input.label-grafana-template-variable',\n 'Grafana template variable function'\n )}\n >\n <Input\n placeholder={t(\n 'components.grafana-template-variable-fn-input.placeholder-grafana-template-variable',\n 'Type a grafana template variable function, e.g. {{example}}',\n { example: 'Subscriptions()' }\n )}\n value={inputVal}\n onChange={onChange}\n onBlur={() => onRunQuery(inputVal)}\n />\n </InlineField>\n );\n};\n\nexport default GrafanaTemplateVariableFnInput;\n","import { get, isEqual } from 'lodash';\nimport { useEffect, useState } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { Alert, Field, Select, Space } from '@grafana/ui';\n\nimport UrlBuilder from '../../azure_monitor/url_builder';\nimport DataSource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { migrateQuery } from '../../grafanaTemplateVariableFns';\nimport { AzureMonitorQuery, AzureQueryType } from '../../types/query';\nimport { AzureMonitorOption } from '../../types/types';\nimport useLastError from '../../utils/useLastError';\nimport ArgQueryEditor from '../ArgQueryEditor/ArgQueryEditor';\nimport LogsQueryEditor from '../LogsQueryEditor/LogsQueryEditor';\nimport { parseResourceURI } from '../ResourcePicker/utils';\n\nimport GrafanaTemplateVariableFnInput from './GrafanaTemplateVariableFn';\n\ntype Props = {\n query: AzureMonitorQuery | string;\n onChange: (query: AzureMonitorQuery) => void;\n datasource: DataSource;\n};\n\nconst removeOption: SelectableValue = { label: '-', value: '' };\n\nconst VariableEditor = (props: Props) => {\n const { query, onChange, datasource } = props;\n\n const AZURE_QUERY_VARIABLE_TYPE_OPTIONS = [\n { label: 'Subscriptions', value: AzureQueryType.SubscriptionsQuery },\n { label: 'Resource Groups', value: AzureQueryType.ResourceGroupsQuery },\n { label: 'Namespaces', value: AzureQueryType.NamespacesQuery },\n { label: 'Regions', value: AzureQueryType.LocationsQuery },\n { label: 'Resource Names', value: AzureQueryType.ResourceNamesQuery },\n { label: 'Metric Names', value: AzureQueryType.MetricNamesQuery },\n { label: 'Workspaces', value: AzureQueryType.WorkspacesQuery },\n { label: 'Resource Graph', value: AzureQueryType.AzureResourceGraph },\n { label: 'Logs', value: AzureQueryType.LogAnalytics },\n { label: 'Custom Namespaces', value: AzureQueryType.CustomNamespacesQuery },\n { label: 'Custom Metric Names', value: AzureQueryType.CustomMetricNamesQuery },\n ];\n if (typeof props.query === 'object' && props.query.queryType === AzureQueryType.GrafanaTemplateVariableFn) {\n // Add the option for the GrafanaTemplateVariableFn only if it's already in use\n AZURE_QUERY_VARIABLE_TYPE_OPTIONS.push({\n label: 'Grafana Query Function',\n value: AzureQueryType.GrafanaTemplateVariableFn,\n });\n }\n const [variableOptionGroup, setVariableOptionGroup] = useState<{ label: string; options: AzureMonitorOption[] }>({\n label: 'Template Variables',\n options: [],\n });\n const [requireSubscription, setRequireSubscription] = useState(false);\n const [hasResourceGroup, setHasResourceGroup] = useState(false);\n const [hasNamespace, setHasNamespace] = useState(false);\n const [hasRegion, setHasRegion] = useState(false);\n const [requireResourceGroup, setRequireResourceGroup] = useState(false);\n const [requireNamespace, setRequireNamespace] = useState(false);\n const [requireCustomNamespace, setRequireCustomNamespace] = useState(false);\n const [requireResource, setRequireResource] = useState(false);\n const [subscriptions, setSubscriptions] = useState<SelectableValue[]>([]);\n const [resourceGroups, setResourceGroups] = useState<SelectableValue[]>([]);\n const [namespaces, setNamespaces] = useState<SelectableValue[]>([]);\n const [customNamespaces, setCustomNamespaces] = useState<SelectableValue[]>([]);\n const [resources, setResources] = useState<SelectableValue[]>([]);\n const [regions, setRegions] = useState<SelectableValue[]>([]);\n const [errorMessage, setError] = useLastError();\n const queryType = typeof query === 'string' ? '' : query.queryType;\n\n useEffect(() => {\n migrateQuery(query, { datasource: datasource }).then((migratedQuery) => {\n if (!isEqual(query, migratedQuery)) {\n onChange(migratedQuery);\n }\n });\n }, [query, datasource, onChange]);\n\n useEffect(() => {\n setRequireSubscription(false);\n setHasResourceGroup(false);\n setHasNamespace(false);\n setRequireResourceGroup(false);\n setRequireNamespace(false);\n setRequireResource(false);\n setRequireCustomNamespace(false);\n switch (queryType) {\n case AzureQueryType.ResourceGroupsQuery:\n case AzureQueryType.WorkspacesQuery:\n setRequireSubscription(true);\n break;\n case AzureQueryType.NamespacesQuery:\n setRequireSubscription(true);\n setHasResourceGroup(true);\n break;\n case AzureQueryType.ResourceNamesQuery:\n setRequireSubscription(true);\n setHasResourceGroup(true);\n setHasNamespace(true);\n setHasRegion(true);\n break;\n case AzureQueryType.MetricNamesQuery:\n setRequireSubscription(true);\n setRequireResourceGroup(true);\n setRequireNamespace(true);\n setRequireResource(true);\n break;\n case AzureQueryType.LocationsQuery:\n setRequireSubscription(true);\n break;\n case AzureQueryType.CustomNamespacesQuery:\n setRequireSubscription(true);\n setRequireResourceGroup(true);\n setRequireNamespace(true);\n setRequireResource(true);\n break;\n case AzureQueryType.CustomMetricNamesQuery:\n setRequireSubscription(true);\n setRequireResourceGroup(true);\n setRequireResource(true);\n setRequireNamespace(true);\n setRequireCustomNamespace(true);\n break;\n }\n }, [queryType]);\n\n useEffect(() => {\n const options: AzureMonitorOption[] = [];\n datasource.getVariablesRaw().forEach((v) => {\n if (get(v, 'query.queryType') !== queryType) {\n options.push({ label: v.label || v.name, value: `$${v.name}` });\n }\n });\n setVariableOptionGroup({\n label: 'Template Variables',\n options,\n });\n }, [datasource, queryType]);\n\n // Always retrieve subscriptions first as they're used in most template variable queries\n useEffectOnce(() => {\n datasource.getSubscriptions().then((subs) => {\n setSubscriptions(subs.map((s) => ({ label: s.text, value: s.value })));\n });\n });\n\n const subscription = typeof query === 'object' && query.subscription;\n // When subscription is set, retrieve resource groups\n useEffect(() => {\n if (subscription) {\n datasource.getResourceGroups(subscription).then((rgs) => {\n setResourceGroups(rgs.map((s) => ({ label: s.resourceGroupName, value: s.resourceGroupName })));\n });\n }\n }, [datasource, subscription]);\n\n const resourceGroup = (typeof query === 'object' && query.resourceGroup) || '';\n // When resource group is set, retrieve metric namespaces (aka resource types for a custom metric and custom metric namespace query)\n useEffect(() => {\n if (subscription && resourceGroup) {\n datasource.getMetricNamespaces(subscription, resourceGroup, undefined, false, true).then((rgs) => {\n setNamespaces(rgs.map((s) => ({ label: s.text, value: s.value })));\n });\n }\n }, [datasource, subscription, resourceGroup]);\n\n // When subscription is set also retrieve locations\n useEffect(() => {\n if (subscription) {\n datasource.azureMonitorDatasource.getLocations([subscription]).then((rgs) => {\n const regions: SelectableValue[] = [];\n rgs.forEach((r) => regions.push({ label: r.displayName, value: r.name }));\n setRegions(regions);\n });\n }\n }, [datasource, subscription, resourceGroup]);\n\n const namespace = (typeof query === 'object' && query.namespace) || '';\n // When subscription, resource group, and namespace are all set, retrieve resource names\n useEffect(() => {\n if (subscription && resourceGroup && namespace) {\n datasource.getResourceNames(subscription, resourceGroup, namespace).then((resources) => {\n setResources(\n resources.map((s) => {\n const parsedResource = parseResourceURI(s.id);\n return { label: s.name, value: parsedResource.resourceName };\n })\n );\n });\n }\n }, [datasource, subscription, resourceGroup, namespace]);\n\n const resource = (typeof query === 'object' && query.resource) || '';\n // When subscription, resource group, namespace, and resource name are all set, retrieve custom metric namespaces\n useEffect(() => {\n if (subscription && resourceGroup && namespace && resource) {\n const resourceUri = UrlBuilder.buildResourceUri(getTemplateSrv(), {\n subscription,\n resourceGroup,\n metricNamespace: namespace,\n resourceName: resource,\n });\n datasource.getMetricNamespaces(subscription, resourceGroup, resourceUri, true).then((rgs) => {\n setCustomNamespaces(rgs.map((s) => ({ label: s.text, value: s.value })));\n });\n }\n }, [datasource, subscription, resourceGroup, namespace, resource]);\n\n if (typeof query === 'string') {\n // still migrating the query\n return null;\n }\n\n const onQueryTypeChange = (selectableValue: SelectableValue) => {\n if (selectableValue.value) {\n onChange({\n ...query,\n queryType: selectableValue.value,\n subscription: undefined,\n resourceGroup: undefined,\n namespace: undefined,\n resource: undefined,\n });\n }\n };\n\n const onChangeSubscription = (selectableValue: SelectableValue) => {\n if (selectableValue.value) {\n onChange({\n ...query,\n subscription: selectableValue.value,\n resourceGroup: undefined,\n namespace: undefined,\n resource: undefined,\n });\n }\n };\n\n const onChangeResourceGroup = (selectableValue: SelectableValue) => {\n onChange({\n ...query,\n resourceGroup: selectableValue.value,\n namespace: undefined,\n resource: undefined,\n });\n };\n\n const onChangeNamespace = (selectableValue: SelectableValue) => {\n onChange({\n ...query,\n namespace: selectableValue.value,\n resource: undefined,\n });\n };\n\n const onChangeRegion = (selectableValue: SelectableValue) => {\n onChange({\n ...query,\n region: selectableValue.value,\n });\n };\n\n const onChangeResource = (selectableValue: SelectableValue) => {\n onChange({\n ...query,\n resource: selectableValue.value,\n });\n };\n\n const onQueryChange = (queryChange: AzureMonitorQuery) => {\n onChange(queryChange);\n };\n\n const onChangeCustomNamespace = (selectableValue: SelectableValue) => {\n onChange({\n ...query,\n customNamespace: selectableValue.value,\n });\n };\n\n return (\n <>\n <Field\n label={t('components.variable-editor.label-query-type', 'Query Type')}\n data-testid={selectors.components.variableEditor.queryType.input}\n >\n <Select\n aria-label={t('components.variable-editor.aria-label-select-query-type', 'Select query type')}\n onChange={onQueryTypeChange}\n options={AZURE_QUERY_VARIABLE_TYPE_OPTIONS}\n width={25}\n value={queryType}\n />\n </Field>\n {query.queryType === AzureQueryType.LogAnalytics && (\n <>\n <LogsQueryEditor\n subscriptionId={query.subscription}\n query={query}\n datasource={datasource}\n onChange={onQueryChange}\n // Not applicable as the builder isn't available in the variable editor yet\n onQueryChange={onQueryChange}\n variableOptionGroup={variableOptionGroup}\n setError={setError}\n hideFormatAs={true}\n basicLogsEnabled={datasource.azureMonitorDatasource.basicLogsEnabled ?? false}\n />\n {errorMessage && (\n <>\n <Space v={2} />\n <Alert\n severity=\"error\"\n title={t(\n 'components.variable-editor.title-error-occurred',\n 'An error occurred while requesting metadata from Azure Monitor'\n )}\n >\n {errorMessage instanceof Error ? errorMessage.message : errorMessage}\n </Alert>\n </>\n )}\n </>\n )}\n {query.queryType === AzureQueryType.GrafanaTemplateVariableFn && (\n <GrafanaTemplateVariableFnInput query={query} updateQuery={props.onChange} datasource={datasource} />\n )}\n {requireSubscription && (\n <Field\n label={t('components.variable-editor.label-subscription', 'Subscription')}\n data-testid={selectors.components.variableEditor.subscription.input}\n >\n <Select\n aria-label={t('components.variable-editor.aria-label-select-subscription', 'Select subscription')}\n onChange={onChangeSubscription}\n options={subscriptions.concat(variableOptionGroup)}\n width={25}\n value={query.subscription || null}\n />\n </Field>\n )}\n {(requireResourceGroup || hasResourceGroup) && (\n <Field\n label={t('components.variable-editor.label-resource-group', 'Resource Group')}\n data-testid={selectors.components.variableEditor.resourceGroup.input}\n >\n <Select\n aria-label={t('components.variable-editor.aria-label-select-resource-group', 'Select resource group')}\n onChange={onChangeResourceGroup}\n options={\n requireResourceGroup\n ? resourceGroups.concat(variableOptionGroup)\n : resourceGroups.concat(variableOptionGroup, removeOption)\n }\n width={25}\n value={query.resourceGroup || null}\n placeholder={\n requireResourceGroup ? undefined : t('components.variable-editor.placeholder-resource-group', 'Optional')\n }\n />\n </Field>\n )}\n {(requireNamespace || hasNamespace) && (\n <Field\n label={\n queryType === AzureQueryType.CustomNamespacesQuery || queryType === AzureQueryType.CustomMetricNamesQuery\n ? t('components.variable-editor.label-resource-type', 'Resource Type')\n : t('components.variable-editor.label-namespace', 'Namespace')\n }\n data-testid={selectors.components.variableEditor.namespace.input}\n >\n <Select\n aria-label={t('components.variable-editor.aria-label-select-namespace', 'Select namespace')}\n onChange={onChangeNamespace}\n options={\n requireNamespace\n ? namespaces.concat(variableOptionGroup)\n : namespaces.concat(variableOptionGroup, removeOption)\n }\n width={25}\n value={query.namespace || null}\n placeholder={\n requireNamespace ? undefined : t('components.variable-editor.placeholder-namespace', 'Optional')\n }\n />\n </Field>\n )}\n {hasRegion && (\n <Field\n label={t('components.variable-editor.label-region', 'Region')}\n data-testid={selectors.components.variableEditor.region.input}\n >\n <Select\n aria-label={t('components.variable-editor.aria-label-select-region', 'Select region')}\n onChange={onChangeRegion}\n options={regions.concat(variableOptionGroup)}\n width={25}\n value={query.region || null}\n placeholder={t('components.variable-editor.placeholder-region', 'Optional')}\n />\n </Field>\n )}\n {requireResource && (\n <Field\n label={t('components.variable-editor.label-resource', 'Resource')}\n data-testid={selectors.components.variableEditor.resource.input}\n >\n <Select\n aria-label={t('components.variable-editor.aria-label-select-resource', 'Select resource')}\n onChange={onChangeResource}\n options={resources.concat(variableOptionGroup)}\n width={25}\n value={query.resource || null}\n />\n </Field>\n )}\n {requireCustomNamespace && (\n <Field\n label={t('components.variable-editor.label-custom-namespace', 'Custom Namespace')}\n data-testid={selectors.components.variableEditor.customNamespace.input}\n >\n <Select\n aria-label={t('components.variable-editor.aria-label-select-custom-namespace', 'Select custom namespace')}\n onChange={onChangeCustomNamespace}\n options={\n requireCustomNamespace\n ? customNamespaces.concat(variableOptionGroup)\n : customNamespaces.concat(variableOptionGroup, removeOption)\n }\n width={25}\n value={query.customNamespace || null}\n placeholder={\n requireCustomNamespace\n ? undefined\n : t('components.variable-editor.placeholder-custom-namespace', 'Optional')\n }\n />\n </Field>\n )}\n {query.queryType === AzureQueryType.AzureResourceGraph && (\n <>\n <ArgQueryEditor\n subscriptionId={datasource.azureLogAnalyticsDatasource.defaultSubscriptionId}\n query={query}\n datasource={datasource}\n onChange={onQueryChange}\n variableOptionGroup={variableOptionGroup}\n setError={setError}\n />\n {errorMessage && (\n <>\n <Space v={2} />\n <Alert\n severity=\"error\"\n title={t(\n 'components.variable-editor.title-error-occurred',\n 'An error occurred while requesting metadata from Azure Monitor'\n )}\n >\n {errorMessage instanceof Error ? errorMessage.message : errorMessage}\n </Alert>\n </>\n )}\n </>\n )}\n </>\n );\n};\n\nexport default VariableEditor;\n","import { startsWith } from 'lodash';\nimport { from, lastValueFrom, Observable } from 'rxjs';\n\nimport {\n CustomVariableSupport,\n DataQueryRequest,\n DataQueryResponse,\n MetricFindValue,\n toDataFrame,\n} from '@grafana/data';\nimport { getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport UrlBuilder from './azure_monitor/url_builder';\nimport { parseResourceURI } from './components/ResourcePicker/utils';\nimport VariableEditor from './components/VariableEditor/VariableEditor';\nimport DataSource from './datasource';\nimport { migrateQuery } from './grafanaTemplateVariableFns';\nimport { AzureMonitorQuery, AzureQueryType } from './types/query';\nimport { GrafanaTemplateVariableQuery } from './types/templateVariables';\nimport { RawAzureResourceItem } from './types/types';\nimport messageFromError from './utils/messageFromError';\n\nexport function parseResourceNamesAsTemplateVariable(resources: RawAzureResourceItem[], metricNamespace?: string) {\n return resources.map((r) => {\n if (startsWith(metricNamespace?.toLowerCase(), 'microsoft.storage/storageaccounts/')) {\n return {\n text: r.name + '/default',\n value: r.name + '/default',\n };\n }\n\n return {\n text: r.name,\n value: parseResourceURI(r.id).resourceName,\n };\n });\n}\n\nexport class VariableSupport extends CustomVariableSupport<DataSource, AzureMonitorQuery> {\n constructor(\n private readonly datasource: DataSource,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super();\n this.datasource = datasource;\n }\n\n editor = VariableEditor;\n\n hasValue(...values: string[]) {\n return values.every((v) => !!this.templateSrv.replace(v));\n }\n\n query(request: DataQueryRequest<AzureMonitorQuery>): Observable<DataQueryResponse> {\n const promisedResults = async () => {\n const queryObj = await migrateQuery(request.targets[0], { datasource: this.datasource });\n\n try {\n switch (queryObj.queryType) {\n case AzureQueryType.SubscriptionsQuery:\n const res = await this.datasource.getSubscriptions();\n return {\n data: res?.length ? [toDataFrame(res)] : [],\n };\n case AzureQueryType.ResourceGroupsQuery:\n if (queryObj.subscription && this.hasValue(queryObj.subscription)) {\n const rgs = await this.datasource.getResourceGroups(queryObj.subscription);\n return {\n data: rgs?.length ? [toDataFrame(rgs)] : [],\n };\n }\n return { data: [] };\n case AzureQueryType.NamespacesQuery:\n if (queryObj.subscription && this.hasValue(queryObj.subscription)) {\n const namespaces = await this.datasource.getMetricNamespaces(\n queryObj.subscription,\n queryObj.resourceGroup,\n undefined,\n false,\n true\n );\n return {\n data: namespaces?.length ? [toDataFrame(namespaces)] : [],\n };\n }\n return { data: [] };\n case AzureQueryType.ResourceNamesQuery:\n if (queryObj.subscription && this.hasValue(queryObj.subscription)) {\n const resources = await this.datasource.getResourceNames(\n queryObj.subscription,\n queryObj.resourceGroup,\n queryObj.namespace,\n queryObj.region\n );\n return {\n data: resources?.length ? [toDataFrame(parseResourceNamesAsTemplateVariable(resources))] : [],\n };\n }\n return { data: [] };\n case AzureQueryType.MetricNamesQuery:\n if (\n queryObj.subscription &&\n queryObj.resourceGroup &&\n queryObj.namespace &&\n queryObj.resource &&\n this.hasValue(queryObj.subscription, queryObj.resourceGroup, queryObj.namespace, queryObj.resource)\n ) {\n const rgs = await this.datasource.getMetricNames(\n queryObj.subscription,\n queryObj.resourceGroup,\n queryObj.namespace,\n queryObj.resource\n );\n return {\n data: rgs?.length ? [toDataFrame(rgs)] : [],\n };\n }\n return { data: [] };\n case AzureQueryType.WorkspacesQuery:\n if (queryObj.subscription && this.hasValue(queryObj.subscription)) {\n const rgs = await this.datasource.getAzureLogAnalyticsWorkspaces(queryObj.subscription);\n return {\n data: rgs?.length ? [toDataFrame(rgs)] : [],\n };\n }\n return { data: [] };\n case AzureQueryType.GrafanaTemplateVariableFn:\n if (queryObj.grafanaTemplateVariableFn) {\n const templateVariablesResults = await this.callGrafanaTemplateVariableFn(\n queryObj.grafanaTemplateVariableFn\n );\n return {\n data: templateVariablesResults?.length ? [toDataFrame(templateVariablesResults)] : [],\n };\n }\n return { data: [] };\n case AzureQueryType.LocationsQuery:\n if (queryObj.subscription && this.hasValue(queryObj.subscription)) {\n const locationMap = await this.datasource.azureMonitorDatasource.getLocations([queryObj.subscription]);\n const res: Array<{ text: string; value: string }> = [];\n locationMap.forEach((loc) => {\n res.push({ text: loc.displayName, value: loc.name });\n });\n return {\n data: res?.length ? [toDataFrame(res)] : [],\n };\n }\n case AzureQueryType.CustomNamespacesQuery:\n if (\n queryObj.subscription &&\n queryObj.resourceGroup &&\n queryObj.namespace &&\n queryObj.resource &&\n this.hasValue(queryObj.subscription, queryObj.resourceGroup, queryObj.namespace, queryObj.resource)\n ) {\n const resourceUri = UrlBuilder.buildResourceUri(this.templateSrv, {\n subscription: queryObj.subscription,\n resourceGroup: queryObj.resourceGroup,\n metricNamespace: queryObj.namespace,\n resourceName: queryObj.resource,\n });\n const res = await this.datasource.getMetricNamespaces(\n queryObj.subscription,\n queryObj.resourceGroup,\n resourceUri,\n true\n );\n return {\n data: res?.length ? [toDataFrame(res)] : [],\n };\n }\n return { data: [] };\n case AzureQueryType.CustomMetricNamesQuery:\n if (\n queryObj.subscription &&\n queryObj.resourceGroup &&\n queryObj.namespace &&\n queryObj.resource &&\n queryObj.customNamespace &&\n this.hasValue(\n queryObj.subscription,\n queryObj.resourceGroup,\n queryObj.namespace,\n queryObj.resource,\n queryObj.customNamespace\n )\n ) {\n const rgs = await this.datasource.getMetricNames(\n queryObj.subscription,\n queryObj.resourceGroup,\n queryObj.namespace,\n queryObj.resource,\n queryObj.customNamespace\n );\n return {\n data: rgs?.length ? [toDataFrame(rgs)] : [],\n };\n }\n return { data: [] };\n default:\n request.targets[0] = queryObj;\n const queryResp = await lastValueFrom(this.datasource.query(request));\n return {\n data: queryResp.data,\n error: queryResp.error ? new Error(messageFromError(queryResp.error)) : undefined,\n };\n }\n } catch (err) {\n return { data: [], error: new Error(messageFromError(err)) };\n }\n };\n\n return from(promisedResults());\n }\n\n // Deprecated\n callGrafanaTemplateVariableFn(query: GrafanaTemplateVariableQuery): Promise<MetricFindValue[]> | null {\n if (query.kind === 'SubscriptionsQuery') {\n return this.datasource.getSubscriptions();\n }\n\n if (query.kind === 'ResourceGroupsQuery') {\n return this.datasource.getResourceGroups(this.replaceVariable(query.subscription)).then((rgs) => {\n if (rgs.length > 0) {\n return rgs.map((rg) => ({ text: rg.resourceGroupName, value: rg.resourceGroupName }));\n }\n\n return [];\n });\n }\n\n if (query.kind === 'ResourceNamesQuery') {\n return this.datasource\n .getResourceNames(\n this.replaceVariable(query.subscription),\n this.replaceVariable(query.resourceGroup),\n this.replaceVariable(query.metricNamespace)\n )\n .then((resources) => {\n if (resources.length > 0) {\n return parseResourceNamesAsTemplateVariable(resources, query.metricNamespace);\n }\n return [];\n });\n }\n\n if (query.kind === 'MetricNamespaceQuery') {\n return this.datasource.azureMonitorDatasource.getMetricNamespaces(query, true);\n }\n\n if (query.kind === 'MetricNamesQuery') {\n return this.datasource.azureMonitorDatasource.getMetricNames(query);\n }\n\n if (query.kind === 'WorkspacesQuery') {\n return this.datasource.azureLogAnalyticsDatasource.getWorkspaces(this.replaceVariable(query.subscription));\n }\n\n return null;\n }\n\n replaceVariable(metric: string) {\n return this.templateSrv.replace((metric || '').trim());\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AadCurrentUserCredentials, instanceOfAzureCredential, isCredentialsComplete } from '@grafana/azure-sdk';\nimport {\n DataFrame,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n LoadingState,\n QueryFixAction,\n ScopedVars,\n} from '@grafana/data';\nimport { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport AzureLogAnalyticsDatasource from './azure_log_analytics/azure_log_analytics_datasource';\nimport AzureMonitorDatasource from './azure_monitor/azure_monitor_datasource';\nimport AzureResourceGraphDatasource from './azure_resource_graph/azure_resource_graph_datasource';\nimport ResourcePickerData from './resourcePicker/resourcePickerData';\nimport { AzureMonitorQuery, AzureQueryType } from './types/query';\nimport { AzureMonitorDataSourceJsonData } from './types/types';\nimport migrateAnnotation from './utils/migrateAnnotation';\nimport migrateQuery from './utils/migrateQuery';\nimport { VariableSupport } from './variables';\n\nexport default class Datasource extends DataSourceWithBackend<AzureMonitorQuery, AzureMonitorDataSourceJsonData> {\n annotations = {\n prepareAnnotation: migrateAnnotation,\n };\n\n azureMonitorDatasource: AzureMonitorDatasource;\n azureLogAnalyticsDatasource: AzureLogAnalyticsDatasource;\n resourcePickerData: ResourcePickerData;\n azureResourceGraphDatasource: AzureResourceGraphDatasource;\n currentUserAuth: boolean;\n currentUserAuthFallbackAvailable: boolean;\n defaultSubscriptionId?: string;\n\n pseudoDatasource: {\n [key in AzureQueryType]?: AzureMonitorDatasource | AzureLogAnalyticsDatasource | AzureResourceGraphDatasource;\n } = {};\n\n declare optionsKey: Record<AzureQueryType, string>;\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<AzureMonitorDataSourceJsonData>,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.azureMonitorDatasource = new AzureMonitorDatasource(instanceSettings);\n this.azureResourceGraphDatasource = new AzureResourceGraphDatasource(instanceSettings);\n this.azureLogAnalyticsDatasource = new AzureLogAnalyticsDatasource(instanceSettings);\n this.resourcePickerData = new ResourcePickerData(\n instanceSettings,\n this.azureMonitorDatasource,\n this.azureResourceGraphDatasource\n );\n\n this.pseudoDatasource = {\n [AzureQueryType.AzureMonitor]: this.azureMonitorDatasource,\n [AzureQueryType.LogAnalytics]: this.azureLogAnalyticsDatasource,\n [AzureQueryType.AzureResourceGraph]: this.azureResourceGraphDatasource,\n [AzureQueryType.AzureTraces]: this.azureLogAnalyticsDatasource,\n };\n\n this.variables = new VariableSupport(this);\n\n const credentials = instanceSettings.jsonData.azureCredentials;\n if (credentials && instanceOfAzureCredential<AadCurrentUserCredentials>('currentuser', credentials)) {\n this.currentUserAuth = true;\n if (!credentials.serviceCredentials) {\n this.currentUserAuthFallbackAvailable = false;\n } else {\n this.currentUserAuthFallbackAvailable = isCredentialsComplete(credentials.serviceCredentials, true);\n }\n } else {\n // Handle legacy credentials case\n this.currentUserAuth = instanceSettings.jsonData.azureAuthType === 'currentuser';\n this.currentUserAuthFallbackAvailable = false;\n }\n\n this.defaultSubscriptionId = instanceSettings.jsonData.subscriptionId;\n }\n\n filterQuery(item: AzureMonitorQuery): boolean {\n if (!item.queryType) {\n return false;\n }\n\n const query = migrateQuery(item);\n const ds = this.pseudoDatasource[item.queryType];\n return ds?.filterQuery?.(query) ?? true;\n }\n\n query(options: DataQueryRequest<AzureMonitorQuery>): Observable<DataQueryResponse> {\n const byType = new Map<AzureQueryType, DataQueryRequest<AzureMonitorQuery>>();\n\n for (const baseTarget of options.targets) {\n // Migrate old query structures\n const target = migrateQuery(baseTarget);\n\n // Skip hidden or invalid queries, or ones without properties\n if (!target.queryType || target.hide || !hasQueryForType(target)) {\n continue;\n }\n\n // Initialize the list of queries\n if (!byType.has(target.queryType)) {\n const queryForType = cloneDeep(options);\n queryForType.requestId = `${queryForType.requestId}-${target.refId}`;\n queryForType.targets = [];\n byType.set(target.queryType, queryForType);\n }\n\n const queryForType = byType.get(target.queryType);\n queryForType?.targets.push(target);\n }\n\n const observables: Array<Observable<DataQueryResponse>> = Array.from(byType.entries()).map(([queryType, req]) => {\n let mappedQueryType = queryType;\n if (queryType === AzureQueryType.AzureTraces || queryType === AzureQueryType.TraceExemplar) {\n mappedQueryType = AzureQueryType.LogAnalytics;\n }\n\n const ds = this.pseudoDatasource[mappedQueryType];\n if (!ds) {\n throw new Error('Data source not created for query type ' + queryType);\n }\n\n return ds.query(req);\n });\n\n // Single query can skip merge\n if (observables.length === 1) {\n return observables[0];\n }\n\n if (observables.length > 1) {\n return forkJoin(observables).pipe(\n map((results: DataQueryResponse[]) => {\n const data: DataFrame[] = [];\n for (const result of results) {\n for (const frame of result.data) {\n data.push(frame);\n }\n }\n\n return { state: LoadingState.Done, data };\n })\n );\n }\n\n return of({ state: LoadingState.Done, data: [] });\n }\n\n targetContainsTemplate(query: AzureMonitorQuery) {\n if (query.subscription && this.templateSrv.containsTemplate(query.subscription)) {\n return true;\n }\n\n let subQuery;\n if (query.queryType === AzureQueryType.AzureMonitor) {\n subQuery = JSON.stringify(query.azureMonitor);\n } else if (query.queryType === AzureQueryType.LogAnalytics) {\n subQuery = JSON.stringify(query.azureLogAnalytics);\n } else if (query.queryType === AzureQueryType.AzureResourceGraph) {\n subQuery = JSON.stringify([query.azureResourceGraph, query.subscriptions]);\n }\n\n return !!subQuery && this.templateSrv.containsTemplate(subQuery);\n }\n\n /* Azure Monitor REST API methods */\n getMetricNamespaces(\n subscriptionId: string,\n resourceGroup?: string,\n resourceUri?: string,\n custom?: boolean,\n variableQuery?: boolean\n ) {\n let url = `/subscriptions/${subscriptionId}`;\n if (resourceGroup) {\n url += `/resourceGroups/${resourceGroup}`;\n }\n if (resourceUri) {\n url = resourceUri;\n }\n\n // For variable queries it's more efficient to use resource graph\n // Using resource graph allows us to return namespaces irrespective of a users permissions\n // This also ensure the returned namespaces are filtered to the selected resource group when specified\n if (variableQuery) {\n return this.azureResourceGraphDatasource.getMetricNamespaces(url);\n }\n\n return this.azureMonitorDatasource.getMetricNamespaces(\n { resourceUri: url },\n // If custom namespaces are being queried we do not issue the query against the global region\n // as resources have a specific region\n custom ? false : true,\n undefined,\n custom\n );\n }\n\n getMetricNames(\n subscriptionId: string,\n resourceGroup: string,\n metricNamespace: string,\n resourceName: string,\n customNamespace?: string\n ) {\n return this.azureMonitorDatasource.getMetricNames({\n subscription: subscriptionId,\n resourceGroup,\n metricNamespace,\n resourceName,\n customNamespace,\n });\n }\n\n getSubscriptions() {\n return this.azureMonitorDatasource.getSubscriptions();\n }\n\n /*Azure Log Analytics */\n getAzureLogAnalyticsWorkspaces(subscriptionId: string) {\n return this.azureLogAnalyticsDatasource.getWorkspaces(subscriptionId);\n }\n\n /*Azure Resource Graph */\n getResourceGroups(subscriptionId: string) {\n return this.azureResourceGraphDatasource.getResourceGroups(this.templateSrv.replace(subscriptionId));\n }\n\n getResourceNames(subscriptionId: string, resourceGroup?: string, metricNamespace?: string, region?: string) {\n return this.azureResourceGraphDatasource.getResourceNames({\n subscriptionId,\n resourceGroup,\n metricNamespace,\n region,\n });\n }\n\n getLocations(subscriptions: string[]) {\n return this.azureMonitorDatasource.getLocations(subscriptions);\n }\n\n interpolateVariablesInQueries(queries: AzureMonitorQuery[], scopedVars: ScopedVars): AzureMonitorQuery[] {\n const mapped = queries.map((query) => {\n if (!query.queryType) {\n return query;\n }\n\n const queryType = query.queryType === AzureQueryType.AzureTraces ? AzureQueryType.LogAnalytics : query.queryType;\n const ds = this.pseudoDatasource[queryType];\n return {\n datasource: ds?.getRef(),\n ...(ds?.applyTemplateVariables(query, scopedVars) ?? query),\n };\n });\n\n return mapped;\n }\n\n getVariables() {\n return this.templateSrv.getVariables().map((v) => `$${v.name}`);\n }\n\n getVariablesRaw() {\n return this.templateSrv.getVariables();\n }\n\n modifyQuery(query: AzureMonitorQuery, action: QueryFixAction): AzureMonitorQuery {\n if (!action.options) {\n return query;\n }\n let expression = query.azureLogAnalytics?.query;\n if (expression === undefined) {\n return query;\n }\n switch (action.type) {\n case 'ADD_FILTER': {\n expression += `\\n| where ${action.options.key} == \"${action.options.value}\"`;\n break;\n }\n case 'ADD_FILTER_OUT': {\n expression += `\\n| where ${action.options.key} != \"${action.options.value}\"`;\n break;\n }\n }\n return { ...query, azureLogAnalytics: { ...query.azureLogAnalytics, query: expression } };\n }\n\n getDefaultSubscriptionId() {\n return this.defaultSubscriptionId || '';\n }\n}\n\nfunction hasQueryForType(query: AzureMonitorQuery): boolean {\n switch (query.queryType) {\n case AzureQueryType.AzureMonitor:\n return !!query.azureMonitor;\n\n case AzureQueryType.LogAnalytics:\n return !!query.azureLogAnalytics;\n\n case AzureQueryType.AzureResourceGraph:\n return !!query.azureResourceGraph;\n\n case AzureQueryType.AzureTraces:\n case AzureQueryType.TraceExemplar:\n return !!query.azureTraces;\n\n case AzureQueryType.GrafanaTemplateVariableFn:\n return !!query.grafanaTemplateVariableFn;\n\n default:\n return false;\n }\n}\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1269__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1308__;","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","import { EntityGroup, Function, ScalarParameter, TabularParameter } from '@kusto/monaco-kusto';\n\nimport { AzureDataSourceJsonData, AzureDataSourceSecureJsonData } from '@grafana/azure-sdk';\nimport { DataSourceInstanceSettings, DataSourceSettings, PanelData, SelectableValue, TimeRange } from '@grafana/data';\n\nimport Datasource from '../datasource';\n\nimport { AzureLogAnalyticsMetadataTable } from './logAnalyticsMetadata';\nimport { AzureMonitorQuery, ResultFormat } from './query';\n\nexport type AzureMonitorDataSourceSettings = DataSourceSettings<\n AzureMonitorDataSourceJsonData,\n AzureMonitorDataSourceSecureJsonData\n>;\nexport type AzureMonitorDataSourceInstanceSettings = DataSourceInstanceSettings<AzureMonitorDataSourceJsonData>;\n\nexport interface DatasourceValidationResult {\n status: 'success' | 'error';\n message: string;\n title?: string;\n}\n\nexport interface AzureMonitorDataSourceJsonData extends AzureDataSourceJsonData {\n // monitor\n subscriptionId?: string;\n basicLogsEnabled?: boolean;\n\n // logs\n /** @deprecated Azure Logs credentials */\n azureLogAnalyticsSameAs?: boolean;\n /** @deprecated Azure Logs credentials */\n logAnalyticsTenantId?: string;\n /** @deprecated Azure Logs credentials */\n logAnalyticsClientId?: string;\n /** @deprecated Azure Logs credentials */\n logAnalyticsSubscriptionId?: string;\n /** @deprecated Azure Logs credentials */\n logAnalyticsDefaultWorkspace?: string;\n\n // App Insights\n appInsightsAppId?: string;\n\n enableSecureSocksProxy?: boolean;\n timeout?: number;\n keepCookies?: string[];\n}\n\nexport interface AzureMonitorDataSourceSecureJsonData extends AzureDataSourceSecureJsonData {\n appInsightsApiKey?: string;\n}\n\n// Represents an errors that come back from frontend requests.\n// Not totally sure how accurate this type is.\nexport type AzureMonitorErrorish = Error | string | React.ReactElement;\n\n// Azure Monitor API Types\nexport interface AzureMonitorMetricsMetadataResponse {\n value: AzureMonitorMetricMetadataItem[];\n}\n\nexport interface AzureMonitorMetricMetadataItem {\n id: string;\n resourceId: string;\n primaryAggregationType: string;\n supportedAggregationTypes: string[];\n name: AzureMonitorLocalizedValue;\n dimensions?: AzureMonitorLocalizedValue[];\n metricAvailabilities?: AzureMonitorMetricAvailabilityMetadata[];\n}\n\nexport interface AzureMonitorMetricAvailabilityMetadata {\n timeGrain: string;\n retention: string;\n}\n\nexport interface AzureMonitorLocalizedValue {\n value: string;\n localizedValue: string;\n}\n\nexport interface AzureLogsVariable {\n text: string;\n value: string;\n}\n\nexport interface AzureMonitorOption<T = string> {\n label: string;\n value: T;\n options?: AzureMonitorOption[];\n}\n\nexport type VariableOptionGroup = { label: string; options: AzureMonitorOption[] };\n\nexport interface AzureQueryEditorFieldProps {\n data?: PanelData;\n query: AzureMonitorQuery;\n datasource: Datasource;\n subscriptionId?: string;\n variableOptionGroup: VariableOptionGroup;\n schema?: EngineSchema;\n range?: TimeRange;\n\n onQueryChange: (newQuery: AzureMonitorQuery) => void;\n setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n}\n\n// To avoid a type issue we redeclare the EngineSchema type from @kusto/monaco-kusto\nexport interface EngineSchema {\n clusterType: 'Engine';\n cluster: {\n connectionString: string;\n databases: Database[];\n };\n database: Database | undefined;\n globalScalarParameters?: ScalarParameter[];\n globalTabularParameters?: TabularParameter[];\n}\n\nexport interface Database {\n name: string;\n tables: AzureLogAnalyticsMetadataTable[];\n functions: Function[];\n majorVersion: number;\n minorVersion: number;\n entityGroups: EntityGroup[];\n}\n\nexport interface FormatAsFieldProps extends AzureQueryEditorFieldProps {\n inputId: string;\n options: Array<SelectableValue<ResultFormat>>;\n defaultValue: ResultFormat;\n setFormatAs: (query: AzureMonitorQuery, formatAs: ResultFormat) => AzureMonitorQuery;\n resultFormat?: ResultFormat;\n onLoad: (\n query: AzureMonitorQuery,\n defaultValue: ResultFormat,\n handleChange: (change: SelectableValue<ResultFormat>) => void\n ) => void;\n}\n\nexport interface AzureResourceSummaryItem {\n subscriptionName: string;\n resourceGroupName: string | undefined;\n resourceName: string | undefined;\n}\n\nexport interface RawAzureSubscriptionItem {\n subscriptionName: string;\n subscriptionId: string;\n subscriptionURI: string;\n count: number;\n}\n\nexport interface RawAzureResourceGroupItem {\n resourceGroupURI: string;\n resourceGroupName: string;\n count: number;\n}\n\nexport interface RawAzureResourceItem {\n id: string;\n name: string;\n subscriptionId: string;\n resourceGroup: string;\n type: string;\n location: string;\n}\n\nexport interface AzureGraphResponse<T = unknown> {\n data: T;\n // skipToken is used for pagination, to get the next page\n $skipToken?: string;\n}\n\n// https://docs.microsoft.com/en-us/rest/api/azureresourcegraph/resourcegraph(2021-03-01)/resources/resources#queryrequestoptions\nexport interface AzureResourceGraphOptions {\n $skip: number;\n $skipToken: string;\n $top: number;\n allowPartialScopes: boolean;\n resultFormat: 'objectArray' | 'table';\n}\n\n// Azure Monitor Metrics query API data fetcher argument types.\n// The types prefixed by Legacy are applicable to pre-version 9 of Grafana\n// that do not have a resourceUri, instead the resourceUri is built up from\n// the subscription, resource group, metric definition (a.k.a. resource type)\n// and the resource name.\nexport type GetMetricNamespacesQuery = AzureGetMetricNamespacesQuery | LegacyAzureGetMetricNamespacesQuery;\nexport type GetMetricNamesQuery = AzureGetMetricNamesQuery | LegacyAzureGetMetricNamesQuery;\nexport type GetMetricMetadataQuery = AzureGetMetricMetadataQuery | LegacyAzureGetMetricMetadataQuery;\n\nexport interface AzureGetMetricNamespacesQuery {\n resourceUri: string;\n}\nexport interface LegacyAzureGetMetricNamespacesQuery {\n subscription: string;\n resourceGroup: string;\n metricNamespace?: string;\n resourceName?: string;\n}\n\nexport interface AzureGetMetricNamesQuery {\n resourceUri: string;\n metricNamespace?: string;\n customNamespace?: string;\n}\n\nexport interface LegacyAzureGetMetricNamesQuery {\n subscription: string;\n resourceGroup: string;\n resourceName: string;\n metricNamespace: string;\n customNamespace?: string;\n}\n\nexport interface AzureGetMetricMetadataQuery {\n resourceUri: string;\n metricNamespace: string;\n customNamespace?: string;\n metricName: string;\n}\n\nexport interface LegacyAzureGetMetricMetadataQuery {\n subscription: string;\n resourceGroup: string;\n resourceName: string;\n metricNamespace: string;\n customNamespace?: string;\n metricName: string;\n}\n\nexport interface AzureGetResourceNamesQuery {\n subscriptionId?: string;\n resourceGroup?: string;\n metricNamespace?: string;\n region?: string;\n uri?: string;\n}\n\nexport interface AzureMonitorLocations {\n displayName: string;\n name: string;\n supportsLogs?: boolean;\n}\n\nexport interface AzureMonitorProvidersResponse {\n namespace: string;\n resourceTypes: ProviderResourceType[];\n}\n\nexport interface ProviderResourceType {\n resourceType: string;\n locations: string[];\n apiVersions: string[];\n capabilities: string;\n}\n\nexport interface AzureAPIResponse<T> {\n value: T[];\n count?: {\n type: string;\n value: number;\n };\n status?: number;\n statusText?: string;\n}\n\nexport interface AzureLogAnalyticsTable {\n name: string;\n description: string;\n}\n\nexport interface MetadataResponse {\n tables: AzureLogAnalyticsTable[];\n}\n\nexport interface Location {\n id: string;\n name: string;\n displayName: string;\n regionalDisplayName: string;\n metadata: LocationMetadata;\n}\n\ninterface LocationMetadata {\n regionType: string;\n regionCategory: string;\n geographyGroup: string;\n longitude: string;\n latitude: string;\n physicalLocation: string;\n pairedRegion: LocationPairedRegion[];\n}\n\ninterface LocationPairedRegion {\n name: string;\n id: string;\n}\n\nexport interface Subscription {\n id: string;\n authorizationSource: string;\n subscriptionId: string;\n tenantId: string;\n displayName: string;\n state: string;\n subscriptionPolicies: {\n locationPlacementId: string;\n quotaId: string;\n spendingLimit: string;\n };\n}\n\nexport interface Workspace {\n properties: {\n customerId: string;\n provisioningState: string;\n sku: {\n name: string;\n };\n retentionInDays: number;\n publicNetworkAccessForQuery: string;\n publicNetworkAccessForIngestion: string;\n };\n id: string;\n name: string;\n type: string;\n location: string;\n tags: Record<string, string>;\n}\n\nexport interface Resource {\n changedTime: string;\n createdTime: string;\n extendedLocation: { name: string; type: string };\n id: string;\n identity: { principalId: string; tenantId: string; type: string; userAssignedIdentities: string[] };\n kind: string;\n location: string;\n managedBy: string;\n name: string;\n plan: { name: string; product: string; promotionCode: string; publisher: string; version: string };\n properties: Record<string, string>;\n provisioningState: string;\n sku: { capacity: number; family: string; model: string; name: string; size: string; tier: string };\n tags: Record<string, string>;\n type: string;\n}\n\nexport interface ResourceGroup {\n id: string;\n location: string;\n managedBy: string;\n name: string;\n properties: { provisioningState: string };\n tags: object;\n type: string;\n}\n\nexport interface MetricNamespace {\n classification: 'Custom' | 'Platform' | 'Qos';\n id: string;\n name: string;\n properties: { metricNamespaceName: string };\n type: string;\n}\n\nexport interface Metric {\n displayDescription: string;\n errorCode: string;\n errorMessage: string;\n id: string;\n name: AzureMonitorLocalizedValue;\n timeseries: Array<{ data: MetricValue[]; metadatavalues: MetricMetadataValue[] }>;\n type: string;\n unit: string;\n}\n\ninterface MetricValue {\n average: number;\n count: number;\n maximum: number;\n minimum: number;\n timeStamp: string;\n total: number;\n}\n\ninterface MetricMetadataValue {\n name: AzureMonitorLocalizedValue;\n value: string;\n}\n\nexport type Category = {\n displayName: string;\n id: string;\n related: {\n queries: string[];\n tables: string[];\n };\n};\n\nexport type CheatsheetQuery = {\n body: string;\n description: string;\n displayName: string;\n id: string;\n properties: {\n ExampleQuery: boolean;\n QueryAttributes: {\n isMultiResource: boolean;\n };\n };\n related: {\n categories: string[];\n resourceTypes: string[];\n tables: string[];\n };\n tags: {\n Topic: string[];\n };\n};\n\nexport type CheatsheetQueries = {\n [key: string]: CheatsheetQuery[];\n};\n\nexport type DropdownCategories = {\n [key: string]: boolean;\n};\n\nexport enum QueryEditorPropertyType {\n Number = 'number',\n String = 'string',\n Boolean = 'boolean',\n DateTime = 'datetime',\n TimeSpan = 'timeSpan',\n Function = 'function',\n Interval = 'interval',\n}\n\nexport interface QueryEditorProperty {\n type: QueryEditorPropertyType;\n name: string;\n}\n\nexport type QueryEditorOperatorType = string | boolean | number | SelectableValue<string>;\nexport type QueryEditorOperatorValueType = QueryEditorOperatorType | QueryEditorOperatorType[];\n\nexport interface QueryEditorOperator<T = QueryEditorOperatorValueType> {\n name: string;\n value: T;\n labelValue?: string;\n}\n\nexport interface QueryEditorOperatorDefinition {\n value: string;\n supportTypes: QueryEditorPropertyType[];\n multipleValues: boolean;\n booleanValues: boolean;\n label?: string;\n description?: string;\n}\n\nexport enum AggregateFunctions {\n Sum = 'sum',\n Avg = 'avg',\n Count = 'count',\n Dcount = 'dcount',\n Max = 'max',\n Min = 'min',\n Percentile = 'percentile',\n}\n\nexport enum TablePlan {\n Analytics = 'Analytics',\n Basic = 'Basic',\n}\n\nexport interface GetLogAnalyticsTableSuccessResponse {\n properties: {\n totalRetentionInDays: number;\n archiveRetentionInDays: number;\n lastPlanModifiedDate?: string;\n plan: TablePlan;\n restoredLogs?: Record<string, string | undefined>;\n retentionInDaysAsDefault: boolean;\n totalRetentionInDaysAsDefault: boolean;\n schema: {\n tableSubType: string;\n name: string;\n tableType: string;\n columns: Array<Record<string, string | undefined>>;\n standardColumns: Array<Record<string, string | undefined>>;\n solutions: string[];\n isTroubleshootingAllowed: boolean;\n description?: string;\n displayName?: string;\n labels?: string[];\n source?: string;\n };\n resultStatistics: Record<string, string | number | undefined>;\n provisioningState: string;\n retentionInDays: number;\n searchResults?: Record<string, string | number | undefined>;\n systemData?: Record<string, string | number | undefined>;\n };\n id: string;\n name: string;\n type?: string;\n}\n\nexport interface GetLogAnalyticsTableErrorResponse {\n error: {\n target: string;\n message: string;\n code: string;\n };\n}\n\nexport type GetLogAnalyticsTableResponse = GetLogAnalyticsTableSuccessResponse | GetLogAnalyticsTableErrorResponse;\n\nexport function instanceOfLogAnalyticsTableError(\n response: GetLogAnalyticsTableSuccessResponse | GetLogAnalyticsTableErrorResponse\n): response is GetLogAnalyticsTableErrorResponse {\n if (!response) {\n return false;\n }\n return response.hasOwnProperty('error');\n}\n\nexport interface ResourceGraphFilters {\n subscriptions: string[];\n types: string[];\n locations: string[];\n}\n","import { useCallback, useMemo } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\nimport { ResultFormat } from '../../types/query';\nimport { FormatAsFieldProps } from '../../types/types';\n\nimport { Field } from './Field';\n\nconst FormatAsField = ({\n query,\n variableOptionGroup,\n onQueryChange,\n inputId,\n options: formatOptions,\n defaultValue,\n onLoad,\n setFormatAs,\n resultFormat,\n}: FormatAsFieldProps) => {\n const options = useMemo(() => [...formatOptions, variableOptionGroup], [variableOptionGroup, formatOptions]);\n\n const handleChange = useCallback(\n (change: SelectableValue<ResultFormat>) => {\n const { value } = change;\n if (!value) {\n return;\n }\n\n const newQuery = setFormatAs(query, value);\n onQueryChange(newQuery);\n },\n [onQueryChange, query, setFormatAs]\n );\n\n useEffectOnce(() => {\n //sets to default if the value is not found in the list\n if (!formatOptions.find((item) => item.value === resultFormat)) {\n handleChange({ value: defaultValue });\n }\n onLoad(query, defaultValue, handleChange);\n });\n\n return (\n <Field\n label={t('components.format-as-field.label-format-as', 'Format as')}\n data-testid={selectors.components.queryEditor.logsQueryEditor.formatSelection.input}\n >\n <Select\n inputId={`${inputId}-format-as-field`}\n value={resultFormat}\n onChange={handleChange}\n options={options}\n width={20}\n />\n </Field>\n );\n};\n\nexport default FormatAsField;\n","const {\n slice,\n forEach\n} = [];\nfunction defaults(obj) {\n forEach.call(slice.call(arguments, 1), source => {\n if (source) {\n for (const prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction hasXSS(input) {\n if (typeof input !== 'string') return false;\n\n // Common XSS attack patterns\n const xssPatterns = [/<\\s*script.*?>/i, /<\\s*\\/\\s*script\\s*>/i, /<\\s*img.*?on\\w+\\s*=/i, /<\\s*\\w+\\s*on\\w+\\s*=.*?>/i, /javascript\\s*:/i, /vbscript\\s*:/i, /expression\\s*\\(/i, /eval\\s*\\(/i, /alert\\s*\\(/i, /document\\.cookie/i, /document\\.write\\s*\\(/i, /window\\.location/i, /innerHTML/i];\n return xssPatterns.some(pattern => pattern.test(input));\n}\n\n// eslint-disable-next-line no-control-regex\nconst fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\nconst serializeCookie = function (name, val) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n path: '/'\n };\n const opt = options;\n const value = encodeURIComponent(val);\n let str = `${name}=${value}`;\n if (opt.maxAge > 0) {\n const maxAge = opt.maxAge - 0;\n if (Number.isNaN(maxAge)) throw new Error('maxAge should be a Number');\n str += `; Max-Age=${Math.floor(maxAge)}`;\n }\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n str += `; Domain=${opt.domain}`;\n }\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n str += `; Path=${opt.path}`;\n }\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n str += `; Expires=${opt.expires.toUTCString()}`;\n }\n if (opt.httpOnly) str += '; HttpOnly';\n if (opt.secure) str += '; Secure';\n if (opt.sameSite) {\n const sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n if (opt.partitioned) str += '; Partitioned';\n return str;\n};\nconst cookie = {\n create(name, value, minutes, domain) {\n let cookieOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n path: '/',\n sameSite: 'strict'\n };\n if (minutes) {\n cookieOptions.expires = new Date();\n cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);\n }\n if (domain) cookieOptions.domain = domain;\n document.cookie = serializeCookie(name, value, cookieOptions);\n },\n read(name) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n remove(name, domain) {\n this.create(name, '', -1, domain);\n }\n};\nvar cookie$1 = {\n name: 'cookie',\n // Deconstruct the options object and extract the lookupCookie property\n lookup(_ref) {\n let {\n lookupCookie\n } = _ref;\n if (lookupCookie && typeof document !== 'undefined') {\n return cookie.read(lookupCookie) || undefined;\n }\n return undefined;\n },\n // Deconstruct the options object and extract the lookupCookie, cookieMinutes, cookieDomain, and cookieOptions properties\n cacheUserLanguage(lng, _ref2) {\n let {\n lookupCookie,\n cookieMinutes,\n cookieDomain,\n cookieOptions\n } = _ref2;\n if (lookupCookie && typeof document !== 'undefined') {\n cookie.create(lookupCookie, lng, cookieMinutes, cookieDomain, cookieOptions);\n }\n }\n};\n\nvar querystring = {\n name: 'querystring',\n // Deconstruct the options object and extract the lookupQuerystring property\n lookup(_ref) {\n let {\n lookupQuerystring\n } = _ref;\n let found;\n if (typeof window !== 'undefined') {\n let {\n search\n } = window.location;\n if (!window.location.search && window.location.hash?.indexOf('?') > -1) {\n search = window.location.hash.substring(window.location.hash.indexOf('?'));\n }\n const query = search.substring(1);\n const params = query.split('&');\n for (let i = 0; i < params.length; i++) {\n const pos = params[i].indexOf('=');\n if (pos > 0) {\n const key = params[i].substring(0, pos);\n if (key === lookupQuerystring) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n return found;\n }\n};\n\nvar hash = {\n name: 'hash',\n // Deconstruct the options object and extract the lookupHash property and the lookupFromHashIndex property\n lookup(_ref) {\n let {\n lookupHash,\n lookupFromHashIndex\n } = _ref;\n let found;\n if (typeof window !== 'undefined') {\n const {\n hash\n } = window.location;\n if (hash && hash.length > 2) {\n const query = hash.substring(1);\n if (lookupHash) {\n const params = query.split('&');\n for (let i = 0; i < params.length; i++) {\n const pos = params[i].indexOf('=');\n if (pos > 0) {\n const key = params[i].substring(0, pos);\n if (key === lookupHash) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n if (found) return found;\n if (!found && lookupFromHashIndex > -1) {\n const language = hash.match(/\\/([a-zA-Z-]*)/g);\n if (!Array.isArray(language)) return undefined;\n const index = typeof lookupFromHashIndex === 'number' ? lookupFromHashIndex : 0;\n return language[index]?.replace('/', '');\n }\n }\n }\n return found;\n }\n};\n\nlet hasLocalStorageSupport = null;\nconst localStorageAvailable = () => {\n if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;\n try {\n hasLocalStorageSupport = typeof window !== 'undefined' && window.localStorage !== null;\n if (!hasLocalStorageSupport) {\n return false;\n }\n const testKey = 'i18next.translate.boo';\n window.localStorage.setItem(testKey, 'foo');\n window.localStorage.removeItem(testKey);\n } catch (e) {\n hasLocalStorageSupport = false;\n }\n return hasLocalStorageSupport;\n};\nvar localStorage = {\n name: 'localStorage',\n // Deconstruct the options object and extract the lookupLocalStorage property\n lookup(_ref) {\n let {\n lookupLocalStorage\n } = _ref;\n if (lookupLocalStorage && localStorageAvailable()) {\n return window.localStorage.getItem(lookupLocalStorage) || undefined; // Undefined ensures type consistency with the previous version of this function\n }\n return undefined;\n },\n // Deconstruct the options object and extract the lookupLocalStorage property\n cacheUserLanguage(lng, _ref2) {\n let {\n lookupLocalStorage\n } = _ref2;\n if (lookupLocalStorage && localStorageAvailable()) {\n window.localStorage.setItem(lookupLocalStorage, lng);\n }\n }\n};\n\nlet hasSessionStorageSupport = null;\nconst sessionStorageAvailable = () => {\n if (hasSessionStorageSupport !== null) return hasSessionStorageSupport;\n try {\n hasSessionStorageSupport = typeof window !== 'undefined' && window.sessionStorage !== null;\n if (!hasSessionStorageSupport) {\n return false;\n }\n const testKey = 'i18next.translate.boo';\n window.sessionStorage.setItem(testKey, 'foo');\n window.sessionStorage.removeItem(testKey);\n } catch (e) {\n hasSessionStorageSupport = false;\n }\n return hasSessionStorageSupport;\n};\nvar sessionStorage = {\n name: 'sessionStorage',\n lookup(_ref) {\n let {\n lookupSessionStorage\n } = _ref;\n if (lookupSessionStorage && sessionStorageAvailable()) {\n return window.sessionStorage.getItem(lookupSessionStorage) || undefined;\n }\n return undefined;\n },\n cacheUserLanguage(lng, _ref2) {\n let {\n lookupSessionStorage\n } = _ref2;\n if (lookupSessionStorage && sessionStorageAvailable()) {\n window.sessionStorage.setItem(lookupSessionStorage, lng);\n }\n }\n};\n\nvar navigator$1 = {\n name: 'navigator',\n lookup(options) {\n const found = [];\n if (typeof navigator !== 'undefined') {\n const {\n languages,\n userLanguage,\n language\n } = navigator;\n if (languages) {\n // chrome only; not an array, so can't use .push.apply instead of iterating\n for (let i = 0; i < languages.length; i++) {\n found.push(languages[i]);\n }\n }\n if (userLanguage) {\n found.push(userLanguage);\n }\n if (language) {\n found.push(language);\n }\n }\n return found.length > 0 ? found : undefined;\n }\n};\n\nvar htmlTag = {\n name: 'htmlTag',\n // Deconstruct the options object and extract the htmlTag property\n lookup(_ref) {\n let {\n htmlTag\n } = _ref;\n let found;\n const internalHtmlTag = htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n if (internalHtmlTag && typeof internalHtmlTag.getAttribute === 'function') {\n found = internalHtmlTag.getAttribute('lang');\n }\n return found;\n }\n};\n\nvar path = {\n name: 'path',\n // Deconstruct the options object and extract the lookupFromPathIndex property\n lookup(_ref) {\n let {\n lookupFromPathIndex\n } = _ref;\n if (typeof window === 'undefined') return undefined;\n const language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n if (!Array.isArray(language)) return undefined;\n const index = typeof lookupFromPathIndex === 'number' ? lookupFromPathIndex : 0;\n return language[index]?.replace('/', '');\n }\n};\n\nvar subdomain = {\n name: 'subdomain',\n lookup(_ref) {\n let {\n lookupFromSubdomainIndex\n } = _ref;\n // If given get the subdomain index else 1\n const internalLookupFromSubdomainIndex = typeof lookupFromSubdomainIndex === 'number' ? lookupFromSubdomainIndex + 1 : 1;\n // get all matches if window.location. is existing\n // first item of match is the match itself and the second is the first group match which should be the first subdomain match\n // is the hostname no public domain get the or option of localhost\n const language = typeof window !== 'undefined' && window.location?.hostname?.match(/^(\\w{2,5})\\.(([a-z0-9-]{1,63}\\.[a-z]{2,6})|localhost)/i);\n\n // if there is no match (null) return undefined\n if (!language) return undefined;\n // return the given group match\n return language[internalLookupFromSubdomainIndex];\n }\n};\n\n// some environments, throws when accessing document.cookie\nlet canCookies = false;\ntry {\n // eslint-disable-next-line no-unused-expressions\n document.cookie;\n canCookies = true;\n // eslint-disable-next-line no-empty\n} catch (e) {}\nconst order = ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'];\nif (!canCookies) order.splice(1, 1);\nconst getDefaults = () => ({\n order,\n lookupQuerystring: 'lng',\n lookupCookie: 'i18next',\n lookupLocalStorage: 'i18nextLng',\n lookupSessionStorage: 'i18nextLng',\n // cache user language\n caches: ['localStorage'],\n excludeCacheFor: ['cimode'],\n // cookieMinutes: 10,\n // cookieDomain: 'myDomain'\n\n convertDetectedLanguage: l => l\n});\nclass Browser {\n constructor(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.type = 'languageDetector';\n this.detectors = {};\n this.init(services, options);\n }\n init() {\n let services = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n languageUtils: {}\n };\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n if (typeof this.options.convertDetectedLanguage === 'string' && this.options.convertDetectedLanguage.indexOf('15897') > -1) {\n this.options.convertDetectedLanguage = l => l.replace('-', '_');\n }\n\n // backwards compatibility\n if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n this.i18nOptions = i18nOptions;\n this.addDetector(cookie$1);\n this.addDetector(querystring);\n this.addDetector(localStorage);\n this.addDetector(sessionStorage);\n this.addDetector(navigator$1);\n this.addDetector(htmlTag);\n this.addDetector(path);\n this.addDetector(subdomain);\n this.addDetector(hash);\n }\n addDetector(detector) {\n this.detectors[detector.name] = detector;\n return this;\n }\n detect() {\n let detectionOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.order;\n let detected = [];\n detectionOrder.forEach(detectorName => {\n if (this.detectors[detectorName]) {\n let lookup = this.detectors[detectorName].lookup(this.options);\n if (lookup && typeof lookup === 'string') lookup = [lookup];\n if (lookup) detected = detected.concat(lookup);\n }\n });\n detected = detected.filter(d => d !== undefined && d !== null && !hasXSS(d)).map(d => this.options.convertDetectedLanguage(d));\n if (this.services && this.services.languageUtils && this.services.languageUtils.getBestMatchFromCodes) return detected; // new i18next v19.5.0\n return detected.length > 0 ? detected[0] : null; // a little backward compatibility\n }\n cacheUserLanguage(lng) {\n let caches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.caches;\n if (!caches) return;\n if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n caches.forEach(cacheName => {\n if (this.detectors[cacheName]) this.detectors[cacheName].cacheUserLanguage(lng, this.options);\n });\n }\n}\nBrowser.type = 'languageDetector';\n\nexport { Browser as default };\n","import e from\"void-elements\";var t=/\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;function n(n){var r={type:\"tag\",name:\"\",voidElement:!1,attrs:{},children:[]},i=n.match(/<\\/?([^\\s]+?)[/\\s>]/);if(i&&(r.name=i[1],(e[i[1]]||\"/\"===n.charAt(n.length-2))&&(r.voidElement=!0),r.name.startsWith(\"!--\"))){var s=n.indexOf(\"--\\x3e\");return{type:\"comment\",comment:-1!==s?n.slice(4,s):\"\"}}for(var a=new RegExp(t),c=null;null!==(c=a.exec(n));)if(c[0].trim())if(c[1]){var o=c[1].trim(),l=[o,\"\"];o.indexOf(\"=\")>-1&&(l=o.split(\"=\")),r.attrs[l[0]]=l[1],a.lastIndex--}else c[2]&&(r.attrs[c[2]]=c[3].trim().substring(1,c[3].length-1));return r}var r=/<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g,i=/^\\s*$/,s=Object.create(null);function a(e,t){switch(t.type){case\"text\":return e+t.content;case\"tag\":return e+=\"<\"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'=\"'+e[n]+'\"');return t.length?\" \"+t.join(\" \"):\"\"}(t.attrs):\"\")+(t.voidElement?\"/>\":\">\"),t.voidElement?e:e+t.children.reduce(a,\"\")+\"</\"+t.name+\">\";case\"comment\":return e+\"\\x3c!--\"+t.comment+\"--\\x3e\"}}var c={parse:function(e,t){t||(t={}),t.components||(t.components=s);var a,c=[],o=[],l=-1,m=!1;if(0!==e.indexOf(\"<\")){var u=e.indexOf(\"<\");c.push({type:\"text\",content:-1===u?e:e.substring(0,u)})}return e.replace(r,function(r,s){if(m){if(r!==\"</\"+a.name+\">\")return;m=!1}var u,f=\"/\"!==r.charAt(1),h=r.startsWith(\"\\x3c!--\"),p=s+r.length,d=e.charAt(p);if(h){var v=n(r);return l<0?(c.push(v),c):((u=o[l]).children.push(v),c)}if(f&&(l++,\"tag\"===(a=n(r)).type&&t.components[a.name]&&(a.type=\"component\",m=!0),a.voidElement||m||!d||\"<\"===d||a.children.push({type:\"text\",content:e.slice(p,e.indexOf(\"<\",p))}),0===l&&c.push(a),(u=o[l-1])&&u.children.push(a),o[l]=a),(!f||a.voidElement)&&(l>-1&&(a.voidElement||a.name===r.slice(2,-1))&&(l--,a=-1===l?c:o[l]),!m&&\"<\"!==d&&d)){u=-1===l?c:o[l].children;var x=e.indexOf(\"<\",p),g=e.slice(p,-1===x?void 0:x);i.test(g)&&(g=\" \"),(x>-1&&l+u.length>=0||\" \"!==g)&&u.push({type:\"text\",content:g})}}),c},stringify:function(e){return e.reduce(function(e,t){return e+a(\"\",t)},\"\")}};export default c;\n//# sourceMappingURL=html-parse-stringify.module.js.map\n","export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { Fragment, isValidElement, cloneElement, createElement, Children } from 'react';\nimport HTML from 'html-parse-stringify';\nimport { isObject, isString, warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\nconst hasChildren = (node, checkLength) => {\n if (!node) return false;\n const base = node.props?.children ?? node.children;\n if (checkLength) return base.length > 0;\n return !!base;\n};\nconst getChildren = node => {\n if (!node) return [];\n const children = node.props?.children ?? node.children;\n return node.props?.i18nIsDynamicList ? getAsArray(children) : children;\n};\nconst hasValidReactChildren = children => Array.isArray(children) && children.every(isValidElement);\nconst getAsArray = data => Array.isArray(data) ? data : [data];\nconst mergeProps = (source, target) => {\n const newTarget = {\n ...target\n };\n newTarget.props = Object.assign(source.props, target.props);\n return newTarget;\n};\nexport const nodesToString = (children, i18nOptions, i18n, i18nKey) => {\n if (!children) return '';\n let stringNode = '';\n const childrenArray = getAsArray(children);\n const keepArray = i18nOptions?.transSupportBasicHtmlNodes ? i18nOptions.transKeepBasicHtmlNodesFor ?? [] : [];\n childrenArray.forEach((child, childIndex) => {\n if (isString(child)) {\n stringNode += `${child}`;\n return;\n }\n if (isValidElement(child)) {\n const {\n props,\n type\n } = child;\n const childPropsCount = Object.keys(props).length;\n const shouldKeepChild = keepArray.indexOf(type) > -1;\n const childChildren = props.children;\n if (!childChildren && shouldKeepChild && !childPropsCount) {\n stringNode += `<${type}/>`;\n return;\n }\n if (!childChildren && (!shouldKeepChild || childPropsCount) || props.i18nIsDynamicList) {\n stringNode += `<${childIndex}></${childIndex}>`;\n return;\n }\n if (shouldKeepChild && childPropsCount === 1 && isString(childChildren)) {\n stringNode += `<${type}>${childChildren}</${type}>`;\n return;\n }\n const content = nodesToString(childChildren, i18nOptions, i18n, i18nKey);\n stringNode += `<${childIndex}>${content}</${childIndex}>`;\n return;\n }\n if (child === null) {\n warn(i18n, 'TRANS_NULL_VALUE', `Passed in a null value as child`, {\n i18nKey\n });\n return;\n }\n if (isObject(child)) {\n const {\n format,\n ...clone\n } = child;\n const keys = Object.keys(clone);\n if (keys.length === 1) {\n const value = format ? `${keys[0]}, ${format}` : keys[0];\n stringNode += `{{${value}}}`;\n return;\n }\n warn(i18n, 'TRANS_INVALID_OBJ', `Invalid child - Object should only have keys {{ value, format }} (format is optional).`, {\n i18nKey,\n child\n });\n return;\n }\n warn(i18n, 'TRANS_INVALID_VAR', `Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`, {\n i18nKey,\n child\n });\n });\n return stringNode;\n};\nconst renderNodes = (children, knownComponentsMap, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {\n if (targetString === '') return [];\n const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);\n if (!children && !knownComponentsMap && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];\n const data = knownComponentsMap ?? {};\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(data, child);\n });\n };\n getData(children);\n const ast = HTML.parse(`<0>${targetString}</0>`);\n const opts = {\n ...data,\n ...combinedTOpts\n };\n const renderInner = (child, node, rootReactNode) => {\n const childs = getChildren(child);\n const mappedChildren = mapAST(childs, node.children, rootReactNode);\n return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props?.i18nIsDynamicList ? childs : mappedChildren;\n };\n const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {\n if (child.dummy) {\n child.children = inner;\n mem.push(cloneElement(child, {\n key: i\n }, isVoid ? undefined : inner));\n } else {\n mem.push(...Children.map([child], c => {\n const props = {\n ...c.props\n };\n delete props.i18nIsDynamicList;\n return createElement(c.type, {\n ...props,\n key: i,\n ref: c.props.ref ?? c.ref\n }, isVoid ? null : inner);\n }));\n }\n };\n const mapAST = (reactNode, astNode, rootReactNode) => {\n const reactNodes = getAsArray(reactNode);\n const astNodes = getAsArray(astNode);\n return astNodes.reduce((mem, node, i) => {\n const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n if (node.type === 'tag') {\n let tmp = reactNodes[parseInt(node.name, 10)];\n if (!tmp && knownComponentsMap) tmp = knownComponentsMap[node.name];\n if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];\n if (!tmp) tmp = {};\n const child = Object.keys(node.attrs).length !== 0 ? mergeProps({\n props: node.attrs\n }, tmp) : tmp;\n const isElement = isValidElement(child);\n const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && isObject(child) && child.dummy && !isElement;\n const isKnownComponent = isObject(knownComponentsMap) && Object.hasOwnProperty.call(knownComponentsMap, node.name);\n if (isString(child)) {\n const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n mem.push(value);\n } else if (hasChildren(child) || isValidTranslationWithChildren) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (isEmptyTransWithHTML) {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (Number.isNaN(parseFloat(node.name))) {\n if (isKnownComponent) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i, node.voidElement);\n } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n if (node.voidElement) {\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }));\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }, inner));\n }\n } else if (node.voidElement) {\n mem.push(`<${node.name} />`);\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(`<${node.name}>${inner}</${node.name}>`);\n }\n } else if (isObject(child) && !isElement) {\n const content = node.children[0] ? translationContent : null;\n if (content) mem.push(content);\n } else {\n pushTranslatedJSX(child, translationContent, mem, i, node.children.length !== 1 || !translationContent);\n }\n } else if (node.type === 'text') {\n const wrapTextNodes = i18nOptions.transWrapTextNodes;\n const content = shouldUnescape ? i18nOptions.unescape(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n if (wrapTextNodes) {\n mem.push(createElement(wrapTextNodes, {\n key: `${node.name}-${i}`\n }, content));\n } else {\n mem.push(content);\n }\n }\n return mem;\n }, []);\n };\n const result = mapAST([{\n dummy: true,\n children: children || []\n }], ast, getAsArray(children || []));\n return getChildren(result[0]);\n};\nconst fixComponentProps = (component, index, translation) => {\n const componentKey = component.key || index;\n const comp = cloneElement(component, {\n key: componentKey\n });\n if (!comp.props || !comp.props.children || translation.indexOf(`${index}/>`) < 0 && translation.indexOf(`${index} />`) < 0) {\n return comp;\n }\n function Componentized() {\n return createElement(Fragment, null, comp);\n }\n return createElement(Componentized, {\n key: componentKey\n });\n};\nconst generateArrayComponents = (components, translation) => components.map((c, index) => fixComponentProps(c, index, translation));\nconst generateObjectComponents = (components, translation) => {\n const componentMap = {};\n Object.keys(components).forEach(c => {\n Object.assign(componentMap, {\n [c]: fixComponentProps(components[c], c, translation)\n });\n });\n return componentMap;\n};\nconst generateComponents = (components, translation, i18n, i18nKey) => {\n if (!components) return null;\n if (Array.isArray(components)) {\n return generateArrayComponents(components, translation);\n }\n if (isObject(components)) {\n return generateObjectComponents(components, translation);\n }\n warnOnce(i18n, 'TRANS_INVALID_COMPONENTS', `<Trans /> \"components\" prop expects an object or array`, {\n i18nKey\n });\n return null;\n};\nconst isComponentsMap = object => {\n if (!isObject(object)) return false;\n if (Array.isArray(object)) return false;\n return Object.keys(object).reduce((acc, key) => acc && Number.isNaN(Number.parseFloat(key)), true);\n};\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const i18n = i18nFromProps || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `Trans: You need to pass in an i18next instance using i18nextReactModule`, {\n i18nKey\n });\n return children;\n }\n const t = tFromProps || i18n.t.bind(i18n) || (k => k);\n const reactI18nextOptions = {\n ...getDefaults(),\n ...i18n.options?.react\n };\n let namespaces = ns || t.ns || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n const nodeAsString = nodesToString(children, reactI18nextOptions, i18n, i18nKey);\n const defaultValue = defaults || nodeAsString || reactI18nextOptions.transEmptyNodeValue || i18nKey;\n const {\n hashTransKey\n } = reactI18nextOptions;\n const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);\n if (i18n.options?.interpolation?.defaultVariables) {\n values = values && Object.keys(values).length > 0 ? {\n ...values,\n ...i18n.options.interpolation.defaultVariables\n } : {\n ...i18n.options.interpolation.defaultVariables\n };\n }\n const interpolationOverride = values || count !== undefined && !i18n.options?.interpolation?.alwaysFormat || !children ? tOptions.interpolation : {\n interpolation: {\n ...tOptions.interpolation,\n prefix: '#$?',\n suffix: '?$#'\n }\n };\n const combinedTOpts = {\n ...tOptions,\n context: context || tOptions.context,\n count,\n ...values,\n ...interpolationOverride,\n defaultValue,\n ns: namespaces\n };\n const translation = key ? t(key, combinedTOpts) : defaultValue;\n const generatedComponents = generateComponents(components, translation, i18n, i18nKey);\n let indexedChildren = generatedComponents || children;\n let componentsMap = null;\n if (isComponentsMap(generatedComponents)) {\n componentsMap = generatedComponents;\n indexedChildren = children;\n }\n const content = renderNodes(indexedChildren, componentsMap, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);\n const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;\n return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useContext } from 'react';\nimport { nodesToString, Trans as TransWithoutContext } from './TransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport { nodesToString };\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n const t = tFromProps || i18n?.t.bind(i18n);\n return TransWithoutContext({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions,\n values,\n defaults,\n components,\n ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,\n i18n,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n });\n}","import { useContext } from 'react';\nimport { getI18n, I18nContext } from './context.js';\nexport const useSSR = (initialI18nStore, initialLanguage, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n.options?.isClone) return;\n if (initialI18nStore && !i18n.initializedStoreOnce) {\n i18n.services.resourceStore.data = initialI18nStore;\n i18n.options.ns = Object.values(initialI18nStore).reduce((mem, lngResources) => {\n Object.keys(lngResources).forEach(ns => {\n if (mem.indexOf(ns) < 0) mem.push(ns);\n });\n return mem;\n }, i18n.options.ns);\n i18n.initializedStoreOnce = true;\n i18n.isInitialized = true;\n }\n if (initialLanguage && !i18n.initializedLanguageOnce) {\n i18n.changeLanguage(initialLanguage);\n i18n.initializedLanguageOnce = true;\n }\n};","export const ENGLISH_US = 'en-US';\nexport const FRENCH_FRANCE = 'fr-FR';\nexport const SPANISH_SPAIN = 'es-ES';\nexport const GERMAN_GERMANY = 'de-DE';\nexport const BRAZILIAN_PORTUGUESE = 'pt-BR';\nexport const CHINESE_SIMPLIFIED = 'zh-Hans';\nexport const ITALIAN_ITALY = 'it-IT';\nexport const JAPANESE_JAPAN = 'ja-JP';\nexport const INDONESIAN_INDONESIA = 'id-ID';\nexport const KOREAN_KOREA = 'ko-KR';\nexport const RUSSIAN_RUSSIA = 'ru-RU';\nexport const CZECH_CZECHIA = 'cs-CZ';\nexport const DUTCH_NETHERLANDS = 'nl-NL';\nexport const HUNGARIAN_HUNGARY = 'hu-HU';\nexport const PORTUGUESE_PORTUGAL = 'pt-PT';\nexport const POLISH_POLAND = 'pl-PL';\nexport const SWEDISH_SWEDEN = 'sv-SE';\nexport const TURKISH_TURKEY = 'tr-TR';\nexport const CHINESE_TRADITIONAL = 'zh-Hant';\n\nexport const DEFAULT_LANGUAGE = ENGLISH_US;\nexport const PSEUDO_LOCALE = 'pseudo';\n","import i18n, { InitOptions, ReactOptions, TFunction as I18NextTFunction } from 'i18next';\nimport LanguageDetector, { DetectorOptions } from 'i18next-browser-languagedetector';\n// eslint-disable-next-line no-restricted-imports\nimport { initReactI18next, setDefaults, setI18n, Trans as I18NextTrans, getI18n } from 'react-i18next';\n\nimport { DEFAULT_LANGUAGE, PSEUDO_LOCALE } from './constants';\nimport { initRegionalFormat } from './dates';\nimport { LANGUAGES } from './languages';\nimport { ResourceLoader, Resources, TFunction, TransProps, TransType } from './types';\n\nlet tFunc: I18NextTFunction<string[], undefined> | undefined;\nlet transComponent: TransType;\n\nconst VALID_LANGUAGES = [\n ...LANGUAGES,\n {\n name: 'Pseudo',\n code: PSEUDO_LOCALE,\n },\n];\n\nfunction initTFuncAndTransComponent({ id, ns }: { id?: string; ns?: string[] } = {}) {\n if (id) {\n tFunc = getI18nInstance().getFixedT(null, id);\n transComponent = (props: TransProps) => <I18NextTrans shouldUnescape ns={id} {...props} />;\n return;\n }\n\n tFunc = getI18nInstance().t;\n transComponent = (props: TransProps) => <I18NextTrans shouldUnescape ns={ns} {...props} />;\n}\n\nexport async function loadNamespacedResources(namespace: string, language: string, loaders?: ResourceLoader[]) {\n if (!loaders?.length) {\n return;\n }\n\n const resolvedLanguage = language === PSEUDO_LOCALE ? DEFAULT_LANGUAGE : language;\n\n return Promise.all(\n loaders.map(async (loader) => {\n try {\n const resources = await loader(resolvedLanguage);\n addResourceBundle(resolvedLanguage, namespace, resources);\n } catch (error) {\n console.error(`Error loading resources for namespace ${namespace} and language: ${resolvedLanguage}`, error);\n }\n })\n );\n}\n\n// exported for testing\nexport function initDefaultI18nInstance() {\n // If the resources are not an object, we need to initialize the plugin translations\n if (getI18nInstance().options?.resources && typeof getI18nInstance().options.resources === 'object') {\n return;\n }\n\n const initPromise = getI18nInstance().use(initReactI18next).init({\n resources: {},\n returnEmptyString: false,\n lng: DEFAULT_LANGUAGE, // this should be the locale of the phrases in our source JSX\n });\n initTFuncAndTransComponent();\n return initPromise;\n}\n\n// exported for testing\nexport function initDefaultReactI18nInstance() {\n // If the initReactI18next is not set, we need to set them\n if (getI18n()?.options?.react) {\n return;\n }\n\n const options: ReactOptions = {};\n setDefaults(options);\n setI18n(getI18nInstance());\n}\n\nexport async function initPluginTranslations(id: string, loaders?: ResourceLoader[]) {\n await initDefaultI18nInstance();\n initDefaultReactI18nInstance();\n\n const language = getResolvedLanguage();\n initTFuncAndTransComponent({ id });\n\n await loadNamespacedResources(id, language, loaders);\n\n return { language };\n}\n\nexport function getI18nInstance(): typeof i18n {\n // in Grafana versions < 12.1.0 the i18n instance is exposed through the default export\n // used by plugins that support translations from Grafana >= 11.0.0\n const instance: typeof i18n & { default?: typeof i18n } = i18n;\n if (instance && instance.default) {\n return instance.default;\n }\n\n return instance;\n}\n\ninterface Module {\n type: 'backend';\n}\n\ninterface InitializeI18nOptions {\n ns?: string[];\n language?: string;\n module?: Module;\n}\n\nasync function initTranslations({\n ns,\n language = DEFAULT_LANGUAGE,\n module,\n}: InitializeI18nOptions): Promise<{ language: string | undefined }> {\n const options: InitOptions = {\n // We don't bundle any translations, we load them async\n partialBundledLanguages: true,\n resources: {},\n\n // If translations are empty strings (no translation), fall back to the default value in source code\n returnEmptyString: false,\n\n // Required to ensure that `resolvedLanguage` is set property when an invalid language is passed (such as through 'detect')\n supportedLngs: VALID_LANGUAGES.map((lang) => lang.code),\n fallbackLng: DEFAULT_LANGUAGE,\n\n ns,\n postProcess: [\n // Add pseudo processing even if we aren't necessarily going to use it\n PSEUDO_LOCALE,\n ],\n };\n\n if (language === 'detect') {\n getI18nInstance().use(LanguageDetector);\n const detection: DetectorOptions = { order: ['navigator'], caches: [] };\n options.detection = detection;\n } else {\n options.lng = VALID_LANGUAGES.find((lang) => lang.code === language)?.code ?? undefined;\n }\n\n if (module) {\n getI18nInstance().use(module).use(initReactI18next); // passes i18n down to react-i18next\n } else {\n getI18nInstance().use(initReactI18next); // passes i18n down to react-i18next\n }\n\n if (language === PSEUDO_LOCALE) {\n const { default: Pseudo } = await import('i18next-pseudo');\n getI18nInstance().use(\n new Pseudo({\n languageToPseudo: PSEUDO_LOCALE,\n enabled: true,\n wrapped: true,\n })\n );\n }\n\n await getI18nInstance().init(options);\n\n initTFuncAndTransComponent({ ns });\n\n return {\n language: getResolvedLanguage(),\n };\n}\n\nexport function getLanguage() {\n return getI18nInstance()?.language || DEFAULT_LANGUAGE;\n}\n\nexport function getResolvedLanguage() {\n return getI18nInstance()?.resolvedLanguage || DEFAULT_LANGUAGE;\n}\n\nexport function getNamespaces() {\n return getI18nInstance()?.options.ns;\n}\n\nexport async function changeLanguage(language?: string) {\n const validLanguage = VALID_LANGUAGES.find((lang) => lang.code === language)?.code ?? DEFAULT_LANGUAGE;\n await getI18nInstance().changeLanguage(validLanguage);\n}\n\nexport async function initializeI18n(\n { language, ns, module }: InitializeI18nOptions,\n regionalFormat: string\n): Promise<{ language: string | undefined }> {\n initRegionalFormat(regionalFormat);\n return initTranslations({ language, ns, module });\n}\n\nexport function addResourceBundle(language: string, namespace: string, resources: Resources) {\n getI18nInstance().addResourceBundle(language, namespace, resources, true, false);\n}\n\nexport const t: TFunction = (id: string, defaultMessage: string, values?: Record<string, unknown>) => {\n initDefaultI18nInstance();\n if (!tFunc) {\n if (process.env.NODE_ENV !== 'test') {\n console.warn(\n 't() was called before i18n was initialized. This is probably caused by calling t() in the root module scope, instead of lazily on render'\n );\n }\n\n if (process.env.NODE_ENV === 'development') {\n throw new Error('t() was called before i18n was initialized');\n }\n\n tFunc = getI18nInstance().t;\n }\n\n return tFunc(id, defaultMessage, values);\n};\n\nexport function Trans(props: TransProps) {\n initDefaultI18nInstance();\n const Component = transComponent ?? I18NextTrans;\n return <Component shouldUnescape {...props} />;\n}\n","import { css, cx } from '@emotion/css';\nimport Prism, { Grammar } from 'prismjs';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { useTheme2 } from '@grafana/ui';\n\nexport interface Props {\n query: string;\n lang: {\n grammar: Grammar;\n name: string;\n };\n className?: string;\n}\nexport function RawQuery({ query, lang, className }: Props) {\n const theme = useTheme2();\n\n const styles = getStyles(theme);\n const highlighted = Prism.highlight(query, lang.grammar, lang.name);\n\n return (\n <div\n className={cx(styles.editorField, 'prism-syntax-highlight', className)}\n aria-label={t('components.raw-query.aria-label-selector', 'Selector')}\n dangerouslySetInnerHTML={{ __html: highlighted }}\n />\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n editorField: css({\n fontFamily: theme.typography.fontFamilyMonospace,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n };\n};\n","import { Grammar } from 'prismjs';\n\nimport { CompletionItem } from '@grafana/ui';\n\nexport const QUERY_COMMANDS: CompletionItem[] = [\n {\n label: 'fields',\n documentation: 'Retrieves the specified fields from log events',\n },\n { label: 'display', documentation: 'Specifies which fields to display in the query results' },\n {\n label: 'filter',\n documentation: 'Filters the results of a query based on one or more conditions',\n },\n {\n label: 'stats',\n documentation: 'Calculates aggregate statistics based on the values of log fields',\n },\n { label: 'sort', documentation: 'Sorts the retrieved log events' },\n { label: 'limit', documentation: 'Specifies the number of log events returned by the query' },\n {\n label: 'parse',\n documentation:\n 'Extracts data from a log field, creating one or more ephemeral fields that you can process further in the query',\n },\n];\n\nexport const COMPARISON_OPERATORS = ['=', '!=', '<', '<=', '>', '>='];\nexport const ARITHMETIC_OPERATORS = ['+', '-', '*', '/', '^', '%'];\n\nexport const NUMERIC_OPERATORS = [\n {\n label: 'abs',\n detail: 'abs(a)',\n documentation: 'Absolute value.',\n },\n {\n label: 'ceil',\n detail: 'ceil(a)',\n documentation: 'Round to ceiling (the smallest integer that is greater than the value of a).',\n },\n {\n label: 'floor',\n detail: 'floor(a)',\n documentation: 'Round to floor (the largest integer that is smaller than the value of a).',\n },\n {\n label: 'greatest',\n detail: 'greatest(a,b, ... z)',\n documentation: 'Returns the largest value.',\n },\n {\n label: 'least',\n detail: 'least(a, b, ... z)',\n documentation: 'Returns the smallest value.',\n },\n {\n label: 'log',\n detail: 'log(a)',\n documentation: 'Natural logarithm.',\n },\n {\n label: 'sqrt',\n detail: 'sqrt(a)',\n documentation: 'Square root.',\n },\n];\n\nexport const GENERAL_FUNCTIONS = [\n {\n label: 'ispresent',\n detail: 'ispresent(fieldname)',\n documentation: 'Returns true if the field exists.',\n },\n {\n label: 'coalesce',\n detail: 'coalesce(fieldname1, fieldname2, ... fieldnamex)',\n documentation: 'Returns the first non-null value from the list.',\n },\n];\n\nexport const STRING_FUNCTIONS = [\n {\n label: 'isempty',\n detail: 'isempty(fieldname)',\n documentation: 'Returns true if the field is missing or is an empty string.',\n },\n {\n label: 'isblank',\n detail: 'isblank(fieldname)',\n documentation: 'Returns true if the field is missing, an empty string, or contains only white space.',\n },\n {\n label: 'concat',\n detail: 'concat(string1, string2, ... stringz)',\n documentation: 'Concatenates the strings.',\n },\n {\n label: 'ltrim',\n detail: 'ltrim(string) or ltrim(string1, string2)',\n documentation:\n 'Remove white space from the left of the string. If the function has a second string argument, it removes the characters of string2 from the left of string1.',\n },\n {\n label: 'rtrim',\n detail: 'rtrim(string) or rtrim(string1, string2)',\n documentation:\n 'Remove white space from the right of the string. If the function has a second string argument, it removes the characters of string2 from the right of string1.',\n },\n {\n label: 'trim',\n detail: 'trim(string) or trim(string1, string2)',\n documentation:\n 'Remove white space from both ends of the string. If the function has a second string argument, it removes the characters of string2 from both sides of string1.',\n },\n {\n label: 'strlen',\n detail: 'strlen(string)',\n documentation: 'Returns the length of the string in Unicode code points.',\n },\n {\n label: 'toupper',\n detail: 'toupper(string)',\n documentation: 'Converts the string to uppercase.',\n },\n {\n label: 'tolower',\n detail: 'tolower(string)',\n documentation: 'Converts the string to lowercase.',\n },\n {\n label: 'substr',\n detail: 'substr(string1, x), or substr(string1, x, y)',\n documentation:\n 'Returns a substring from the index specified by the number argument to the end of the string. If the function has a second number argument, it contains the length of the substring to be retrieved.',\n },\n {\n label: 'replace',\n detail: 'replace(string1, string2, string3)',\n documentation: 'Replaces all instances of string2 in string1 with string3.',\n },\n {\n label: 'strcontains',\n detail: 'strcontains(string1, string2)',\n documentation: 'Returns 1 if string1 contains string2 and 0 otherwise.',\n },\n];\n\nexport const DATETIME_FUNCTIONS = [\n {\n label: 'bin',\n detail: 'bin(period)',\n documentation: 'Rounds the value of @timestamp to the given period and then truncates.',\n },\n {\n label: 'datefloor',\n detail: 'datefloor(a, period)',\n documentation: 'Truncates the timestamp to the given period.',\n },\n {\n label: 'dateceil',\n detail: 'dateceil(a, period)',\n documentation: 'Rounds up the timestamp to the given period and then truncates.',\n },\n {\n label: 'fromMillis',\n detail: 'fromMillis(fieldname)',\n documentation:\n 'Interprets the input field as the number of milliseconds since the Unix epoch and converts it to a timestamp.',\n },\n {\n label: 'toMillis',\n detail: 'toMillis(fieldname)',\n documentation:\n 'Converts the timestamp found in the named field into a number representing the milliseconds since the Unix epoch.',\n },\n];\n\nexport const IP_FUNCTIONS = [\n {\n label: 'isValidIp',\n detail: 'isValidIp(fieldname)',\n documentation: 'Returns true if the field is a valid v4 or v6 IP address.',\n },\n {\n label: 'isValidIpV4',\n detail: 'isValidIpV4(fieldname)',\n documentation: 'Returns true if the field is a valid v4 IP address.',\n },\n {\n label: 'isValidIpV6',\n detail: 'isValidIpV6(fieldname)',\n documentation: 'Returns true if the field is a valid v6 IP address.',\n },\n {\n label: 'isIpInSubnet',\n detail: 'isIpInSubnet(fieldname, string)',\n documentation: 'Returns true if the field is a valid v4 or v6 IP address within the specified v4 or v6 subnet.',\n },\n {\n label: 'isIpv4InSubnet',\n detail: 'isIpv4InSubnet(fieldname, string)',\n documentation: 'Returns true if the field is a valid v4 IP address within the specified v4 subnet.',\n },\n {\n label: 'isIpv6InSubnet',\n detail: 'isIpv6InSubnet(fieldname, string)',\n documentation: 'Returns true if the field is a valid v6 IP address within the specified v6 subnet.',\n },\n];\n\nexport const BOOLEAN_FUNCTIONS = [\n {\n label: 'ispresent',\n detail: 'ispresent(fieldname)',\n documentation: 'Returns true if the field exists.',\n },\n {\n label: 'isempty',\n detail: 'isempty(fieldname)',\n documentation: 'Returns true if the field is missing or is an empty string.',\n },\n {\n label: 'isblank',\n detail: 'isblank(fieldname)',\n documentation: 'Returns true if the field is missing, an empty string, or contains only white space.',\n },\n {\n label: 'strcontains',\n detail: 'strcontains(string1, string2)',\n documentation: 'Returns 1 if string1 contains string2 and 0 otherwise.',\n },\n ...IP_FUNCTIONS,\n];\n\nexport const AGGREGATION_FUNCTIONS_STATS = [\n {\n label: 'avg',\n detail: 'avg(NumericFieldname)',\n documentation: 'The average of the values in the specified field.',\n },\n {\n label: 'count',\n detail: 'count(fieldname) or count(*)',\n documentation: 'Counts the log records.',\n },\n {\n label: 'count_distinct',\n detail: 'count_distinct(fieldname)',\n documentation: 'Returns the number of unique values for the field.',\n },\n {\n label: 'max',\n detail: 'max(fieldname)',\n documentation: 'The maximum of the values for this log field in the queried logs.',\n },\n {\n label: 'min',\n detail: 'min(fieldname)',\n documentation: 'The minimum of the values for this log field in the queried logs.',\n },\n {\n label: 'pct',\n detail: 'pct(fieldname, value)',\n documentation: 'A percentile indicates the relative standing of a value in a datas.',\n },\n {\n label: 'stddev',\n detail: 'stddev(NumericFieldname)',\n documentation: 'The standard deviation of the values in the specified field.',\n },\n {\n label: 'sum',\n detail: 'sum(NumericFieldname)',\n documentation: 'The sum of the values in the specified field.',\n },\n];\n\nexport const NON_AGGREGATION_FUNCS_STATS = [\n {\n label: 'earliest',\n detail: 'earliest(fieldname)',\n documentation:\n 'Returns the value of fieldName from the log event that has the earliest time stamp in the queried logs.',\n },\n {\n label: 'latest',\n detail: 'latest(fieldname)',\n documentation:\n 'Returns the value of fieldName from the log event that has the latest time stamp in the queried logs.',\n },\n {\n label: 'sortsFirst',\n detail: 'sortsFirst(fieldname)',\n documentation: 'Returns the value of fieldName that sorts first in the queried logs.',\n },\n {\n label: 'sortsLast',\n detail: 'sortsLast(fieldname)',\n documentation: 'Returns the value of fieldName that sorts last in the queried logs.',\n },\n];\n\nexport const STATS_FUNCS = [...AGGREGATION_FUNCTIONS_STATS, ...NON_AGGREGATION_FUNCS_STATS];\n\nexport const KEYWORDS = ['as', 'like', 'by', 'in', 'desc', 'asc'];\nexport const FIELD_AND_FILTER_FUNCTIONS = [\n ...NUMERIC_OPERATORS,\n ...GENERAL_FUNCTIONS,\n ...STRING_FUNCTIONS,\n ...DATETIME_FUNCTIONS,\n ...IP_FUNCTIONS,\n];\n\nexport const FUNCTIONS = [...FIELD_AND_FILTER_FUNCTIONS, ...STATS_FUNCS];\n\nconst tokenizer: Grammar = {\n comment: {\n pattern: /^#.*/,\n greedy: true,\n },\n backticks: {\n pattern: /`.*?`/,\n alias: 'string',\n greedy: true,\n },\n quote: {\n pattern: /\".*?\"/,\n alias: 'string',\n greedy: true,\n },\n regex: {\n pattern: /\\/.*?\\/(?=\\||\\s*$|,)/,\n greedy: true,\n },\n 'query-command': {\n pattern: new RegExp(`\\\\b(?:${QUERY_COMMANDS.map((command) => command.label).join('|')})\\\\b`, 'i'),\n alias: 'function',\n },\n function: {\n pattern: new RegExp(`\\\\b(?:${FUNCTIONS.map((f) => f.label).join('|')})\\\\b`, 'i'),\n },\n keyword: {\n pattern: new RegExp(`(\\\\s+)(${KEYWORDS.join('|')})(?=\\\\s+)`, 'i'),\n lookbehind: true,\n },\n 'log-group-name': {\n pattern: /[\\.\\-_/#A-Za-z0-9]+/,\n },\n 'field-name': {\n pattern: /(@?[_a-zA-Z]+[_.0-9a-zA-Z]*)|(`((\\\\`)|([^`]))*?`)/,\n greedy: true,\n },\n number: /\\b-?\\d+((\\.\\d*)?([eE][+-]?\\d+)?)?\\b/,\n 'command-separator': {\n pattern: /\\|/,\n alias: 'punctuation',\n },\n 'comparison-operator': {\n pattern: /([<>]=?)|(!?=)/,\n },\n punctuation: /[{}()`,.]/,\n whitespace: /\\s+/,\n};\n\nexport default tokenizer;\n","import { css } from '@emotion/css';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport {\n Button,\n Card,\n Collapse,\n Field,\n Input,\n LoadingPlaceholder,\n ScrollContainer,\n Select,\n Stack,\n useStyles2,\n} from '@grafana/ui';\n\nimport AzureLogAnalyticsDatasource from '../../azure_log_analytics/azure_log_analytics_datasource';\nimport { AzureMonitorQuery, AzureQueryType } from '../../types/query';\nimport { Category, CheatsheetQueries, CheatsheetQuery, DropdownCategories } from '../../types/types';\n\nimport { RawQuery } from './RawQuery';\nimport tokenizer from './syntax';\n\nexport interface AzureCheatSheetProps {\n onChange: (query: AzureMonitorQuery) => void;\n query: AzureMonitorQuery;\n datasource: AzureLogAnalyticsDatasource;\n}\n\nconst AzureCheatSheet = (props: AzureCheatSheetProps) => {\n const [cheatsheetQueries, setCheatsheetQueries] = useState<CheatsheetQueries | null>(null);\n const [areDropdownsOpen, setAreDropdownsOpen] = useState<DropdownCategories>({});\n const [visibleQueries, setVisibleQueries] = useState<CheatsheetQueries | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [searchInputValue, setSearchInputValue] = useState('');\n const styles = useStyles2(getStyles);\n\n const lang = { grammar: tokenizer, name: 'kql' };\n const dropdownMenu = useMemo(() => {\n if (cheatsheetQueries) {\n return Object.keys(cheatsheetQueries).map((category): SelectableValue<string> => {\n return {\n label: category,\n value: category,\n };\n });\n }\n return [];\n }, [cheatsheetQueries]);\n\n const getCheatsheetQueries = async () => {\n await props.datasource.getAzureLogAnalyticsCheatsheetQueries().then((result) => {\n result.categories.sort((a: Category, b: Category) => {\n return a.displayName.toLowerCase() === b.displayName.toLowerCase()\n ? 0\n : a.displayName.toLowerCase() < b.displayName.toLowerCase()\n ? -1\n : 1;\n });\n const alphabetizedQueries = result.categories.reduce(\n (queriesByCategory: CheatsheetQueries, category: Category) => {\n const categoryQueries = category.related.queries.map((queryId: string) => {\n return result.queries.find((query: CheatsheetQuery) => query.id === queryId);\n });\n queriesByCategory[category.displayName] = categoryQueries;\n setAreDropdownsOpen({ ...areDropdownsOpen, [category.id]: false });\n return queriesByCategory;\n },\n {}\n );\n setCheatsheetQueries(alphabetizedQueries);\n setVisibleQueries(alphabetizedQueries);\n setIsLoading(false);\n return alphabetizedQueries;\n });\n };\n\n useEffect(() => {\n if (!cheatsheetQueries) {\n getCheatsheetQueries();\n }\n });\n\n const filterQueriesBySearch = (searchValue: string) => {\n const visibleQueriesCategories = Object.keys(visibleQueries!);\n if (searchValue.length > 0 && cheatsheetQueries) {\n const filteredQueries: CheatsheetQueries = Object.keys(cheatsheetQueries).reduce(\n (filteredQueriesBySearch: CheatsheetQueries, category) => {\n const filters = cheatsheetQueries![category]!.filter((query) => {\n return query.displayName.toLowerCase().includes(searchValue.toLowerCase());\n });\n if (visibleQueriesCategories.includes(category)) {\n filteredQueriesBySearch[category] = filters;\n }\n return filteredQueriesBySearch;\n },\n {}\n );\n\n setVisibleQueries(filteredQueries);\n return filteredQueries;\n } else {\n if (Object.keys(visibleQueries!).length !== Object.keys(cheatsheetQueries!).length) {\n setVisibleQueries(visibleQueries);\n return visibleQueries;\n } else {\n setVisibleQueries(cheatsheetQueries);\n return cheatsheetQueries;\n }\n }\n };\n\n const filterQueriesByCategory = (categories: SelectableValue<string>) => {\n if (categories.length > 0) {\n const selectedCategories = categories.map((selectedCategory: SelectableValue) => selectedCategory.label);\n const updatedVisibleQueries = selectedCategories.reduce(\n (updatedVisibleQueries: CheatsheetQueries, queryCategory: string) => {\n updatedVisibleQueries[queryCategory] = cheatsheetQueries![queryCategory]!;\n return updatedVisibleQueries;\n },\n {}\n );\n setVisibleQueries(updatedVisibleQueries);\n } else {\n setVisibleQueries(cheatsheetQueries);\n }\n };\n\n return (\n <div>\n {!isLoading && visibleQueries ? (\n <div>\n <div className={styles.filterAlignment}>\n <Input\n value={searchInputValue}\n onChange={(e) => {\n setSearchInputValue(e.currentTarget.value);\n const filteredQueries = filterQueriesBySearch(e.currentTarget.value);\n setVisibleQueries(filteredQueries);\n }}\n placeholder={t('components.azure-cheat-sheet.placeholder-search-logs', 'Search Logs queries')}\n width={40}\n />\n <Field\n label={t('components.azure-cheat-sheet.label-categories', 'Categories')}\n className={styles.categoryDropdown}\n >\n <Select\n options={dropdownMenu}\n value={''}\n onChange={(a) => filterQueriesByCategory(a)}\n allowCustomValue={false}\n backspaceRemovesValue={true}\n placeholder={t('components.azure-cheat-sheet.placeholder-all-categories', 'All categories')}\n isClearable={true}\n noOptionsMessage={t(\n 'components.azure-cheat-sheet.noOptionsMessage-unable-to-list-categories',\n 'Unable to list all categories'\n )}\n formatCreateLabel={(input: string) => `Category: ${input}`}\n isSearchable={true}\n isMulti={true}\n width={40}\n />\n </Field>\n </div>\n <div className={styles.spacing}>\n <Trans\n i18nKey=\"components.azure-cheat-sheet.label-query-results\"\n values={{\n numResults: Object.keys(visibleQueries).reduce((totalQueries: number, category) => {\n totalQueries = visibleQueries[category]!.length + totalQueries;\n return totalQueries;\n }, 0),\n }}\n >\n Query results: {'{{numResults}}'}\n </Trans>\n </div>\n <ScrollContainer showScrollIndicators maxHeight=\"350px\">\n {Object.keys(visibleQueries).map((category: string) => {\n if (visibleQueries[category]!.length) {\n return (\n <Collapse\n label={category + ' ' + `(${visibleQueries[category]!.length})`}\n isOpen={areDropdownsOpen[category]}\n onToggle={(isOpen) => setAreDropdownsOpen({ ...areDropdownsOpen, [category]: isOpen })}\n key={category}\n >\n <Stack direction=\"column\">\n {visibleQueries[category]!.map((query) => {\n return (\n <Card noMargin className={styles.card} key={query.id}>\n <Card.Heading>{query.displayName}</Card.Heading>\n <ScrollContainer showScrollIndicators maxHeight=\"100px\">\n <RawQuery\n aria-label={t(\n 'components.azure-cheat-sheet.aria-label-raw-query',\n '{{queryDisplayName}} raw query',\n { queryDisplayName: query.displayName }\n )}\n query={query.body}\n lang={lang}\n className={styles.rawQuery}\n />\n </ScrollContainer>\n <Card.Actions>\n <Button\n size=\"sm\"\n aria-label={t(\n 'components.azure-cheat-sheet.aria-label-use-query',\n 'Use this query button'\n )}\n onClick={() => {\n props.onChange({\n refId: 'A',\n queryType: AzureQueryType.LogAnalytics,\n azureLogAnalytics: { query: query.body },\n datasource: props.datasource,\n });\n reportInteraction('grafana_azure_cheatsheet_logs_query_selected', {\n id: query.id,\n queryName: query.displayName,\n query: query.body,\n queryCategories: query.related.categories,\n });\n }}\n >\n <Trans i18nKey=\"components.azure-cheat-sheet.button-use-query\">Use this query</Trans>\n </Button>\n </Card.Actions>\n </Card>\n );\n })}\n </Stack>\n </Collapse>\n );\n }\n return;\n })}\n </ScrollContainer>\n </div>\n ) : (\n <LoadingPlaceholder text={t('components.azure-cheat-sheet.text-loading', 'Loading...')} />\n )}\n </div>\n );\n};\n\nexport default AzureCheatSheet;\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n card: css({\n width: '90%',\n display: 'flex',\n flexDirection: 'column',\n }),\n rawQuery: css({\n backgroundColor: `${theme.colors.background.primary}`,\n padding: `${theme.spacing(1)}`,\n marginTop: `${theme.spacing(1)}`,\n }),\n spacing: css({\n marginBottom: `${theme.spacing(1)}`,\n }),\n filterAlignment: css({\n display: 'flex',\n }),\n categoryDropdown: css({\n margin: '0 0 10px 10px',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }),\n };\n};\n","import { CoreApp } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Modal } from '@grafana/ui';\n\nimport AzureLogAnalyticsDatasource from '../../azure_log_analytics/azure_log_analytics_datasource';\nimport { AzureMonitorQuery } from '../../dataquery.gen';\n\nimport AzureCheatSheet from './AzureCheatSheet';\n\ntype Props = {\n isOpen: boolean;\n app?: CoreApp;\n onClose: () => void;\n onChange: (query: AzureMonitorQuery) => void;\n onAddQuery?: (query: AzureMonitorQuery) => void;\n datasource: AzureLogAnalyticsDatasource;\n};\n\nexport const AzureCheatSheetModal = (props: Props) => {\n const { isOpen, onClose, datasource, onChange } = props;\n\n return (\n <Modal\n aria-label={t('components.azure-cheat-sheet-modal.aria-label-kick-start', 'Kick start your query modal')}\n isOpen={isOpen}\n title={t('components.azure-cheat-sheet-modal.title-kick-start', 'Kick start your query')}\n onDismiss={onClose}\n >\n <AzureCheatSheet\n onChange={(a) => {\n onChange(a);\n onClose();\n }}\n query={{ refId: 'A' }}\n datasource={datasource}\n ></AzureCheatSheet>\n </Modal>\n );\n};\n","import { css } from '@emotion/css';\nimport { useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { AccessoryButton } from '@grafana/plugin-ui';\nimport { Input, Label, InlineField, Button, useStyles2 } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorResource } from '../../types/query';\n\nexport interface ResourcePickerProps<T> {\n resources: T[];\n onChange: (resources: T[]) => void;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n resourceList: css({ display: 'flex', columnGap: theme.spacing(1), flexWrap: 'wrap', marginBottom: theme.spacing(1) }),\n resource: css({ flex: '0 0 auto' }),\n resourceLabel: css({ padding: theme.spacing(1) }),\n resourceGroupAndName: css({ display: 'flex', columnGap: theme.spacing(0.5) }),\n});\n\nconst AdvancedResourcePicker = ({ resources, onChange }: ResourcePickerProps<AzureMonitorResource>) => {\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n // Ensure there is at least one resource\n if (resources.length === 0) {\n onChange([{}]);\n }\n }, [resources, onChange]);\n\n const onResourceChange = (index: number, resource: AzureMonitorResource) => {\n const newResources = [...resources];\n newResources[index] = resource;\n onChange(newResources);\n };\n\n const removeResource = (index: number) => {\n const newResources = [...resources];\n newResources.splice(index, 1);\n onChange(newResources);\n };\n\n const addResource = () => {\n onChange(\n resources.concat({\n subscription: resources[0]?.subscription,\n metricNamespace: resources[0]?.metricNamespace,\n resourceGroup: '',\n resourceName: '',\n })\n );\n };\n\n const onCommonPropChange = (r: Partial<AzureMonitorResource>) => {\n onChange(resources.map((resource) => ({ ...resource, ...r })));\n };\n\n return (\n <>\n <InlineField\n label={t('components.advanced-resource-picker.label-subscription', 'Subscription')}\n grow\n transparent\n htmlFor={`input-advanced-resource-picker-subscription`}\n labelWidth={15}\n data-testid={selectors.components.queryEditor.resourcePicker.advanced.subscription.input}\n >\n <Input\n id={`input-advanced-resource-picker-subscription`}\n value={resources[0]?.subscription ?? ''}\n onChange={(event) => onCommonPropChange({ subscription: event.currentTarget.value })}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX\"\n />\n </InlineField>\n <InlineField\n label={t('components.advanced-resource-picker.label-namespace', 'Namespace')}\n grow\n transparent\n htmlFor={`input-advanced-resource-picker-metricNamespace`}\n labelWidth={15}\n data-testid={selectors.components.queryEditor.resourcePicker.advanced.namespace.input}\n invalid={resources[0]?.metricNamespace?.endsWith('/')}\n error={'Namespace cannot end with a \"/\"'}\n >\n <Input\n id={`input-advanced-resource-picker-metricNamespace`}\n value={resources[0]?.metricNamespace ?? ''}\n onChange={(event) => onCommonPropChange({ metricNamespace: event.currentTarget.value })}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"Microsoft.Insights/metricNamespaces\"\n />\n </InlineField>\n <InlineField\n label={t('components.advanced-resource-picker.label-region', 'Region')}\n grow\n transparent\n htmlFor={`input-advanced-resource-picker-region`}\n labelWidth={15}\n data-testid={selectors.components.queryEditor.resourcePicker.advanced.region.input}\n tooltip={t(\n 'components.advanced-resource-picker.tooltip-region',\n 'The code region of the resource. Optional for one resource but mandatory when selecting multiple ones.'\n )}\n >\n <Input\n id={`input-advanced-resource-picker-region`}\n value={resources[0]?.region ?? ''}\n onChange={(event) => onCommonPropChange({ region: event.currentTarget.value })}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"northeurope\"\n />\n </InlineField>\n <div className={styles.resourceList}>\n {resources.map((resource, index) => (\n <div key={`resource-${index + 1}`} className={styles.resource}>\n {resources.length !== 1 && (\n <Label className={styles.resourceLabel}>\n <Trans\n i18nKey=\"components.advanced-resource-picker.label-resource-number\"\n values={{ resourceNum: index + 1 }}\n >\n Resource {'{{resourceNum}}'}\n </Trans>\n </Label>\n )}\n <InlineField\n label={t('components.advanced-resource-picker.label-resource-group', 'Resource Group')}\n transparent\n htmlFor={`input-advanced-resource-picker-resourceGroup-${index + 1}`}\n labelWidth={15}\n data-testid={selectors.components.queryEditor.resourcePicker.advanced.resourceGroup.input}\n >\n <div className={styles.resourceGroupAndName}>\n <Input\n id={`input-advanced-resource-picker-resourceGroup-${index + 1}`}\n value={resource?.resourceGroup ?? ''}\n onChange={(event) =>\n onResourceChange(index, { ...resource, resourceGroup: event.currentTarget.value })\n }\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"resource-group\"\n />\n <AccessoryButton\n aria-label={t('components.advanced-resource-picker.aria-label-remove', 'Remove')}\n icon=\"times\"\n variant=\"secondary\"\n onClick={() => removeResource(index)}\n hidden={resources.length === 1}\n data-testid={'remove-resource'}\n />\n </div>\n </InlineField>\n\n <InlineField\n label={t('components.advanced-resource-picker.label-resource-name', 'Resource Name')}\n transparent\n htmlFor={`input-advanced-resource-picker-resourceName-${index + 1}`}\n labelWidth={15}\n data-testid={selectors.components.queryEditor.resourcePicker.advanced.resource.input}\n >\n <Input\n id={`input-advanced-resource-picker-resourceName-${index + 1}`}\n value={resource?.resourceName ?? ''}\n onChange={(event) => onResourceChange(index, { ...resource, resourceName: event.currentTarget.value })}\n placeholder={t('components.advanced-resource-picker.placeholder-resource-name', 'name')}\n />\n </InlineField>\n </div>\n ))}\n </div>\n <Button\n aria-label={t('components.advanced-resource-picker.aria-label-add', 'Add')}\n icon=\"plus\"\n variant=\"secondary\"\n onClick={addResource}\n type=\"button\"\n >\n <Trans i18nKey=\"components.advanced-resource-picker.button-add-resource\">Add resource</Trans>\n </Button>\n </>\n );\n};\n\nexport default AdvancedResourcePicker;\n","import { useCallback } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { AzureMonitorOption, AzureQueryEditorFieldProps } from '../../types/types';\nimport { addValueToOptions } from '../../utils/common';\nimport { Field } from '../shared/Field';\n\nimport { setAggregation } from './setQueryValue';\n\ninterface AggregationFieldProps extends AzureQueryEditorFieldProps {\n aggregationOptions: AzureMonitorOption[];\n isLoading: boolean;\n}\n\nconst AggregationField = ({\n query,\n variableOptionGroup,\n onQueryChange,\n aggregationOptions,\n isLoading,\n}: AggregationFieldProps) => {\n const handleChange = useCallback(\n (change: SelectableValue<string>) => {\n if (!change.value) {\n return;\n }\n\n const newQuery = setAggregation(query, change.value);\n onQueryChange(newQuery);\n },\n [onQueryChange, query]\n );\n\n const options = addValueToOptions(aggregationOptions, variableOptionGroup, query.azureMonitor?.aggregation);\n\n return (\n <Field label={t('components.aggregation-field.label-aggregation', 'Aggregation')}>\n <Select\n inputId=\"azure-monitor-metrics-aggregation-field\"\n value={query.azureMonitor?.aggregation || null}\n onChange={handleChange}\n options={options}\n isLoading={isLoading}\n />\n </Field>\n );\n};\n\nexport default AggregationField;\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue, DataFrame, PanelData, Labels } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorList, AccessoryButton } from '@grafana/plugin-ui';\nimport { Select, Stack, MultiSelect } from '@grafana/ui';\n\nimport { AzureMetricDimension, AzureMonitorQuery } from '../../types/query';\nimport { AzureMonitorOption, AzureQueryEditorFieldProps } from '../../types/types';\nimport { Field } from '../shared/Field';\n\nimport { setDimensionFilters } from './setQueryValue';\n\ninterface DimensionFieldsProps extends AzureQueryEditorFieldProps {\n dimensionOptions: AzureMonitorOption[];\n}\n\ninterface DimensionLabels {\n [key: string]: Set<string>;\n}\n\nconst useDimensionLabels = (data: PanelData | undefined, query: AzureMonitorQuery) => {\n const [dimensionLabels, setDimensionLabels] = useState<DimensionLabels>({});\n useEffect(() => {\n let labelsObj: DimensionLabels = {};\n if (data?.series?.length) {\n // Identify which series' in the dataframe are relevant to the current query\n const series: DataFrame[] = data.series.flat().filter((series) => series.refId === query.refId);\n const fields = series.flatMap((series) => series.fields);\n // Retrieve labels for series fields\n const labels = fields\n .map((fields) => fields.labels)\n .flat()\n .filter((item): item is Labels => item !== null && item !== undefined);\n for (const label of labels) {\n // Labels only exist for series that have a dimension selected\n for (const [dimension, value] of Object.entries(label)) {\n const dimensionLower = dimension.toLowerCase();\n if (labelsObj[dimensionLower]) {\n labelsObj[dimensionLower].add(value);\n } else {\n labelsObj[dimensionLower] = new Set([value]);\n }\n }\n }\n }\n setDimensionLabels((prevLabels) => {\n const newLabels: DimensionLabels = {};\n const currentLabels = Object.keys(labelsObj);\n if (currentLabels.length === 0) {\n return prevLabels;\n }\n for (const label of currentLabels) {\n if (prevLabels[label] && labelsObj[label].size < prevLabels[label].size) {\n newLabels[label] = prevLabels[label];\n } else {\n newLabels[label] = labelsObj[label];\n }\n }\n return newLabels;\n });\n }, [data?.series, query.refId]);\n return dimensionLabels;\n};\n\nconst DimensionFields = ({ data, query, dimensionOptions, onQueryChange }: DimensionFieldsProps) => {\n const dimensionFilters = useMemo(\n () => query.azureMonitor?.dimensionFilters ?? [],\n [query.azureMonitor?.dimensionFilters]\n );\n\n const dimensionLabels = useDimensionLabels(data, query);\n\n const dimensionOperators: Array<SelectableValue<string>> = [\n { label: '==', value: 'eq' },\n { label: '!=', value: 'ne' },\n { label: 'starts with', value: 'sw' },\n ];\n\n const validDimensionOptions = useMemo(() => {\n // We filter out any dimensions that have already been used in a filter as the API doesn't support having multiple filters with the same dimension name.\n // The Azure portal also doesn't support this feature so it makes sense for consistency.\n let t = dimensionOptions;\n if (dimensionFilters.length) {\n t = dimensionOptions.filter(\n (val) => !dimensionFilters.some((dimensionFilter) => dimensionFilter.dimension === val.value)\n );\n }\n return t;\n }, [dimensionFilters, dimensionOptions]);\n\n const onFieldChange = <Key extends keyof AzureMetricDimension>(\n fieldName: Key,\n item: Partial<AzureMetricDimension>,\n value: AzureMetricDimension[Key],\n onChange: (item: Partial<AzureMetricDimension>) => void\n ) => {\n item[fieldName] = value;\n onChange(item);\n };\n\n const getValidDimensionOptions = (selectedDimension: string) => {\n return validDimensionOptions.concat(dimensionOptions.filter((item) => item.value === selectedDimension));\n };\n\n const getValidFilterOptions = (selectedFilter: string | undefined, dimension: string) => {\n const dimensionFilters = Array.from(dimensionLabels[dimension.toLowerCase()] ?? []);\n if (dimensionFilters.find((filter) => filter === selectedFilter)) {\n return dimensionFilters.map((filter) => ({ value: filter, label: filter }));\n }\n return [...dimensionFilters, ...(selectedFilter && selectedFilter !== '*' ? [selectedFilter] : [])].map((item) => ({\n value: item,\n label: item,\n }));\n };\n\n const getValidMultiSelectOptions = (selectedFilters: string[] | undefined, dimension: string) => {\n const labelOptions = getValidFilterOptions(undefined, dimension);\n if (selectedFilters) {\n for (const filter of selectedFilters) {\n if (!labelOptions.find((label) => label.value === filter)) {\n labelOptions.push({ value: filter, label: filter });\n }\n }\n }\n return labelOptions;\n };\n const getValidOperators = (selectedOperator: string) => {\n if (dimensionOperators.find((operator: SelectableValue) => operator.value === selectedOperator)) {\n return dimensionOperators;\n }\n return [...dimensionOperators, ...(selectedOperator ? [{ label: selectedOperator, value: selectedOperator }] : [])];\n };\n\n const changedFunc = (changed: Array<Partial<AzureMetricDimension>>) => {\n const properData: AzureMetricDimension[] = changed.map((x) => {\n return {\n dimension: x.dimension ?? '',\n operator: x.operator ?? 'eq',\n filters: x.filters ?? [],\n };\n });\n onQueryChange(setDimensionFilters(query, properData));\n };\n\n const renderFilters = (\n item: Partial<AzureMetricDimension>,\n onChange: (item: Partial<AzureMetricDimension>) => void,\n onDelete: () => void\n ) => {\n return (\n <Stack gap={0}>\n <Select\n menuShouldPortal\n placeholder={t('components.dimension-fields.placeholder-field', 'Field')}\n value={item.dimension}\n options={getValidDimensionOptions(item.dimension || '')}\n onChange={(e) => onFieldChange('dimension', item, e.value ?? '', onChange)}\n />\n <Select\n menuShouldPortal\n placeholder={t('components.dimension-fields.placeholder-operation', 'Operation')}\n value={item.operator}\n options={getValidOperators(item.operator || 'eq')}\n onChange={(e) => onFieldChange('operator', item, e.value ?? '', onChange)}\n allowCustomValue\n />\n {item.operator === 'eq' || item.operator === 'ne' ? (\n <MultiSelect\n menuShouldPortal\n placeholder={t('components.dimension-fields.placeholder-select-values', 'Select value(s)')}\n value={item.filters}\n options={getValidMultiSelectOptions(item.filters, item.dimension ?? '')}\n onChange={(e) =>\n onFieldChange(\n 'filters',\n item,\n e.map((x) => x.value ?? ''),\n onChange\n )\n }\n data-testid=\"dimension-labels-select\"\n allowCustomValue\n />\n ) : (\n // The API does not currently allow for multiple \"starts with\" clauses to be used.\n <Select\n menuShouldPortal\n placeholder={t('components.dimension-fields.placeholder-select-value', 'Select value')}\n value={item.filters ? item.filters[0] : ''}\n allowCustomValue\n options={getValidFilterOptions(item.filters ? item.filters[0] : '', item.dimension ?? '')}\n onChange={(e) => onFieldChange('filters', item, [e?.value ?? ''], onChange)}\n isClearable\n />\n )}\n <AccessoryButton\n aria-label={t('components.dimension-fields.aria-label-remove', 'Remove')}\n icon=\"times\"\n variant=\"secondary\"\n onClick={onDelete}\n type=\"button\"\n />\n </Stack>\n );\n };\n\n return (\n <Field label={t('components.dimension-fields.label-dimensions', 'Dimensions')}>\n <EditorList items={dimensionFilters} onChange={changedFunc} renderItem={renderFilters} />\n </Field>\n );\n};\n\nexport default DimensionFields;\n","import { useCallback, useState } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Input } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types/types';\nimport { Field } from '../shared/Field';\n\nimport { setLegendAlias } from './setQueryValue';\n\nconst LegendFormatField = ({ onQueryChange, query }: AzureQueryEditorFieldProps) => {\n const [value, setValue] = useState<string>(query.azureMonitor?.alias ?? '');\n\n // As calling onQueryChange initiates a the datasource refresh, we only want to call it once\n // the field loses focus\n const handleChange = useCallback((ev: React.FormEvent) => {\n if (ev.target instanceof HTMLInputElement) {\n setValue(ev.target.value);\n }\n }, []);\n\n const handleBlur = useCallback(() => {\n const newQuery = setLegendAlias(query, value);\n onQueryChange(newQuery);\n }, [onQueryChange, query, value]);\n\n return (\n <Field label={t('components.legend-format-field.label-legend-format', 'Legend format')}>\n <Input\n id=\"azure-monitor-metrics-legend-field\"\n placeholder={t('components.legend-format-field.placeholder-legend-format', 'Alias patterns')}\n value={value}\n onChange={handleChange}\n onBlur={handleBlur}\n width={38}\n />\n </Field>\n );\n};\n\nexport default LegendFormatField;\n","import { useCallback } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types/types';\nimport { addValueToOptions } from '../../utils/common';\nimport { Field } from '../shared/Field';\n\nimport { setMetricName } from './setQueryValue';\n\ninterface MetricNameProps extends AzureQueryEditorFieldProps {\n metricNames: AzureMonitorOption[];\n}\n\nconst MetricNameField = ({ metricNames, query, variableOptionGroup, onQueryChange }: MetricNameProps) => {\n const handleChange = useCallback(\n (change: SelectableValue<string>) => {\n if (!change.value) {\n return;\n }\n\n const newQuery = setMetricName(query, change.value);\n onQueryChange(newQuery);\n },\n [onQueryChange, query]\n );\n\n const options = addValueToOptions(metricNames, variableOptionGroup, query.azureMonitor?.metricName);\n\n return (\n <Field\n label={t('components.metric-name-field.label-metric', 'Metric')}\n data-testid={selectors.components.queryEditor.metricsQueryEditor.metricName.input}\n >\n <Select\n inputId=\"azure-monitor-metrics-metric-field\"\n value={query.azureMonitor?.metricName ?? null}\n onChange={handleChange}\n options={options}\n allowCustomValue\n />\n </Field>\n );\n};\n\nexport default MetricNameField;\n","import { useCallback } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types/types';\nimport { addValueToOptions } from '../../utils/common';\nimport { Field } from '../shared/Field';\n\nimport { setCustomNamespace } from './setQueryValue';\n\ninterface MetricNamespaceFieldProps extends AzureQueryEditorFieldProps {\n metricNamespaces: AzureMonitorOption[];\n}\n\nconst MetricNamespaceField = ({\n metricNamespaces,\n query,\n variableOptionGroup,\n onQueryChange,\n}: MetricNamespaceFieldProps) => {\n const handleChange = useCallback(\n (change: SelectableValue<string>) => {\n if (!change.value) {\n return;\n }\n\n const newQuery = setCustomNamespace(query, change.value);\n onQueryChange(newQuery);\n },\n [onQueryChange, query]\n );\n\n const value = query.azureMonitor?.customNamespace || query.azureMonitor?.metricNamespace;\n const options = addValueToOptions(metricNamespaces, variableOptionGroup, value);\n\n return (\n <Field label={t('components.metric-namespace-field.label-metric-namespace', 'Metric namespace')}>\n <Select\n inputId=\"azure-monitor-metrics-metric-namespace-field\"\n value={value || null}\n onChange={handleChange}\n options={options}\n allowCustomValue\n />\n </Field>\n );\n};\n\nexport default MetricNamespaceField;\n","import { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport TimegrainConverter from '../../time_grain_converter';\nimport { AzureQueryEditorFieldProps, AzureMonitorOption } from '../../types/types';\nimport { addValueToOptions } from '../../utils/common';\nimport { Field } from '../shared/Field';\n\nimport { setTimeGrain } from './setQueryValue';\n\ninterface TimeGrainFieldProps extends AzureQueryEditorFieldProps {\n timeGrainOptions: AzureMonitorOption[];\n}\n\nconst TimeGrainField = ({ query, timeGrainOptions, variableOptionGroup, onQueryChange }: TimeGrainFieldProps) => {\n const handleChange = useCallback(\n (change: SelectableValue<string>) => {\n if (!change.value) {\n return;\n }\n\n const newQuery = setTimeGrain(query, change.value);\n onQueryChange(newQuery);\n },\n [onQueryChange, query]\n );\n\n const timeGrains = useMemo(() => {\n const autoInterval = TimegrainConverter.findClosestTimeGrain(\n '1m',\n timeGrainOptions.map((o) => TimegrainConverter.createKbnUnitFromISO8601Duration(o.value)) || [\n '1m',\n '5m',\n '15m',\n '30m',\n '1h',\n '6h',\n '12h',\n '1d',\n ]\n );\n\n const baseTimeGrains = timeGrainOptions.map((v) => (v.value === 'auto' ? { ...v, description: autoInterval } : v));\n\n const options = addValueToOptions(baseTimeGrains, variableOptionGroup, query.azureMonitor?.timeGrain);\n\n return options;\n }, [timeGrainOptions, variableOptionGroup, query.azureMonitor?.timeGrain]);\n\n return (\n <Field label={t('components.time-grain-field.label-time-grain', 'Time grain')}>\n <Select\n inputId=\"azure-monitor-metrics-time-grain-field\"\n value={query.azureMonitor?.timeGrain}\n onChange={handleChange}\n options={timeGrains}\n />\n </Field>\n );\n};\n\nexport default TimeGrainField;\n","import { useCallback, useState } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { Input } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types/types';\nimport { Field } from '../shared/Field';\n\nimport { setTop } from './setQueryValue';\n\nconst TopField = ({ onQueryChange, query }: AzureQueryEditorFieldProps) => {\n const [value, setValue] = useState<string>(query.azureMonitor?.top ?? '');\n\n // As calling onQueryChange initiates a the datasource refresh, we only want to call it once\n // the field loses focus\n const handleChange = useCallback((ev: React.FormEvent) => {\n if (ev.target instanceof HTMLInputElement) {\n setValue(ev.target.value);\n }\n }, []);\n\n const handleBlur = useCallback(() => {\n const newQuery = setTop(query, value);\n onQueryChange(newQuery);\n }, [onQueryChange, query, value]);\n\n return (\n <Field label={t('components.top-field.label-top', 'Top')}>\n <Input\n id=\"azure-monitor-metrics-top-field\"\n value={value}\n onChange={handleChange}\n onBlur={handleBlur}\n width={16}\n />\n </Field>\n );\n};\n\nexport default TopField;\n","import { useEffect, useMemo, useState } from 'react';\n\nexport function useAsyncState<T>(asyncFn: () => Promise<T>, setError: Function, dependencies: unknown[]) {\n // Use the lazy initial state functionality of useState to assign a random ID to the API call\n // to track where errors come from. See useLastError.\n const [errorSource] = useState(() => Math.random());\n const [value, setValue] = useState<T>();\n\n const finalValue = useMemo(() => value ?? [], [value]);\n\n useEffect(() => {\n asyncFn()\n .then((results) => {\n setValue(results);\n setError(errorSource, undefined);\n })\n .catch((err) => {\n setError(errorSource, err);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n\n return finalValue;\n}\n","import { useEffect, useState } from 'react';\n\nimport { rangeUtil } from '@grafana/data';\n\nimport Datasource from '../../datasource';\nimport TimegrainConverter from '../../time_grain_converter';\nimport { AzureMonitorQuery, AzureMonitorResource } from '../../types/query';\nimport { AzureMonitorErrorish, AzureMonitorOption } from '../../types/types';\nimport { toOption } from '../../utils/common';\nimport { useAsyncState } from '../../utils/useAsyncState';\n\nimport { setCustomNamespace } from './setQueryValue';\n\ntype SetErrorFn = (source: string, error: AzureMonitorErrorish | undefined) => void;\n\nexport type DataHook = (\n query: AzureMonitorQuery,\n datasource: Datasource,\n onChange: OnChangeFn,\n setError: SetErrorFn\n) => AzureMonitorOption[];\n\nexport type MetricsMetadataHook = (\n query: AzureMonitorQuery,\n datasource: Datasource,\n onChange: OnChangeFn\n) => MetricMetadata;\n\nexport interface MetricMetadata {\n aggOptions: AzureMonitorOption[];\n timeGrains: AzureMonitorOption[];\n dimensions: AzureMonitorOption[];\n isLoading: boolean;\n\n // These two properties are only used within the hook, and not elsewhere\n supportedAggTypes: string[];\n primaryAggType: string | undefined;\n}\n\ntype OnChangeFn = (newQuery: AzureMonitorQuery) => void;\n\nconst getResourceGroupAndName = (resources?: AzureMonitorResource[]) => {\n if (!resources || !resources.length) {\n return { resourceGroup: '', resourceName: '' };\n }\n return {\n resourceGroup: resources[0].resourceGroup ?? '',\n resourceName: resources[0].resourceName ?? '',\n };\n};\n\nexport const useMetricNamespaces: DataHook = (query, datasource, onChange, setError) => {\n const { subscription } = query;\n const { metricNamespace, resources } = query.azureMonitor ?? {};\n const { resourceGroup, resourceName } = getResourceGroupAndName(resources);\n\n const metricNamespaces = useAsyncState(\n async () => {\n if (!subscription || !resourceGroup || !resourceName) {\n return;\n }\n\n const results = await datasource.azureMonitorDatasource.getMetricNamespaces(\n {\n subscription,\n metricNamespace,\n resourceGroup,\n resourceName,\n },\n false\n );\n const options = formatOptions(results, metricNamespace);\n\n // Do some cleanup of the query state if need be\n if (!metricNamespace && options.length) {\n onChange(setCustomNamespace(query, options[0].value));\n }\n\n return options;\n },\n setError,\n [subscription, metricNamespace, resourceGroup, resourceName]\n );\n\n return metricNamespaces;\n};\n\nexport const useMetricNames: DataHook = (query, datasource, onChange, setError) => {\n const { subscription } = query;\n const { metricNamespace, metricName, resources, customNamespace } = query.azureMonitor ?? {};\n const { resourceGroup, resourceName } = getResourceGroupAndName(resources);\n const multipleResources = (resources && resources.length > 1) ?? false;\n const region = query.azureMonitor?.region ?? '';\n\n return useAsyncState(\n async () => {\n if (!subscription || !metricNamespace || !resourceGroup || !resourceName) {\n return;\n }\n const results = await datasource.azureMonitorDatasource.getMetricNames(\n {\n subscription,\n resourceGroup,\n resourceName,\n metricNamespace,\n customNamespace,\n },\n multipleResources,\n region\n );\n const options = formatOptions(results, metricName);\n\n return options;\n },\n setError,\n [subscription, resourceGroup, resourceName, metricNamespace, customNamespace, multipleResources]\n );\n};\n\nconst defaultMetricMetadata: MetricMetadata = {\n aggOptions: [],\n timeGrains: [],\n dimensions: [],\n isLoading: false,\n supportedAggTypes: [],\n primaryAggType: undefined,\n};\n\nexport const useMetricMetadata = (query: AzureMonitorQuery, datasource: Datasource, onChange: OnChangeFn) => {\n const [metricMetadata, setMetricMetadata] = useState<MetricMetadata>(defaultMetricMetadata);\n const { subscription } = query;\n const { resources, metricNamespace, metricName, aggregation, timeGrain, customNamespace, region } =\n query.azureMonitor ?? {};\n const { resourceGroup, resourceName } = getResourceGroupAndName(resources);\n const multipleResources = (resources && resources.length > 1) ?? false;\n\n // Fetch new metric metadata when the fields change\n useEffect(() => {\n if (!subscription || !resourceGroup || !resourceName || !metricNamespace || !metricName) {\n setMetricMetadata(defaultMetricMetadata);\n return;\n }\n datasource.azureMonitorDatasource\n .getMetricMetadata(\n { subscription, resourceGroup, resourceName, metricNamespace, metricName, customNamespace },\n multipleResources,\n region\n )\n .then((metadata) => {\n // TODO: Move the aggregationTypes and timeGrain defaults into `getMetricMetadata`\n const aggregations = (metadata.supportedAggTypes || [metadata.primaryAggType]).map((v) => ({\n label: v,\n value: v,\n }));\n\n setMetricMetadata({\n aggOptions: aggregations,\n timeGrains: metadata.supportedTimeGrains,\n dimensions: metadata.dimensions,\n isLoading: false,\n supportedAggTypes: metadata.supportedAggTypes ?? [],\n primaryAggType: metadata.primaryAggType,\n });\n });\n }, [\n region,\n datasource,\n subscription,\n resourceGroup,\n resourceName,\n metricNamespace,\n metricName,\n customNamespace,\n multipleResources,\n ]);\n\n // Update the query state in response to the meta data changing\n useEffect(() => {\n const newAggregation = aggregation || metricMetadata.primaryAggType;\n const newTimeGrain = timeGrain || 'auto';\n\n if (newAggregation !== aggregation || newTimeGrain !== timeGrain) {\n onChange({\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n aggregation: newAggregation,\n timeGrain: newTimeGrain,\n allowedTimeGrainsMs: metricMetadata.timeGrains\n .filter((timeGrain) => timeGrain.value !== 'auto')\n .map((timeGrain) =>\n rangeUtil.intervalToMs(TimegrainConverter.createKbnUnitFromISO8601Duration(timeGrain.value))\n ),\n },\n });\n }\n }, [onChange, metricMetadata, aggregation, timeGrain, query]);\n\n return metricMetadata;\n};\n\nfunction formatOptions(\n rawResults: Array<{\n text: string;\n value: string;\n }>,\n selectedValue?: string\n) {\n const options = rawResults.map(toOption);\n\n // account for custom values that might have been set in json file like ones crafted with a template variable (ex: \"cloud-datasource-resource-$Environment\")\n if (selectedValue && !options.find((option) => option.value === selectedValue.toLowerCase())) {\n options.push({ label: selectedValue, value: selectedValue });\n }\n\n return options;\n}\n","import { PanelData } from '@grafana/data';\nimport { EditorRows, EditorRow, EditorFieldGroup } from '@grafana/plugin-ui';\n\nimport { multiResourceCompatibleTypes } from '../../azureMetadata/resourceTypes';\nimport type Datasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorQuery, AzureMonitorResource } from '../../types/query';\nimport { AzureMonitorOption, AzureMonitorErrorish } from '../../types/types';\nimport ResourceField from '../ResourceField/ResourceField';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from '../ResourcePicker/types';\nimport { parseResourceDetails } from '../ResourcePicker/utils';\n\nimport AdvancedResourcePicker from './AdvancedResourcePicker';\nimport AggregationField from './AggregationField';\nimport DimensionFields from './DimensionFields';\nimport LegendFormatField from './LegendFormatField';\nimport MetricNameField from './MetricNameField';\nimport MetricNamespaceField from './MetricNamespaceField';\nimport TimeGrainField from './TimeGrainField';\nimport TopField from './TopField';\nimport { useMetricNames, useMetricNamespaces, useMetricMetadata } from './dataHooks';\n\ninterface MetricsQueryEditorProps {\n data: PanelData | undefined;\n query: AzureMonitorQuery;\n datasource: Datasource;\n onChange: (newQuery: AzureMonitorQuery) => void;\n variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n}\n\nconst MetricsQueryEditor = ({\n data,\n query,\n datasource,\n variableOptionGroup,\n onChange,\n setError,\n}: MetricsQueryEditorProps) => {\n const metricsMetadata = useMetricMetadata(query, datasource, onChange);\n const metricNamespaces = useMetricNamespaces(query, datasource, onChange, setError);\n const metricNames = useMetricNames(query, datasource, onChange, setError);\n const resources =\n query.azureMonitor?.resources?.map((r) => ({\n subscription: query.subscription,\n resourceGroup: r.resourceGroup,\n metricNamespace: query.azureMonitor?.metricNamespace,\n resourceName: r.resourceName,\n region: query.azureMonitor?.region,\n })) ?? [];\n\n const supportMultipleResource = (namespace?: string) => {\n return multiResourceCompatibleTypes[namespace?.toLocaleLowerCase() ?? ''] ?? false;\n };\n\n const disableRow = (row: ResourceRow, selectedRows: ResourceRowGroup) => {\n if (selectedRows.length === 0) {\n // Only if there is some resource(s) selected we should disable rows\n return false;\n }\n\n const rowResource = parseResourceDetails(row.uri, row.location);\n const selectedRowSample = parseResourceDetails(selectedRows[0].uri, selectedRows[0].location);\n // Only resources:\n // - in the same subscription\n // - in the same region\n // - with the same metric namespace\n // - with a metric namespace that is compatible with multi-resource queries\n return (\n rowResource.subscription !== selectedRowSample.subscription ||\n rowResource.region !== selectedRowSample.region ||\n rowResource.metricNamespace?.toLocaleLowerCase() !== selectedRowSample.metricNamespace?.toLocaleLowerCase() ||\n !supportMultipleResource(rowResource.metricNamespace)\n );\n };\n\n const selectionNotice = (selectedRows: ResourceRowGroup) => {\n if (selectedRows.length === 0) {\n return '';\n }\n const selectedRowSample = parseResourceDetails(selectedRows[0].uri, selectedRows[0].location);\n return supportMultipleResource(selectedRowSample.metricNamespace)\n ? 'You can select items of the same resource type and location. To select resources of a different resource type or location, please first uncheck your current selection.'\n : '';\n };\n\n return (\n <span data-testid={selectors.components.queryEditor.metricsQueryEditor.container.input}>\n <EditorRows>\n <EditorRow>\n <EditorFieldGroup>\n <ResourceField\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n selectableEntryTypes={[ResourceRowType.Resource]}\n resources={resources ?? []}\n queryType={'metrics'}\n disableRow={disableRow}\n renderAdvanced={(resources, onChange) => (\n // It's required to cast resources because the resource picker\n // specifies the type to string | AzureMonitorResource.\n // eslint-disable-next-line\n <AdvancedResourcePicker resources={resources as AzureMonitorResource[]} onChange={onChange} />\n )}\n selectionNotice={selectionNotice}\n />\n <MetricNamespaceField\n metricNamespaces={metricNamespaces}\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n />\n <MetricNameField\n metricNames={metricNames}\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n />\n <AggregationField\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n aggregationOptions={metricsMetadata?.aggOptions ?? []}\n isLoading={metricsMetadata.isLoading}\n />\n <TimeGrainField\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n timeGrainOptions={metricsMetadata?.timeGrains ?? []}\n />\n </EditorFieldGroup>\n </EditorRow>\n <EditorRow>\n <EditorFieldGroup>\n <DimensionFields\n data={data}\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n dimensionOptions={metricsMetadata?.dimensions ?? []}\n />\n </EditorFieldGroup>\n </EditorRow>\n <EditorRow>\n <EditorFieldGroup>\n <TopField\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n />\n <LegendFormatField\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n />\n </EditorFieldGroup>\n </EditorRow>\n </EditorRows>\n </span>\n );\n};\n\nexport default MetricsQueryEditor;\n","import { gte, compare, valid } from 'semver';\n\nimport {\n FunctionSelector,\n Selectors,\n SelectorsOf,\n StringSelector,\n VersionedSelectorGroup,\n VersionedSelectors,\n CssSelector,\n UrlSelector,\n FunctionSelectorTwoArgs,\n} from './types';\n\n/**\n * Resolves selectors based on the Grafana version\n */\nexport function resolveSelectors<T extends VersionedSelectorGroup>(\n versionedSelectors: T,\n grafanaVersion = 'latest'\n): SelectorsOf<T> {\n const version = grafanaVersion.replace(/\\-.*/, '');\n\n return resolveSelectorGroup(versionedSelectors, version);\n}\n\nfunction resolveSelectorGroup<T extends VersionedSelectorGroup>(group: T, grafanaVersion: string): SelectorsOf<T> {\n const result: Selectors = {};\n\n for (const [key, value] of Object.entries(group)) {\n if (isVersionedSelectorGroup(value)) {\n result[key] = resolveSelectorGroup(value, grafanaVersion);\n } else {\n assertIsSemverValid(value, key);\n result[key] = resolveSelector(value, grafanaVersion);\n }\n }\n\n return result as SelectorsOf<T>;\n}\n\nfunction isVersionedSelectorGroup(\n target: VersionedSelectors | VersionedSelectorGroup\n): target is VersionedSelectorGroup {\n if (typeof target === 'object') {\n const [first] = Object.keys(target);\n return !valid(first);\n }\n\n return false;\n}\n\nfunction resolveSelector(\n versionedSelector: VersionedSelectors,\n grafanaVersion: string\n): StringSelector | FunctionSelector | FunctionSelectorTwoArgs | CssSelector | UrlSelector {\n let versionToUse;\n let versions = Object.keys(versionedSelector).sort(compare);\n\n if (grafanaVersion === 'latest') {\n return versionedSelector[versions[versions.length - 1]];\n }\n\n for (const version of versions) {\n if (gte(grafanaVersion, version)) {\n versionToUse = version;\n }\n }\n\n if (!versionToUse) {\n versionToUse = versions[versions.length - 1];\n }\n\n return versionedSelector[versionToUse];\n}\n\nfunction assertIsSemverValid(versionedSelector: VersionedSelectors, selectorName: string) {\n if (!Object.keys(versionedSelector).every((version) => valid(version))) {\n throw new Error(`Invalid semver version: '${selectorName}'`);\n }\n}\n","export const MIN_GRAFANA_VERSION = '8.5.0';\n","// NOTE: by default Component string selectors are set up to be aria-labels,\n// however there are many cases where your component may not need an aria-label\n// (a <button> with clear text, for example, does not need an aria-label as it's already labeled)\n// but you still might need to select it for testing,\n// in that case please add the attribute data-testid={selector} in the component and\n// prefix your selector string with 'data-testid' so that when create the selectors we know to search for it on the right attribute\n\nimport { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Components\n */\nexport const versionedComponents = {\n RadioButton: {\n container: {\n '10.2.3': 'data-testid radio-button',\n },\n },\n Breadcrumbs: {\n breadcrumb: {\n '9.4.0': (title: string) => `data-testid ${title} breadcrumb`,\n },\n },\n CanvasGridAddActions: {\n addPanel: {\n '12.1.0': 'data-testid CanvasGridAddActions add-panel',\n },\n groupPanels: {\n '12.1.0': 'data-testid CanvasGridAddActions group-panels',\n },\n ungroup: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup',\n },\n ungroupRows: {\n '12.1.0': 'data-testid CanvasGridAddActions ungroup-rows',\n },\n addRow: {\n '12.1.0': 'data-testid CanvasGridAddActions add-row',\n },\n pasteRow: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-row',\n },\n addTab: {\n '12.1.0': 'data-testid CanvasGridAddActions add-tab',\n },\n pasteTab: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-tab',\n },\n pastePanel: {\n '12.1.0': 'data-testid CanvasGridAddActions paste-panel',\n },\n },\n DashboardEditPaneSplitter: {\n primaryBody: {\n '12.1.0': 'data-testid DashboardEditPaneSplitter primary body',\n },\n },\n EditPaneHeader: {\n deleteButton: {\n '12.1.0': 'data-testid EditPaneHeader delete panel',\n },\n copyDropdown: {\n '12.1.0': 'data-testid EditPaneHeader copy dropdown',\n },\n copy: {\n '12.1.0': 'data-testid EditPaneHeader copy',\n },\n duplicate: {\n '12.1.0': 'data-testid EditPaneHeader duplicate',\n },\n backButton: {\n '12.1.0': 'data-testid EditPaneHeader back',\n },\n },\n TimePicker: {\n openButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid TimePicker Open Button',\n },\n overlayContent: {\n '10.2.3': 'data-testid TimePicker Overlay Content',\n },\n fromField: {\n '10.2.3': 'data-testid Time Range from field',\n [MIN_GRAFANA_VERSION]: 'Time Range from field',\n },\n toField: {\n '10.2.3': 'data-testid Time Range to field',\n [MIN_GRAFANA_VERSION]: 'Time Range to field',\n },\n applyTimeRange: {\n [MIN_GRAFANA_VERSION]: 'data-testid TimePicker submit button',\n },\n copyTimeRange: {\n '10.4.0': 'data-testid TimePicker copy button',\n },\n pasteTimeRange: {\n '10.4.0': 'data-testid TimePicker paste button',\n },\n calendar: {\n label: {\n '10.2.3': 'data-testid Time Range calendar',\n [MIN_GRAFANA_VERSION]: 'Time Range calendar',\n },\n openButton: {\n '10.2.3': 'data-testid Open time range calendar',\n [MIN_GRAFANA_VERSION]: 'Open time range calendar',\n },\n closeButton: {\n '10.2.3': 'data-testid Close time range Calendar',\n [MIN_GRAFANA_VERSION]: 'Close time range Calendar',\n },\n },\n absoluteTimeRangeTitle: {\n [MIN_GRAFANA_VERSION]: 'data-testid-absolute-time-range-narrow',\n },\n },\n DataSourcePermissions: {\n form: { '9.5.0': () => 'form[name=\"addPermission\"]' },\n roleType: {\n '9.5.0': 'Role to add new permission to',\n },\n rolePicker: {\n '9.5.0': 'Built-in role picker',\n },\n permissionLevel: {\n '12.0.0': 'Permission level',\n '9.5.0': 'Permission Level',\n },\n },\n DateTimePicker: {\n input: {\n '10.2.3': 'data-testid date-time-input',\n },\n },\n DataSource: {\n TestData: {\n QueryTab: {\n scenarioSelectContainer: {\n [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select container',\n },\n scenarioSelect: {\n [MIN_GRAFANA_VERSION]: 'Test Data Query scenario select',\n },\n max: {\n [MIN_GRAFANA_VERSION]: 'TestData max',\n },\n min: {\n [MIN_GRAFANA_VERSION]: 'TestData min',\n },\n noise: {\n [MIN_GRAFANA_VERSION]: 'TestData noise',\n },\n seriesCount: {\n [MIN_GRAFANA_VERSION]: 'TestData series count',\n },\n spread: {\n [MIN_GRAFANA_VERSION]: 'TestData spread',\n },\n startValue: {\n [MIN_GRAFANA_VERSION]: 'TestData start value',\n },\n drop: {\n [MIN_GRAFANA_VERSION]: 'TestData drop values',\n },\n },\n },\n DataSourceHttpSettings: {\n urlInput: {\n '10.4.0': 'data-testid Datasource HTTP settings url',\n [MIN_GRAFANA_VERSION]: 'Datasource HTTP settings url',\n },\n },\n Jaeger: {\n traceIDInput: {\n [MIN_GRAFANA_VERSION]: 'Trace ID',\n },\n },\n Prometheus: {\n configPage: {\n connectionSettings: {\n [MIN_GRAFANA_VERSION]: 'Data source connection URL', // aria-label in grafana experimental\n },\n manageAlerts: {\n '10.4.0': 'prometheus-alerts-manager', // id for switch component\n },\n allowAsRecordingRulesTarget: {\n '12.1.0': 'prometheus-recording-rules-target',\n },\n scrapeInterval: {\n '10.4.0': 'data-testid scrape interval',\n },\n queryTimeout: {\n '10.4.0': 'data-testid query timeout',\n },\n defaultEditor: {\n '10.4.0': 'data-testid default editor',\n },\n disableMetricLookup: {\n '10.4.0': 'disable-metric-lookup', // id for switch component\n },\n prometheusType: {\n '10.4.0': 'data-testid prometheus type',\n },\n prometheusVersion: {\n '10.4.0': 'data-testid prometheus version',\n },\n cacheLevel: {\n '10.4.0': 'data-testid cache level',\n },\n incrementalQuerying: {\n '10.4.0': 'prometheus-incremental-querying', // id for switch component\n },\n queryOverlapWindow: {\n '10.4.0': 'data-testid query overlap window',\n },\n disableRecordingRules: {\n '10.4.0': 'disable-recording-rules', // id for switch component\n },\n customQueryParameters: {\n '10.4.0': 'data-testid custom query parameters',\n },\n httpMethod: {\n '10.4.0': 'data-testid http method',\n },\n exemplarsAddButton: {\n '10.3.0': 'data-testid Add exemplar config button',\n [MIN_GRAFANA_VERSION]: 'Add exemplar config button',\n },\n internalLinkSwitch: {\n '10.3.0': 'data-testid Internal link switch',\n [MIN_GRAFANA_VERSION]: 'Internal link switch',\n },\n codeModeMetricNamesSuggestionLimit: {\n '11.1.0': 'data-testid code mode metric names suggestion limit',\n },\n seriesLimit: {\n '12.0.2': 'data-testid maximum series limit',\n },\n },\n queryEditor: {\n explain: {\n '10.4.0': 'data-testid prometheus explain switch wrapper',\n },\n editorToggle: {\n '10.4.0': 'data-testid QueryEditorModeToggle', // wrapper for toggle\n },\n options: {\n '10.4.0': 'data-testid prometheus options', // wrapper for options group\n },\n legend: {\n '10.4.0': 'data-testid prometheus legend wrapper', // wrapper for multiple compomnents\n },\n format: {\n '10.4.0': 'data-testid prometheus format',\n },\n step: {\n '10.4.0': 'data-testid prometheus-step', // id for autosize component\n },\n type: {\n '10.4.0': 'data-testid prometheus type', //wrapper for radio button group\n },\n exemplars: {\n '10.4.0': 'data-testid prometheus-exemplars', // id for editor switch component\n },\n builder: {\n // see QueryBuilder below for commented selectors\n metricSelect: {\n '10.4.0': 'data-testid metric select',\n },\n hints: {\n '10.4.0': 'data-testid prometheus hints', // wrapper for hints component\n },\n metricsExplorer: {\n '10.4.0': 'data-testid metrics explorer',\n },\n queryAdvisor: {\n '10.4.0': 'data-testid query advisor',\n },\n },\n code: {\n queryField: {\n '10.4.0': 'data-testid prometheus query field',\n },\n metricsCountInfo: {\n '11.1.0': 'data-testid metrics count disclaimer',\n },\n metricsBrowser: {\n openButton: {\n '10.4.0': 'data-testid open metrics browser',\n },\n selectMetric: {\n '10.4.0': 'data-testid select a metric',\n },\n seriesLimit: {\n '10.3.1': 'data-testid series limit',\n },\n metricList: {\n '10.4.0': 'data-testid metric list',\n },\n labelNamesFilter: {\n '10.4.0': 'data-testid label names filter',\n },\n labelValuesFilter: {\n '10.4.0': 'data-testid label values filter',\n },\n useQuery: {\n '10.4.0': 'data-testid use query',\n },\n useAsRateQuery: {\n '10.4.0': 'data-testid use as rate query',\n },\n validateSelector: {\n '10.4.0': 'data-testid validate selector',\n },\n clear: {\n '10.4.0': 'data-testid clear',\n },\n },\n },\n },\n exemplarMarker: {\n '10.3.0': 'data-testid Exemplar marker',\n [MIN_GRAFANA_VERSION]: 'Exemplar marker',\n },\n variableQueryEditor: {\n queryType: {\n '10.4.0': 'data-testid query type',\n },\n labelnames: {\n metricRegex: {\n '10.4.0': 'data-testid label names metric regex',\n },\n },\n labelValues: {\n labelSelect: {\n '10.4.0': 'data-testid label values label select',\n },\n },\n metricNames: {\n metricRegex: {\n '10.4.0': 'data-testid metric names metric regex',\n },\n },\n varQueryResult: {\n '10.4.0': 'data-testid variable query result',\n },\n seriesQuery: {\n '10.4.0': 'data-testid prometheus series query',\n },\n classicQuery: {\n '10.4.0': 'data-testid prometheus classic query',\n },\n },\n annotations: {\n minStep: {\n '10.4.0': 'data-testid prometheus-annotation-min-step', // id for autosize input\n },\n title: {\n '10.4.0': 'data-testid prometheus annotation title',\n },\n tags: {\n '10.4.0': 'data-testid prometheus annotation tags',\n },\n text: {\n '10.4.0': 'data-testid prometheus annotation text',\n },\n seriesValueAsTimestamp: {\n '10.4.0': 'data-testid prometheus annotation series value as timestamp',\n },\n },\n },\n },\n Menu: {\n MenuComponent: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu`,\n },\n MenuGroup: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu group`,\n },\n MenuItem: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} menu item`,\n },\n SubMenu: {\n container: {\n '10.3.0': 'data-testid SubMenu container',\n [MIN_GRAFANA_VERSION]: 'SubMenu container',\n },\n icon: {\n '10.3.0': 'data-testid SubMenu icon',\n [MIN_GRAFANA_VERSION]: 'SubMenu icon',\n },\n },\n },\n Panels: {\n Panel: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `data-testid Panel header ${title}`,\n },\n content: {\n '11.1.0': 'data-testid panel content',\n },\n headerContainer: {\n '9.5.0': 'data-testid header-container',\n },\n headerItems: {\n '10.2.0': (item: string) => `data-testid Panel header item ${item}`,\n },\n menuItems: {\n '9.5.0': (item: string) => `data-testid Panel menu item ${item}`,\n },\n menu: {\n '9.5.0': (title: string) => `data-testid Panel menu ${title}`,\n },\n containerByTitle: {\n [MIN_GRAFANA_VERSION]: (title: string) => `${title} panel`,\n },\n headerCornerInfo: {\n [MIN_GRAFANA_VERSION]: (mode: string) => `Panel header ${mode}`,\n },\n status: {\n '10.2.0': (status: string) => `data-testid Panel status ${status}`,\n [MIN_GRAFANA_VERSION]: (_: string) => 'Panel status',\n },\n loadingBar: {\n '10.0.0': () => `Panel loading bar`,\n },\n HoverWidget: {\n container: {\n '10.1.0': 'data-testid hover-header-container',\n [MIN_GRAFANA_VERSION]: 'hover-header-container',\n },\n dragIcon: {\n '10.0.0': 'data-testid drag-icon',\n },\n },\n PanelDataErrorMessage: {\n '10.4.0': 'data-testid Panel data error message',\n },\n },\n Visualization: {\n Graph: {\n container: {\n '9.5.0': 'Graph container',\n },\n VisualizationTab: {\n legendSection: {\n [MIN_GRAFANA_VERSION]: 'Legend section',\n },\n },\n Legend: {\n legendItemAlias: {\n [MIN_GRAFANA_VERSION]: (name: string) => `gpl alias ${name}`,\n },\n showLegendSwitch: {\n [MIN_GRAFANA_VERSION]: 'gpl show legend',\n },\n },\n xAxis: {\n labels: {\n [MIN_GRAFANA_VERSION]: () => 'div.flot-x-axis > div.flot-tick-label',\n },\n },\n },\n BarGauge: {\n valueV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Bar gauge value',\n },\n },\n PieChart: {\n svgSlice: {\n '10.3.0': 'data testid Pie Chart Slice',\n },\n },\n Text: {\n container: { [MIN_GRAFANA_VERSION]: () => '.markdown-html' },\n },\n Table: {\n header: {\n [MIN_GRAFANA_VERSION]: 'table header',\n },\n footer: {\n [MIN_GRAFANA_VERSION]: 'table-footer',\n },\n body: {\n '10.2.0': 'data-testid table body',\n },\n },\n TableNG: {\n Filters: {\n HeaderButton: {\n '12.1.0': 'data-testid tableng header filter',\n },\n Container: {\n '12.1.0': 'data-testid tablenf filter container',\n },\n SelectAll: {\n '12.1.0': 'data-testid tableng filter select-all',\n },\n },\n Tooltip: {\n Wrapper: {\n '12.2.0': 'data-testid tableng tooltip wrapper',\n },\n Caret: {\n '12.2.0': 'data-testid tableng tooltip caret',\n },\n },\n Footer: {\n ReducerLabel: {\n '12.2.0': 'data-testid tableng footer reducer-label',\n },\n Value: {\n '12.2.0': 'data-testid tableng footer value',\n },\n },\n },\n Tooltip: {\n Wrapper: {\n '12.3.0': 'data-testid viz-tooltip-wrapper',\n },\n },\n },\n },\n VizLegend: {\n seriesName: {\n '10.3.0': (name: string) => `data-testid VizLegend series ${name}`,\n },\n },\n Drawer: {\n General: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `Drawer title ${title}`,\n },\n expand: {\n [MIN_GRAFANA_VERSION]: 'Drawer expand',\n },\n contract: {\n [MIN_GRAFANA_VERSION]: 'Drawer contract',\n },\n close: {\n '10.3.0': 'data-testid Drawer close',\n [MIN_GRAFANA_VERSION]: 'Drawer close',\n },\n rcContentWrapper: { '9.4.0': () => '.rc-drawer-content-wrapper' },\n subtitle: {\n '10.4.0': 'data-testid drawer subtitle',\n },\n },\n DashboardSaveDrawer: {\n saveButton: {\n '11.1.0': 'data-testid Save dashboard drawer button',\n },\n saveAsButton: {\n '11.1.0': 'data-testid Save as dashboard drawer button',\n },\n saveAsTitleInput: {\n '11.1.0': 'Save dashboard title field',\n },\n },\n },\n PanelEditor: {\n General: {\n content: {\n '11.1.0': 'data-testid Panel editor content',\n '8.0.0': 'Panel editor content',\n },\n },\n OptionsPane: {\n content: {\n '11.1.0': 'data-testid Panel editor option pane content',\n [MIN_GRAFANA_VERSION]: 'Panel editor option pane content',\n },\n select: {\n [MIN_GRAFANA_VERSION]: 'Panel editor option pane select',\n },\n fieldLabel: {\n [MIN_GRAFANA_VERSION]: (type: string) => `${type} field property editor`,\n },\n fieldInput: {\n '11.0.0': (title: string) => `data-testid Panel editor option pane field input ${title}`,\n },\n },\n DataPane: {\n content: {\n '11.1.0': 'data-testid Panel editor data pane content',\n [MIN_GRAFANA_VERSION]: 'Panel editor data pane content',\n },\n },\n applyButton: {\n '9.2.0': 'data-testid Apply changes and go back to dashboard',\n '9.1.0': 'Apply changes and go back to dashboard',\n '8.0.0': 'panel editor apply',\n },\n toggleVizPicker: {\n '10.0.0': 'data-testid toggle-viz-picker',\n '8.0.0': 'toggle-viz-picker',\n },\n toggleVizOptions: {\n '10.1.0': 'data-testid toggle-viz-options',\n [MIN_GRAFANA_VERSION]: 'toggle-viz-options',\n },\n toggleTableView: {\n '11.1.0': 'data-testid toggle-table-view',\n [MIN_GRAFANA_VERSION]: 'toggle-table-view',\n },\n\n // [Geomap] Map controls\n showZoomField: {\n '10.2.0': 'Map controls Show zoom control field property editor',\n },\n showAttributionField: {\n '10.2.0': 'Map controls Show attribution field property editor',\n },\n showScaleField: {\n '10.2.0': 'Map controls Show scale field property editor',\n },\n showMeasureField: {\n '10.2.0': 'Map controls Show measure tools field property editor',\n },\n showDebugField: {\n '10.2.0': 'Map controls Show debug field property editor',\n },\n\n measureButton: {\n '12.1.0': 'data-testid panel-editor-measure-button',\n '9.2.0': 'show measure tools',\n },\n\n Outline: {\n section: {\n '12.0.0': 'data-testid Outline section',\n },\n node: {\n '12.0.0': (type: string) => `data-testid outline node ${type}`,\n },\n item: {\n '12.0.0': (type: string) => `data-testid outline item ${type}`,\n },\n },\n ElementEditPane: {\n variableType: {\n '12.0.0': (type?: string) => `data-testid variable type ${type}`,\n },\n addVariableButton: {\n '12.0.0': 'data-testid add variable button',\n },\n variableNameInput: {\n '12.0.0': 'data-testid variable name input',\n },\n variableLabelInput: {\n '12.0.0': 'data-testid variable label input',\n },\n AutoGridLayout: {\n minColumnWidth: {\n '12.1.0': 'data-testid min column width selector',\n },\n customMinColumnWidth: {\n '12.1.0': 'data-testid custom min column width input',\n },\n clearCustomMinColumnWidth: {\n '12.1.0': 'data-testid clear custom min column width input',\n },\n maxColumns: {\n '12.1.0': 'data-testid max columns selector',\n },\n rowHeight: {\n '12.1.0': 'data-testid row height selector',\n },\n customRowHeight: {\n '12.1.0': 'data-testid custom row height input',\n },\n clearCustomRowHeight: {\n '12.1.0': 'data-testid clear custom row height input',\n },\n fillScreen: {\n '12.1.0': 'data-testid fill screen switch',\n },\n },\n TabsLayout: {\n titleInput: {\n '12.2.0': 'data-testid tab title input',\n },\n },\n },\n },\n PanelInspector: {\n Data: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Data content',\n },\n },\n Stats: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Stats content',\n },\n },\n Json: {\n content: {\n '11.1.0': 'data-testid Panel inspector Json content',\n [MIN_GRAFANA_VERSION]: 'Panel inspector Json content',\n },\n },\n Query: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Query content',\n },\n refreshButton: {\n [MIN_GRAFANA_VERSION]: 'Panel inspector Query refresh button',\n },\n jsonObjectKeys: {\n [MIN_GRAFANA_VERSION]: () => '.json-formatter-key',\n },\n },\n },\n Tab: {\n title: {\n '11.2.0': (title: string) => `data-testid Tab ${title}`,\n },\n active: { [MIN_GRAFANA_VERSION]: () => '[class*=\"-activeTabStyle\"]' },\n },\n RefreshPicker: {\n runButtonV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker run button',\n },\n intervalButtonV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid RefreshPicker interval button',\n },\n },\n QueryTab: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Query editor tab content',\n },\n queryInspectorButton: {\n [MIN_GRAFANA_VERSION]: 'Query inspector button',\n },\n queryHistoryButton: {\n '10.2.0': 'data-testid query-history-button',\n [MIN_GRAFANA_VERSION]: 'query-history-button',\n },\n addQuery: {\n '10.2.0': 'data-testid query-tab-add-query',\n [MIN_GRAFANA_VERSION]: 'Query editor add query button',\n },\n addQueryFromLibrary: {\n '11.5.0': 'data-testid query-tab-add-query-from-library',\n },\n queryGroupTopSection: {\n '11.2.0': 'data-testid query group top section',\n },\n addExpression: {\n '11.2.0': 'data-testid query-tab-add-expression',\n },\n },\n QueryHistory: {\n queryText: {\n '9.0.0': 'Query text',\n },\n },\n QueryEditorRows: {\n rows: {\n [MIN_GRAFANA_VERSION]: 'Query editor row',\n },\n },\n QueryEditorRow: {\n actionButton: {\n '10.4.0': (title: string) => `data-testid ${title}`,\n },\n title: {\n [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row title ${refId}`,\n },\n container: {\n [MIN_GRAFANA_VERSION]: (refId: string) => `Query editor row ${refId}`,\n },\n },\n AlertTab: {\n content: {\n '10.2.3': 'data-testid Alert editor tab content',\n [MIN_GRAFANA_VERSION]: 'Alert editor tab content',\n },\n },\n AlertRules: {\n groupToggle: {\n '11.0.0': 'data-testid group-collapse-toggle',\n },\n toggle: {\n '11.0.0': 'data-testid collapse-toggle',\n },\n expandedContent: {\n '11.0.0': 'data-testid expanded-content',\n },\n previewButton: {\n '11.1.0': 'data-testid alert-rule preview-button',\n },\n ruleNameField: {\n '11.1.0': 'data-testid alert-rule name-field',\n },\n newFolderButton: {\n '11.1.0': 'data-testid alert-rule new-folder-button',\n },\n newFolderNameField: {\n '11.1.0': 'data-testid alert-rule name-folder-name-field',\n },\n newFolderNameCreateButton: {\n '11.1.0': 'data-testid alert-rule name-folder-name-create-button',\n },\n newEvaluationGroupButton: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-button',\n },\n newEvaluationGroupName: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-name',\n },\n newEvaluationGroupInterval: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-interval',\n },\n newEvaluationGroupCreate: {\n '11.1.0': 'data-testid alert-rule new-evaluation-group-create-button',\n },\n step: {\n '11.5.0': (stepNo: string) => `data-testid alert-rule step-${stepNo}`,\n },\n stepAdvancedModeSwitch: {\n '11.5.0': (stepNo: string) => `data-testid advanced-mode-switch step-${stepNo}`,\n },\n },\n Alert: {\n alertV2: {\n [MIN_GRAFANA_VERSION]: (severity: string) => `data-testid Alert ${severity}`,\n },\n },\n TransformTab: {\n content: {\n '10.1.0': 'data-testid Transform editor tab content',\n [MIN_GRAFANA_VERSION]: 'Transform editor tab content',\n },\n newTransform: {\n '10.1.0': (name: string) => `data-testid New transform ${name}`,\n },\n transformationEditor: {\n '10.1.0': (name: string) => `data-testid Transformation editor ${name}`,\n },\n transformationEditorDebugger: {\n '10.1.0': (name: string) => `data-testid Transformation editor debugger ${name}`,\n },\n },\n Transforms: {\n card: {\n '10.1.0': (name: string) => `data-testid New transform ${name}`,\n },\n disableTransformationButton: {\n '10.4.0': 'data-testid Disable transformation button',\n },\n Reduce: {\n modeLabel: {\n '10.2.3': 'data-testid Transform mode label',\n [MIN_GRAFANA_VERSION]: 'Transform mode label',\n },\n calculationsLabel: {\n '10.2.3': 'data-testid Transform calculations label',\n [MIN_GRAFANA_VERSION]: 'Transform calculations label',\n },\n },\n SpatialOperations: {\n actionLabel: {\n '9.1.2': 'root Action field property editor',\n },\n locationLabel: {\n '10.2.0': 'root Location Mode field property editor',\n },\n location: {\n autoOption: {\n '9.1.2': 'Auto location option',\n },\n coords: {\n option: {\n '9.1.2': 'Coords location option',\n },\n latitudeFieldLabel: {\n '9.1.2': 'root Latitude field field property editor',\n },\n longitudeFieldLabel: {\n '9.1.2': 'root Longitude field field property editor',\n },\n },\n geohash: {\n option: {\n '9.1.2': 'Geohash location option',\n },\n geohashFieldLabel: {\n '9.1.2': 'root Geohash field field property editor',\n },\n },\n lookup: {\n option: {\n '9.1.2': 'Lookup location option',\n },\n lookupFieldLabel: {\n '9.1.2': 'root Lookup field field property editor',\n },\n gazetteerFieldLabel: {\n '9.1.2': 'root Gazetteer field property editor',\n },\n },\n },\n },\n searchInput: {\n '10.2.3': 'data-testid search transformations',\n [MIN_GRAFANA_VERSION]: 'search transformations',\n },\n noTransformationsMessage: {\n '10.2.3': 'data-testid no transformations message',\n },\n addTransformationButton: {\n '10.1.0': 'data-testid add transformation button',\n [MIN_GRAFANA_VERSION]: 'add transformation button',\n },\n removeAllTransformationsButton: {\n '10.4.0': 'data-testid remove all transformations button',\n },\n },\n NavBar: {\n Configuration: {\n button: {\n '9.5.0': 'Configuration',\n },\n },\n Toggle: {\n button: {\n '10.2.3': 'data-testid Toggle menu',\n [MIN_GRAFANA_VERSION]: 'Toggle menu',\n },\n },\n Reporting: {\n button: {\n '9.5.0': 'Reporting',\n },\n },\n },\n NavMenu: {\n Menu: {\n '10.2.3': 'data-testid navigation mega-menu',\n },\n item: {\n '9.5.0': 'data-testid Nav menu item',\n },\n },\n NavToolbar: {\n container: {\n '9.4.0': 'data-testid Nav toolbar',\n },\n commandPaletteTrigger: {\n '11.5.0': 'data-testid Command palette trigger',\n },\n shareDashboard: {\n '11.1.0': 'data-testid Share dashboard',\n },\n markAsFavorite: {\n '11.1.0': 'data-testid Mark as favorite',\n },\n editDashboard: {\n editButton: {\n '11.1.0': 'data-testid Edit dashboard button',\n },\n saveButton: {\n '11.1.0': 'data-testid Save dashboard button',\n },\n exitButton: {\n '11.1.0': 'data-testid Exit edit mode button',\n },\n settingsButton: {\n '11.1.0': 'data-testid Dashboard settings',\n },\n addRowButton: {\n '11.1.0': 'data-testid Add row button',\n },\n addLibraryPanelButton: {\n '11.1.0': 'data-testid Add a panel from the panel library button',\n },\n addVisualizationButton: {\n '11.1.0': 'data-testid Add new visualization menu item',\n },\n pastePanelButton: {\n '11.1.0': 'data-testid Paste panel button',\n },\n discardChangesButton: {\n '11.1.0': 'data-testid Discard changes button',\n },\n discardLibraryPanelButton: {\n '11.1.0': 'data-testid Discard library panel button',\n },\n unlinkLibraryPanelButton: {\n '11.1.0': 'data-testid Unlink library panel button',\n },\n saveLibraryPanelButton: {\n '11.1.0': 'data-testid Save library panel button',\n },\n backToDashboardButton: {\n '11.1.0': 'data-testid Back to dashboard button',\n },\n },\n },\n\n PageToolbar: {\n container: { [MIN_GRAFANA_VERSION]: () => '.page-toolbar' },\n item: {\n [MIN_GRAFANA_VERSION]: (tooltip: string) => `${tooltip}`,\n },\n itemButton: {\n '9.5.0': (title: string) => `data-testid ${title}`,\n },\n },\n QueryEditorToolbarItem: {\n button: {\n [MIN_GRAFANA_VERSION]: (title: string) => `QueryEditor toolbar item button ${title}`,\n },\n },\n BackButton: {\n backArrow: {\n '10.3.0': 'data-testid Go Back',\n [MIN_GRAFANA_VERSION]: 'Go Back',\n },\n },\n OptionsGroup: {\n group: {\n '11.1.0': (title?: string) => (title ? `data-testid Options group ${title}` : 'data-testid Options group'),\n [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title}` : 'Options group'),\n },\n toggle: {\n '11.1.0': (title?: string) =>\n title ? `data-testid Options group ${title} toggle` : 'data-testid Options group toggle',\n [MIN_GRAFANA_VERSION]: (title?: string) => (title ? `Options group ${title} toggle` : 'Options group toggle'),\n },\n },\n PluginVisualization: {\n item: {\n [MIN_GRAFANA_VERSION]: (title: string) => `Plugin visualization item ${title}`,\n },\n current: {\n [MIN_GRAFANA_VERSION]: () => '[class*=\"-currentVisualizationItem\"]',\n },\n },\n Select: {\n menu: {\n '11.5.0': 'data-testid Select menu',\n [MIN_GRAFANA_VERSION]: 'Select options menu',\n },\n option: {\n '11.1.0': 'data-testid Select option',\n [MIN_GRAFANA_VERSION]: 'Select option',\n },\n toggleAllOptions: {\n '11.3.0': 'data-testid toggle all options',\n },\n input: {\n [MIN_GRAFANA_VERSION]: () => 'input[id*=\"time-options-input\"]',\n },\n singleValue: {\n [MIN_GRAFANA_VERSION]: () => 'div[class*=\"-singleValue\"]',\n },\n },\n FieldConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Field config editor content',\n },\n },\n OverridesConfigEditor: {\n content: {\n [MIN_GRAFANA_VERSION]: 'Field overrides editor content',\n },\n },\n FolderPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Folder picker select container',\n },\n input: {\n '10.4.0': 'data-testid folder-picker-input',\n },\n },\n ReadonlyFolderPicker: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Readonly folder picker select container',\n },\n },\n DataSourcePicker: {\n container: {\n '10.0.0': 'data-testid Data source picker select container',\n '8.0.0': 'Data source picker select container',\n },\n inputV2: {\n '10.1.0': 'data-testid Select a data source',\n [MIN_GRAFANA_VERSION]: 'Select a data source',\n },\n dataSourceList: {\n '10.4.0': 'data-testid Data source list dropdown',\n },\n advancedModal: {\n dataSourceList: {\n '10.4.0': 'data-testid Data source list',\n },\n builtInDataSourceList: {\n '10.4.0': 'data-testid Built in data source list',\n },\n },\n },\n TimeZonePicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Time zone picker select container',\n },\n changeTimeSettingsButton: {\n '11.0.0': 'data-testid Time zone picker Change time settings button',\n },\n },\n WeekStartPicker: {\n containerV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Choose starting day of the week',\n },\n placeholder: {\n [MIN_GRAFANA_VERSION]: 'Choose starting day of the week',\n },\n },\n TraceViewer: {\n spanBar: {\n '9.0.0': 'data-testid SpanBar--wrapper',\n },\n },\n QueryField: {\n container: {\n '10.3.0': 'data-testid Query field',\n [MIN_GRAFANA_VERSION]: 'Query field',\n },\n },\n QueryBuilder: {\n queryPatterns: {\n '10.3.0': 'data-testid Query patterns',\n [MIN_GRAFANA_VERSION]: 'Query patterns',\n },\n labelSelect: {\n '10.3.0': 'data-testid Select label',\n [MIN_GRAFANA_VERSION]: 'Select label',\n },\n inputSelect: {\n '11.1.0': 'data-testid Select label-input',\n },\n valueSelect: {\n '10.3.0': 'data-testid Select value',\n [MIN_GRAFANA_VERSION]: 'Select value',\n },\n matchOperatorSelect: {\n '10.3.0': 'data-testid Select match operator',\n [MIN_GRAFANA_VERSION]: 'Select match operator',\n },\n },\n ValuePicker: {\n button: {\n '10.3.0': (name: string) => `data-testid Value picker button ${name}`,\n },\n select: {\n '10.3.0': (name: string) => `data-testid Value picker select ${name}`,\n },\n },\n Search: {\n sectionV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search section',\n },\n itemsV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search items',\n },\n cards: {\n [MIN_GRAFANA_VERSION]: 'data-testid Search cards',\n },\n collapseFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Collapse folder ${sectionId}`,\n },\n expandFolder: {\n [MIN_GRAFANA_VERSION]: (sectionId: string) => `data-testid Expand folder ${sectionId}`,\n },\n dashboardItem: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard search item ${item}`,\n },\n dashboardCard: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Search card ${item}`,\n },\n folderHeader: {\n '9.3.0': (folderName: string) => `data-testid Folder header ${folderName}`,\n },\n folderContent: {\n '9.3.0': (folderName: string) => `data-testid Folder content ${folderName}`,\n },\n dashboardItems: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard search item',\n },\n },\n DashboardLinks: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link container',\n },\n dropDown: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link dropdown',\n },\n link: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard link',\n },\n },\n LoadingIndicator: {\n icon: {\n '10.4.0': 'data-testid Loading indicator',\n [MIN_GRAFANA_VERSION]: 'Loading indicator',\n },\n },\n CallToActionCard: {\n buttonV2: {\n [MIN_GRAFANA_VERSION]: (name: string) => `data-testid Call to action button ${name}`,\n },\n },\n DataLinksContextMenu: {\n singleLink: {\n '10.3.0': 'data-testid Data link',\n [MIN_GRAFANA_VERSION]: 'Data link',\n },\n },\n DataLinksActionsTooltip: {\n tooltipWrapper: {\n '12.1.0': 'data-testid Data links actions tooltip wrapper',\n },\n },\n CodeEditor: {\n container: {\n '10.2.3': 'data-testid Code editor container',\n [MIN_GRAFANA_VERSION]: 'Code editor container',\n },\n },\n ReactMonacoEditor: {\n editorLazy: {\n '11.1.0': 'data-testid ReactMonacoEditor editorLazy',\n },\n },\n DashboardImportPage: {\n textarea: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-textarea',\n },\n submit: {\n [MIN_GRAFANA_VERSION]: 'data-testid-load-dashboard',\n },\n },\n ImportDashboardForm: {\n name: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-title',\n },\n submit: {\n [MIN_GRAFANA_VERSION]: 'data-testid-import-dashboard-submit',\n },\n },\n PanelAlertTabContent: {\n content: {\n '10.2.3': 'data-testid Unified alert editor tab content',\n [MIN_GRAFANA_VERSION]: 'Unified alert editor tab content',\n },\n },\n VisualizationPreview: {\n card: {\n [MIN_GRAFANA_VERSION]: (name: string) => `data-testid suggestion-${name}`,\n },\n },\n ColorSwatch: {\n name: {\n [MIN_GRAFANA_VERSION]: 'data-testid-colorswatch',\n },\n },\n DashboardRow: {\n title: {\n [MIN_GRAFANA_VERSION]: (title: string) => `data-testid dashboard-row-title-${title}`,\n },\n wrapper: {\n '12.1.0': (title: string) => `data-testid dashboard-row-wrapper-for-${title}`,\n },\n },\n UserProfile: {\n profileSaveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-profile-save',\n },\n preferencesSaveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid-shared-prefs-save',\n },\n orgsTable: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-orgs-table',\n },\n sessionsTable: {\n [MIN_GRAFANA_VERSION]: 'data-testid-user-sessions-table',\n },\n extensionPointTabs: {\n '10.2.3': 'data-testid-extension-point-tabs',\n },\n extensionPointTab: {\n '10.2.3': (tabId: string) => `data-testid-extension-point-tab-${tabId}`,\n },\n },\n FileUpload: {\n inputField: {\n '9.0.0': 'data-testid-file-upload-input-field',\n },\n fileNameSpan: {\n '9.0.0': 'data-testid-file-upload-file-name',\n },\n },\n DebugOverlay: {\n wrapper: {\n '9.2.0': 'debug-overlay',\n },\n },\n OrgRolePicker: {\n input: {\n '9.5.0': 'Role',\n },\n },\n AnalyticsToolbarButton: {\n button: {\n '9.5.0': 'Dashboard insights',\n },\n },\n Variables: {\n variableOption: {\n '9.5.0': 'data-testid variable-option',\n },\n variableLinkWrapper: {\n '11.1.1': 'data-testid variable-link-wrapper',\n },\n },\n Annotations: {\n annotationsTypeInput: {\n '11.1.0': 'data-testid annotations-type-input',\n [MIN_GRAFANA_VERSION]: 'annotations-type-input',\n },\n annotationsChoosePanelInput: {\n '11.1.0': 'data-testid choose-panels-input',\n [MIN_GRAFANA_VERSION]: 'choose-panels-input',\n },\n editor: {\n testButton: {\n '11.0.0': 'data-testid annotations-test-button',\n },\n resultContainer: {\n '11.0.0': 'data-testid annotations-query-result-container',\n },\n },\n },\n Tooltip: {\n container: {\n '10.2.0': 'data-testid tooltip',\n },\n },\n ReturnToPrevious: {\n buttonGroup: {\n '11.0.0': 'data-testid dismissable button group',\n },\n backButton: {\n '11.0.0': 'data-testid back',\n },\n dismissButton: {\n '11.0.0': 'data-testid dismiss',\n },\n },\n SQLQueryEditor: {\n selectColumn: {\n '11.0.0': 'data-testid select-column',\n },\n selectColumnInput: { '11.0.0': 'data-testid select-column-input' },\n selectFunctionParameter: { '11.0.0': (name: string) => `data-testid select-function-parameter-${name}` },\n selectAggregation: {\n '11.0.0': 'data-testid select-aggregation',\n },\n selectAggregationInput: { '11.0.0': 'data-testid select-aggregation-input' },\n selectAlias: {\n '11.0.0': 'data-testid select-alias',\n },\n selectAliasInput: { '11.0.0': 'data-testid select-alias-input' },\n selectInputParameter: { '11.0.0': 'data-testid select-input-parameter' },\n filterConjunction: {\n '11.0.0': 'data-testid filter-conjunction',\n },\n filterField: {\n '11.0.0': 'data-testid filter-field',\n },\n filterOperator: {\n '11.0.0': 'data-testid filter-operator',\n },\n headerTableSelector: {\n '11.0.0': 'data-testid header-table-selector',\n },\n headerFilterSwitch: {\n '11.0.0': 'data-testid header-filter-switch',\n },\n headerGroupSwitch: {\n '11.0.0': 'data-testid header-group-switch',\n },\n headerOrderSwitch: {\n '11.0.0': 'data-testid header-order-switch',\n },\n headerPreviewSwitch: {\n '11.0.0': 'data-testid header-preview-switch',\n },\n },\n EntityNotFound: {\n container: {\n '11.2.0': 'data-testid entity-not-found',\n },\n },\n Portal: {\n container: {\n '11.5.0': 'data-testid portal-container',\n },\n },\n ExportImage: {\n formatOptions: {\n container: {\n ['12.1.0']: 'data-testid export-image-format-options',\n },\n png: {\n ['12.1.0']: 'data-testid export-image-format-png',\n },\n jpg: {\n ['12.1.0']: 'data-testid export-image-format-jpg',\n },\n },\n rendererAlert: {\n container: {\n ['12.1.0']: 'data-testid export-image-renderer-alert',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-title',\n },\n description: {\n ['12.1.0']: 'data-testid export-image-renderer-alert-description',\n },\n },\n buttons: {\n generate: {\n ['12.1.0']: 'data-testid export-image-generate-button',\n },\n download: {\n ['12.1.0']: 'data-testid export-image-download-button',\n },\n cancel: {\n ['12.1.0']: 'data-testid export-image-cancel-button',\n },\n },\n preview: {\n container: {\n ['12.1.0']: 'data-testid export-image-preview-container',\n },\n loading: {\n ['12.1.0']: 'data-testid export-image-preview-loading',\n },\n image: {\n ['12.1.0']: 'data-testid export-image-preview',\n },\n error: {\n container: {\n ['12.1.0']: 'data-testid export-image-error',\n },\n title: {\n ['12.1.0']: 'data-testid export-image-error-title',\n },\n message: {\n ['12.1.0']: 'data-testid export-image-error-message',\n },\n },\n },\n },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedComponents = typeof versionedComponents;\n","import { resolveSelectors } from '../resolver';\nimport { E2ESelectors } from '../types';\n\nimport { versionedComponents, VersionedComponents } from './components';\nimport { versionedPages, VersionedPages } from './pages';\n\nconst Pages = resolveSelectors(versionedPages);\nconst Components = resolveSelectors(versionedComponents);\nconst selectors = { pages: Pages, components: Components };\n\n/**\n * Exposes Pages, Component selectors and E2ESelectors type in package for easy use in e2e tests and in production code\n */\nexport {\n Pages,\n Components,\n selectors,\n versionedComponents,\n versionedPages,\n resolveSelectors,\n type VersionedPages,\n type VersionedComponents,\n type E2ESelectors,\n};\n","import { VersionedSelectorGroup } from '../types';\n\nimport { MIN_GRAFANA_VERSION } from './constants';\n\n/**\n * Selectors grouped/defined in Pages\n */\nexport const versionedPages = {\n Alerting: {\n AddAlertRule: {\n url: {\n '10.1.0': '/alerting/new/alerting',\n [MIN_GRAFANA_VERSION]: '/alerting/new',\n },\n },\n EditAlertRule: {\n url: {\n [MIN_GRAFANA_VERSION]: (alertRuleUid: string) => `alerting/${alertRuleUid}/edit`,\n },\n },\n },\n Login: {\n url: {\n [MIN_GRAFANA_VERSION]: '/login',\n },\n username: {\n '10.2.3': 'data-testid Username input field',\n [MIN_GRAFANA_VERSION]: 'Username input field',\n },\n password: {\n '10.2.3': 'data-testid Password input field',\n [MIN_GRAFANA_VERSION]: 'Password input field',\n },\n submit: {\n '10.2.3': 'data-testid Login button',\n [MIN_GRAFANA_VERSION]: 'Login button',\n },\n skip: {\n '10.2.3': 'data-testid Skip change password button',\n },\n },\n PasswordlessLogin: {\n url: {\n [MIN_GRAFANA_VERSION]: '/login/passwordless/authenticate',\n },\n email: {\n '10.2.3': 'data-testid Email input field',\n [MIN_GRAFANA_VERSION]: 'Email input field',\n },\n submit: {\n '10.2.3': 'data-testid PasswordlessLogin button',\n [MIN_GRAFANA_VERSION]: 'PasswordlessLogin button',\n },\n },\n Home: {\n url: {\n [MIN_GRAFANA_VERSION]: '/',\n },\n },\n DataSource: {\n name: {\n '10.3.0': 'data-testid Data source settings page name input field',\n [MIN_GRAFANA_VERSION]: 'Data source settings page name input field',\n },\n delete: {\n [MIN_GRAFANA_VERSION]: 'Data source settings page Delete button',\n },\n readOnly: {\n '10.3.0': 'data-testid Data source settings page read only message',\n [MIN_GRAFANA_VERSION]: 'Data source settings page read only message',\n },\n saveAndTest: {\n '10.0.0': 'data-testid Data source settings page Save and Test button',\n [MIN_GRAFANA_VERSION]: 'Data source settings page Save and Test button',\n },\n alert: {\n '10.3.0': 'data-testid Data source settings page Alert',\n [MIN_GRAFANA_VERSION]: 'Data source settings page Alert',\n },\n },\n DataSources: {\n url: {\n [MIN_GRAFANA_VERSION]: '/datasources',\n },\n dataSources: {\n [MIN_GRAFANA_VERSION]: (dataSourceName: string) => `Data source list item ${dataSourceName}`,\n },\n },\n EditDataSource: {\n url: {\n '9.5.0': (dataSourceUid: string) => `/datasources/edit/${dataSourceUid}`,\n },\n settings: {\n '9.5.0': 'Datasource settings page basic settings',\n },\n },\n AddDataSource: {\n url: {\n [MIN_GRAFANA_VERSION]: '/datasources/new',\n },\n dataSourcePluginsV2: {\n '9.3.1': (pluginName: string) => `Add new data source ${pluginName}`,\n [MIN_GRAFANA_VERSION]: (pluginName: string) => `Data source plugin item ${pluginName}`,\n },\n },\n ConfirmModal: {\n delete: {\n '10.0.0': 'data-testid Confirm Modal Danger Button',\n [MIN_GRAFANA_VERSION]: 'Confirm Modal Danger Button',\n },\n input: {\n '12.2.0': 'data-testid Confirm Modal Input',\n },\n },\n SecretsManagement: {\n SecretForm: {\n '12.2.0': 'data-testid Secret Form',\n },\n },\n AddDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/new',\n },\n itemButton: {\n '9.5.0': (title: string) => `data-testid ${title}`,\n },\n addNewPanel: {\n '11.1.0': 'data-testid Add new panel',\n '8.0.0': 'Add new panel',\n [MIN_GRAFANA_VERSION]: 'Add new panel',\n },\n itemButtonAddViz: {\n [MIN_GRAFANA_VERSION]: 'Add new visualization menu item',\n },\n addNewRow: {\n '11.1.0': 'data-testid Add new row',\n [MIN_GRAFANA_VERSION]: 'Add new row',\n },\n addNewPanelLibrary: {\n '11.1.0': 'data-testid Add new panel from panel library',\n [MIN_GRAFANA_VERSION]: 'Add new panel from panel library',\n },\n Settings: {\n Annotations: {\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=annotations',\n },\n },\n Edit: {\n url: {\n [MIN_GRAFANA_VERSION]: (annotationIndex: string) =>\n `/dashboard/new?editview=annotations&editIndex=${annotationIndex}`,\n },\n },\n },\n Variables: {\n List: {\n url: {\n '11.3.0': '/dashboard/new?orgId=1&editview=variables',\n [MIN_GRAFANA_VERSION]: '/dashboard/new?orgId=1&editview=templating',\n },\n },\n Edit: {\n url: {\n '11.3.0': (editIndex: string) => `/dashboard/new?orgId=1&editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex: string) =>\n `/dashboard/new?orgId=1&editview=templating&editIndex=${editIndex}`,\n },\n },\n },\n },\n },\n ImportDashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboard/import',\n },\n },\n Dashboard: {\n url: {\n [MIN_GRAFANA_VERSION]: (uid: string) => `/d/${uid}`,\n },\n DashNav: {\n nav: {\n [MIN_GRAFANA_VERSION]: 'Dashboard navigation',\n },\n navV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Dashboard navigation',\n },\n publicDashboardTag: {\n '9.1.0': 'data-testid public dashboard tag',\n },\n shareButton: {\n '10.4.0': 'data-testid share-button',\n },\n scrollContainer: {\n '11.1.0': 'data-testid Dashboard canvas scroll container',\n },\n newShareButton: {\n container: {\n '11.1.0': 'data-testid new share button',\n },\n shareLink: {\n '11.1.0': 'data-testid new share link-button',\n },\n arrowMenu: {\n '11.1.0': 'data-testid new share button arrow menu',\n },\n menu: {\n container: {\n '11.1.0': 'data-testid new share button menu',\n },\n shareInternally: {\n '11.1.0': 'data-testid new share button share internally',\n },\n shareExternally: {\n '11.1.1': 'data-testid new share button share externally',\n },\n shareSnapshot: {\n '11.2.0': 'data-testid new share button share snapshot',\n },\n },\n },\n NewExportButton: {\n container: {\n '11.2.0': 'data-testid new export button',\n },\n arrowMenu: {\n '11.2.0': 'data-testid new export button arrow menu',\n },\n Menu: {\n container: {\n '11.2.0': 'data-testid new export button menu',\n },\n exportAsJson: {\n '11.2.0': 'data-testid new export button export as json',\n },\n exportAsImage: {\n '12.1.0': 'data-testid new export button export as image',\n },\n },\n },\n playlistControls: {\n prev: {\n '11.0.0': 'data-testid playlist previous dashboard button',\n },\n stop: {\n '11.0.0': 'data-testid playlist stop dashboard button',\n },\n next: {\n '11.0.0': 'data-testid playlist next dashboard button',\n },\n },\n },\n Controls: {\n '11.1.0': 'data-testid dashboard controls',\n },\n SubMenu: {\n submenu: {\n [MIN_GRAFANA_VERSION]: 'Dashboard submenu',\n },\n submenuItem: {\n [MIN_GRAFANA_VERSION]: 'data-testid template variable',\n },\n submenuItemLabels: {\n [MIN_GRAFANA_VERSION]: (item: string) => `data-testid Dashboard template variables submenu Label ${item}`,\n },\n submenuItemValueDropDownValueLinkTexts: {\n [MIN_GRAFANA_VERSION]: (item: string) =>\n `data-testid Dashboard template variables Variable Value DropDown value link text ${item}`,\n },\n submenuItemValueDropDownDropDown: {\n [MIN_GRAFANA_VERSION]: 'Variable options',\n },\n submenuItemValueDropDownOptionTexts: {\n [MIN_GRAFANA_VERSION]: (item: string) =>\n `data-testid Dashboard template variables Variable Value DropDown option text ${item}`,\n },\n Annotations: {\n annotationsWrapper: {\n '10.0.0': 'data-testid annotation-wrapper',\n },\n annotationLabel: {\n '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Label ${label}`,\n },\n annotationToggle: {\n '10.0.0': (label: string) => `data-testid Dashboard annotations submenu Toggle ${label}`,\n },\n },\n },\n Settings: {\n Actions: {\n close: {\n '9.5.0': 'data-testid dashboard-settings-close',\n },\n },\n General: {\n deleteDashBoard: {\n '11.1.0': 'data-testid Dashboard settings page delete dashboard button',\n },\n sectionItems: {\n [MIN_GRAFANA_VERSION]: (item: string) => `Dashboard settings section item ${item}`,\n },\n saveDashBoard: {\n [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save button',\n },\n saveAsDashBoard: {\n [MIN_GRAFANA_VERSION]: 'Dashboard settings aside actions Save As button',\n },\n title: {\n '11.2.0': 'General',\n },\n },\n Annotations: {\n Edit: {\n urlParams: {\n [MIN_GRAFANA_VERSION]: (annotationIndex: string) => `editview=annotations&editIndex=${annotationIndex}`,\n },\n },\n List: {\n url: {\n [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=annotations`,\n },\n addAnnotationCTAV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add annotation query',\n },\n annotations: {\n '10.4.0': 'data-testid list-annotations',\n },\n },\n Settings: {\n name: {\n '11.1.0': 'data-testid Annotations settings name input',\n [MIN_GRAFANA_VERSION]: 'Annotations settings name input',\n },\n },\n NewAnnotation: {\n panelFilterSelect: {\n '10.0.0': 'data-testid annotations-panel-filter',\n },\n showInLabel: {\n '11.1.0': 'data-testid show-in-label',\n },\n previewInDashboard: {\n '10.0.0': 'data-testid annotations-preview',\n },\n delete: {\n '10.4.0': 'data-testid annotations-delete',\n },\n apply: {\n '10.4.0': 'data-testid annotations-apply',\n },\n enable: {\n '10.4.0': 'data-testid annotation-enable',\n },\n hide: {\n '10.4.0': 'data-testid annotation-hide',\n },\n },\n },\n Variables: {\n List: {\n url: {\n '11.3.0': (dashboardUid: string) => `/d/${dashboardUid}?editview=variables`,\n [MIN_GRAFANA_VERSION]: (dashboardUid: string) => `/d/${dashboardUid}?editview=templating`,\n },\n addVariableCTAV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Call to action button Add variable',\n },\n newButton: {\n [MIN_GRAFANA_VERSION]: 'Variable editor New variable button',\n },\n table: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Table',\n },\n tableRowNameFields: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Name field ${variableName}`,\n },\n tableRowDefinitionFields: {\n '10.1.0': (variableName: string) => `Variable editor Table Definition field ${variableName}`,\n },\n tableRowArrowUpButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowUp button ${variableName}`,\n },\n tableRowArrowDownButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table ArrowDown button ${variableName}`,\n },\n tableRowDuplicateButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Duplicate button ${variableName}`,\n },\n tableRowRemoveButtons: {\n [MIN_GRAFANA_VERSION]: (variableName: string) => `Variable editor Table Remove button ${variableName}`,\n },\n },\n Edit: {\n urlParams: {\n '11.3.0': (editIndex: string) => `editview=variables&editIndex=${editIndex}`,\n [MIN_GRAFANA_VERSION]: (editIndex: string) => `editview=templating&editIndex=${editIndex}`,\n },\n General: {\n headerLink: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header link',\n },\n modeLabelNew: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header mode New',\n },\n /**\n * @deprecated\n */\n modeLabelEdit: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Header mode Edit',\n },\n generalNameInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Name field',\n },\n generalNameInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Name field',\n },\n generalTypeSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Type select',\n },\n generalTypeSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Type select',\n },\n generalLabelInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Label field',\n },\n generalLabelInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Label field',\n },\n generalHideSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Hide select',\n },\n generalHideSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Hide select',\n },\n selectionOptionsAllowCustomValueSwitch: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Allow Custom Value switch',\n },\n selectionOptionsMultiSwitch: {\n '10.4.0': 'data-testid Variable editor Form Multi switch',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Multi switch',\n },\n selectionOptionsIncludeAllSwitch: {\n '10.4.0': 'data-testid Variable editor Form IncludeAll switch',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll switch',\n },\n selectionOptionsCustomAllInput: {\n '10.4.0': 'data-testid Variable editor Form IncludeAll field',\n [MIN_GRAFANA_VERSION]: 'Variable editor Form IncludeAll field',\n },\n previewOfValuesOption: {\n '10.4.0': 'data-testid Variable editor Preview of Values option',\n [MIN_GRAFANA_VERSION]: 'Variable editor Preview of Values option',\n },\n submitButton: {\n '10.4.0': 'data-testid Variable editor Run Query button',\n [MIN_GRAFANA_VERSION]: 'Variable editor Submit button',\n },\n applyButton: {\n '9.3.0': 'data-testid Variable editor Apply button',\n },\n },\n QueryVariable: {\n closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor close button',\n },\n editor: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor',\n },\n previewButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor preview button',\n },\n queryOptionsDataSourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n '10.0.0': 'data-testid Data source picker select container',\n [MIN_GRAFANA_VERSION]: 'Data source picker select container',\n },\n queryOptionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Query Variable editor open button',\n },\n queryOptionsRefreshSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Refresh select',\n },\n queryOptionsRefreshSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Refresh select',\n },\n queryOptionsRegExInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query RegEx field',\n },\n queryOptionsRegExInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query RegEx field',\n },\n queryOptionsSortSelect: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Sort select',\n },\n queryOptionsSortSelectV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Query Sort select',\n },\n queryOptionsQueryInput: {\n '10.4.0': 'data-testid Variable editor Form Default Variable Query Editor textarea',\n },\n queryOptionsStaticOptionsToggle: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options toggle',\n },\n queryOptionsStaticOptionsOrderDropdown: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query Static Options Order dropdown',\n },\n valueGroupsTagsEnabledSwitch: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query UseTags switch',\n },\n valueGroupsTagsTagsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsQuery field',\n },\n valueGroupsTagsTagsValuesQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Query TagsValuesQuery field',\n },\n },\n ConstantVariable: {\n constantOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form Constant Query field',\n },\n constantOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Constant Query field',\n },\n },\n DatasourceVariable: {\n datasourceSelect: {\n [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource type',\n },\n nameFilter: {\n [MIN_GRAFANA_VERSION]: 'data-testid datasource variable datasource name filter',\n },\n },\n TextBoxVariable: {\n textBoxOptionsQueryInput: {\n [MIN_GRAFANA_VERSION]: 'Variable editor Form TextBox Query field',\n },\n textBoxOptionsQueryInputV2: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form TextBox Query field',\n },\n },\n CustomVariable: {\n customValueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-input',\n },\n optionsOpenButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-options-open-button',\n },\n closeButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid custom-variable-close-button',\n },\n },\n IntervalVariable: {\n intervalsValueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid interval variable intervals input',\n },\n autoEnabledCheckbox: {\n '10.4.0': 'data-testid interval variable auto value checkbox',\n },\n stepCountIntervalSelect: {\n '10.4.0': 'data-testid interval variable step count input',\n },\n minIntervalInput: {\n '10.4.0': 'data-testid interval variable mininum interval input',\n },\n },\n GroupByVariable: {\n dataSourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n },\n infoText: {\n '10.4.0': 'data-testid group by variable info text',\n },\n modeToggle: {\n '10.4.0': 'data-testid group by variable mode toggle',\n },\n },\n AdHocFiltersVariable: {\n datasourceSelect: {\n '10.4.0': 'data-testid Select a data source',\n },\n infoText: {\n '10.4.0': 'data-testid ad-hoc filters variable info text',\n },\n modeToggle: {\n '11.0.0': 'data-testid ad-hoc filters variable mode toggle',\n },\n },\n SwitchVariable: {\n valuePairTypeSelect: {\n ['12.3.0']: 'data-testid switch variable value pair type select',\n },\n enabledValueInput: {\n ['12.3.0']: 'data-testid switch variable enabled value input',\n },\n disabledValueInput: {\n ['12.3.0']: 'data-testid switch variable disabled value input',\n },\n },\n StaticOptionsEditor: {\n addButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Add button',\n },\n labelInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Label input',\n },\n valueInput: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Value input',\n },\n moveButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Move button',\n },\n deleteButton: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Delete button',\n },\n row: {\n [MIN_GRAFANA_VERSION]: 'data-testid Variable editor Form Static Options Row',\n },\n },\n },\n },\n },\n Annotations: {\n marker: {\n '10.0.0': 'data-testid annotation-marker',\n },\n },\n Rows: {\n Repeated: {\n ConfigSection: {\n warningMessage: {\n '10.2.0': 'data-testid Repeated rows warning message',\n },\n },\n },\n },\n },\n Dashboards: {\n url: {\n [MIN_GRAFANA_VERSION]: '/dashboards',\n },\n dashboards: {\n '10.2.0': (title: string) => `Dashboard search item ${title}`,\n },\n toggleView: {\n [MIN_GRAFANA_VERSION]: 'data-testid radio-button',\n },\n },\n SaveDashboardAsModal: {\n newName: {\n '10.2.0': 'Save dashboard title field',\n },\n save: {\n '10.2.0': 'Save dashboard button',\n },\n },\n SaveDashboardModal: {\n save: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save button',\n },\n saveVariables: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save variables checkbox',\n },\n saveTimerange: {\n '10.2.0': 'Dashboard settings Save Dashboard Modal Save timerange checkbox',\n },\n saveRefresh: {\n '11.1.0': 'Dashboard settings Save Dashboard Modal Save refresh checkbox',\n },\n variablesWarningAlert: {\n '12.2.0': 'Dashboard settings Save Dashboard Modal Save variables Variables With Errors Warning Alert',\n },\n },\n SharePanelModal: {\n linkToRenderedImage: {\n [MIN_GRAFANA_VERSION]: 'Link to rendered image',\n },\n },\n ShareDashboardModal: {\n PublicDashboard: {\n WillBePublicCheckbox: {\n '9.1.0': 'data-testid public dashboard will be public checkbox',\n },\n LimitedDSCheckbox: {\n '9.1.0': 'data-testid public dashboard limited datasources checkbox',\n },\n CostIncreaseCheckbox: {\n '9.1.0': 'data-testid public dashboard cost may increase checkbox',\n },\n PauseSwitch: {\n '9.5.0': 'data-testid public dashboard pause switch',\n },\n EnableAnnotationsSwitch: {\n '9.3.0': 'data-testid public dashboard on off switch for annotations',\n },\n CreateButton: {\n '9.5.0': 'data-testid public dashboard create button',\n },\n DeleteButton: {\n '9.3.0': 'data-testid public dashboard delete button',\n },\n CopyUrlInput: {\n '9.1.0': 'data-testid public dashboard copy url input',\n },\n CopyUrlButton: {\n '9.1.0': 'data-testid public dashboard copy url button',\n },\n SettingsDropdown: {\n '10.1.0': 'data-testid public dashboard settings dropdown',\n },\n TemplateVariablesWarningAlert: {\n '9.1.0': 'data-testid public dashboard disabled template variables alert',\n },\n UnsupportedDataSourcesWarningAlert: {\n '9.5.0': 'data-testid public dashboard unsupported data sources alert',\n },\n NoUpsertPermissionsWarningAlert: {\n '9.5.0': 'data-testid public dashboard no upsert permissions alert',\n },\n EnableTimeRangeSwitch: {\n '9.4.0': 'data-testid public dashboard on off switch for time range',\n },\n EmailSharingConfiguration: {\n Container: {\n '9.5.0': 'data-testid email sharing config container',\n },\n ShareType: {\n '9.5.0': 'data-testid public dashboard share type',\n },\n EmailSharingInput: {\n '9.5.0': 'data-testid public dashboard email sharing input',\n },\n EmailSharingInviteButton: {\n '9.5.0': 'data-testid public dashboard email sharing invite button',\n },\n EmailSharingList: {\n '9.5.0': 'data-testid public dashboard email sharing list',\n },\n DeleteEmail: {\n '9.5.0': 'data-testid public dashboard delete email button',\n },\n ReshareLink: {\n '9.5.0': 'data-testid public dashboard reshare link button',\n },\n },\n },\n SnapshotScene: {\n url: {\n '11.1.0': (key: string) => `/dashboard/snapshot/${key}`,\n },\n PublishSnapshot: {\n '11.1.0': 'data-testid publish snapshot button',\n },\n CopyUrlButton: {\n '11.1.0': 'data-testid snapshot copy url button',\n },\n CopyUrlInput: {\n '11.1.0': 'data-testid snapshot copy url input',\n },\n },\n },\n ShareDashboardDrawer: {\n ShareInternally: {\n container: {\n '11.3.0': 'data-testid share internally drawer container',\n },\n lockTimeRangeSwitch: {\n '11.3.0': 'data-testid share internally lock time range switch',\n },\n shortenUrlSwitch: {\n '11.3.0': 'data-testid share internally shorten url switch',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share internally copy url button',\n },\n SharePanel: {\n preview: {\n '11.5.0': 'data-testid share panel internally image generation preview',\n },\n widthInput: {\n '11.5.0': 'data-testid share panel internally width input',\n },\n heightInput: {\n '11.5.0': 'data-testid share panel internally height input',\n },\n scaleFactorInput: {\n '11.5.0': 'data-testid share panel internally scale factor input',\n },\n generateImageButton: {\n '11.5.0': 'data-testid share panel internally generate image button',\n },\n downloadImageButton: {\n '11.5.0': 'data-testid share panel internally download image button',\n },\n },\n },\n ShareExternally: {\n container: {\n '11.3.0': 'data-testid share externally drawer container',\n },\n publicAlert: {\n '11.3.0': 'data-testid public share alert',\n },\n emailSharingAlert: {\n '11.3.0': 'data-testid email share alert',\n },\n shareTypeSelect: {\n '11.3.0': 'data-testid share externally share type select',\n },\n Creation: {\n PublicShare: {\n createButton: {\n '11.3.0': 'data-testid public share dashboard create button',\n },\n cancelButton: {\n '11.3.0': 'data-testid public share dashboard cancel button',\n },\n },\n EmailShare: {\n createButton: {\n '11.3.0': 'data-testid email share dashboard create button',\n },\n cancelButton: {\n '11.3.0': 'data-testid email share dashboard cancel button',\n },\n },\n willBePublicCheckbox: {\n '11.3.0': 'data-testid share dashboard will be public checkbox',\n },\n },\n Configuration: {\n enableTimeRangeSwitch: {\n '11.3.0': 'data-testid share externally enable time range switch',\n },\n enableAnnotationsSwitch: {\n '11.3.0': 'data-testid share externally enable annotations switch',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share externally copy url button',\n },\n revokeAccessButton: {\n '11.3.0': 'data-testid share externally revoke access button',\n },\n toggleAccessButton: {\n '11.3.0': 'data-testid share externally pause or resume access button',\n },\n },\n },\n ShareSnapshot: {\n url: {\n '11.3.0': (key: string) => `/dashboard/snapshot/${key}`,\n },\n container: {\n '11.3.0': 'data-testid share snapshot drawer container',\n },\n publishSnapshot: {\n '11.3.0': 'data-testid share snapshot publish button',\n },\n copyUrlButton: {\n '11.3.0': 'data-testid share snapshot copy url button',\n },\n },\n },\n ExportDashboardDrawer: {\n ExportAsJson: {\n container: {\n '11.3.0': 'data-testid export as json drawer container',\n },\n codeEditor: {\n '11.3.0': 'data-testid export as json code editor',\n },\n exportExternallyToggle: {\n '11.3.0': 'data-testid export as json externally switch',\n },\n saveToFileButton: {\n '11.3.0': 'data-testid export as json save to file button',\n },\n copyToClipboardButton: {\n '11.3.0': 'data-testid export as json copy to clipboard button',\n },\n cancelButton: {\n '11.3.0': 'data-testid export as json cancel button',\n },\n },\n },\n PublicDashboard: {\n page: {\n '9.5.0': 'public-dashboard-page',\n },\n NotAvailable: {\n container: {\n '9.5.0': 'public-dashboard-not-available',\n },\n title: {\n '9.5.0': 'public-dashboard-title',\n },\n pausedDescription: {\n '9.5.0': 'public-dashboard-paused-description',\n },\n },\n footer: {\n '11.0.0': 'public-dashboard-footer',\n },\n },\n PublicDashboardScene: {\n loadingPage: {\n '11.0.0': 'public-dashboard-scene-loading-page',\n },\n page: {\n '11.0.0': 'public-dashboard-scene-page',\n },\n controls: {\n '11.0.0': 'public-dashboard-controls',\n },\n },\n RequestViewAccess: {\n form: {\n '9.5.0': 'request-view-access-form',\n },\n recipientInput: {\n '9.5.0': 'request-view-access-recipient-input',\n },\n submitButton: {\n '9.5.0': 'request-view-access-submit-button',\n },\n },\n PublicDashboardConfirmAccess: {\n submitButton: {\n '10.2.0': 'data-testid confirm-access-submit-button',\n },\n },\n Explore: {\n url: {\n [MIN_GRAFANA_VERSION]: '/explore',\n },\n General: {\n container: {\n [MIN_GRAFANA_VERSION]: 'data-testid Explore',\n },\n graph: {\n [MIN_GRAFANA_VERSION]: 'Explore Graph',\n },\n table: {\n [MIN_GRAFANA_VERSION]: 'Explore Table',\n },\n scrollView: {\n '9.0.0': 'data-testid explorer scroll view',\n },\n addFromQueryLibrary: {\n '11.5.0': 'data-testid explore add from query library button',\n },\n },\n QueryHistory: {\n container: {\n '11.1.0': 'data-testid QueryHistory',\n },\n },\n },\n SoloPanel: {\n url: {\n [MIN_GRAFANA_VERSION]: (page: string) => `/d-solo/${page}`,\n },\n },\n PluginsList: {\n page: {\n [MIN_GRAFANA_VERSION]: 'Plugins list page',\n },\n list: {\n [MIN_GRAFANA_VERSION]: 'Plugins list',\n },\n listItem: {\n [MIN_GRAFANA_VERSION]: 'Plugins list item',\n },\n signatureErrorNotice: {\n '10.3.0': 'data-testid Unsigned plugins notice',\n [MIN_GRAFANA_VERSION]: 'Unsigned plugins notice',\n },\n },\n PluginPage: {\n page: {\n [MIN_GRAFANA_VERSION]: 'Plugin page',\n },\n signatureInfo: {\n '10.3.0': 'data-testid Plugin signature info',\n [MIN_GRAFANA_VERSION]: 'Plugin signature info',\n },\n disabledInfo: {\n '10.3.0': 'data-testid Plugin disabled info',\n [MIN_GRAFANA_VERSION]: 'Plugin disabled info',\n },\n },\n PlaylistForm: {\n name: {\n [MIN_GRAFANA_VERSION]: 'Playlist name',\n },\n interval: {\n [MIN_GRAFANA_VERSION]: 'Playlist interval',\n },\n itemDelete: {\n '10.2.0': 'data-testid playlist-form-delete-item',\n },\n },\n BrowseDashboards: {\n table: {\n body: {\n '10.2.0': 'data-testid browse-dashboards-table',\n },\n row: {\n '10.2.0': (name: string) => `data-testid browse dashboards row ${name}`,\n },\n checkbox: {\n '10.0.0': (uid: string) => `data-testid ${uid} checkbox`,\n },\n },\n NewFolderForm: {\n form: {\n '10.2.0': 'data-testid new folder form',\n },\n nameInput: {\n '10.2.0': 'data-testid new-folder-name-input',\n },\n createButton: {\n '10.2.0': 'data-testid new-folder-create-button',\n },\n },\n },\n SearchDashboards: {\n table: {\n '10.2.0': 'Search results table',\n },\n },\n Search: {\n url: {\n '9.3.0': '/?search=openn',\n },\n FolderView: {\n url: {\n '9.3.0': '/?search=open&layout=folders',\n },\n },\n },\n PublicDashboards: {\n ListItem: {\n linkButton: {\n '9.3.0': 'public-dashboard-link-button',\n },\n configButton: {\n '9.3.0': 'public-dashboard-configuration-button',\n },\n trashcanButton: {\n '9.3.0': 'public-dashboard-remove-button',\n },\n pauseSwitch: {\n '10.1.0': 'data-testid public dashboard pause switch',\n },\n },\n },\n UserListPage: {\n tabs: {\n allUsers: {\n '10.0.0': 'data-testid all-users-tab',\n },\n orgUsers: {\n '10.0.0': 'data-testid org-users-tab',\n },\n anonUserDevices: {\n '10.2.3': 'data-testid anon-user-devices-tab',\n },\n publicDashboardsUsers: {\n '10.0.0': 'data-testid public-dashboards-users-tab',\n },\n users: {\n '10.0.0': 'data-testid users-tab',\n },\n },\n org: {\n url: {\n '10.2.0': '/admin/users',\n '9.5.0': '/org/users',\n },\n },\n admin: {\n url: {\n '9.5.0': '/admin/users',\n },\n },\n publicDashboards: {\n container: {\n '11.1.0': 'data-testid public-dashboards-users-list',\n },\n },\n UserListAdminPage: {\n container: {\n '10.0.0': 'data-testid user-list-admin-page',\n },\n },\n UsersListPage: {\n container: {\n '10.0.0': 'data-testid users-list-page',\n },\n },\n UserAnonListPage: {\n container: {\n '10.4.0': 'data-testid user-anon-list-page',\n },\n },\n UsersListPublicDashboardsPage: {\n container: {\n '10.0.0': 'data-testid users-list-public-dashboards-page',\n },\n DashboardsListModal: {\n listItem: {\n '10.0.0': (uid: string) => `data-testid dashboards-list-item-${uid}`,\n },\n },\n },\n },\n ProfilePage: {\n url: {\n '10.2.0': '/profile',\n },\n },\n Plugin: {\n url: {\n [MIN_GRAFANA_VERSION]: (pluginId: string) => `/plugins/${pluginId}`,\n },\n },\n MigrateToCloud: {\n url: {\n '11.2.0': '/admin/migrate-to-cloud',\n },\n },\n} satisfies VersionedSelectorGroup;\n\nexport type VersionedPages = typeof versionedPages;\n","import { cx } from '@emotion/css';\nimport { RefCallback, SyntheticEvent, useState } from 'react';\nimport * as React from 'react';\nimport { lastValueFrom } from 'rxjs';\n\nimport { CoreApp, DataFrame, getDefaultTimeRange, SelectableValue, TimeRange } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { AccessoryButton } from '@grafana/plugin-ui';\nimport { Select, ButtonSelect, AsyncMultiSelect, getSelectStyles, useTheme2, Checkbox, Stack } from '@grafana/ui';\n\nimport { AzureMonitorQuery, AzureQueryType, AzureTracesFilter } from '../../dataquery.gen';\nimport Datasource from '../../datasource';\nimport { VariableOptionGroup } from '../../types/types';\nimport { addValueToOptions } from '../../utils/common';\n\nexport interface FilterProps {\n query: AzureMonitorQuery;\n datasource: Datasource;\n propertyMap: Map<string, SelectableValue[]>;\n setPropertyMap: React.Dispatch<React.SetStateAction<Map<string, Array<SelectableValue<string>>>>>;\n queryTraceTypes: string[];\n properties: string[];\n variableOptionGroup: VariableOptionGroup;\n range?: TimeRange;\n}\n\nconst onFieldChange = <Key extends keyof AzureTracesFilter>(\n fieldName: Key,\n item: Partial<AzureTracesFilter>,\n selected: SelectableValue<AzureTracesFilter[Key]>,\n onChange: (item: Partial<AzureTracesFilter>) => void\n) => {\n if (fieldName === 'filters') {\n item[fieldName] = selected.map((item: SelectableValue<string>) => item.value);\n } else {\n item[fieldName] = selected.value;\n if (fieldName === 'property') {\n item.filters = [];\n }\n }\n onChange(item);\n};\n\nconst getTraceProperties = async (\n query: AzureMonitorQuery,\n datasource: Datasource,\n traceTypes: string[],\n propertyMap: Map<string, SelectableValue[]>,\n setPropertyMap: React.Dispatch<React.SetStateAction<Map<string, Array<SelectableValue<string>>>>>,\n filter?: Partial<AzureTracesFilter>,\n range?: TimeRange\n): Promise<SelectableValue[]> => {\n const { azureTraces } = query;\n if (!azureTraces) {\n return [];\n }\n\n const { resources } = azureTraces;\n\n if (!resources || !filter) {\n return [];\n }\n\n const property = filter.property;\n if (!property) {\n return [];\n }\n\n const queryString = `let ${property} = toscalar(union isfuzzy=true ${traceTypes.join(',')}\n | where $__timeFilter(timestamp)\n | summarize count=count() by ${property}\n | summarize make_list(pack_all()));\n print properties = bag_pack(\"${property}\", ${property});`;\n\n const results = await lastValueFrom(\n datasource.azureLogAnalyticsDatasource.query({\n requestId: 'azure-traces-properties-req',\n interval: '',\n intervalMs: 0,\n scopedVars: {},\n timezone: '',\n startTime: 0,\n app: CoreApp.Unknown,\n targets: [\n {\n ...query,\n azureLogAnalytics: {\n resources,\n query: queryString,\n },\n queryType: AzureQueryType.LogAnalytics,\n },\n ],\n range: range || getDefaultTimeRange(),\n })\n );\n if (results.data.length > 0) {\n const result: DataFrame = results.data[0];\n if (result.fields.length > 0) {\n const properties: { [key: string]: Array<{ [key: string]: string | number; count: number }> } = JSON.parse(\n result.fields[0].values.toArray()[0]\n );\n const values = properties[property].map((value) => {\n let label = value[property];\n if (value[property] === '') {\n label = '<Empty>';\n }\n return { label: label.toString(), value: value[property].toString(), count: value.count };\n });\n propertyMap.set(property, values);\n setPropertyMap(propertyMap);\n return values;\n }\n }\n\n return [];\n};\n\nexport function makeRenderItem(props: FilterProps) {\n function renderItem(\n item: Partial<AzureTracesFilter>,\n onChange: (item: Partial<AzureTracesFilter>) => void,\n onDelete: () => void\n ) {\n return <Filter {...props} item={item} onChange={onChange} onDelete={onDelete} />;\n }\n\n return renderItem;\n}\n\ninterface OptionProps {\n isFocused: boolean;\n isSelected: boolean;\n innerProps: JSX.IntrinsicElements['div'];\n innerRef: RefCallback<HTMLDivElement>;\n data: SelectableValue<string>;\n selectOption: (data: SelectableValue<string>) => void;\n}\n\nconst Option = (props: React.PropsWithChildren<OptionProps>) => {\n const { data, innerProps, innerRef, isFocused, isSelected } = props;\n const theme = useTheme2();\n const styles = getSelectStyles(theme);\n\n const onClickMultiOption = (e: SyntheticEvent) => {\n props.selectOption({ ...data });\n e.stopPropagation();\n e.preventDefault();\n };\n\n return (\n <div\n ref={innerRef}\n className={cx(\n styles.option,\n isFocused && styles.optionFocused,\n isSelected && styles.optionSelected,\n data.isDisabled && styles.optionDisabled\n )}\n {...innerProps}\n data-testid={selectors.components.Select.option}\n title={data.title}\n onClick={onClickMultiOption}\n onKeyDown={onClickMultiOption}\n role=\"checkbox\"\n aria-checked={isSelected}\n tabIndex={0}\n >\n <div className={styles.optionBody}>\n <Checkbox value={isSelected} label={data.label ? `${data.label} - (${data.count})` : ''} />\n </div>\n </div>\n );\n};\n\nconst Filter = (\n props: FilterProps & {\n item: Partial<AzureTracesFilter>;\n onChange: (item: Partial<AzureTracesFilter>) => void;\n onDelete: () => void;\n }\n) => {\n const {\n query,\n datasource,\n propertyMap,\n setPropertyMap,\n queryTraceTypes,\n properties,\n item,\n onChange,\n onDelete,\n variableOptionGroup,\n range,\n } = props;\n const [loading, setLoading] = useState(false);\n const [values, setValues] = useState<Array<SelectableValue<string> | VariableOptionGroup>>(\n addValueToOptions(propertyMap.get(item.property ?? '') ?? [], variableOptionGroup)\n );\n const [selected, setSelected] = useState<SelectableValue[]>(\n item.filters ? item.filters.map((filter) => ({ value: filter, label: filter === '' ? '<Empty>' : filter })) : []\n );\n\n const loadOptions = async () => {\n setLoading(true);\n if (item.property && item.property !== '') {\n const vals = propertyMap.get(item.property ?? '');\n if (!vals) {\n const promise = await getTraceProperties(\n query,\n datasource,\n queryTraceTypes,\n propertyMap,\n setPropertyMap,\n item,\n range\n );\n setValues(addValueToOptions(promise, variableOptionGroup));\n setLoading(false);\n return promise;\n } else {\n setValues(addValueToOptions(vals, variableOptionGroup));\n setLoading(false);\n return Promise.resolve(vals);\n }\n }\n const empty: Array<SelectableValue<string>> = [];\n return Promise.resolve(empty);\n };\n\n return (\n <Stack gap={0}>\n <Select\n menuShouldPortal\n placeholder={t('components.filter.placeholder-property', 'Property')}\n value={item.property ? { value: item.property, label: item.property } : null}\n options={addValueToOptions(\n properties.map((type) => ({ label: type, value: type })),\n variableOptionGroup\n )}\n onChange={(e) => onFieldChange('property', item, e, onChange)}\n width={25}\n />\n <ButtonSelect<string>\n value={item.operation ? { label: item.operation === 'eq' ? '=' : '!=', value: item.operation } : undefined}\n options={[\n { label: '=', value: 'eq' },\n { label: '!=', value: 'ne' },\n ]}\n onChange={(e) => onFieldChange('operation', item, e, onChange)}\n defaultValue={'eq'}\n />\n <AsyncMultiSelect\n blurInputOnSelect={false}\n menuShouldPortal\n placeholder={t('components.filter.placeholder-value', 'Value')}\n value={selected}\n loadOptions={loadOptions}\n isLoading={loading}\n onOpenMenu={loadOptions}\n onChange={(e: Array<SelectableValue<string>>) => {\n setSelected(e);\n if (e.length === 0) {\n onFieldChange('filters', item, selected, onChange);\n }\n }}\n width={35}\n defaultOptions={values}\n isClearable\n components={{ Option }}\n closeMenuOnSelect={false}\n onCloseMenu={() => onFieldChange('filters', item, selected, onChange)}\n hideSelectedOptions={false}\n />\n <AccessoryButton\n aria-label={t('components.filter.aria-label-remove-filter', 'Remove filter')}\n icon=\"times\"\n variant=\"secondary\"\n onClick={onDelete}\n type=\"button\"\n />\n </Stack>\n );\n};\n\nexport default Filter;\n","import { omit } from 'lodash';\n\nexport const Tables = {\n availabilityResults: { label: 'Availablity Results', description: 'Availability test results.' },\n dependencies: {\n label: 'Dependencies',\n description: 'Calls your application makes to other services such as databases or REST APIs.',\n },\n customEvents: { label: 'Custom Events', description: 'Calls to TrackEvent that are inserted to monitor usage.' },\n exceptions: {\n label: 'Exceptions',\n description: 'Exceptions that are logged via TrackException, or uncaught exceptions.',\n },\n pageViews: { label: 'Page Views', description: 'Web client telemetry to create page view reports.' },\n requests: { label: 'Requests', description: 'HTTP requests received by the application.' },\n traces: {\n label: 'Traces',\n description:\n 'Diagnostic logs emitted using TrackTrace and similar methods. Note: Traces are not visualised if the result format is set to Trace',\n },\n};\n\n// Resource centric tables mapped to legacy tables\nexport const tables = {\n AppAvailabilityResults: 'availabilityResults',\n AppDependencies: 'dependencies',\n AppEvents: 'events',\n AppExceptions: 'exceptions',\n AppPageViews: 'pageViews',\n AppRequests: 'requests',\n AppTraces: 'traces',\n};\n\n// Properties to omit when generating the attributes bag\nexport const attributesOmit = [\n 'operationId',\n 'duration',\n 'id',\n 'name',\n 'problemId',\n 'operation_ParentId',\n 'timestamp',\n 'customDimensions',\n 'operation_Name',\n];\n\n// Common resource centric properties mapped to legacy property names\nexport const common = {\n appId: 'ResourceGUID',\n application_Version: 'AppVersion',\n appName: '_ResourceId',\n client_Browser: 'ClientBrowser',\n client_City: 'ClientCity',\n client_CountryOrRegion: 'ClientCountryOrRegion',\n client_IP: 'ClientIP',\n client_Model: 'ClientModel',\n client_OS: 'ClientOS',\n client_StateOrProvince: 'ClientStateOrProvince',\n client_Type: 'ClientType',\n cloud_RoleInstance: 'AppRoleInstance',\n cloud_RoleName: 'AppRoleName',\n customDimensions: 'Properties',\n customMeasurements: 'Measurements',\n duration: 'DurationMs',\n id: 'Id',\n iKey: 'IKey',\n itemCount: 'ItemCount',\n itemId: '_ItemId',\n itemType: 'Type',\n name: 'Name',\n operation_Id: 'OperationId',\n operation_Name: 'OperationName',\n operation_ParentId: 'OperationParentId',\n operation_SyntheticSource: 'OperationSyntheticSource',\n performanceBucket: 'PerformanceBucket',\n sdkVersion: 'SDKVersion',\n session_Id: 'SessionId',\n success: 'Success',\n timestamp: 'TimeGenerated',\n user_AccountId: 'UserAccountId',\n user_AuthenticatedId: 'UserAuthenticatedId',\n user_Id: 'UserId',\n};\n\n// Additional properties for availabilityResults\nexport const availabilityResultsSchema = {\n ...common,\n location: 'Location',\n message: 'Message',\n size: 'Size',\n};\n\n// Additional properties for dependencies\nexport const dependenciesSchema = {\n ...common,\n data: 'Data',\n resultCode: 'ResultCode',\n target: 'Target',\n type: 'DependencyType',\n};\n\n// Additional properties for events\nexport const eventsSchema = omit(common, ['duration', 'id', 'success', 'performanceBucket']);\n\n// Additional properties for pageVies\nexport const pageViewsSchema = omit(\n {\n ...common,\n url: 'Url',\n },\n ['success']\n);\n\n// Additional properties for requests\nexport const requestsSchema = {\n resultCode: 'ResultCode',\n source: 'Source',\n url: 'Url',\n};\n\n// Additional properties for exceptions\nexport const exceptionsSchema = omit(\n {\n ...common,\n assembly: 'Assembly',\n details: 'Details',\n handledAt: 'HandledAt',\n innermostAssembly: 'InnermostAssembly',\n innermostMessage: 'InnermostMessage',\n innermostMethod: 'InnermostMethod',\n innermostType: 'InnermostType',\n message: 'Message',\n method: 'Method',\n outerAssembly: 'OuterAssembly',\n outerMessage: 'OuterMessage',\n outerMethod: 'OuterMethod',\n outerType: 'OuterType',\n problemId: 'ProblemId',\n severityLevel: 'SeverityLevel',\n type: 'ExceptionType',\n },\n ['duration', 'id', 'name', 'performanceBucket', 'success']\n);\n\n// Additional properties for traces\nexport const tracesSchema = omit(\n {\n message: 'Message',\n severityLevel: 'SeverityLevel',\n },\n ['duration', 'id', 'name', 'performanceBucket', 'success']\n);\n\nexport const tablesSchema: { [key: string]: { [key: string]: string } } = {\n availabilityResults: availabilityResultsSchema,\n dependencies: dependenciesSchema,\n customEvents: eventsSchema,\n exceptions: exceptionsSchema,\n pageViews: pageViewsSchema,\n requests: requestsSchema,\n traces: tracesSchema,\n};\n\nexport const tableTags = Object.entries(tablesSchema).reduce(\n (val, [k, v]) => ({ ...val, [k]: Object.keys(omit(v, attributesOmit)).join(',') }),\n {}\n);\n","import { SelectableValue } from '@grafana/data';\n\nimport { AzureMonitorQuery, AzureQueryType, AzureTracesFilter, ResultFormat } from '../../types/query';\n\n// Used when switching from a traces exemplar query to a standard Azure Traces query\nexport function setDefaultTracesQuery(query: AzureMonitorQuery): AzureMonitorQuery {\n return {\n ...query,\n query: undefined,\n queryType: AzureQueryType.AzureTraces,\n azureTraces: undefined,\n };\n}\n\nexport function setQueryOperationId(query: AzureMonitorQuery, operationId?: string): AzureMonitorQuery {\n return {\n ...query,\n azureTraces: {\n ...query.azureTraces,\n operationId,\n },\n };\n}\n\nexport function setFormatAs(query: AzureMonitorQuery, formatAs: ResultFormat): AzureMonitorQuery {\n return {\n ...query,\n azureTraces: {\n ...query.azureTraces,\n resultFormat: formatAs,\n },\n };\n}\n\nexport function setTraceTypes(query: AzureMonitorQuery, traceTypes: string[]): AzureMonitorQuery {\n return {\n ...query,\n azureTraces: {\n ...query.azureTraces,\n traceTypes,\n },\n };\n}\n\nexport function setFilters(query: AzureMonitorQuery, filters: AzureTracesFilter[]): AzureMonitorQuery {\n return {\n ...query,\n azureTraces: {\n ...query.azureTraces,\n filters,\n },\n };\n}\n\nexport function onLoad(\n query: AzureMonitorQuery,\n defaultValue: ResultFormat,\n handleChange: (change: SelectableValue<ResultFormat>) => void\n) {\n if (!query.azureTraces?.resultFormat) {\n handleChange({ value: defaultValue });\n }\n}\n","import { uniq } from 'lodash';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorList } from '@grafana/plugin-ui';\nimport { Field } from '@grafana/ui';\n\nimport { AzureTracesFilter } from '../../types/query';\nimport { AzureQueryEditorFieldProps } from '../../types/types';\n\nimport { makeRenderItem } from './Filter';\nimport { tablesSchema } from './consts';\nimport { setFilters } from './setQueryValue';\n\nconst Filters = ({ query, datasource, onQueryChange, variableOptionGroup, range }: AzureQueryEditorFieldProps) => {\n const { azureTraces } = query;\n const queryTraceTypes = azureTraces?.traceTypes ? azureTraces.traceTypes : Object.keys(tablesSchema);\n\n const excludedProperties = new Set([\n 'customDimensions',\n 'customMeasurements',\n 'details',\n 'duration',\n 'id',\n 'itemId',\n 'operation_Id',\n 'operation_ParentId',\n 'timestamp',\n ]);\n const properties = uniq(queryTraceTypes.map((type) => Object.keys(tablesSchema[type])).flat()).filter(\n (item) => !excludedProperties.has(item)\n );\n\n const [propertyMap, setPropertyMap] = useState(new Map<string, Array<SelectableValue<string>>>());\n const queryFilters = useMemo(() => query.azureTraces?.filters ?? [], [query.azureTraces?.filters]);\n const [filters, updateFilters] = useState(queryFilters);\n\n useEffect(() => {\n setPropertyMap(new Map<string, Array<SelectableValue<string>>>());\n }, [query.azureTraces?.resources, query.azureTraces?.traceTypes, query.azureTraces?.operationId]);\n\n const changedFunc = (changed: Array<Partial<AzureTracesFilter>>) => {\n let updateQuery = false;\n const properData: AzureTracesFilter[] = changed.map((x) => {\n if (x.property !== '' && x.filters && x.filters.length > 0 && x.operation !== '') {\n updateQuery = true;\n } else {\n updateQuery = false;\n }\n return {\n property: x.property ?? '',\n filters: x.filters ?? [],\n operation: x.operation ?? 'eq',\n };\n });\n updateFilters(properData);\n if (updateQuery || (queryFilters.length > 0 && properData.length === 0)) {\n onQueryChange(setFilters(query, properData));\n }\n };\n\n return (\n <Field label={t('components.filters.label-filters', 'Filters')}>\n <EditorList\n items={filters}\n onChange={changedFunc}\n renderItem={makeRenderItem({\n query,\n datasource,\n propertyMap,\n setPropertyMap,\n queryTraceTypes,\n properties,\n variableOptionGroup,\n range,\n })}\n />\n </Field>\n );\n};\n\nexport default Filters;\n","import { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { MultiSelect } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorOption, AzureQueryEditorFieldProps } from '../../types/types';\nimport { findOptions } from '../../utils/common';\nimport { Field } from '../shared/Field';\n\nimport { Tables } from './consts';\nimport { setTraceTypes } from './setQueryValue';\n\nconst TraceTypeField = ({ query, variableOptionGroup, onQueryChange }: AzureQueryEditorFieldProps) => {\n const tables: AzureMonitorOption[] = Object.entries(Tables).map(([key, value]) => ({\n label: value.label,\n description: value.description,\n value: key,\n }));\n const handleChange = useCallback(\n (change: Array<SelectableValue<string>>) => {\n const newQuery = setTraceTypes(\n query,\n change.map((type) => type.value ?? '')\n );\n onQueryChange(newQuery);\n },\n [onQueryChange, query]\n );\n\n const options = useMemo(() => [...tables, variableOptionGroup], [tables, variableOptionGroup]);\n\n // Select all trace event ypes by default\n const getDefaultOptions = () => {\n const allEventTypes = tables.map((t) => t.value);\n const defaultQuery = setTraceTypes(query, allEventTypes);\n onQueryChange(defaultQuery);\n return allEventTypes;\n };\n\n return (\n <Field label={t('components.trace-type-field.label-event-type', 'Event Type')}>\n <MultiSelect\n placeholder={t('components.trace-type-field.placeholder-event-type', 'Choose event types')}\n inputId=\"azure-monitor-traces-type-field\"\n value={findOptions(\n [...tables, ...variableOptionGroup.options],\n query.azureTraces?.traceTypes ?? getDefaultOptions()\n )}\n onChange={handleChange}\n options={options}\n allowCustomValue\n isClearable\n aria-label={selectors.components.queryEditor.tracesQueryEditor.traceTypes.select}\n />\n </Field>\n );\n};\n\nexport default TraceTypeField;\n","import { useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { TimeRange } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorFieldGroup, EditorRow, EditorRows } from '@grafana/plugin-ui';\nimport { Input } from '@grafana/ui';\n\nimport Datasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorQuery, AzureQueryType, ResultFormat } from '../../types/query';\nimport { AzureMonitorErrorish, AzureMonitorOption } from '../../types/types';\nimport AdvancedResourcePicker from '../LogsQueryEditor/AdvancedResourcePicker';\nimport ResourceField from '../ResourceField/ResourceField';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from '../ResourcePicker/types';\nimport { parseResourceDetails } from '../ResourcePicker/utils';\nimport { Field } from '../shared/Field';\nimport FormatAsField from '../shared/FormatAsField';\n\nimport Filters from './Filters';\nimport TraceTypeField from './TraceTypeField';\nimport { onLoad, setDefaultTracesQuery, setFormatAs, setQueryOperationId } from './setQueryValue';\n\ninterface TracesQueryEditorProps {\n query: AzureMonitorQuery;\n datasource: Datasource;\n subscriptionId?: string;\n onChange: (newQuery: AzureMonitorQuery) => void;\n variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n range?: TimeRange;\n}\n\nconst TracesQueryEditor = ({\n query,\n datasource,\n subscriptionId,\n variableOptionGroup,\n onChange,\n setError,\n range,\n}: TracesQueryEditorProps) => {\n const disableRow = (row: ResourceRow, selectedRows: ResourceRowGroup) => {\n if (selectedRows.length === 0) {\n // Only if there is some resource(s) selected we should disable rows\n return false;\n }\n const rowResourceNS = parseResourceDetails(row.uri, row.location).metricNamespace?.toLowerCase();\n const selectedRowSampleNs = parseResourceDetails(\n selectedRows[0].uri,\n selectedRows[0].location\n ).metricNamespace?.toLowerCase();\n // Only resources with the same metricNamespace can be selected\n return rowResourceNS !== selectedRowSampleNs;\n };\n\n const [operationId, setOperationId] = useState<string>(query.azureTraces?.operationId ?? '');\n const previousOperationId = usePrevious(query.azureTraces?.operationId);\n\n useEffect(() => {\n if (query.azureTraces?.operationId) {\n if (previousOperationId !== query.azureTraces.operationId) {\n setOperationId(query.azureTraces.operationId);\n }\n }\n }, [setOperationId, previousOperationId, query, operationId]);\n\n const handleChange = useCallback(\n (ev: React.FormEvent) => {\n if (ev.target instanceof HTMLInputElement) {\n setOperationId(ev.target.value);\n if (query.queryType === AzureQueryType.TraceExemplar && ev.target.value === '') {\n // If this is an exemplars query and the operation ID is cleared we reset this to a default traces query\n onChange(setDefaultTracesQuery(query));\n }\n }\n },\n [onChange, query]\n );\n\n const handleBlur = useCallback(\n (ev: React.FormEvent) => {\n const newQuery = setQueryOperationId(query, operationId);\n onChange(newQuery);\n },\n [onChange, operationId, query]\n );\n\n return (\n <span data-testid={selectors.components.queryEditor.tracesQueryEditor.container.input}>\n <EditorRows>\n <EditorRow>\n <EditorFieldGroup>\n <ResourceField\n query={query}\n datasource={datasource}\n subscriptionId={subscriptionId}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n selectableEntryTypes={[\n ResourceRowType.Subscription,\n ResourceRowType.ResourceGroup,\n ResourceRowType.Resource,\n ResourceRowType.Variable,\n ]}\n resources={query.azureTraces?.resources ?? []}\n queryType=\"traces\"\n disableRow={disableRow}\n renderAdvanced={(resources, onChange) => (\n // It's required to cast resources because the resource picker\n // specifies the type to string | AzureMonitorResource.\n // eslint-disable-next-line\n <AdvancedResourcePicker resources={resources as string[]} onChange={onChange} />\n )}\n selectionNotice={() => 'You may only choose items of the same resource type.'}\n range={range}\n />\n </EditorFieldGroup>\n </EditorRow>\n <EditorRow>\n <EditorFieldGroup>\n <TraceTypeField\n datasource={datasource}\n onQueryChange={onChange}\n query={query}\n setError={setError}\n variableOptionGroup={variableOptionGroup}\n range={range}\n />\n <Field label={t('components.traces-query-editor.label-operation-id', 'Operation ID')}>\n <Input\n id=\"azure-monitor-traces-operation-id-field\"\n value={operationId}\n onChange={handleChange}\n onBlur={handleBlur}\n width={40}\n />\n </Field>\n </EditorFieldGroup>\n </EditorRow>\n <EditorRow>\n <EditorFieldGroup>\n <Filters\n datasource={datasource}\n onQueryChange={onChange}\n query={query}\n setError={setError}\n variableOptionGroup={variableOptionGroup}\n range={range}\n />\n </EditorFieldGroup>\n </EditorRow>\n <EditorRow>\n <EditorFieldGroup>\n <FormatAsField\n datasource={datasource}\n setError={setError}\n query={query}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n inputId=\"azure-monitor-traces\"\n options={[\n { label: 'Table', value: ResultFormat.Table },\n { label: 'Trace', value: ResultFormat.Trace },\n ]}\n defaultValue={ResultFormat.Table}\n setFormatAs={setFormatAs}\n resultFormat={query.azureTraces?.resultFormat}\n range={range}\n onLoad={onLoad}\n />\n </EditorFieldGroup>\n </EditorRow>\n </EditorRows>\n </span>\n );\n};\n\nexport default TracesQueryEditor;\n","import { useEffect, useRef } from 'react';\nexport default function usePrevious(state) {\n var ref = useRef();\n useEffect(function () {\n ref.current = state;\n });\n return ref.current;\n}\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nconst EditorHeader = ({ children }) => {\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, children);\n};\nconst getStyles = (theme) => ({\n root: css({\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: theme.spacing(3),\n minHeight: theme.spacing(4)\n })\n});\n\nexport { EditorHeader };\n//# sourceMappingURL=EditorHeader.js.map\n","import { css, cx } from '@emotion/css';\nimport React__default, { useState } from 'react';\nimport '@grafana/data';\nimport { useStyles2, Select, SelectContainer as SelectContainer$1 } from '@grafana/ui';\n\nfunction InlineSelect({ label: labelProp, ...props }) {\n const [id] = useState(() => Math.random().toString(16).slice(2));\n const styles = useStyles2(getSelectStyles);\n const components = {\n SelectContainer,\n ValueContainer,\n SingleValue: ValueContainer\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, labelProp && /* @__PURE__ */ React__default.createElement(\"label\", { className: styles.label, htmlFor: id }, labelProp, \":\", \"\\xA0\"), /* @__PURE__ */ React__default.createElement(Select, { openMenuOnFocus: true, inputId: id, ...props, components }));\n}\nconst SelectContainer = (props) => {\n const { children } = props;\n const styles = useStyles2(getSelectStyles);\n return /* @__PURE__ */ React__default.createElement(SelectContainer$1, { ...props, className: cx(props.className, styles.container) }, children);\n};\nconst ValueContainer = (props) => {\n const { className, children } = props;\n const styles = useStyles2(getSelectStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: cx(className, styles.valueContainer) }, children);\n};\nconst getSelectStyles = (theme) => ({\n root: css({\n display: \"flex\",\n fontSize: 12,\n alignItems: \"center\"\n }),\n label: css({\n color: theme.colors.text.secondary,\n whiteSpace: \"nowrap\"\n }),\n container: css({\n background: \"none\",\n borderColor: \"transparent\"\n }),\n valueContainer: css({\n display: \"flex\",\n alignItems: \"center\",\n flex: \"initial\",\n color: theme.colors.text.secondary,\n fontSize: 12\n })\n});\n\nexport { InlineSelect };\n//# sourceMappingURL=InlineSelect.js.map\n","import React__default from 'react';\n\nconst FlexItem = ({ grow, shrink }) => {\n return /* @__PURE__ */ React__default.createElement(\"div\", { style: { display: \"block\", flexGrow: grow, flexShrink: shrink } });\n};\n\nexport { FlexItem };\n//# sourceMappingURL=FlexItem.js.map\n","import { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { CoreApp, LoadingState, PanelData, SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { EditorHeader, FlexItem, InlineSelect } from '@grafana/plugin-ui';\nimport { config, reportInteraction } from '@grafana/runtime';\nimport { Button, ConfirmModal, RadioButtonGroup } from '@grafana/ui';\n\nimport { LogsEditorMode } from '../../dataquery.gen';\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorQuery, AzureQueryType } from '../../types/query';\n\ninterface QueryTypeFieldProps {\n query: AzureMonitorQuery;\n onQueryChange: (newQuery: AzureMonitorQuery) => void;\n setAzureLogsCheatSheetModalOpen: React.Dispatch<React.SetStateAction<boolean>>;\n data: PanelData | undefined;\n onRunQuery: () => void;\n app: CoreApp | undefined;\n}\n\nexport const QueryHeader = ({\n query,\n onQueryChange,\n setAzureLogsCheatSheetModalOpen,\n data,\n app,\n onRunQuery,\n}: QueryTypeFieldProps) => {\n const isLoading = useMemo(() => data?.state === LoadingState.Loading, [data?.state]);\n\n const [showModeSwitchWarning, setShowModeSwitchWarning] = useState(false);\n const [pendingModeChange, setPendingModeChange] = useState<LogsEditorMode | null>(null);\n\n const EDITOR_MODES = [\n { label: t('components.query-header.editor-modes.label-builder', 'Builder'), value: LogsEditorMode.Builder },\n { label: t('components.query-header.editor-modes.label-kql', 'KQL'), value: LogsEditorMode.Raw },\n ];\n\n const currentMode = query.azureLogAnalytics?.mode;\n\n const queryTypes: Array<{ value: AzureQueryType; label: string }> = [\n { value: AzureQueryType.AzureMonitor, label: 'Metrics' },\n { value: AzureQueryType.LogAnalytics, label: 'Logs' },\n { value: AzureQueryType.AzureTraces, label: 'Traces' },\n { value: AzureQueryType.AzureResourceGraph, label: 'Azure Resource Graph' },\n ];\n\n const handleChange = useCallback(\n (change: SelectableValue<AzureQueryType>) => {\n if (change.value && change.value !== query.queryType) {\n onQueryChange({\n ...query,\n queryType: change.value,\n });\n }\n },\n [onQueryChange, query]\n );\n\n useEffect(() => {\n if (query.azureLogAnalytics && query.azureLogAnalytics.mode === undefined) {\n const updatedQuery = {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n // Builder mode is default unless there is an existing Log Analytics query\n // that was not created with the builder\n mode:\n (query.azureLogAnalytics?.builderQuery === undefined && query.azureLogAnalytics?.query !== undefined) ||\n !config.featureToggles.azureMonitorLogsBuilderEditor\n ? LogsEditorMode.Raw\n : LogsEditorMode.Builder,\n dashboardTime: true,\n },\n };\n onQueryChange(updatedQuery);\n }\n }, [query, onQueryChange]);\n\n const onLogsModeChange = (newMode: LogsEditorMode) => {\n if (newMode === currentMode) {\n return;\n }\n\n const goingToBuilder = newMode === LogsEditorMode.Builder;\n const goingToRaw = newMode === LogsEditorMode.Raw;\n\n const hasRawKql = !!query.azureLogAnalytics?.query;\n const hasBuilderQuery = !!query.azureLogAnalytics?.builderQuery;\n\n if ((goingToBuilder && hasRawKql) || (goingToRaw && hasBuilderQuery)) {\n setPendingModeChange(newMode);\n setShowModeSwitchWarning(true);\n } else {\n applyModeChange(newMode);\n }\n };\n\n const applyModeChange = (mode: LogsEditorMode) => {\n const updatedQuery = {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n mode,\n query: '',\n builderQuery: mode === LogsEditorMode.Raw ? undefined : query.azureLogAnalytics?.builderQuery,\n dashboardTime: mode === LogsEditorMode.Builder ? true : undefined,\n },\n };\n onQueryChange(updatedQuery);\n };\n\n return (\n <span data-testid={selectors.components.queryEditor.header.select}>\n <EditorHeader>\n <ConfirmModal\n isOpen={showModeSwitchWarning}\n title={t('components.query-header.title-switch-mode', 'Switch editor mode?')}\n body={\n pendingModeChange === LogsEditorMode.Builder\n ? t(\n 'components.query-header.body-switching-to-builder',\n 'Switching to Builder will discard your current KQL query and clear the KQL editor. Are you sure?'\n )\n : t(\n 'components.query-header.body-switching-to-kql',\n 'Switching to KQL will discard your current builder settings. Are you sure?'\n )\n }\n confirmText={t('components.query-header.confirmText-switch-to', 'Switch to {{newMode}}', {\n newMode: pendingModeChange === LogsEditorMode.Builder ? 'Builder' : 'KQL',\n })}\n onConfirm={() => {\n if (pendingModeChange) {\n applyModeChange(pendingModeChange);\n }\n setShowModeSwitchWarning(false);\n setPendingModeChange(null);\n }}\n onDismiss={() => {\n setShowModeSwitchWarning(false);\n setPendingModeChange(null);\n }}\n />\n\n <InlineSelect\n label={t('components.query-header.label-service', 'Service')}\n value={query.queryType === AzureQueryType.TraceExemplar ? AzureQueryType.AzureTraces : query.queryType}\n placeholder={t('components.query-header.placeholder-service', 'Service...')}\n allowCustomValue\n options={queryTypes}\n onChange={handleChange}\n />\n {query.queryType === AzureQueryType.LogAnalytics && query.azureLogAnalytics?.mode === LogsEditorMode.Raw && (\n <Button\n aria-label={t('components.query-header.aria-label-kick-start', 'Azure logs kick start your query button')}\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => {\n setAzureLogsCheatSheetModalOpen((prev) => !prev);\n reportInteraction('grafana_azure_logs_query_patterns_opened', {\n version: 'v2',\n editorMode: query.azureLogAnalytics,\n });\n }}\n >\n <Trans i18nKey=\"components.query-header.button-kick-start-your-query\">Kick start your query</Trans>\n </Button>\n )}\n <FlexItem grow={1} />\n {query.queryType === AzureQueryType.LogAnalytics && !!config.featureToggles.azureMonitorLogsBuilderEditor && (\n <RadioButtonGroup\n size=\"sm\"\n options={EDITOR_MODES}\n value={query.azureLogAnalytics?.mode || LogsEditorMode.Builder}\n onChange={onLogsModeChange}\n data-testid=\"azure-query-header-logs-radio-button\"\n />\n )}\n {query.azureLogAnalytics?.mode === LogsEditorMode.Builder &&\n !!config.featureToggles.azureMonitorLogsBuilderEditor &&\n app !== CoreApp.Explore && (\n <Button\n variant=\"primary\"\n icon={isLoading ? 'spinner' : 'play'}\n size=\"sm\"\n onClick={onRunQuery}\n data-testid={selectors.components.queryEditor.logsQueryEditor.runQuery.button}\n >\n <Trans i18nKey=\"components.query-header.button-run-query\">Run query</Trans>\n </Button>\n )}\n </EditorHeader>\n </span>\n );\n};\n","import deepEqual from 'fast-deep-equal';\nimport { defaults } from 'lodash';\nimport { useEffect, useMemo } from 'react';\n\nimport { AzureMonitorQuery, AzureQueryType, ResultFormat } from '../../types/query';\nimport migrateQuery from '../../utils/migrateQuery';\n\nconst DEFAULT_QUERY = {\n queryType: AzureQueryType.AzureMonitor,\n};\n\nconst transformExemplarQuery = (query: AzureMonitorQuery, defaultSubscriptionId: string) => {\n if (query.queryType === AzureQueryType.TraceExemplar && query.query !== '' && !query.azureTraces) {\n query.azureTraces = {\n operationId: query.query,\n resultFormat: ResultFormat.Trace,\n resources: [`/subscriptions/${defaultSubscriptionId}`],\n };\n }\n\n return query;\n};\n\nconst prepareQuery = (query: AzureMonitorQuery, defaultSubscriptionId: string) => {\n // Note: _.defaults does not apply default values deeply.\n const withDefaults = defaults({}, query, DEFAULT_QUERY);\n const transformedQuery = transformExemplarQuery(withDefaults, defaultSubscriptionId);\n const migratedQuery = migrateQuery(transformedQuery);\n\n // If we didn't make any changes to the object, then return the original object to keep the\n // identity the same, and not trigger any other useEffects or anything.\n return deepEqual(migratedQuery, query) ? query : migratedQuery;\n};\n\n/**\n * Returns queries with some defaults + migrations, and calls onChange function to notify if it changes\n */\nconst usePreparedQuery = (\n query: AzureMonitorQuery,\n onChangeQuery: (newQuery: AzureMonitorQuery) => void,\n defaultSubscriptionId: string\n) => {\n const preparedQuery = useMemo(() => prepareQuery(query, defaultSubscriptionId), [query, defaultSubscriptionId]);\n\n useEffect(() => {\n if (preparedQuery !== query) {\n onChangeQuery(preparedQuery);\n }\n }, [preparedQuery, query, onChangeQuery]);\n\n return preparedQuery;\n};\n\nexport default usePreparedQuery;\n","import { debounce } from 'lodash';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { CoreApp, QueryEditorProps } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Alert, CodeEditor, Space, TextLink } from '@grafana/ui';\n\nimport AzureMonitorDatasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorQuery, AzureQueryType } from '../../types/query';\nimport { AzureMonitorDataSourceJsonData, AzureMonitorErrorish, AzureMonitorOption } from '../../types/types';\nimport useLastError from '../../utils/useLastError';\nimport ArgQueryEditor from '../ArgQueryEditor/ArgQueryEditor';\nimport { AzureCheatSheetModal } from '../LogsQueryEditor/AzureCheatSheetModal';\nimport LogsQueryEditor from '../LogsQueryEditor/LogsQueryEditor';\nimport NewMetricsQueryEditor from '../MetricsQueryEditor/MetricsQueryEditor';\nimport TracesQueryEditor from '../TracesQueryEditor/TracesQueryEditor';\n\nimport { QueryHeader } from './QueryHeader';\nimport usePreparedQuery from './usePreparedQuery';\n\nexport type AzureMonitorQueryEditorProps = QueryEditorProps<\n AzureMonitorDatasource,\n AzureMonitorQuery,\n AzureMonitorDataSourceJsonData\n>;\n\nconst QueryEditor = ({\n app,\n query: baseQuery,\n datasource,\n onChange,\n onRunQuery: baseOnRunQuery,\n data,\n range,\n}: AzureMonitorQueryEditorProps) => {\n const [errorMessage, setError] = useLastError();\n const onRunQuery = useMemo(() => debounce(baseOnRunQuery, 500), [baseOnRunQuery]);\n const [azureLogsCheatSheetModalOpen, setAzureLogsCheatSheetModalOpen] = useState(false);\n const [defaultSubscriptionId, setDefaultSubscriptionId] = useState('');\n\n const onQueryChange = useCallback(\n (newQuery: AzureMonitorQuery) => {\n onChange(newQuery);\n onRunQuery();\n },\n [onChange, onRunQuery]\n );\n\n useEffectOnce(() => {\n if (baseQuery.queryType === AzureQueryType.TraceExemplar) {\n datasource.azureLogAnalyticsDatasource.getDefaultOrFirstSubscription().then((subscription) => {\n setDefaultSubscriptionId(subscription || '');\n });\n }\n });\n\n const query = usePreparedQuery(baseQuery, onQueryChange, defaultSubscriptionId);\n\n const subscriptionId = query.subscription || datasource.azureMonitorDatasource.defaultSubscriptionId;\n const basicLogsEnabled =\n datasource.azureMonitorDatasource.basicLogsEnabled &&\n app !== CoreApp.UnifiedAlerting &&\n app !== CoreApp.CloudAlerting;\n const variableOptionGroup = {\n label: 'Template Variables',\n options: datasource.getVariables().map((v) => ({ label: v, value: v })),\n };\n\n // Allow authproxy as it may not be clear if an authproxy user is authenticated by Azure\n const isAzureAuthenticated =\n config.bootData.user.authenticatedBy === 'oauth_azuread' || config.bootData.user.authenticatedBy === 'authproxy';\n if (datasource.currentUserAuth) {\n if (\n app === CoreApp.UnifiedAlerting &&\n (!config.azure.userIdentityFallbackCredentialsEnabled || !datasource.currentUserAuthFallbackAvailable)\n ) {\n return <UserAuthFallbackAlert />;\n }\n if (!isAzureAuthenticated) {\n return <UserAuthAlert />;\n }\n }\n\n return (\n <div data-testid=\"azure-monitor-query-editor\">\n <AzureCheatSheetModal\n datasource={datasource.azureLogAnalyticsDatasource}\n isOpen={azureLogsCheatSheetModalOpen}\n onClose={() => setAzureLogsCheatSheetModalOpen(false)}\n onChange={(a) => onChange({ ...a, queryType: AzureQueryType.LogAnalytics })}\n />\n <QueryHeader\n query={query}\n onQueryChange={onQueryChange}\n setAzureLogsCheatSheetModalOpen={setAzureLogsCheatSheetModalOpen}\n onRunQuery={baseOnRunQuery}\n data={data}\n app={app}\n />\n <EditorForQueryType\n data={data}\n subscriptionId={subscriptionId}\n basicLogsEnabled={basicLogsEnabled ?? false}\n query={query}\n datasource={datasource}\n onChange={onQueryChange}\n onQueryChange={onChange}\n variableOptionGroup={variableOptionGroup}\n setError={setError}\n range={range}\n />\n {errorMessage && (\n <>\n <Space v={2} />\n <Alert\n severity=\"error\"\n title={t(\n 'components.query-editor.alert-error-occurred',\n 'An error occurred while requesting metadata from Azure Monitor'\n )}\n >\n {errorMessage instanceof Error ? errorMessage.message : errorMessage}\n </Alert>\n </>\n )}\n </div>\n );\n};\n\ninterface EditorForQueryTypeProps extends Omit<AzureMonitorQueryEditorProps, 'onRunQuery'> {\n subscriptionId?: string;\n basicLogsEnabled: boolean;\n variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n // Used to update the query without running it\n onQueryChange: (newQuery: AzureMonitorQuery) => void;\n}\n\nconst EditorForQueryType = ({\n data,\n subscriptionId,\n basicLogsEnabled,\n query,\n datasource,\n variableOptionGroup,\n onChange,\n setError,\n onQueryChange,\n range,\n}: EditorForQueryTypeProps) => {\n switch (query.queryType) {\n case AzureQueryType.AzureMonitor:\n return (\n <NewMetricsQueryEditor\n data={data}\n query={query}\n datasource={datasource}\n onChange={onChange}\n variableOptionGroup={variableOptionGroup}\n setError={setError}\n />\n );\n\n case AzureQueryType.LogAnalytics:\n return (\n <LogsQueryEditor\n data={data}\n subscriptionId={subscriptionId}\n basicLogsEnabled={basicLogsEnabled}\n query={query}\n datasource={datasource}\n onChange={onChange}\n variableOptionGroup={variableOptionGroup}\n setError={setError}\n timeRange={range}\n onQueryChange={onQueryChange}\n />\n );\n\n case AzureQueryType.AzureResourceGraph:\n return (\n <ArgQueryEditor\n subscriptionId={subscriptionId}\n query={query}\n datasource={datasource}\n onChange={onChange}\n variableOptionGroup={variableOptionGroup}\n setError={setError}\n />\n );\n\n case AzureQueryType.AzureTraces:\n case AzureQueryType.TraceExemplar:\n return (\n <TracesQueryEditor\n subscriptionId={subscriptionId}\n query={query}\n datasource={datasource}\n onChange={onChange}\n variableOptionGroup={variableOptionGroup}\n setError={setError}\n range={range}\n />\n );\n\n default:\n const type = query.queryType as unknown;\n return (\n <Alert title={t('components.editor-for-query-type.title-unknown-query-type', 'Unknown query type')}>\n {(type === 'Application Insights' || type === 'Insights Analytics') && (\n <>\n <Trans i18nKey=\"components.editor-for-query-type.body-unknown-query-type\">\n {{ type }} was deprecated in Grafana 9. See the{' '}\n <TextLink\n href=\"https://grafana.com/docs/grafana/latest/datasources/azure-monitor/#application-insights-and-insights-analytics-removed\"\n external\n >\n deprecation notice\n </TextLink>{' '}\n to get more information about how to migrate your queries. This is the current query definition:\n </Trans>\n <CodeEditor height=\"200px\" readOnly language=\"json\" value={JSON.stringify(query, null, 4)} />\n </>\n )}\n </Alert>\n );\n }\n};\n\nconst UserAuthAlert = () => {\n return (\n <Alert\n title={t('components.user-auth-alert.title-unsupported-auth', 'Unsupported authentication provider')}\n data-testid={selectors.components.queryEditor.userAuthAlert}\n >\n <Trans i18nKey=\"components.user-auth-alert.body-unsupported-auth\">\n Usage of this data source requires you to be authenticated via Azure Entra (formerly Azure Active Directory).\n Please review the{' '}\n <TextLink\n href=\"https://grafana.com/docs/grafana/latest/datasources/azure-monitor/#configure-current-user-authentication\"\n external\n >\n documentation\n </TextLink>{' '}\n for more information.\n </Trans>\n </Alert>\n );\n};\n\nconst UserAuthFallbackAlert = () => {\n return (\n <Alert\n title={t(\n 'components.user-auth-fallback-alert.title-no-fallback-credentials',\n 'No fallback credentials available'\n )}\n data-testid={selectors.components.queryEditor.userAuthFallbackAlert}\n >\n <Trans i18nKey=\"components.user-auth-fallback-alert.body-no-fallback-credentials\">\n Data source backend features (such as alerting) require service credentials to function. This data source is\n configured without service credential fallback, or the fallback functionality is disabled. Please review the{' '}\n <TextLink\n href=\"https://grafana.com/docs/grafana/latest/datasources/azure-monitor/#configure-current-user-authentication\"\n external\n >\n documentation\n </TextLink>{' '}\n for more information.\n </Trans>\n </Alert>\n );\n};\n\nexport default QueryEditor;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__2007__;","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","import {\n AzureCredentials,\n getDatasourceCredentials,\n getDefaultAzureCloud,\n getClientSecret,\n resolveLegacyCloudName,\n updateDatasourceCredentials,\n} from '@grafana/azure-sdk';\nimport { config } from '@grafana/runtime';\n\nimport { AzureMonitorDataSourceInstanceSettings, AzureMonitorDataSourceSettings } from './types/types';\n\nexport function getCredentials(\n options: AzureMonitorDataSourceSettings | AzureMonitorDataSourceInstanceSettings\n): AzureCredentials {\n // Try to get the credentials from the datasource settings,\n // If not found, return the legacy azure monitor credentials if they exist or fallback to default credentials\n const creds = getDatasourceCredentials(options);\n if (creds) {\n return creds;\n }\n\n return getLegacyCredentials(options) || getDefaultCredentials();\n}\n\nexport function updateCredentials(\n options: AzureMonitorDataSourceSettings,\n credentials: AzureCredentials\n): AzureMonitorDataSourceSettings {\n return updateDatasourceCredentials(options, credentials);\n}\n\nfunction getLegacyCredentials(\n options: AzureMonitorDataSourceSettings | AzureMonitorDataSourceInstanceSettings\n): AzureCredentials | undefined {\n try {\n // If authentication type isn't explicitly specified and datasource has client credentials,\n // then this is existing datasource which is configured for app registration (client secret)\n if (\n options.jsonData.azureAuthType === 'clientsecret' ||\n (!options.jsonData.azureAuthType && options.jsonData.tenantId && options.jsonData.clientId)\n ) {\n return {\n authType: 'clientsecret',\n tenantId: options.jsonData.tenantId,\n clientId: options.jsonData.clientId,\n azureCloud: resolveLegacyCloudName(options.jsonData.cloudName) || getDefaultAzureCloud(),\n clientSecret: getClientSecret(options),\n };\n }\n\n // If the authentication type is not set, then no legacy credentials exist so return undefined\n if (!options.jsonData.azureAuthType) {\n return undefined;\n }\n\n return { authType: options.jsonData.azureAuthType };\n } catch (e) {\n if (e instanceof Error) {\n console.error('Unable to restore legacy credentials: %s', e.message);\n }\n return undefined;\n }\n}\n\nfunction getDefaultCredentials(): AzureCredentials {\n if (config.azure.managedIdentityEnabled) {\n return { authType: 'msi' };\n } else if (config.azure.workloadIdentityEnabled) {\n return { authType: 'workloadidentity' };\n } else {\n return { authType: 'clientsecret', azureCloud: getDefaultAzureCloud() };\n }\n}\n","import { cx, css } from '@emotion/css';\nimport { useStyles2 } from '@grafana/ui';\nimport React__default, { Children, isValidElement, cloneElement } from 'react';\n\nconst InputGroup = ({ children }) => {\n const styles = useStyles2(getStyles);\n const modifiedChildren = Children.map(children, (child) => {\n if (isValidElement(child) && child.props.invalid) {\n return cloneElement(child, { className: cx(child.props.className, styles.invalidChild) });\n }\n return child;\n });\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, modifiedChildren);\n};\nconst borderPriority = [\n \"\",\n // lowest priority\n \"base\",\n \"hovered\",\n \"invalid\",\n \"focused\"\n // highest priority\n];\nconst getStyles = () => ({\n root: css({\n display: \"flex\",\n // Style the direct children of the component\n \"> *\": {\n \"&:not(:first-child)\": {\n // Negative margin hides the double-border on adjacent selects\n marginLeft: -1\n },\n \"&:first-child\": {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0\n },\n \"&:last-child\": {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0\n },\n \"&:not(:first-child):not(:last-child)\": {\n borderRadius: 0\n },\n //\n position: \"relative\",\n zIndex: borderPriority.indexOf(\"base\"),\n // Adjacent borders are overlapping, so raise children up when hovering etc\n // so all that child's borders are visible.\n \"&:hover\": {\n zIndex: borderPriority.indexOf(\"hovered\")\n },\n \"&:focus-within\": {\n zIndex: borderPriority.indexOf(\"focused\")\n }\n }\n }),\n invalidChild: css({\n zIndex: borderPriority.indexOf(\"invalid\")\n })\n});\n\nexport { InputGroup };\n//# sourceMappingURL=InputGroup.js.map\n","import { escapeRegExp } from 'lodash';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport {\n BuilderQueryEditorExpressionType,\n BuilderQueryEditorGroupByExpression,\n BuilderQueryEditorOrderByExpression,\n BuilderQueryEditorPropertyExpression,\n BuilderQueryEditorPropertyType,\n BuilderQueryEditorReduceExpression,\n BuilderQueryEditorWhereExpression,\n BuilderQueryExpression,\n} from '../../dataquery.gen';\nimport { AzureLogAnalyticsMetadataColumn } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\n\nconst DYNAMIC_TYPE_ARRAY_DELIMITER = '[\"`indexer`\"]';\nexport const inputFieldSize = 20;\n\nexport const valueToDefinition = (name: string) => {\n return {\n value: name,\n label: name.replace(new RegExp(escapeRegExp(DYNAMIC_TYPE_ARRAY_DELIMITER), 'g'), '[ ]'),\n };\n};\n\nexport const DEFAULT_LOGS_BUILDER_QUERY: BuilderQueryExpression = {\n columns: { columns: [], type: BuilderQueryEditorExpressionType.Property },\n from: {\n type: BuilderQueryEditorExpressionType.Property,\n property: { type: BuilderQueryEditorPropertyType.String, name: '' },\n },\n groupBy: { expressions: [], type: BuilderQueryEditorExpressionType.Group_by },\n reduce: { expressions: [], type: BuilderQueryEditorExpressionType.Reduce },\n where: { expressions: [], type: BuilderQueryEditorExpressionType.And },\n limit: 1000,\n};\n\nexport const OPERATORS_BY_TYPE: Record<string, Array<SelectableValue<string>>> = {\n string: [\n { label: '==', value: '==' },\n { label: '!=', value: '!=' },\n { label: 'contains', value: 'contains' },\n { label: '!contains', value: '!contains' },\n { label: 'startswith', value: 'startswith' },\n { label: 'endswith', value: 'endswith' },\n ],\n int: [\n { label: '==', value: '==' },\n { label: '!=', value: '!=' },\n { label: '>', value: '>' },\n { label: '<', value: '<' },\n { label: '>=', value: '>=' },\n { label: '<=', value: '<=' },\n ],\n datetime: [\n { label: 'before', value: '<' },\n { label: 'after', value: '>' },\n { label: 'between', value: 'between' },\n ],\n bool: [\n { label: '==', value: '==' },\n { label: '!=', value: '!=' },\n ],\n};\n\nexport const toOperatorOptions = (type: string): Array<SelectableValue<string>> => {\n return OPERATORS_BY_TYPE[type] || OPERATORS_BY_TYPE.string;\n};\n\nexport const removeExtraQuotes = (value: string): string => {\n let strValue = String(value).trim();\n if ((strValue.startsWith(\"'\") && strValue.endsWith(\"'\")) || (strValue.startsWith('\"') && strValue.endsWith('\"'))) {\n return strValue.slice(1, -1);\n }\n return strValue;\n};\n\nexport interface BuildAndUpdateOptions {\n query: AzureMonitorQuery;\n onQueryUpdate: (newQuery: AzureMonitorQuery) => void;\n allColumns: AzureLogAnalyticsMetadataColumn[];\n limit?: number;\n reduce?: BuilderQueryEditorReduceExpression[];\n where?: BuilderQueryEditorWhereExpression[];\n fuzzySearch?: BuilderQueryEditorWhereExpression[];\n groupBy?: BuilderQueryEditorGroupByExpression[];\n orderBy?: BuilderQueryEditorOrderByExpression[];\n columns?: string[];\n from?: BuilderQueryEditorPropertyExpression;\n basicLogsQuery?: boolean;\n}\n\nexport const aggregateOptions = [\n { label: 'sum', value: 'sum' },\n { label: 'avg', value: 'avg' },\n { label: 'percentile', value: 'percentile' },\n { label: 'count', value: 'count' },\n { label: 'min', value: 'min' },\n { label: 'max', value: 'max' },\n { label: 'dcount', value: 'dcount' },\n { label: 'stdev', value: 'stdev' },\n];\n","import React, { useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { InputGroup, AccessoryButton } from '@grafana/plugin-ui';\nimport { Select, Label, Input } from '@grafana/ui';\n\nimport {\n BuilderQueryEditorExpressionType,\n BuilderQueryEditorPropertyType,\n BuilderQueryEditorReduceExpression,\n} from '../../dataquery.gen';\n\nimport { aggregateOptions, inputFieldSize } from './utils';\n\ninterface AggregateItemProps {\n aggregate: BuilderQueryEditorReduceExpression;\n columns: Array<SelectableValue<string>>;\n onChange: (item: BuilderQueryEditorReduceExpression) => void;\n onDelete: () => void;\n templateVariableOptions: SelectableValue<string>;\n}\n\nconst AggregateItem: React.FC<AggregateItemProps> = ({\n aggregate,\n onChange,\n onDelete,\n columns,\n templateVariableOptions,\n}) => {\n const isPercentile = aggregate.reduce?.name === 'percentile';\n const isCountAggregate = aggregate.reduce?.name?.includes('count');\n\n const [percentileValue, setPercentileValue] = useState(aggregate.parameters?.[0]?.value || '');\n const [columnValue, setColumnValue] = useState(\n isPercentile ? aggregate.parameters?.[1]?.value || '' : aggregate.property?.name || ''\n );\n\n const safeTemplateVariables = Array.isArray(templateVariableOptions)\n ? templateVariableOptions\n : [templateVariableOptions];\n\n const selectableOptions = columns.concat(safeTemplateVariables);\n\n const buildPercentileParams = (percentile: string, column: string) => [\n {\n type: BuilderQueryEditorExpressionType.Function_parameter,\n fieldType: BuilderQueryEditorPropertyType.Number,\n value: percentile,\n },\n {\n type: BuilderQueryEditorExpressionType.Function_parameter,\n fieldType: BuilderQueryEditorPropertyType.String,\n value: column,\n },\n ];\n\n const updateAggregate = (updates: Partial<BuilderQueryEditorReduceExpression>) => {\n const base: BuilderQueryEditorReduceExpression = {\n ...aggregate,\n ...updates,\n };\n\n onChange(base);\n };\n\n const handleAggregateChange = (funcName?: string) => {\n updateAggregate({\n reduce: { name: funcName || '', type: BuilderQueryEditorPropertyType.Function },\n });\n };\n\n const handlePercentileChange = (value?: string) => {\n const newValue = value || '';\n setPercentileValue(newValue);\n\n const percentileParams = buildPercentileParams(newValue, columnValue);\n updateAggregate({ parameters: percentileParams });\n };\n\n const handleColumnChange = (value?: string) => {\n const newCol = value || '';\n setColumnValue(newCol);\n\n if (isPercentile) {\n const percentileParams = buildPercentileParams(percentileValue, newCol);\n updateAggregate({\n parameters: percentileParams,\n property: {\n name: newCol,\n type: BuilderQueryEditorPropertyType.String,\n },\n });\n } else {\n updateAggregate({\n property: {\n name: newCol,\n type: BuilderQueryEditorPropertyType.String,\n },\n });\n }\n };\n\n return (\n <InputGroup>\n <Select\n aria-label={t('components.aggregate-item.aria-label-aggregate-function', 'Aggregate function')}\n width={inputFieldSize}\n value={aggregate.reduce?.name ? { label: aggregate.reduce.name, value: aggregate.reduce.name } : null}\n options={aggregateOptions}\n onChange={(e) => handleAggregateChange(e.value)}\n />\n\n {isPercentile ? (\n <>\n <Input\n type=\"number\"\n min={0}\n max={100}\n step={1}\n value={percentileValue ?? ''}\n width={inputFieldSize}\n onChange={(e) => {\n const val = Number(e.currentTarget.value);\n if (!isNaN(val) && val >= 0 && val <= 100) {\n handlePercentileChange(val.toString());\n }\n }}\n />\n <Label style={{ margin: '9px 9px 0 9px' }}>\n <Trans i18nKey=\"components.aggregate-item.label-percentile\">OF</Trans>\n </Label>\n </>\n ) : (\n <></>\n )}\n\n {!isCountAggregate ? (\n <Select\n aria-label={t('components.aggregate-item.aria-label-column', 'Column')}\n width={inputFieldSize}\n value={columnValue ? { label: columnValue, value: columnValue } : null}\n options={selectableOptions}\n onChange={(e) => handleColumnChange(e.value)}\n />\n ) : (\n <></>\n )}\n\n <AccessoryButton\n aria-label={t('components.aggregate-item.aria-label-remove', 'Remove')}\n icon=\"times\"\n variant=\"secondary\"\n onClick={onDelete}\n />\n </InputGroup>\n );\n};\n\nexport default AggregateItem;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorField, EditorFieldGroup, EditorList, EditorRow } from '@grafana/plugin-ui';\n\nimport { BuilderQueryEditorReduceExpression } from '../../dataquery.gen';\nimport { AzureLogAnalyticsMetadataColumn } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\n\nimport AggregateItem from './AggregateItem';\nimport { BuildAndUpdateOptions } from './utils';\n\ninterface AggregateSectionProps {\n query: AzureMonitorQuery;\n allColumns: AzureLogAnalyticsMetadataColumn[];\n templateVariableOptions: SelectableValue<string>;\n buildAndUpdateQuery: (options: Partial<BuildAndUpdateOptions>) => void;\n}\nexport const AggregateSection: React.FC<AggregateSectionProps> = ({\n query,\n allColumns,\n buildAndUpdateQuery,\n templateVariableOptions,\n}) => {\n const builderQuery = query.azureLogAnalytics?.builderQuery;\n const [aggregates, setAggregates] = useState<BuilderQueryEditorReduceExpression[]>(\n builderQuery?.reduce?.expressions || []\n );\n const prevTable = useRef<string | null>(builderQuery?.from?.property.name || null);\n const hasLoadedAggregates = useRef(false);\n\n useEffect(() => {\n const currentTable = builderQuery?.from?.property.name || null;\n\n if (prevTable.current !== currentTable || builderQuery?.reduce?.expressions.length === 0) {\n setAggregates([]);\n hasLoadedAggregates.current = false;\n prevTable.current = currentTable;\n }\n }, [builderQuery]);\n\n const availableColumns: Array<SelectableValue<string>> = builderQuery?.columns?.columns?.length\n ? builderQuery.columns.columns.map((col) => ({ label: col, value: col }))\n : allColumns.map((col) => ({ label: col.name, value: col.name }));\n\n const onChange = (newItems: Array<Partial<BuilderQueryEditorReduceExpression>>) => {\n setAggregates(newItems);\n\n buildAndUpdateQuery({\n reduce: newItems,\n });\n };\n\n const onDeleteAggregate = (aggregateToDelete: BuilderQueryEditorReduceExpression) => {\n setAggregates((prevAggregates) => {\n const updatedAggregates = prevAggregates.filter(\n (agg) =>\n agg.property?.name !== aggregateToDelete.property?.name || agg.reduce?.name !== aggregateToDelete.reduce?.name\n );\n\n buildAndUpdateQuery({\n reduce: updatedAggregates.length === 0 ? [] : updatedAggregates,\n });\n\n return updatedAggregates;\n });\n };\n\n return (\n <div data-testid=\"aggregate-section\">\n <EditorRow>\n <EditorFieldGroup>\n <EditorField\n label={t('components.aggregate-section.label-aggregate', 'Aggregate')}\n optional={true}\n tooltip={t(\n 'components.aggregate-section.tooltip-aggregate',\n 'Perform calculations across rows of data, such as count, sum, average, minimum, maximum, standard deviation or percentiles.'\n )}\n >\n <EditorList\n items={aggregates}\n onChange={onChange}\n renderItem={makeRenderAggregate(availableColumns, onDeleteAggregate, templateVariableOptions)}\n />\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n </div>\n );\n};\n\nfunction makeRenderAggregate(\n availableColumns: Array<SelectableValue<string>>,\n onDeleteAggregate: (aggregate: BuilderQueryEditorReduceExpression) => void,\n templateVariableOptions: SelectableValue<string>\n) {\n return function renderAggregate(\n item: BuilderQueryEditorReduceExpression,\n onChange: (item: BuilderQueryEditorReduceExpression) => void\n ) {\n return (\n <AggregateItem\n aggregate={item}\n onChange={onChange}\n onDelete={() => onDeleteAggregate(item)}\n columns={availableColumns}\n templateVariableOptions={templateVariableOptions}\n />\n );\n };\n}\n","import {\n BuilderQueryEditorWhereExpression,\n BuilderQueryEditorWhereExpressionArray,\n BuilderQueryEditorWhereExpressionItems,\n BuilderQueryExpression,\n} from '../../dataquery.gen';\n\nconst isNestedExpression = (\n exp: BuilderQueryEditorWhereExpression | BuilderQueryEditorWhereExpressionItems\n): exp is BuilderQueryEditorWhereExpressionItems =>\n 'operator' in exp &&\n 'property' in exp &&\n typeof exp.operator?.name === 'string' &&\n typeof exp.property?.name === 'string';\n\nconst buildCondition = (\n exp: BuilderQueryEditorWhereExpression | BuilderQueryEditorWhereExpressionItems\n): string | undefined => {\n if ('expressions' in exp && Array.isArray(exp.expressions)) {\n const isGroupOfFilters = exp.expressions.every((e) => 'operator' in e && 'property' in e);\n\n const nested = exp.expressions.map(buildCondition).filter((c): c is string => Boolean(c));\n\n if (nested.length === 0) {\n return;\n }\n\n const joiner = isGroupOfFilters ? ' or ' : ' and ';\n const joined = nested.join(joiner);\n\n return nested.length > 1 ? `(${joined})` : joined;\n }\n\n if (isNestedExpression(exp)) {\n const { name: op, value } = exp.operator;\n const { name: prop } = exp.property;\n const escapedValue = String(value).replace(/'/g, \"''\");\n return op === '$__timeFilter' ? `$__timeFilter(${prop})` : `${prop} ${op} '${escapedValue}'`;\n }\n\n return;\n};\n\nexport const appendWhere = (\n phrases: string[],\n timeFilter?: BuilderQueryEditorWhereExpressionArray,\n fuzzySearch?: BuilderQueryEditorWhereExpressionArray,\n where?: BuilderQueryEditorWhereExpressionArray\n): void => {\n const groups = [timeFilter, fuzzySearch, where];\n\n groups.forEach((group) => {\n group?.expressions.forEach((exp) => {\n const condition = buildCondition(exp);\n if (condition) {\n phrases.push(`where ${condition}`);\n }\n });\n });\n};\n\nconst appendProject = (builderQuery: BuilderQueryExpression, phrases: string[]) => {\n const selectedColumns = builderQuery.columns?.columns || [];\n if (selectedColumns.length > 0) {\n phrases.push(`project ${selectedColumns.join(', ')}`);\n }\n};\n\nconst appendSummarize = (builderQuery: BuilderQueryExpression, phrases: string[]) => {\n const summarizeAlreadyAdded = phrases.some((phrase) => phrase.startsWith('summarize'));\n if (summarizeAlreadyAdded) {\n return;\n }\n\n const reduceExprs = builderQuery.reduce?.expressions ?? [];\n const groupBy = builderQuery.groupBy?.expressions?.map((exp) => exp.property?.name).filter(Boolean) ?? [];\n\n const summarizeParts = reduceExprs\n .map((expr) => {\n if (!expr.reduce?.name) {\n return;\n }\n\n const func = expr.reduce.name;\n\n if (func === 'percentile') {\n const percentileValue = expr.parameters?.[0]?.value;\n const column = expr.parameters?.[1]?.value ?? expr.property?.name ?? '';\n return column ? `percentile(${percentileValue}, ${column})` : null;\n }\n\n const column = expr.property?.name ?? '';\n return func === 'count' ? 'count()' : column ? `${func}(${column})` : func;\n })\n .filter(Boolean);\n\n if (summarizeParts.length === 0 && groupBy.length === 0) {\n return;\n }\n\n const summarizeClause =\n summarizeParts.length > 0\n ? `summarize ${summarizeParts.join(', ')}${groupBy.length > 0 ? ` by ${groupBy.join(', ')}` : ''}`\n : `summarize by ${groupBy.join(', ')}`;\n\n phrases.push(summarizeClause);\n};\n\nconst appendOrderBy = (builderQuery: BuilderQueryExpression, phrases: string[]) => {\n const orderBy = builderQuery.orderBy?.expressions || [];\n if (!orderBy.length) {\n return;\n }\n\n const clauses = orderBy.map((order) => `${order.property?.name} ${order.order}`).filter(Boolean);\n if (clauses.length > 0) {\n phrases.push(`order by ${clauses.join(', ')}`);\n }\n};\n\nconst appendLimit = (builderQuery: BuilderQueryExpression, phrases: string[]) => {\n if (builderQuery.limit && builderQuery.limit > 0) {\n phrases.push(`limit ${builderQuery.limit}`);\n }\n};\n\nconst toQuery = (builderQuery: BuilderQueryExpression): string => {\n const { from, timeFilter, fuzzySearch, where } = builderQuery;\n if (!from?.property?.name) {\n return '';\n }\n\n const phrases: string[] = [];\n phrases.push(from.property.name);\n\n appendWhere(phrases, timeFilter, fuzzySearch, where);\n appendProject(builderQuery, phrases);\n appendSummarize(builderQuery, phrases);\n appendOrderBy(builderQuery, phrases);\n appendLimit(builderQuery, phrases);\n\n return phrases.join('\\n| ');\n};\n\nexport const AzureMonitorKustoQueryBuilder = {\n toQuery,\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Combobox, ComboboxOption, Label, Select } from '@grafana/ui';\n\nimport { BuilderQueryEditorWhereExpressionItems } from '../../dataquery.gen';\n\nimport { inputFieldSize, toOperatorOptions, valueToDefinition } from './utils';\n\ninterface FilterItemProps {\n filter: BuilderQueryEditorWhereExpressionItems;\n filterIndex: number;\n groupIndex: number;\n usedColumns: string[];\n selectableOptions: Array<SelectableValue<string>>;\n onChange: (groupIndex: number, field: 'property' | 'operator' | 'value', value: string, filterIndex: number) => void;\n onDelete: (groupIndex: number, filterIndex: number) => void;\n getFilterValues: (\n filter: BuilderQueryEditorWhereExpressionItems,\n inputValue: string\n ) => Promise<Array<ComboboxOption<string>>>;\n showOr: boolean;\n}\n\nexport const FilterItem: React.FC<FilterItemProps> = ({\n filter,\n filterIndex,\n groupIndex,\n usedColumns,\n selectableOptions,\n onChange,\n onDelete,\n getFilterValues,\n showOr,\n}) => {\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <Select\n aria-label={t('components.filter-item.aria-label-column', 'Column')}\n width={inputFieldSize}\n value={valueToDefinition(filter.property.name)}\n options={selectableOptions.filter((opt) => !usedColumns.includes(opt.value!))}\n onChange={(e) => e.value && onChange(groupIndex, 'property', e.value, filterIndex)}\n />\n <Select\n aria-label={t('components.filter-item.aria-label-operator', 'Operator')}\n width={12}\n value={{ label: filter.operator.name, value: filter.operator.name }}\n options={toOperatorOptions('string')}\n onChange={(e) => e.value && onChange(groupIndex, 'operator', e.value, filterIndex)}\n />\n <Combobox\n aria-label={t('components.filter-item.aria-label-column-value', 'Column value')}\n value={\n filter.operator.value\n ? {\n label: String(filter.operator.value),\n value: String(filter.operator.value),\n }\n : null\n }\n options={(inputValue: string) => getFilterValues(filter, inputValue)}\n onChange={(e) => e.value && onChange(groupIndex, 'value', String(e.value), filterIndex)}\n width={inputFieldSize}\n disabled={!filter.property?.name}\n />\n <Button\n aria-label={t('components.filter-item.aria-label-remove-filter', 'Remove filter')}\n variant=\"secondary\"\n icon=\"times\"\n onClick={() => onDelete(groupIndex, filterIndex)}\n />\n {showOr && (\n <Label style={{ padding: '9px 14px' }}>\n <Trans i18nKey=\"components.filter-item.label-or\">OR</Trans>\n </Label>\n )}\n </div>\n );\n};\n","import { css } from '@emotion/css';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { lastValueFrom } from 'rxjs';\n\nimport { CoreApp, getDefaultTimeRange, SelectableValue, TimeRange } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { EditorField, EditorFieldGroup, EditorRow, InputGroup } from '@grafana/plugin-ui';\nimport { Button, ComboboxOption, Label, useStyles2 } from '@grafana/ui';\n\nimport {\n AzureQueryType,\n BuilderQueryEditorExpressionType,\n BuilderQueryEditorPropertyType,\n BuilderQueryEditorWhereExpression,\n BuilderQueryEditorWhereExpressionItems,\n} from '../../dataquery.gen';\nimport Datasource from '../../datasource';\nimport { AzureLogAnalyticsMetadataColumn } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\n\nimport { FilterItem } from './FilterItem';\nimport { BuildAndUpdateOptions } from './utils';\n\ninterface FilterSectionProps {\n query: AzureMonitorQuery;\n allColumns: AzureLogAnalyticsMetadataColumn[];\n buildAndUpdateQuery: (options: Partial<BuildAndUpdateOptions>) => void;\n templateVariableOptions: SelectableValue<string>;\n datasource: Datasource;\n timeRange?: TimeRange;\n}\n\nconst filterDynamicColumns = (columns: string[], allColumns: AzureLogAnalyticsMetadataColumn[]) => {\n return columns.filter((col) =>\n allColumns.some((completeCol) => completeCol.name === col && completeCol.type !== 'dynamic')\n );\n};\n\nexport const FilterSection: React.FC<FilterSectionProps> = ({\n buildAndUpdateQuery,\n query,\n allColumns,\n templateVariableOptions,\n datasource,\n timeRange,\n}) => {\n const styles = useStyles2(() => ({ filters: css({ marginBottom: '8px' }) }));\n const builderQuery = query.azureLogAnalytics?.builderQuery;\n\n const prevTable = useRef<string | null>(builderQuery?.from?.property.name || null);\n const [filters, setFilters] = useState<BuilderQueryEditorWhereExpression[]>(\n builderQuery?.where?.expressions?.map((group) => ({\n ...group,\n expressions: group.expressions ?? [],\n })) || []\n );\n const hasLoadedFilters = useRef(false);\n\n const variableOptions = Array.isArray(templateVariableOptions) ? templateVariableOptions : [templateVariableOptions];\n\n const availableColumns: Array<SelectableValue<string>> = builderQuery?.columns?.columns?.length\n ? filterDynamicColumns(builderQuery.columns.columns, allColumns).map((col) => ({ label: col, value: col }))\n : allColumns.filter((col) => col.type !== 'dynamic').map((col) => ({ label: col.name, value: col.name }));\n\n const selectableOptions = [...availableColumns, ...variableOptions];\n\n const usedColumnsInOtherGroups = (currentGroupIndex: number): string[] => {\n return filters\n .flatMap((group, idx) => (idx !== currentGroupIndex ? group.expressions : []))\n .map((exp) => exp.property.name)\n .filter(Boolean);\n };\n\n useEffect(() => {\n const currentTable = builderQuery?.from?.property.name || null;\n if (prevTable.current !== currentTable || builderQuery?.where?.expressions.length === 0) {\n setFilters([]);\n hasLoadedFilters.current = false;\n prevTable.current = currentTable;\n }\n }, [builderQuery]);\n\n const updateFilters = (updated: BuilderQueryEditorWhereExpression[]) => {\n setFilters(updated);\n buildAndUpdateQuery({ where: updated });\n };\n\n const onAddOrFilters = (\n groupIndex: number,\n field: 'property' | 'operator' | 'value',\n value: string,\n filterIndex?: number\n ) => {\n const updated = [...filters];\n const group = updated[groupIndex];\n if (!group) {\n return;\n }\n\n let filter: BuilderQueryEditorWhereExpressionItems =\n filterIndex !== undefined\n ? { ...group.expressions[filterIndex] }\n : {\n type: BuilderQueryEditorExpressionType.Operator,\n property: { name: '', type: BuilderQueryEditorPropertyType.String },\n operator: { name: '==', value: '' },\n };\n\n if (field === 'property') {\n filter.property.name = value;\n filter.operator.value = '';\n } else if (field === 'operator') {\n filter.operator.name = value;\n } else if (field === 'value') {\n filter.operator.value = value;\n }\n\n const isValid = filter.property.name && filter.operator.name && filter.operator.value !== '';\n\n if (filterIndex !== undefined) {\n group.expressions[filterIndex] = filter;\n } else {\n group.expressions.push(filter);\n }\n\n updated[groupIndex] = group;\n setFilters(updated);\n if (isValid) {\n updateFilters(updated);\n }\n };\n\n const onAddAndFilters = () => {\n const updated = [\n ...filters,\n {\n type: BuilderQueryEditorExpressionType.Or,\n expressions: [\n {\n type: BuilderQueryEditorExpressionType.Operator,\n property: { name: '', type: BuilderQueryEditorPropertyType.String },\n operator: { name: '==', value: '' },\n },\n ],\n },\n ];\n updateFilters(updated);\n };\n\n const onDeleteFilter = (groupIndex: number, filterIndex: number) => {\n const updated = [...filters];\n updated[groupIndex].expressions.splice(filterIndex, 1);\n if (updated[groupIndex].expressions.length === 0) {\n updated.splice(groupIndex, 1);\n }\n updateFilters(updated);\n };\n\n const getFilterValues = async (filter: BuilderQueryEditorWhereExpressionItems) => {\n const from = timeRange?.from?.toISOString();\n const to = timeRange?.to?.toISOString();\n const timeColumn = query.azureLogAnalytics?.timeColumn || 'TimeGenerated';\n\n const kustoQuery = `\n ${query.azureLogAnalytics?.builderQuery?.from?.property.name}\n | where ${timeColumn} >= datetime(${from}) and ${timeColumn} <= datetime(${to})\n | distinct ${filter.property.name}\n | limit 1000\n `;\n\n const results = await lastValueFrom(\n datasource.azureLogAnalyticsDatasource.query({\n requestId: 'azure-logs-builder-filter-values',\n interval: '',\n intervalMs: 0,\n scopedVars: {},\n timezone: '',\n app: CoreApp.Unknown,\n startTime: 0,\n range: timeRange || getDefaultTimeRange(),\n targets: [\n {\n refId: 'A',\n queryType: AzureQueryType.LogAnalytics,\n azureLogAnalytics: {\n query: kustoQuery,\n resources: query.azureLogAnalytics?.resources ?? [],\n },\n },\n ],\n })\n );\n\n if (results.state === 'Done') {\n const values = results.data?.[0]?.fields?.[0]?.values ?? [];\n\n return values.toArray().map(\n (v: unknown): ComboboxOption<string> => ({\n label: String(v),\n value: String(v),\n })\n );\n }\n\n return [];\n };\n\n return (\n <EditorRow>\n <EditorFieldGroup>\n <EditorField\n label={t('components.filter-section.label-filters', 'Filters')}\n optional\n tooltip={t(\n 'components.filter-section.tooltip-filters',\n 'Narrow results by applying conditions to specific columns.'\n )}\n >\n <div className={styles.filters}>\n {filters.length === 0 || filters.every((g) => g.expressions.length === 0) ? (\n <InputGroup>\n <Button\n aria-label={t('components.filter-section.aria-label-add-filter', 'Add filter')}\n variant=\"secondary\"\n onClick={onAddAndFilters}\n icon=\"plus\"\n />\n </InputGroup>\n ) : (\n <>\n {filters.map((group, groupIndex) => (\n <div key={groupIndex}>\n {groupIndex > 0 && filters[groupIndex - 1]?.expressions.length > 0 && (\n <Label style={{ padding: '9px 14px' }}>\n <Trans i18nKey=\"components.filter-section.label-and\">AND</Trans>\n </Label>\n )}\n <InputGroup>\n <>\n {group.expressions.map((filter, filterIndex) => (\n <FilterItem\n key={`${groupIndex}-${filterIndex}`}\n filter={filter}\n filterIndex={filterIndex}\n groupIndex={groupIndex}\n usedColumns={usedColumnsInOtherGroups(groupIndex)}\n selectableOptions={selectableOptions}\n onChange={onAddOrFilters}\n onDelete={onDeleteFilter}\n getFilterValues={getFilterValues}\n showOr={filterIndex < group.expressions.length - 1}\n />\n ))}\n </>\n <Button\n tooltip={t('components.filter-section.aria-label-add-or-filter', 'Add OR filter')}\n variant=\"secondary\"\n style={{ marginLeft: '15px' }}\n onClick={() => onAddOrFilters(groupIndex, 'property', '')}\n icon=\"plus\"\n />\n </InputGroup>\n </div>\n ))}\n {filters.some((g) => g.expressions.length > 0) && (\n <Button variant=\"secondary\" onClick={onAddAndFilters} style={{ marginTop: '8px' }}>\n <Trans i18nKey=\"components.filter-section.label-add-group\">Add group</Trans>\n </Button>\n )}\n </>\n )}\n </div>\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n );\n};\n","import React, { useState, useEffect, useRef } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorRow, EditorFieldGroup, EditorField, InputGroup } from '@grafana/plugin-ui';\nimport { Button, Input, Select } from '@grafana/ui';\n\nimport {\n BuilderQueryEditorExpressionType,\n BuilderQueryEditorWhereExpression,\n BuilderQueryEditorPropertyType,\n} from '../../dataquery.gen';\nimport { AzureLogAnalyticsMetadataColumn } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\n\nimport { BuildAndUpdateOptions, removeExtraQuotes } from './utils';\n\ninterface FuzzySearchProps {\n query: AzureMonitorQuery;\n allColumns: AzureLogAnalyticsMetadataColumn[];\n buildAndUpdateQuery: (options: Partial<BuildAndUpdateOptions>) => void;\n templateVariableOptions: SelectableValue<string>;\n}\n\nexport const FuzzySearch: React.FC<FuzzySearchProps> = ({\n buildAndUpdateQuery,\n query,\n allColumns,\n templateVariableOptions,\n}) => {\n const builderQuery = query.azureLogAnalytics?.builderQuery;\n const prevTable = useRef<string | null>(builderQuery?.from?.property.name || null);\n\n const [searchTerm, setSearchTerm] = useState<string>('');\n const [selectedColumn, setSelectedColumn] = useState<string>('');\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const hasLoadedFuzzySearch = useRef(false);\n\n useEffect(() => {\n const currentTable = builderQuery?.from?.property.name || null;\n\n if (prevTable.current !== currentTable) {\n setSearchTerm('');\n setSelectedColumn('');\n setIsOpen(false);\n hasLoadedFuzzySearch.current = false;\n prevTable.current = currentTable;\n }\n\n if (!hasLoadedFuzzySearch.current && builderQuery?.fuzzySearch?.expressions?.length) {\n const fuzzy = builderQuery.fuzzySearch.expressions[0];\n setSearchTerm(removeExtraQuotes(String(fuzzy.expressions[0].operator?.value ?? '')));\n setSelectedColumn(fuzzy.expressions[0].property?.name ?? '*');\n setIsOpen(true);\n hasLoadedFuzzySearch.current = true;\n }\n }, [builderQuery]);\n\n const columnOptions: Array<SelectableValue<string>> = allColumns.map((col) => ({\n label: col.name,\n value: col.name,\n }));\n\n const safeTemplateVariables: Array<SelectableValue<string>> = Array.isArray(templateVariableOptions)\n ? templateVariableOptions\n : [templateVariableOptions];\n\n const defaultColumn: SelectableValue<string> = { label: 'All Columns *', value: '*' };\n const selectableOptions = [defaultColumn, ...columnOptions, ...safeTemplateVariables];\n\n const updateFuzzySearch = (column: string, term: string) => {\n setSearchTerm(term);\n setSelectedColumn(column);\n\n const fuzzyExpression: BuilderQueryEditorWhereExpression = {\n type: BuilderQueryEditorExpressionType.Operator,\n expressions: [\n {\n type: BuilderQueryEditorExpressionType.Property,\n operator: { name: 'has', value: term },\n property: { name: column || '*', type: BuilderQueryEditorPropertyType.String },\n },\n ],\n };\n\n buildAndUpdateQuery({\n fuzzySearch: term ? [fuzzyExpression] : [],\n });\n };\n\n const onDeleteFuzzySearch = () => {\n setSearchTerm('');\n setSelectedColumn('');\n setIsOpen(false);\n\n buildAndUpdateQuery({\n fuzzySearch: [],\n });\n };\n\n return (\n <EditorRow>\n <EditorFieldGroup>\n <EditorField\n label={t('components.fuzzy-search.label-fuzzy-search', 'Fuzzy Search')}\n optional={true}\n tooltip={t(\n 'components.fuzzy-search.tooltip-fuzzy-search',\n 'Find approximate text matches with tolerance for spelling variations. By default, fuzzy search scans all columns (*) in the entire table, not just specific fields.'\n )}\n >\n <InputGroup>\n {isOpen ? (\n <>\n <Input\n className=\"width-10\"\n type=\"text\"\n placeholder={t('components.fuzzy-search.placeholder-search-team', 'Enter search term')}\n value={searchTerm}\n onChange={(e) => updateFuzzySearch(selectedColumn, e.currentTarget.value)}\n />\n <Select\n aria-label={t('components.fuzzy-search.aria-label-select-column', 'Select Column')}\n options={selectableOptions}\n value={{ label: selectedColumn || '*', value: selectedColumn || '*' }}\n onChange={(e: SelectableValue<string>) => updateFuzzySearch(e.value ?? '*', searchTerm)}\n width=\"auto\"\n />\n <Button\n aria-label={t('components.fuzzy-search.aria-label-remove-fuzzy-search', 'Remove fuzzy search')}\n variant=\"secondary\"\n icon=\"times\"\n onClick={onDeleteFuzzySearch}\n />\n </>\n ) : (\n <Button\n aria-label={t('components.fuzzy-search.aria-label-add-fuzzy-search', 'Add fuzzy search')}\n variant=\"secondary\"\n onClick={() => setIsOpen(true)}\n icon=\"plus\"\n />\n )}\n </InputGroup>\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { AccessoryButton, InputGroup } from '@grafana/plugin-ui';\nimport { Select } from '@grafana/ui';\n\nimport {\n BuilderQueryEditorGroupByExpression,\n BuilderQueryEditorPropertyType,\n BuilderQueryEditorExpressionType,\n} from '../../dataquery.gen';\n\nimport { inputFieldSize } from './utils';\n\ninterface GroupByItemProps {\n groupBy: BuilderQueryEditorGroupByExpression;\n columns: Array<SelectableValue<string>>;\n onChange: (item: BuilderQueryEditorGroupByExpression) => void;\n onDelete: () => void;\n templateVariableOptions: SelectableValue<string>;\n}\n\nexport const GroupByItem: React.FC<GroupByItemProps> = ({\n groupBy,\n onChange,\n onDelete,\n columns,\n templateVariableOptions,\n}) => {\n const columnOptions: Array<SelectableValue<string>> =\n columns.length > 0\n ? columns.map((c) => ({ label: c.label, value: c.value }))\n : [{ label: 'No columns available', value: '' }];\n\n const selectableOptions: Array<SelectableValue<string>> = [\n ...columnOptions,\n ...(templateVariableOptions\n ? Array.isArray(templateVariableOptions)\n ? templateVariableOptions\n : [templateVariableOptions]\n : []),\n ];\n\n const handleChange = (selectedValue: SelectableValue<string>) => {\n if (!selectedValue.value) {\n return;\n }\n\n const isTemplateVariable = selectedValue.value.startsWith('$');\n const selectedColumn = columns.find((c) => c.value === selectedValue.value);\n\n onChange({\n ...groupBy,\n property: {\n name: selectedValue.value,\n type: isTemplateVariable\n ? BuilderQueryEditorPropertyType.String\n : selectedColumn?.type || BuilderQueryEditorPropertyType.String,\n },\n interval: groupBy.interval,\n type: BuilderQueryEditorExpressionType.Group_by,\n });\n };\n\n return (\n <InputGroup>\n <Select\n aria-label={t('components.group-by-item.aria-label-column', 'Column')}\n width={inputFieldSize}\n value={groupBy.property?.name ? { label: groupBy.property.name, value: groupBy.property.name } : null}\n options={selectableOptions}\n allowCustomValue\n onChange={handleChange}\n />\n <AccessoryButton\n aria-label={t('components.group-by-item.aria-label-remove', 'Remove')}\n icon=\"times\"\n variant=\"secondary\"\n onClick={onDelete}\n />\n </InputGroup>\n );\n};\n","import React, { useEffect, useState, useRef } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorField, EditorFieldGroup, EditorList, EditorRow, InputGroup } from '@grafana/plugin-ui';\nimport { Button } from '@grafana/ui';\n\nimport {\n BuilderQueryEditorExpressionType,\n BuilderQueryEditorGroupByExpression,\n BuilderQueryEditorPropertyType,\n} from '../../dataquery.gen';\nimport { AzureLogAnalyticsMetadataColumn } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\n\nimport { GroupByItem } from './GroupByItem';\nimport { BuildAndUpdateOptions } from './utils';\n\ninterface GroupBySectionProps {\n query: AzureMonitorQuery;\n allColumns: AzureLogAnalyticsMetadataColumn[];\n buildAndUpdateQuery: (options: Partial<BuildAndUpdateOptions>) => void;\n templateVariableOptions: SelectableValue<string>;\n}\n\nexport const GroupBySection: React.FC<GroupBySectionProps> = ({\n query,\n buildAndUpdateQuery,\n allColumns,\n templateVariableOptions,\n}) => {\n const builderQuery = query.azureLogAnalytics?.builderQuery;\n const prevTable = useRef<string | null>(builderQuery?.from?.property.name || null);\n const [groupBys, setGroupBys] = useState<BuilderQueryEditorGroupByExpression[]>(\n builderQuery?.groupBy?.expressions || []\n );\n\n const hasLoadedGroupBy = useRef(false);\n\n useEffect(() => {\n const currentTable = builderQuery?.from?.property.name || null;\n\n if (prevTable.current !== currentTable || builderQuery?.groupBy?.expressions.length === 0) {\n setGroupBys([]);\n hasLoadedGroupBy.current = false;\n prevTable.current = currentTable;\n }\n }, [builderQuery]);\n\n const availableColumns: Array<SelectableValue<string>> = [];\n const columns = builderQuery?.columns?.columns ?? [];\n\n if (columns.length > 0) {\n availableColumns.push(\n ...columns.map((col) => ({\n label: col,\n value: col,\n }))\n );\n } else {\n availableColumns.push(\n ...allColumns.map((col) => ({\n label: col.name,\n value: col.name,\n }))\n );\n }\n\n const handleGroupByChange = (newItems: Array<Partial<BuilderQueryEditorGroupByExpression>>) => {\n setGroupBys(newItems);\n\n buildAndUpdateQuery({\n groupBy: newItems,\n });\n };\n\n const onDeleteGroupBy = (propertyName: string) => {\n setGroupBys((prevGroupBys) => {\n const updatedGroupBys = prevGroupBys.filter((gb) => gb.property?.name !== propertyName);\n\n buildAndUpdateQuery({\n groupBy: updatedGroupBys,\n });\n\n return updatedGroupBys;\n });\n };\n\n return (\n <EditorRow>\n <EditorFieldGroup>\n <EditorField\n label={t('components.group-by-section.label-group-by', 'Group by')}\n optional={true}\n tooltip={t(\n 'components.group-by-section.tooltip-group-by',\n 'Organize results into categories based on specified columns. Group by can be used independently to list unique values in selected columns, or combined with aggregate functions to produce summary statistics for each group. When used alone, it returns distinct combinations of the specified columns.'\n )}\n >\n <InputGroup>\n {groupBys.length > 0 ? (\n <EditorList\n items={groupBys}\n onChange={handleGroupByChange}\n renderItem={makeRenderGroupBy(availableColumns, onDeleteGroupBy, templateVariableOptions)}\n />\n ) : (\n <Button\n aria-label={t('components.group-by-section.aria-label-add-group-by', 'Add group by')}\n variant=\"secondary\"\n icon=\"plus\"\n onClick={() =>\n handleGroupByChange([\n {\n type: BuilderQueryEditorExpressionType.Group_by,\n property: { type: BuilderQueryEditorPropertyType.String, name: '' },\n },\n ])\n }\n />\n )}\n </InputGroup>\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n );\n};\n\nconst makeRenderGroupBy = (\n columns: Array<SelectableValue<string>>,\n onDeleteGroupBy: (propertyName: string) => void,\n templateVariableOptions: SelectableValue<string>\n) => {\n // eslint-disable-next-line react/display-name\n return (\n item: BuilderQueryEditorGroupByExpression,\n onChangeItem: (updatedItem: BuilderQueryEditorGroupByExpression) => void,\n onDeleteItem: () => void\n ) => (\n <GroupByItem\n groupBy={item}\n onChange={(updatedItem) => {\n onChangeItem(updatedItem);\n }}\n onDelete={() => {\n if (item.property?.name) {\n onDeleteGroupBy(item.property.name);\n }\n onDeleteItem();\n }}\n columns={columns}\n templateVariableOptions={templateVariableOptions}\n />\n );\n};\n","\n import API from \"!../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../css-loader/dist/cjs.js!./prism-tomorrow.min.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../css-loader/dist/cjs.js!./prism-tomorrow.min.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { css } from '@emotion/css';\nimport Prism from 'prismjs';\nimport React, { useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { EditorField, EditorFieldGroup, EditorRow } from '@grafana/plugin-ui';\nimport { Button, useStyles2 } from '@grafana/ui';\n\nimport 'prismjs/components/prism-kusto';\nimport 'prismjs/themes/prism-tomorrow.min.css';\n\ninterface KQLPreviewProps {\n query: string;\n hidden: boolean;\n setHidden: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nconst KQLPreview: React.FC<KQLPreviewProps> = ({ query, hidden, setHidden }) => {\n const styles = useStyles2(getStyles);\n\n useEffect(() => {\n Prism.highlightAll();\n }, [query]);\n\n return (\n <EditorRow>\n <EditorFieldGroup>\n <EditorField label={t('components.kql-preview.label-query-preview', 'Query Preview')}>\n <>\n <Button hidden={!hidden} variant=\"secondary\" onClick={() => setHidden(false)} size=\"sm\">\n <Trans i18nKey=\"components.kql-preview.button-show\">Show</Trans>\n </Button>\n <div className={styles.codeBlock} hidden={hidden}>\n <pre className={styles.code}>\n <code className=\"language-kusto\">{query}</code>\n </pre>\n </div>\n <Button hidden={hidden} variant=\"secondary\" onClick={() => setHidden(true)} size=\"sm\">\n <Trans i18nKey=\"components.kql-preview.button-hide\">Hide</Trans>\n </Button>\n </>\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n codeBlock: css({\n width: '100%',\n display: 'table',\n tableLayout: 'fixed',\n }),\n code: css({\n marginBottom: '4px',\n }),\n };\n};\n\nexport default KQLPreview;\n","import { useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { EditorRow, EditorFieldGroup, EditorField } from '@grafana/plugin-ui';\nimport { Input } from '@grafana/ui';\n\nimport { BuildAndUpdateOptions } from './utils';\n\ninterface LimitSectionProps {\n buildAndUpdateQuery: (options: Partial<BuildAndUpdateOptions>) => void;\n}\n\nexport const LimitSection: React.FC<LimitSectionProps> = (props) => {\n const { buildAndUpdateQuery } = props;\n\n const [limit, setLimit] = useState<number>(1000);\n\n const handleQueryLimitUpdate = (newLimit: number) => {\n buildAndUpdateQuery({\n limit: newLimit,\n });\n };\n\n return (\n <EditorRow>\n <EditorFieldGroup>\n <EditorField\n label={t('components.limit-section.label-limit', 'Limit')}\n optional={true}\n tooltip={t(\n 'components.limit-section.tooltip-limit',\n 'Restrict the number of rows returned (default is 1000).'\n )}\n >\n <Input\n className=\"width-5\"\n type=\"number\"\n placeholder={t('components.limit-section.placeholder-limit', 'Enter limit')}\n value={limit}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value.replace(/[^0-9]/g, '');\n setLimit(Number(newValue));\n handleQueryLimitUpdate(Number(newValue));\n }}\n />\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n );\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { EditorField, EditorFieldGroup, EditorRow, InputGroup } from '@grafana/plugin-ui';\nimport { Button, Select, Label } from '@grafana/ui';\n\nimport {\n BuilderQueryEditorExpressionType,\n BuilderQueryEditorOrderByExpression,\n BuilderQueryEditorOrderByOptions,\n BuilderQueryEditorPropertyType,\n} from '../../dataquery.gen';\nimport { AzureLogAnalyticsMetadataColumn } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\n\nimport { BuildAndUpdateOptions, inputFieldSize } from './utils';\n\ninterface OrderBySectionProps {\n query: AzureMonitorQuery;\n allColumns: AzureLogAnalyticsMetadataColumn[];\n buildAndUpdateQuery: (options: Partial<BuildAndUpdateOptions>) => void;\n}\n\nexport const OrderBySection: React.FC<OrderBySectionProps> = ({ query, allColumns, buildAndUpdateQuery }) => {\n const builderQuery = query.azureLogAnalytics?.builderQuery;\n const prevTable = useRef<string | null>(builderQuery?.from?.property.name || null);\n const hasLoadedOrderBy = useRef(false);\n\n const [orderBy, setOrderBy] = useState<BuilderQueryEditorOrderByExpression[]>(\n builderQuery?.orderBy?.expressions || []\n );\n\n useEffect(() => {\n const currentTable = builderQuery?.from?.property.name || null;\n\n if (prevTable.current !== currentTable || builderQuery?.orderBy?.expressions.length === 0) {\n setOrderBy([]);\n hasLoadedOrderBy.current = false;\n prevTable.current = currentTable;\n }\n }, [builderQuery]);\n\n const groupByColumns = builderQuery?.groupBy?.expressions?.map((g) => g.property?.name) || [];\n const aggregateColumns = builderQuery?.reduce?.expressions?.map((r) => r.property?.name) || [];\n const selectedColumns = builderQuery?.columns?.columns || [];\n\n const allAvailableColumns =\n groupByColumns.length > 0\n ? groupByColumns\n : aggregateColumns.length > 0\n ? aggregateColumns\n : selectedColumns.length > 0\n ? selectedColumns\n : allColumns.map((col) => col.name);\n\n const columnOptions = allAvailableColumns.map((col) => ({\n label: col,\n value: col,\n }));\n\n const orderOptions: Array<SelectableValue<string>> = [\n { label: 'Ascending', value: 'asc' },\n { label: 'Descending', value: 'desc' },\n ];\n\n const handleOrderByChange = (index: number, key: 'column' | 'order', value: string) => {\n setOrderBy((prev) => {\n const updated = [...prev];\n\n if (index === -1) {\n updated.push({\n property: { name: value, type: BuilderQueryEditorPropertyType.String },\n order: BuilderQueryEditorOrderByOptions.Asc,\n type: BuilderQueryEditorExpressionType.Order_by,\n });\n } else {\n updated[index] = {\n ...updated[index],\n property:\n key === 'column' ? { name: value, type: BuilderQueryEditorPropertyType.String } : updated[index].property,\n order:\n key === 'order' &&\n (value === BuilderQueryEditorOrderByOptions.Asc || value === BuilderQueryEditorOrderByOptions.Desc)\n ? value\n : updated[index].order,\n };\n }\n\n buildAndUpdateQuery({\n orderBy: updated,\n });\n\n return updated;\n });\n };\n\n const onDeleteOrderBy = (index: number) => {\n setOrderBy((prev) => {\n const updated = prev.filter((_, i) => i !== index);\n\n buildAndUpdateQuery({\n orderBy: updated,\n });\n\n return updated;\n });\n };\n\n return (\n <EditorRow>\n <EditorFieldGroup>\n <EditorField\n label={t('components.order-by-section.label-order-by', 'Order By')}\n optional={true}\n tooltip={t(\n 'components.order-by-section.tooltip-order-by',\n 'Sort results based on one or more columns in ascending or descending order.'\n )}\n >\n <>\n {orderBy.length > 0 ? (\n orderBy.map((entry, index) => (\n <InputGroup key={index}>\n <Select\n aria-label={t('components.order-by-section.aria-label-order-by-column', 'Order by column')}\n width={inputFieldSize}\n value={entry.property?.name ? { label: entry.property.name, value: entry.property.name } : null}\n options={columnOptions}\n onChange={(e) => e.value && handleOrderByChange(index, 'column', e.value)}\n />\n <Label style={{ margin: '9px 9px 0 9px' }}>\n <Trans i18nKey=\"components.order-by-section.label-by\">BY</Trans>\n </Label>\n <Select\n aria-label={t('components.order-by-section.aria-label-order-direction', 'Order Direction')}\n width={inputFieldSize}\n value={orderOptions.find((o) => o.value === entry.order) || null}\n options={orderOptions}\n onChange={(e) => e.value && handleOrderByChange(index, 'order', e.value)}\n />\n <Button\n aria-label={t('components.order-by-section.aria-label-remove-order-by', 'Remove order by')}\n variant=\"secondary\"\n icon=\"times\"\n onClick={() => onDeleteOrderBy(index)}\n />\n {index === orderBy.length - 1 ? (\n <Button\n aria-label={t('components.order-by-section.aria-label-add-order-by', 'Add order by')}\n variant=\"secondary\"\n onClick={() => handleOrderByChange(-1, 'column', '')}\n icon=\"plus\"\n style={{ marginLeft: '15px' }}\n />\n ) : (\n <></>\n )}\n </InputGroup>\n ))\n ) : (\n <InputGroup>\n <Button\n aria-label={t('components.order-by-section.aria-label-add-order-by', 'Add order by')}\n variant=\"secondary\"\n onClick={() => handleOrderByChange(-1, 'column', '')}\n icon=\"plus\"\n />\n </InputGroup>\n )}\n </>\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorField, EditorFieldGroup, EditorRow, InputGroup } from '@grafana/plugin-ui';\nimport { Button, Select } from '@grafana/ui';\n\nimport { BuilderQueryEditorExpressionType, BuilderQueryEditorPropertyType } from '../../dataquery.gen';\nimport { AzureLogAnalyticsMetadataColumn, AzureLogAnalyticsMetadataTable } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\nimport { TablePlan } from '../../types/types';\n\nimport { BuildAndUpdateOptions, inputFieldSize } from './utils';\n\ninterface TableSectionProps {\n allColumns: AzureLogAnalyticsMetadataColumn[];\n tables: AzureLogAnalyticsMetadataTable[];\n query: AzureMonitorQuery;\n buildAndUpdateQuery: (options: Partial<BuildAndUpdateOptions>) => void;\n templateVariableOptions?: SelectableValue<string>;\n onQueryChange: (newQuery: AzureMonitorQuery) => void;\n isLoadingSchema: boolean;\n}\n\nexport const TableSection: React.FC<TableSectionProps> = (props) => {\n const { allColumns, query, tables, buildAndUpdateQuery, templateVariableOptions, isLoadingSchema } = props;\n\n const builderQuery = query.azureLogAnalytics?.builderQuery;\n const selectedColumns = query.azureLogAnalytics?.builderQuery?.columns?.columns || [];\n\n const tableOptions: Array<SelectableValue<string>> = tables.map((t) => ({\n label: t.name,\n value: t.name,\n description: t.plan === TablePlan.Basic ? 'Selecting this table will switch the query mode to Basic Logs' : '',\n }));\n\n const columnOptions: Array<SelectableValue<string>> = allColumns.map((col) => ({\n label: col.name,\n value: col.name,\n type: col.type,\n }));\n\n const selectAllOption: SelectableValue<string> = {\n label: 'All Columns',\n value: '__all_columns__',\n };\n\n const selectableOptions: Array<SelectableValue<string>> = [\n selectAllOption,\n ...columnOptions,\n ...(templateVariableOptions\n ? Array.isArray(templateVariableOptions)\n ? templateVariableOptions\n : [templateVariableOptions]\n : []),\n ];\n\n const handleTableChange = (selected: SelectableValue<string>) => {\n const selectedTable = tables.find((t) => t.name === selected.value);\n if (!selectedTable) {\n return;\n }\n\n buildAndUpdateQuery({\n from: {\n property: {\n name: selectedTable.name,\n type: BuilderQueryEditorPropertyType.String,\n },\n type: BuilderQueryEditorExpressionType.Property,\n },\n reduce: [],\n where: [],\n fuzzySearch: [],\n groupBy: [],\n orderBy: [],\n columns: [],\n basicLogsQuery: selectedTable.plan === TablePlan.Basic,\n });\n };\n\n const handleColumnsChange = (selected: SelectableValue<string> | Array<SelectableValue<string>> | null) => {\n const selectedArray = Array.isArray(selected) ? selected : selected ? [selected] : [];\n\n if (selectedArray.length === 0) {\n buildAndUpdateQuery({ columns: [] });\n return;\n }\n\n const includesAll = selectedArray.some((opt) => opt.value === '__all_columns__');\n const lastSelected = selectedArray[selectedArray.length - 1];\n\n if (includesAll && lastSelected.value === '__all_columns__') {\n buildAndUpdateQuery({\n columns: allColumns.map((col) => col.name),\n });\n return;\n }\n\n if (includesAll && selectedArray.length > 1) {\n const filtered = selectedArray.filter((opt) => opt.value !== '__all_columns__');\n buildAndUpdateQuery({\n columns: filtered.map((opt) => opt.value!),\n });\n return;\n }\n\n if (includesAll && selectedArray.length === 1) {\n buildAndUpdateQuery({\n columns: allColumns.map((col) => col.name),\n });\n return;\n }\n\n buildAndUpdateQuery({\n columns: selectedArray.map((opt) => opt.value!),\n });\n };\n\n const onDeleteAllColumns = () => {\n buildAndUpdateQuery({\n columns: [],\n });\n };\n\n const allColumnNames = allColumns.length > 0 ? allColumns.map((col) => col.name) : [];\n\n const areAllColumnsSelected =\n allColumnNames.length > 0 &&\n selectedColumns.length > 0 &&\n selectedColumns.length === allColumnNames.length &&\n allColumnNames.every((col) => selectedColumns.includes(col));\n\n const columnSelectValue: Array<SelectableValue<string>> = areAllColumnsSelected\n ? [selectAllOption]\n : selectedColumns.map((col) => ({ label: col, value: col }));\n\n return (\n <EditorRow>\n <EditorFieldGroup>\n <EditorField label={t('components.table-section.label-table', 'Table')}>\n <Select\n aria-label={t('components.table-section.aria-label-table', 'Table')}\n value={builderQuery?.from?.property.name}\n options={tableOptions}\n placeholder={t('components.table-section.placeholder-select-table', 'Select a table')}\n onChange={handleTableChange}\n width={inputFieldSize}\n isLoading={isLoadingSchema}\n />\n </EditorField>\n <EditorField label={t('components.table-section.label-columns', 'Columns')}>\n <InputGroup>\n <Select\n aria-label={t('components.table-section.aria-label-columns', 'Columns')}\n isMulti\n isClearable\n closeMenuOnSelect={false}\n value={columnSelectValue}\n options={selectableOptions}\n placeholder={t('components.table-section.placeholder-select-columns', 'Select columns')}\n onChange={handleColumnsChange}\n isDisabled={!builderQuery?.from?.property.name}\n width={30}\n />\n <Button\n tooltip={t('components.table-section.tooltip-remove-all-columns', 'Remove all columns')}\n variant=\"secondary\"\n icon=\"times\"\n onClick={onDeleteAllColumns}\n />\n </InputGroup>\n </EditorField>\n </EditorFieldGroup>\n </EditorRow>\n );\n};\n","import React, { useMemo, useState, useCallback } from 'react';\n\nimport { SelectableValue, TimeRange } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorRows } from '@grafana/plugin-ui';\nimport { Alert } from '@grafana/ui';\n\nimport {\n BuilderQueryEditorExpressionType,\n BuilderQueryEditorPropertyType,\n BuilderQueryEditorReduceExpression,\n BuilderQueryEditorWhereExpression,\n BuilderQueryEditorGroupByExpression,\n BuilderQueryEditorOrderByExpression,\n BuilderQueryEditorPropertyExpression,\n BuilderQueryExpression,\n} from '../../dataquery.gen';\nimport Datasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { AzureLogAnalyticsMetadataTable, AzureLogAnalyticsMetadataColumn } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery } from '../../types/query';\nimport { EngineSchema } from '../../types/types';\n\nimport { AggregateSection } from './AggregationSection';\nimport { AzureMonitorKustoQueryBuilder } from './AzureMonitorKustoQueryBuilder';\nimport { FilterSection } from './FilterSection';\nimport { FuzzySearch } from './FuzzySearch';\nimport { GroupBySection } from './GroupBySection';\nimport KQLPreview from './KQLPreview';\nimport { LimitSection } from './LimitSection';\nimport { OrderBySection } from './OrderBySection';\nimport { TableSection } from './TableSection';\nimport { DEFAULT_LOGS_BUILDER_QUERY } from './utils';\n\ninterface LogsQueryBuilderProps {\n query: AzureMonitorQuery;\n basicLogsEnabled: boolean;\n onQueryChange: (newQuery: AzureMonitorQuery) => void;\n schema?: EngineSchema;\n templateVariableOptions: SelectableValue<string>;\n datasource: Datasource;\n timeRange?: TimeRange;\n isLoadingSchema: boolean;\n}\n\nexport const LogsQueryBuilder: React.FC<LogsQueryBuilderProps> = (props) => {\n const { query, onQueryChange, schema, datasource, timeRange, isLoadingSchema } = props;\n const [isKQLPreviewHidden, setIsKQLPreviewHidden] = useState<boolean>(true);\n\n const tables: AzureLogAnalyticsMetadataTable[] = useMemo(() => {\n return schema?.database?.tables || [];\n }, [schema?.database]);\n\n const builderQuery: BuilderQueryExpression = query.azureLogAnalytics?.builderQuery || DEFAULT_LOGS_BUILDER_QUERY;\n\n const allColumns: AzureLogAnalyticsMetadataColumn[] = useMemo(() => {\n const tableName = builderQuery.from?.property.name;\n const selectedTable = tables.find((table) => table.name === tableName);\n return selectedTable?.columns || [];\n }, [builderQuery, tables]);\n\n const buildAndUpdateQuery = useCallback(\n ({\n limit,\n reduce,\n where,\n fuzzySearch,\n groupBy,\n orderBy,\n columns,\n from,\n basicLogsQuery,\n }: {\n limit?: number;\n reduce?: BuilderQueryEditorReduceExpression[];\n where?: BuilderQueryEditorWhereExpression[];\n fuzzySearch?: BuilderQueryEditorWhereExpression[];\n groupBy?: BuilderQueryEditorGroupByExpression[];\n orderBy?: BuilderQueryEditorOrderByExpression[];\n columns?: string[];\n from?: BuilderQueryEditorPropertyExpression;\n basicLogsQuery?: boolean;\n }) => {\n const datetimeColumn = allColumns.find((col) => col.type === 'datetime')?.name || 'TimeGenerated';\n\n const timeFilterExpression: BuilderQueryEditorWhereExpression = {\n type: BuilderQueryEditorExpressionType.Or,\n expressions: [\n {\n type: BuilderQueryEditorExpressionType.Operator,\n operator: { name: '$__timeFilter', value: datetimeColumn },\n property: { name: datetimeColumn, type: BuilderQueryEditorPropertyType.Datetime },\n },\n ],\n };\n\n const updatedBuilderQuery: BuilderQueryExpression = {\n ...builderQuery,\n ...(limit !== undefined ? { limit } : {}),\n ...(reduce !== undefined\n ? { reduce: { expressions: reduce, type: BuilderQueryEditorExpressionType.Reduce } }\n : {}),\n ...(where !== undefined ? { where: { expressions: where, type: BuilderQueryEditorExpressionType.And } } : {}),\n ...(fuzzySearch !== undefined\n ? { fuzzySearch: { expressions: fuzzySearch, type: BuilderQueryEditorExpressionType.And } }\n : {}),\n ...(groupBy !== undefined\n ? { groupBy: { expressions: groupBy, type: BuilderQueryEditorExpressionType.Group_by } }\n : {}),\n ...(orderBy !== undefined\n ? { orderBy: { expressions: orderBy, type: BuilderQueryEditorExpressionType.Order_by } }\n : {}),\n ...(columns !== undefined ? { columns: { columns, type: BuilderQueryEditorExpressionType.Property } } : {}),\n ...(from !== undefined ? { from } : {}),\n timeFilter: { expressions: [timeFilterExpression], type: BuilderQueryEditorExpressionType.And },\n };\n\n const updatedQueryString = AzureMonitorKustoQueryBuilder.toQuery(updatedBuilderQuery);\n\n onQueryChange({\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n builderQuery: updatedBuilderQuery,\n query: updatedQueryString,\n basicLogsQuery: from ? basicLogsQuery : query.azureLogAnalytics?.basicLogsQuery,\n },\n });\n },\n [query, builderQuery, onQueryChange, allColumns]\n );\n\n return (\n <span data-testid={selectors.components.queryEditor.logsQueryBuilder.container.input}>\n <EditorRows>\n {schema && tables.length === 0 && (\n <Alert\n severity=\"warning\"\n title={t(\n 'components.logs-query-builder.title-no-tables',\n 'Resource loaded successfully but without any tables'\n )}\n />\n )}\n <TableSection\n {...props}\n tables={tables}\n allColumns={allColumns}\n buildAndUpdateQuery={buildAndUpdateQuery}\n isLoadingSchema={isLoadingSchema}\n />\n <FilterSection\n {...props}\n allColumns={allColumns}\n buildAndUpdateQuery={buildAndUpdateQuery}\n datasource={datasource}\n timeRange={timeRange}\n />\n <AggregateSection {...props} allColumns={allColumns} buildAndUpdateQuery={buildAndUpdateQuery} />\n <GroupBySection {...props} allColumns={allColumns} buildAndUpdateQuery={buildAndUpdateQuery} />\n <OrderBySection {...props} allColumns={allColumns} buildAndUpdateQuery={buildAndUpdateQuery} />\n <FuzzySearch {...props} allColumns={allColumns} buildAndUpdateQuery={buildAndUpdateQuery} />\n <LimitSection {...props} buildAndUpdateQuery={buildAndUpdateQuery} />\n <KQLPreview\n query={query.azureLogAnalytics?.query || ''}\n hidden={isKQLPreviewHidden}\n setHidden={setIsKQLPreviewHidden}\n />\n </EditorRows>\n </span>\n );\n};\n","import { useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { ConfirmModal, InlineField, RadioButtonGroup } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types/types';\n\nimport { setBasicLogsQuery, setDashboardTime, setKustoQuery } from './setQueryValue';\n\nexport function LogsManagement({ query, onQueryChange: onChange }: AzureQueryEditorFieldProps) {\n const [basicLogsAckOpen, setBasicLogsAckOpen] = useState<boolean>(false);\n\n return (\n <>\n <ConfirmModal\n isOpen={basicLogsAckOpen}\n title={t('components.logs-management.title-basic-logs-queries', 'Basic Logs Queries')}\n body={t('components.logs-management.body-basic-logs-queries', 'Are you sure you want to switch to Basic Logs?')}\n description={t(\n 'components.logs-management.description-basic-logs-queries',\n 'Basic Logs queries incur cost based on the amount of data scanned.'\n )}\n confirmText={t('components.logs-management.confirmText-confirm', 'Confirm')}\n onConfirm={() => {\n setBasicLogsAckOpen(false);\n let updatedBasicLogsQuery = setBasicLogsQuery(query, true);\n // if basic logs selected, set dashboard time\n updatedBasicLogsQuery = setDashboardTime(updatedBasicLogsQuery, 'dashboard');\n onChange(setKustoQuery(updatedBasicLogsQuery, ''));\n }}\n onDismiss={() => {\n setBasicLogsAckOpen(false);\n onChange(setBasicLogsQuery(query, false));\n }}\n confirmButtonVariant=\"primary\"\n />\n <InlineField\n label={t('components.logs-management.label-logs', 'Logs')}\n tooltip={t(\n 'components.logs-management.tooltip-logs',\n 'Specifies whether to run a Basic or Analytics Logs query.'\n )}\n >\n <RadioButtonGroup\n options={[\n { label: 'Analytics', value: false },\n { label: 'Basic', value: true },\n ]}\n value={query.azureLogAnalytics?.basicLogsQuery ?? false}\n size={'md'}\n onChange={(val) => {\n setBasicLogsAckOpen(val);\n if (!val) {\n const updatedBasicLogsQuery = setBasicLogsQuery(query, val);\n onChange(setKustoQuery(updatedBasicLogsQuery, ''));\n }\n }}\n />\n </InlineField>\n </>\n );\n}\n","import { EngineSchema, getKustoWorker } from '@kusto/monaco-kusto';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { CodeEditor, Monaco, MonacoEditor } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types/types';\n\nimport { setKustoQuery } from './setQueryValue';\n\ninterface MonacoEditorValues {\n editor: MonacoEditor;\n monaco: Monaco;\n}\n\nconst QueryField = ({ query, onQueryChange, schema }: AzureQueryEditorFieldProps) => {\n const [monaco, setMonaco] = useState<MonacoEditorValues | undefined>();\n\n useEffect(() => {\n if (!schema || !monaco) {\n return;\n }\n\n const setupEditor = async ({ monaco, editor }: MonacoEditorValues, schema: EngineSchema) => {\n try {\n const model = editor.getModel();\n if (model) {\n const kustoWorker = await getKustoWorker();\n const kustoMode = await kustoWorker(model?.uri);\n await kustoMode.setSchema(schema);\n }\n } catch (err) {\n console.error(err);\n }\n };\n\n setupEditor(monaco, schema).catch((err) => console.error(err));\n }, [schema, monaco]);\n\n const handleEditorMount = useCallback((editor: MonacoEditor, monaco: Monaco) => {\n setMonaco({ monaco, editor });\n }, []);\n\n const onChange = useCallback(\n (newQuery: string) => {\n onQueryChange(setKustoQuery(query, newQuery));\n },\n [onQueryChange, query]\n );\n\n return (\n <CodeEditor\n value={query.azureLogAnalytics?.query ?? ''}\n language=\"kusto\"\n height={200}\n width=\"100%\"\n showMiniMap={false}\n onBlur={onChange}\n onSave={onChange}\n onEditorDidMount={handleEditorMount}\n />\n );\n};\n\nexport default QueryField;\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { InlineField, RadioButtonGroup, Select } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types/types';\n\nimport { setDashboardTime, setTimeColumn } from './setQueryValue';\n\nexport function TimeManagement({ query, onQueryChange: onChange, schema }: AzureQueryEditorFieldProps) {\n const [defaultTimeColumns, setDefaultTimeColumns] = useState<SelectableValue[] | undefined>();\n const [timeColumns, setTimeColumns] = useState<SelectableValue[] | undefined>();\n const [disabledTimePicker, setDisabledTimePicker] = useState<boolean>(false);\n\n const setDefaultColumn = useCallback((column: string) => onChange(setTimeColumn(query, column)), [query, onChange]);\n\n useEffect(() => {\n if (schema && query.azureLogAnalytics?.dashboardTime) {\n const timeColumnOptions: SelectableValue[] = [];\n const timeColumnsSet: Set<string> = new Set();\n const defaultColumnsMap: Map<string, SelectableValue> = new Map();\n const db = schema.database;\n if (db && db?.tables?.length > 0) {\n for (const table of db.tables) {\n const cols = table.columns.reduce<SelectableValue[]>((prev, curr, i) => {\n if (curr.type === 'datetime') {\n if (!table.timespanColumn || table.timespanColumn !== curr.name) {\n prev.push({ value: curr.name, label: `${table.name} > ${curr.name}` });\n timeColumnsSet.add(curr.name);\n }\n }\n return prev;\n }, []);\n timeColumnOptions.push(...cols);\n if (table.timespanColumn && !defaultColumnsMap.has(table.timespanColumn)) {\n defaultColumnsMap.set(table.timespanColumn, {\n value: table.timespanColumn,\n label: table.timespanColumn,\n });\n }\n }\n setTimeColumns(timeColumnOptions);\n const defaultColumns = Array.from(defaultColumnsMap.values());\n setDefaultTimeColumns(defaultColumns);\n // Set default value\n if (\n !query.azureLogAnalytics.timeColumn ||\n (query.azureLogAnalytics.timeColumn &&\n !timeColumnsSet.has(query.azureLogAnalytics.timeColumn) &&\n !defaultColumnsMap.has(query.azureLogAnalytics.timeColumn))\n ) {\n if (defaultColumns && defaultColumns.length) {\n setDefaultColumn(defaultColumns[0].value);\n setDefaultColumn(defaultColumns[0].value);\n return;\n } else if (timeColumnOptions && timeColumnOptions.length) {\n setDefaultColumn(timeColumnOptions[0].value);\n return;\n } else {\n setDefaultColumn('TimeGenerated');\n return;\n }\n }\n }\n }\n }, [schema, query.azureLogAnalytics?.dashboardTime, query.azureLogAnalytics?.timeColumn, setDefaultColumn]);\n\n const handleTimeColumnChange = useCallback(\n (change: SelectableValue<string>) => {\n if (!change.value) {\n return;\n }\n\n const newQuery = setTimeColumn(query, change.value);\n onChange(newQuery);\n },\n [onChange, query]\n );\n\n useEffect(() => {\n if (query.azureLogAnalytics?.basicLogsQuery) {\n setDisabledTimePicker(true);\n } else {\n setDisabledTimePicker(false);\n }\n }, [query.azureLogAnalytics?.basicLogsQuery]);\n\n return (\n <>\n <InlineField\n label={t('components.time-management.label-time-range', 'Time-range')}\n tooltip={\n <Trans i18nKey=\"components.time-management.tooltip-time-range\">\n <span>\n Specifies the time-range used to query. The <code>Query</code> option will only use time-ranges specified\n in the query. <code>Dashboard</code> will only use the Grafana time-range. In Logs Builder mode, only\n Dashboard time will be used.\n </span>\n </Trans>\n }\n >\n <RadioButtonGroup\n options={[\n { label: 'Query', value: 'query', disabled: query.azureLogAnalytics?.mode === 'builder' },\n { label: 'Dashboard', value: 'dashboard' },\n ]}\n value={\n query.azureLogAnalytics?.dashboardTime || query.azureLogAnalytics?.mode === 'builder'\n ? 'dashboard'\n : 'query'\n }\n size={'md'}\n onChange={(val) => onChange(setDashboardTime(query, val))}\n disabled={disabledTimePicker}\n disabledOptions={disabledTimePicker ? ['query'] : []}\n />\n </InlineField>\n {(query.azureLogAnalytics?.dashboardTime || query.azureLogAnalytics?.mode === 'builder') && (\n <InlineField\n label={t('components.time-management.label-time-column', 'Time Column')}\n tooltip={\n <Trans i18nKey=\"components.time-management.tooltip-time-column\">\n <span>\n Specifies the time column used for filtering. Defaults to the first tables <code>timeSpan</code> column,\n the first <code>datetime</code> column found or <code>TimeGenerated</code>.\n </span>\n </Trans>\n }\n >\n <Select\n options={[\n {\n label: 'Default time columns',\n options: defaultTimeColumns ?? [{ value: 'TimeGenerated', label: 'TimeGenerated' }],\n },\n {\n label: 'Other time columns',\n options: timeColumns ?? [],\n },\n ]}\n onChange={handleTimeColumnChange}\n value={\n query.azureLogAnalytics?.timeColumn\n ? query.azureLogAnalytics?.timeColumn\n : defaultTimeColumns\n ? defaultTimeColumns[0]\n : timeColumns\n ? timeColumns[0]\n : { value: 'TimeGenerated', label: 'TimeGenerated' }\n }\n allowCustomValue\n />\n </InlineField>\n )}\n </>\n );\n}\n","import { useEffect, useState } from 'react';\n\nimport Datasource from '../../datasource';\nimport { AzureMonitorQuery } from '../../types/query';\nimport { isGUIDish } from '../ResourcePicker/utils';\n\nasync function migrateWorkspaceQueryToResourceQuery(\n datasource: Datasource,\n query: AzureMonitorQuery,\n onChange: (newQuery: AzureMonitorQuery) => void\n) {\n if (query.azureLogAnalytics?.workspace !== undefined && !query.azureLogAnalytics.resources) {\n const isWorkspaceGUID = isGUIDish(query.azureLogAnalytics.workspace);\n let resource: string;\n\n if (isWorkspaceGUID) {\n resource = await datasource.resourcePickerData.getResourceURIFromWorkspace(query.azureLogAnalytics.workspace);\n } else {\n // The value of workspace is probably a template variable so we just migrate it over as-is\n resource = query.azureLogAnalytics.workspace;\n }\n\n const newQuery = {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n resource: resource,\n workspace: undefined,\n },\n };\n\n delete newQuery.azureLogAnalytics.workspace;\n\n onChange(newQuery);\n }\n}\n\ninterface ErrorMessage {\n title: string;\n message: string;\n}\n\nexport default function useMigrations(\n datasource: Datasource,\n query: AzureMonitorQuery,\n onChange: (newQuery: AzureMonitorQuery) => void\n) {\n const [migrationError, setMigrationError] = useState<ErrorMessage>();\n\n useEffect(() => {\n migrateWorkspaceQueryToResourceQuery(datasource, query, onChange).catch((err) =>\n setMigrationError({\n title: 'Unable to migrate workspace as a resource',\n message: err.message,\n })\n );\n }, [datasource, query, onChange]);\n\n return migrationError;\n}\n","import { getTemplateSrv } from '@grafana/runtime';\n\nimport { parseResourceURI } from '../ResourcePicker/utils';\n\nexport function shouldShowBasicLogsToggle(resources: string[], basicLogsEnabled: boolean) {\n const selectedResource = getTemplateSrv()?.replace(resources[0]);\n return (\n basicLogsEnabled &&\n resources.length === 1 &&\n parseResourceURI(selectedResource).metricNamespace?.toLowerCase() === 'microsoft.operationalinsights/workspaces'\n );\n}\n\nexport function calculateTimeRange(from: number, to: number): number {\n const second = 1000;\n const minute = second * 60;\n const hour = minute * 60;\n const day = hour * 24;\n const timeRange = (to - from) / day;\n\n return timeRange;\n}\n","import { useEffect, useState } from 'react';\n\nimport { PanelData, TimeRange } from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { EditorFieldGroup, EditorRow, EditorRows } from '@grafana/plugin-ui';\nimport { config, getTemplateSrv } from '@grafana/runtime';\nimport { Alert, LinkButton, Space, Text, TextLink } from '@grafana/ui';\n\nimport { LogsEditorMode } from '../../dataquery.gen';\nimport Datasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { AzureLogAnalyticsMetadataTable } from '../../types/logAnalyticsMetadata';\nimport { AzureMonitorQuery, ResultFormat } from '../../types/query';\nimport { AzureMonitorErrorish, AzureMonitorOption, EngineSchema } from '../../types/types';\nimport { LogsQueryBuilder } from '../LogsQueryBuilder/LogsQueryBuilder';\nimport ResourceField from '../ResourceField/ResourceField';\nimport { ResourceRow, ResourceRowGroup, ResourceRowType } from '../ResourcePicker/types';\nimport { parseResourceDetails } from '../ResourcePicker/utils';\nimport FormatAsField from '../shared/FormatAsField';\n\nimport AdvancedResourcePicker from './AdvancedResourcePicker';\nimport { LogsManagement } from './LogsManagement';\nimport QueryField from './QueryField';\nimport { TimeManagement } from './TimeManagement';\nimport { onLoad, setBasicLogsQuery, setFormatAs, setKustoQuery } from './setQueryValue';\nimport useMigrations from './useMigrations';\nimport { shouldShowBasicLogsToggle } from './utils';\n\ninterface LogsQueryEditorProps {\n query: AzureMonitorQuery;\n datasource: Datasource;\n basicLogsEnabled: boolean;\n subscriptionId?: string;\n onChange: (newQuery: AzureMonitorQuery) => void;\n onQueryChange: (newQuery: AzureMonitorQuery) => void;\n variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n hideFormatAs?: boolean;\n timeRange?: TimeRange;\n data?: PanelData;\n}\n\nconst LogsQueryEditor = ({\n query,\n datasource,\n basicLogsEnabled,\n subscriptionId,\n variableOptionGroup,\n onChange,\n onQueryChange,\n setError,\n hideFormatAs,\n timeRange,\n data,\n}: LogsQueryEditorProps) => {\n const migrationError = useMigrations(datasource, query, onChange);\n const [showBasicLogsToggle, setShowBasicLogsToggle] = useState<boolean>(\n shouldShowBasicLogsToggle(query.azureLogAnalytics?.resources || [], basicLogsEnabled)\n );\n const [dataIngestedWarning, setDataIngestedWarning] = useState<React.ReactNode | null>(null);\n const templateSrv = getTemplateSrv();\n const from = templateSrv?.replace('$__from');\n const to = templateSrv?.replace('$__to');\n const templateVariableOptions = templateSrv.getVariables();\n const isBasicLogsQuery = (basicLogsEnabled && query.azureLogAnalytics?.basicLogsQuery) ?? false;\n const [isLoadingSchema, setIsLoadingSchema] = useState<boolean>(false);\n\n const disableRow = (row: ResourceRow, selectedRows: ResourceRowGroup) => {\n if (selectedRows.length === 0) {\n // Only if there is some resource(s) selected we should disable rows\n return false;\n }\n\n if (isBasicLogsQuery && selectedRows.length === 1) {\n // Basic logs queries can only have one resource selected\n return true;\n }\n\n const rowResourceNS = parseResourceDetails(row.uri, row.location).metricNamespace?.toLowerCase();\n const selectedRowSampleNs = parseResourceDetails(\n selectedRows[0].uri,\n selectedRows[0].location\n ).metricNamespace?.toLowerCase();\n // Only resources with the same metricNamespace can be selected\n return rowResourceNS !== selectedRowSampleNs;\n };\n const [schema, setSchema] = useState<EngineSchema | undefined>();\n\n useEffect(() => {\n const resources = query.azureLogAnalytics?.resources;\n if (resources) {\n setIsLoadingSchema(true);\n const fetchAllPlans = async (tables: AzureLogAnalyticsMetadataTable[]) => {\n const promises = [];\n for (const table of tables) {\n promises.push({\n ...table,\n plan: await datasource.azureMonitorDatasource.getWorkspaceTablePlan(resources, table.name),\n });\n }\n\n const tablesWithPlan = await Promise.all(promises);\n return tablesWithPlan;\n };\n datasource.azureLogAnalyticsDatasource.getKustoSchema(resources[0]).then((schema) => {\n if (schema?.database?.tables && query.azureLogAnalytics?.mode === LogsEditorMode.Builder) {\n fetchAllPlans(schema?.database?.tables).then(async (t) => {\n if (schema.database?.tables) {\n schema.database.tables = t;\n }\n });\n }\n setSchema(schema);\n setIsLoadingSchema(false);\n });\n }\n }, [\n query.azureLogAnalytics?.resources,\n datasource.azureLogAnalyticsDatasource,\n datasource.azureMonitorDatasource,\n query.azureLogAnalytics?.mode,\n ]);\n\n useEffect(() => {\n if (shouldShowBasicLogsToggle(query.azureLogAnalytics?.resources || [], basicLogsEnabled)) {\n setShowBasicLogsToggle(true);\n } else {\n setShowBasicLogsToggle(false);\n }\n }, [basicLogsEnabled, query.azureLogAnalytics?.resources, templateSrv]);\n\n useEffect(() => {\n if ((!basicLogsEnabled || !showBasicLogsToggle) && query.azureLogAnalytics?.basicLogsQuery) {\n const updatedBasicLogsQuery = setBasicLogsQuery(query, false);\n onChange(setKustoQuery(updatedBasicLogsQuery, ''));\n }\n }, [basicLogsEnabled, onChange, query, showBasicLogsToggle]);\n\n useEffect(() => {\n const hasRawKql = !!query.azureLogAnalytics?.query;\n const hasNoBuilder = !query.azureLogAnalytics?.builderQuery;\n const modeUnset = query.azureLogAnalytics?.mode === undefined;\n\n if (hasRawKql && hasNoBuilder && modeUnset) {\n onChange({\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n mode: LogsEditorMode.Raw,\n },\n });\n }\n }, [query, onChange]);\n\n useEffect(() => {\n if (query.azureLogAnalytics?.mode === LogsEditorMode.Raw && query.azureLogAnalytics?.builderQuery !== undefined) {\n onQueryChange({\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n builderQuery: undefined,\n query: '',\n },\n });\n }\n }, [query.azureLogAnalytics?.mode, onQueryChange, query]);\n\n useEffect(() => {\n const getBasicLogsUsage = async (query: AzureMonitorQuery) => {\n try {\n if (showBasicLogsToggle && query.azureLogAnalytics?.basicLogsQuery && !!query.azureLogAnalytics.query) {\n const querySplit = query.azureLogAnalytics.query.split('|');\n // Basic Logs queries are required to start the query with a table\n const table = querySplit[0].trim();\n const dataIngested = await datasource.azureLogAnalyticsDatasource.getBasicLogsQueryUsage(query, table);\n const textToShow = !!dataIngested\n ? `This query is processing ${dataIngested} GiB when run. `\n : 'This is a Basic Logs query and incurs cost per GiB scanned. ';\n setDataIngestedWarning(\n <>\n <Text color=\"primary\">\n {textToShow}{' '}\n <TextLink\n href=\"https://learn.microsoft.com/en-us/azure/azure-monitor/logs/basic-logs-configure?tabs=portal-1\"\n external\n >\n <Trans i18nKey=\"components.logs-query-editor.learn-more\">Learn More</Trans>\n </TextLink>\n </Text>\n </>\n );\n } else {\n setDataIngestedWarning(null);\n }\n } catch (err) {\n console.error(err);\n }\n };\n\n getBasicLogsUsage(query).catch((err) => console.error(err));\n }, [datasource.azureLogAnalyticsDatasource, query, showBasicLogsToggle, from, to]);\n let portalLinkButton = null;\n\n if (data?.series) {\n const querySeries = data.series.find((result) => result.refId === query.refId);\n if (querySeries && querySeries.meta?.custom?.azurePortalLink) {\n portalLinkButton = (\n <>\n <LinkButton\n size=\"md\"\n target=\"_blank\"\n style={{ marginTop: '22px' }}\n href={querySeries.meta?.custom?.azurePortalLink}\n >\n <Trans i18nKey=\"components.logs-query-editor.view-query\">View query in Azure Portal</Trans>\n </LinkButton>\n </>\n );\n }\n }\n\n return (\n <span data-testid={selectors.components.queryEditor.logsQueryEditor.container.input}>\n <EditorRows>\n <EditorRow>\n <EditorFieldGroup>\n <ResourceField\n query={query}\n datasource={datasource}\n inlineField={true}\n labelWidth={10}\n subscriptionId={subscriptionId}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n selectableEntryTypes={[\n ResourceRowType.Subscription,\n ResourceRowType.ResourceGroup,\n ResourceRowType.Resource,\n ResourceRowType.Variable,\n ]}\n resources={query.azureLogAnalytics?.resources ?? []}\n queryType=\"logs\"\n disableRow={disableRow}\n renderAdvanced={(resources, onChange) => (\n // It's required to cast resources because the resource picker\n // specifies the type to string | AzureMonitorResource.\n // eslint-disable-next-line\n <AdvancedResourcePicker resources={resources as string[]} onChange={onChange} />\n )}\n selectionNotice={(selected) => {\n if (selected.length === 1 && isBasicLogsQuery) {\n return 'When using Basic Logs, you may only select one resource at a time.';\n }\n return 'You may only choose items of the same resource type.';\n }}\n />\n {showBasicLogsToggle && (\n <LogsManagement\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n />\n )}\n <TimeManagement\n query={query}\n datasource={datasource}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n schema={schema}\n />\n </EditorFieldGroup>\n </EditorRow>\n <Space />\n {query.azureLogAnalytics?.mode === LogsEditorMode.Builder &&\n !!config.featureToggles.azureMonitorLogsBuilderEditor ? (\n <LogsQueryBuilder\n query={query}\n schema={schema}\n basicLogsEnabled={basicLogsEnabled}\n onQueryChange={onQueryChange}\n templateVariableOptions={templateVariableOptions}\n datasource={datasource}\n timeRange={timeRange}\n isLoadingSchema={isLoadingSchema}\n />\n ) : (\n <QueryField\n query={query}\n datasource={datasource}\n subscriptionId={subscriptionId}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n schema={schema}\n />\n )}\n {dataIngestedWarning}\n <EditorRow>\n <EditorFieldGroup>\n {!hideFormatAs && (\n <FormatAsField\n query={query}\n datasource={datasource}\n subscriptionId={subscriptionId}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n inputId={'azure-monitor-logs'}\n options={[\n { label: 'Log', value: ResultFormat.Logs },\n { label: 'Time series', value: ResultFormat.TimeSeries },\n { label: 'Table', value: ResultFormat.Table },\n ]}\n defaultValue={ResultFormat.Logs}\n setFormatAs={setFormatAs}\n resultFormat={query.azureLogAnalytics?.resultFormat}\n onLoad={onLoad}\n />\n )}\n {portalLinkButton}\n {migrationError && <Alert title={migrationError.title}>{migrationError.message}</Alert>}\n </EditorFieldGroup>\n </EditorRow>\n </EditorRows>\n </span>\n );\n};\n\nexport default LogsQueryEditor;\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","import { cx, css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2, Button } from '@grafana/ui';\n\nconst AccessoryButton = ({ className, ...props }) => {\n const styles = useStyles2(getButtonStyles);\n return /* @__PURE__ */ React__default.createElement(Button, { ...props, className: cx(className, styles.button) });\n};\nconst getButtonStyles = (theme) => ({\n button: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2)\n })\n});\n\nexport { AccessoryButton };\n//# sourceMappingURL=AccessoryButton.js.map\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","Prism.languages.kusto = {\n\t'comment': {\n\t\tpattern: /\\/\\/.*/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /```[\\s\\S]*?```|[hH]?(?:\"(?:[^\\r\\n\\\\\"]|\\\\.)*\"|'(?:[^\\r\\n\\\\']|\\\\.)*'|@(?:\"[^\\r\\n\"]*\"|'[^\\r\\n']*'))/,\n\t\tgreedy: true\n\t},\n\n\t'verb': {\n\t\tpattern: /(\\|\\s*)[a-z][\\w-]*/i,\n\t\tlookbehind: true,\n\t\talias: 'keyword'\n\t},\n\n\t'command': {\n\t\tpattern: /\\.[a-z][a-z\\d-]*\\b/,\n\t\talias: 'keyword'\n\t},\n\n\t'class-name': /\\b(?:bool|datetime|decimal|dynamic|guid|int|long|real|string|timespan)\\b/,\n\t'keyword': /\\b(?:access|alias|and|anti|as|asc|auto|between|by|(?:contains|(?:ends|starts)with|has(?:perfix|suffix)?)(?:_cs)?|database|declare|desc|external|from|fullouter|has_all|in|ingestion|inline|inner|innerunique|into|(?:left|right)(?:anti(?:semi)?|inner|outer|semi)?|let|like|local|not|of|on|or|pattern|print|query_parameters|range|restrict|schema|set|step|table|tables|to|view|where|with|matches\\s+regex|nulls\\s+(?:first|last))(?![\\w-])/,\n\t'boolean': /\\b(?:false|null|true)\\b/,\n\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/,\n\n\t'datetime': [\n\t\t{\n\t\t\t// RFC 822 + RFC 850\n\t\t\tpattern: /\\b(?:(?:Fri|Friday|Mon|Monday|Sat|Saturday|Sun|Sunday|Thu|Thursday|Tue|Tuesday|Wed|Wednesday)\\s*,\\s*)?\\d{1,2}(?:\\s+|-)(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)(?:\\s+|-)\\d{2}\\s+\\d{2}:\\d{2}(?::\\d{2})?(?:\\s*(?:\\b(?:[A-Z]|(?:[ECMT][DS]|GM|U)T)|[+-]\\d{4}))?\\b/,\n\t\t\talias: 'number'\n\t\t},\n\t\t{\n\t\t\t// ISO 8601\n\t\t\tpattern: /[+-]?\\b(?:\\d{4}-\\d{2}-\\d{2}(?:[ T]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)?|\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)Z?/,\n\t\t\talias: 'number'\n\t\t}\n\t],\n\t'number': /\\b(?:0x[0-9A-Fa-f]+|\\d+(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?)(?:(?:min|sec|[mnµ]s|[dhms]|microsecond|tick)\\b)?|[+-]?\\binf\\b/,\n\n\t'operator': /=>|[!=]~|[!=<>]=?|[-+*/%|]|\\.\\./,\n\t'punctuation': /[()\\[\\]{},;.:]/\n};\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3059__;","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3241__;","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport interface AzureMonitorQuery extends common.DataQuery {\n /**\n * Azure Monitor Logs sub-query properties.\n */\n azureLogAnalytics?: AzureLogsQuery;\n /**\n * Azure Monitor Metrics sub-query properties.\n */\n azureMonitor?: AzureMetricQuery;\n /**\n * Azure Resource Graph sub-query properties.\n */\n azureResourceGraph?: AzureResourceGraphQuery;\n /**\n * Application Insights Traces sub-query properties.\n */\n azureTraces?: AzureTracesQuery;\n /**\n * Custom namespace used in template variable queries\n */\n customNamespace?: string;\n /**\n * @deprecated Legacy template variable support.\n */\n grafanaTemplateVariableFn?: GrafanaTemplateVariableQuery;\n keepCookies?: Array<string>;\n /**\n * Namespace used in template variable queries\n */\n namespace?: string;\n /**\n * Used only for exemplar queries from Prometheus\n */\n query?: string;\n /**\n * Region used in template variable queries\n */\n region?: string;\n /**\n * Resource used in template variable queries\n */\n resource?: string;\n /**\n * Resource group used in template variable queries\n */\n resourceGroup?: string;\n /**\n * Azure subscription containing the resource(s) to be queried.\n * Also used for template variable queries\n */\n subscription?: string;\n /**\n * Subscriptions to be queried via Azure Resource Graph.\n */\n subscriptions?: Array<string>;\n /**\n * Used to configure the HTTP request timeout\n */\n timeout?: number;\n}\n\nexport const defaultAzureMonitorQuery: Partial<AzureMonitorQuery> = {\n keepCookies: [],\n subscriptions: [],\n};\n\n/**\n * Defines the supported queryTypes. GrafanaTemplateVariableFn is deprecated\n */\nexport enum AzureQueryType {\n AzureMonitor = 'Azure Monitor',\n AzureResourceGraph = 'Azure Resource Graph',\n AzureTraces = 'Azure Traces',\n CustomMetricNamesQuery = 'Azure Custom Metric Names',\n CustomNamespacesQuery = 'Azure Custom Namespaces',\n GrafanaTemplateVariableFn = 'Grafana Template Variable Function',\n LocationsQuery = 'Azure Regions',\n LogAnalytics = 'Azure Log Analytics',\n MetricNamesQuery = 'Azure Metric Names',\n NamespacesQuery = 'Azure Namespaces',\n ResourceGroupsQuery = 'Azure Resource Groups',\n ResourceNamesQuery = 'Azure Resource Names',\n SubscriptionsQuery = 'Azure Subscriptions',\n TraceExemplar = 'traceql',\n WorkspacesQuery = 'Azure Workspaces',\n}\n\nexport interface AzureMetricQuery {\n /**\n * The aggregation to be used within the query. Defaults to the primaryAggregationType defined by the metric.\n */\n aggregation?: string;\n /**\n * Aliases can be set to modify the legend labels. e.g. {{ resourceGroup }}. See docs for more detail.\n */\n alias?: string;\n /**\n * Time grains that are supported by the metric.\n */\n allowedTimeGrainsMs?: Array<number>;\n /**\n * Used as the value for the metricNamespace property when it's different from the resource namespace.\n */\n customNamespace?: string;\n /**\n * @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration\n */\n dimension?: string;\n /**\n * @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration\n */\n dimensionFilter?: string;\n /**\n * Filters to reduce the set of data returned. Dimensions that can be filtered on are defined by the metric.\n */\n dimensionFilters?: Array<AzureMetricDimension>;\n /**\n * @deprecated Use metricNamespace instead\n */\n metricDefinition?: string;\n /**\n * The metric to query data for within the specified metricNamespace. e.g. UsedCapacity\n */\n metricName?: string;\n /**\n * metricNamespace is used as the resource type (or resource namespace).\n * It's usually equal to the target metric namespace. e.g. microsoft.storage/storageaccounts\n * Kept the name of the variable as metricNamespace to avoid backward incompatibility issues.\n */\n metricNamespace?: string;\n /**\n * The Azure region containing the resource(s).\n */\n region?: string;\n /**\n * @deprecated Use resources instead\n */\n resourceGroup?: string;\n /**\n * @deprecated Use resources instead\n */\n resourceName?: string;\n /**\n * @deprecated Use resourceGroup, resourceName and metricNamespace instead\n */\n resourceUri?: string;\n /**\n * Array of resource URIs to be queried.\n */\n resources?: Array<AzureMonitorResource>;\n /**\n * The granularity of data points to be queried. Defaults to auto.\n */\n timeGrain?: string;\n /**\n * @deprecated\n */\n timeGrainUnit?: string;\n /**\n * Maximum number of records to return. Defaults to 10.\n */\n top?: string;\n}\n\nexport const defaultAzureMetricQuery: Partial<AzureMetricQuery> = {\n allowedTimeGrainsMs: [],\n dimensionFilters: [],\n resources: [],\n};\n\n/**\n * Azure Monitor Logs sub-query properties\n */\nexport interface AzureLogsQuery {\n /**\n * If set to true the query will be run as a basic logs query\n */\n basicLogsQuery?: boolean;\n /**\n * Builder query to be executed.\n */\n builderQuery?: BuilderQueryExpression;\n /**\n * If set to true the dashboard time range will be used as a filter for the query. Otherwise the query time ranges will be used. Defaults to false.\n */\n dashboardTime?: boolean;\n /**\n * @deprecated Use dashboardTime instead\n */\n intersectTime?: boolean;\n /**\n * Denotes if logs query editor is in builder mode\n */\n mode?: LogsEditorMode;\n /**\n * KQL query to be executed.\n */\n query?: string;\n /**\n * @deprecated Use resources instead\n */\n resource?: string;\n /**\n * Array of resource URIs to be queried.\n */\n resources?: Array<string>;\n /**\n * Specifies the format results should be returned as.\n */\n resultFormat?: ResultFormat;\n /**\n * If dashboardTime is set to true this value dictates which column the time filter will be applied to. Defaults to the first tables timeSpan column, the first datetime column found, or TimeGenerated\n */\n timeColumn?: string;\n /**\n * Workspace ID. This was removed in Grafana 8, but remains for backwards compat.\n */\n workspace?: string;\n}\n\nexport const defaultAzureLogsQuery: Partial<AzureLogsQuery> = {\n resources: [],\n};\n\n/**\n * Application Insights Traces sub-query properties\n */\nexport interface AzureTracesQuery {\n /**\n * Filters for property values.\n */\n filters?: Array<AzureTracesFilter>;\n /**\n * Operation ID. Used only for Traces queries.\n */\n operationId?: string;\n /**\n * KQL query to be executed.\n */\n query?: string;\n /**\n * Array of resource URIs to be queried.\n */\n resources?: Array<string>;\n /**\n * Specifies the format results should be returned as.\n */\n resultFormat?: ResultFormat;\n /**\n * Types of events to filter by.\n */\n traceTypes?: Array<string>;\n}\n\nexport const defaultAzureTracesQuery: Partial<AzureTracesQuery> = {\n filters: [],\n resources: [],\n traceTypes: [],\n};\n\nexport interface AzureTracesFilter {\n /**\n * Values to filter by.\n */\n filters: Array<string>;\n /**\n * Comparison operator to use. Either equals or not equals.\n */\n operation: string;\n /**\n * Property name, auto-populated based on available traces.\n */\n property: string;\n}\n\nexport const defaultAzureTracesFilter: Partial<AzureTracesFilter> = {\n filters: [],\n};\n\nexport enum ResultFormat {\n Logs = 'logs',\n Table = 'table',\n TimeSeries = 'time_series',\n Trace = 'trace',\n}\n\nexport enum LogsEditorMode {\n Builder = 'builder',\n Raw = 'raw',\n}\n\nexport enum BuilderQueryEditorExpressionType {\n And = 'and',\n Function_parameter = 'function_parameter',\n Group_by = 'group_by',\n Operator = 'operator',\n Or = 'or',\n Order_by = 'order_by',\n Property = 'property',\n Reduce = 'reduce',\n}\n\nexport enum BuilderQueryEditorPropertyType {\n Boolean = 'boolean',\n Datetime = 'datetime',\n Function = 'function',\n Interval = 'interval',\n Number = 'number',\n String = 'string',\n Time_span = 'time_span',\n}\n\nexport enum BuilderQueryEditorOrderByOptions {\n Asc = 'asc',\n Desc = 'desc',\n}\n\nexport interface BuilderQueryEditorProperty {\n name: string;\n type: BuilderQueryEditorPropertyType;\n}\n\nexport interface BuilderQueryEditorPropertyExpression {\n property: BuilderQueryEditorProperty;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport interface BuilderQueryEditorColumnsExpression {\n columns?: Array<string>;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport const defaultBuilderQueryEditorColumnsExpression: Partial<BuilderQueryEditorColumnsExpression> = {\n columns: [],\n};\n\nexport interface SelectableValue {\n label: string;\n value: string;\n}\n\nexport type BuilderQueryEditorOperatorType = (string | boolean | number | SelectableValue);\n\nexport interface BuilderQueryEditorOperator {\n labelValue?: string;\n name: string;\n value: string;\n}\n\nexport interface BuilderQueryEditorWhereExpressionItems {\n operator: BuilderQueryEditorOperator;\n property: BuilderQueryEditorProperty;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport interface BuilderQueryEditorWhereExpression {\n expressions: Array<BuilderQueryEditorWhereExpressionItems>;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport const defaultBuilderQueryEditorWhereExpression: Partial<BuilderQueryEditorWhereExpression> = {\n expressions: [],\n};\n\nexport interface BuilderQueryEditorWhereExpressionArray {\n expressions: Array<BuilderQueryEditorWhereExpression>;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport const defaultBuilderQueryEditorWhereExpressionArray: Partial<BuilderQueryEditorWhereExpressionArray> = {\n expressions: [],\n};\n\nexport interface BuilderQueryEditorFunctionParameterExpression {\n fieldType: BuilderQueryEditorPropertyType;\n type: BuilderQueryEditorExpressionType;\n value: string;\n}\n\nexport interface BuilderQueryEditorReduceExpression {\n focus?: boolean;\n parameters?: Array<BuilderQueryEditorFunctionParameterExpression>;\n property?: BuilderQueryEditorProperty;\n reduce?: BuilderQueryEditorProperty;\n}\n\nexport const defaultBuilderQueryEditorReduceExpression: Partial<BuilderQueryEditorReduceExpression> = {\n parameters: [],\n};\n\nexport interface BuilderQueryEditorReduceExpressionArray {\n expressions: Array<BuilderQueryEditorReduceExpression>;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport const defaultBuilderQueryEditorReduceExpressionArray: Partial<BuilderQueryEditorReduceExpressionArray> = {\n expressions: [],\n};\n\nexport interface BuilderQueryEditorGroupByExpression {\n focus?: boolean;\n interval?: BuilderQueryEditorProperty;\n property?: BuilderQueryEditorProperty;\n type?: BuilderQueryEditorExpressionType;\n}\n\nexport interface BuilderQueryEditorGroupByExpressionArray {\n expressions: Array<BuilderQueryEditorGroupByExpression>;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport const defaultBuilderQueryEditorGroupByExpressionArray: Partial<BuilderQueryEditorGroupByExpressionArray> = {\n expressions: [],\n};\n\nexport interface BuilderQueryEditorOrderByExpression {\n order: BuilderQueryEditorOrderByOptions;\n property: BuilderQueryEditorProperty;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport interface BuilderQueryEditorOrderByExpressionArray {\n expressions: Array<BuilderQueryEditorOrderByExpression>;\n type: BuilderQueryEditorExpressionType;\n}\n\nexport const defaultBuilderQueryEditorOrderByExpressionArray: Partial<BuilderQueryEditorOrderByExpressionArray> = {\n expressions: [],\n};\n\nexport interface BuilderQueryExpression {\n columns?: BuilderQueryEditorColumnsExpression;\n from?: BuilderQueryEditorPropertyExpression;\n fuzzySearch?: BuilderQueryEditorWhereExpressionArray;\n groupBy?: BuilderQueryEditorGroupByExpressionArray;\n limit?: number;\n orderBy?: BuilderQueryEditorOrderByExpressionArray;\n reduce?: BuilderQueryEditorReduceExpressionArray;\n timeFilter?: BuilderQueryEditorWhereExpressionArray;\n where?: BuilderQueryEditorWhereExpressionArray;\n}\n\nexport enum ARGScope {\n Directory = 'directory',\n Subscription = 'subscription',\n}\n\nexport interface AzureResourceGraphQuery {\n /**\n * Azure Resource Graph KQL query to be executed.\n */\n query?: string;\n /**\n * Specifies the format results should be returned as. Defaults to table.\n */\n resultFormat?: string;\n /**\n * Specifies the scope of the query. Defaults to subscription.\n */\n scope?: ARGScope;\n}\n\nexport interface AzureMonitorResource {\n metricNamespace?: string;\n region?: string;\n resourceGroup?: string;\n resourceName?: string;\n subscription?: string;\n}\n\nexport interface AzureMetricDimension {\n /**\n * Name of Dimension to be filtered on.\n */\n dimension?: string;\n /**\n * @deprecated filter is deprecated in favour of filters to support multiselect.\n */\n filter?: string;\n /**\n * Values to match with the filter.\n */\n filters?: Array<string>;\n /**\n * String denoting the filter operation. Supports 'eq' - equals,'ne' - not equals, 'sw' - starts with. Note that some dimensions may not support all operators.\n */\n operator?: string;\n}\n\nexport const defaultAzureMetricDimension: Partial<AzureMetricDimension> = {\n filters: [],\n};\n\nexport type GrafanaTemplateVariableQueryType = ('AppInsightsMetricNameQuery' | 'AppInsightsGroupByQuery' | 'SubscriptionsQuery' | 'ResourceGroupsQuery' | 'ResourceNamesQuery' | 'MetricNamespaceQuery' | 'MetricNamesQuery' | 'WorkspacesQuery' | 'UnknownQuery');\n\nexport interface BaseGrafanaTemplateVariableQuery {\n rawQuery?: string;\n}\n\nexport interface UnknownQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'UnknownQuery';\n}\n\nexport interface AppInsightsMetricNameQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'AppInsightsMetricNameQuery';\n}\n\nexport interface AppInsightsGroupByQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'AppInsightsGroupByQuery';\n metricName: string;\n}\n\nexport interface SubscriptionsQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'SubscriptionsQuery';\n}\n\nexport interface ResourceGroupsQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'ResourceGroupsQuery';\n subscription: string;\n}\n\nexport interface ResourceNamesQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'ResourceNamesQuery';\n metricNamespace: string;\n resourceGroup: string;\n subscription: string;\n}\n\nexport interface MetricNamespaceQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'MetricNamespaceQuery';\n metricNamespace?: string;\n resourceGroup: string;\n resourceName?: string;\n subscription: string;\n}\n\n/**\n * @deprecated Use MetricNamespaceQuery instead\n */\nexport interface MetricDefinitionsQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'MetricDefinitionsQuery';\n metricNamespace?: string;\n resourceGroup: string;\n resourceName?: string;\n subscription: string;\n}\n\nexport interface MetricNamesQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'MetricNamesQuery';\n metricNamespace: string;\n resourceGroup: string;\n resourceName: string;\n subscription: string;\n}\n\nexport interface WorkspacesQuery extends BaseGrafanaTemplateVariableQuery {\n kind: 'WorkspacesQuery';\n subscription: string;\n}\n\nexport type GrafanaTemplateVariableQuery = (AppInsightsMetricNameQuery | AppInsightsGroupByQuery | SubscriptionsQuery | ResourceGroupsQuery | ResourceNamesQuery | MetricNamespaceQuery | MetricDefinitionsQuery | MetricNamesQuery | WorkspacesQuery | UnknownQuery);\n\nexport interface AzureMonitorDataQuery {}\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../node_modules/prismjs/themes/prism-tomorrow.min.css\"],\"names\":[],\"mappings\":\"AAAA,6CAA6C,UAAU,CAAC,cAAc,CAAC,iEAAiE,CAAC,aAAa,CAAC,eAAe,CAAC,eAAe,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,CAAC,sBAAsB,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,uDAAuD,kBAAkB,CAAC,iCAAiC,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,8EAA8E,UAAU,CAAC,mBAAmB,UAAU,CAAC,4DAA4D,aAAa,CAAC,qBAAqB,aAAa,CAAC,6CAA6C,aAAa,CAAC,gEAAgE,aAAa,CAAC,6EAA6E,aAAa,CAAC,yEAAyE,aAAa,CAAC,yCAAyC,aAAa,CAAC,6BAA6B,eAAe,CAAC,cAAc,iBAAiB,CAAC,cAAc,WAAW,CAAC,gBAAgB,WAAW\",\"sourcesContent\":[\"code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","import { find, get } from 'lodash';\n\nimport { FetchResponse } from '@grafana/runtime';\n\nimport TimeGrainConverter from '../time_grain_converter';\nimport {\n AzureAPIResponse,\n AzureMonitorLocalizedValue,\n AzureMonitorLocations,\n AzureMonitorMetricAvailabilityMetadata,\n AzureMonitorMetricsMetadataResponse,\n AzureMonitorOption,\n Location,\n Subscription,\n} from '../types/types';\n\nexport default class ResponseParser {\n static parseResponseValues<T>(\n result: AzureAPIResponse<T>,\n textFieldName: string,\n valueFieldName: string\n ): Array<{ text: string; value: string }> {\n const list: Array<{ text: string; value: string }> = [];\n\n if (!result) {\n return list;\n }\n\n for (let i = 0; i < result.value.length; i++) {\n if (!find(list, ['value', get(result.value[i], valueFieldName)])) {\n const value = get(result.value[i], valueFieldName);\n const text = get(result.value[i], textFieldName, value);\n\n list.push({\n text: text,\n value: value,\n });\n }\n }\n return list;\n }\n\n static parseMetadata(result: AzureMonitorMetricsMetadataResponse, metricName: string) {\n const defaultAggTypes = ['None', 'Average', 'Minimum', 'Maximum', 'Total', 'Count'];\n const metricData = result?.value.find((v) => v.name.value === metricName);\n\n if (!metricData) {\n return {\n primaryAggType: '',\n supportedAggTypes: defaultAggTypes,\n supportedTimeGrains: [],\n dimensions: [],\n };\n }\n\n return {\n primaryAggType: metricData.primaryAggregationType,\n supportedAggTypes: metricData.supportedAggregationTypes || defaultAggTypes,\n\n supportedTimeGrains: [\n { label: 'Auto', value: 'auto' },\n ...ResponseParser.parseTimeGrains(metricData.metricAvailabilities ?? []),\n ],\n dimensions: ResponseParser.parseDimensions(metricData.dimensions ?? []),\n };\n }\n\n static parseTimeGrains(metricAvailabilities: AzureMonitorMetricAvailabilityMetadata[]): AzureMonitorOption[] {\n const timeGrains: AzureMonitorOption[] = [];\n\n if (!metricAvailabilities) {\n return timeGrains;\n }\n\n metricAvailabilities.forEach((avail) => {\n if (avail.timeGrain) {\n timeGrains.push({\n label: TimeGrainConverter.createTimeGrainFromISO8601Duration(avail.timeGrain),\n value: avail.timeGrain,\n });\n }\n });\n\n return timeGrains;\n }\n\n static parseDimensions(metadataDimensions: AzureMonitorLocalizedValue[]) {\n return metadataDimensions.map((dimension) => {\n return {\n label: dimension.localizedValue || dimension.value,\n value: dimension.value,\n };\n });\n }\n\n static parseSubscriptions(result: AzureAPIResponse<Subscription>): Array<{ text: string; value: string }> {\n const list: Array<{ text: string; value: string }> = [];\n\n if (!result) {\n return list;\n }\n\n const valueFieldName = 'subscriptionId';\n const textFieldName = 'displayName';\n for (let i = 0; i < result.value.length; i++) {\n if (!find(list, ['value', get(result.value[i], valueFieldName)])) {\n list.push({\n text: `${get(result.value[i], textFieldName)}`,\n value: get(result.value[i], valueFieldName),\n });\n }\n }\n\n return list;\n }\n\n static parseSubscriptionsForSelect(\n result?: FetchResponse<AzureAPIResponse<Subscription>>\n ): Array<{ label: string; value: string }> {\n const list: Array<{ label: string; value: string }> = [];\n\n if (!result) {\n return list;\n }\n\n const valueFieldName = 'subscriptionId';\n const textFieldName = 'displayName';\n for (let i = 0; i < result.data.value.length; i++) {\n if (!find(list, ['value', get(result.data.value[i], valueFieldName)])) {\n list.push({\n label: `${get(result.data.value[i], textFieldName)} - ${get(result.data.value[i], valueFieldName)}`,\n value: get(result.data.value[i], valueFieldName),\n });\n }\n }\n\n return list;\n }\n\n static parseLocations(result: AzureAPIResponse<Location>) {\n const locations: AzureMonitorLocations[] = [];\n\n if (!result) {\n return locations;\n }\n\n for (const location of result.value) {\n locations.push({ name: location.name, displayName: location.displayName, supportsLogs: undefined });\n }\n\n return locations;\n }\n}\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","import React__default from 'react';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorRows = ({ children }) => {\n return /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 0.5, direction: \"column\" }, children);\n};\n\nexport { EditorRows };\n//# sourceMappingURL=EditorRows.js.map\n","import { useEffect } from 'react';\nvar useEffectOnce = function (effect) {\n useEffect(effect, []);\n};\nexport default useEffectOnce;\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","import { DataSourcePlugin, DashboardLoadedEvent } from '@grafana/data';\nimport { initPluginTranslations } from '@grafana/i18n';\nimport { getAppEvents } from '@grafana/runtime';\n\nimport { ConfigEditor } from './components/ConfigEditor/ConfigEditor';\nimport AzureMonitorQueryEditor from './components/QueryEditor/QueryEditor';\nimport Datasource from './datasource';\nimport pluginJson from './plugin.json';\nimport { trackAzureMonitorDashboardLoaded } from './tracking';\nimport { AzureMonitorQuery, AzureQueryType, ResultFormat } from './types/query';\nimport { AzureMonitorDataSourceJsonData } from './types/types';\n\n// don't load plugin translations in test environments\n// we don't use them anyway, and top-level await won't work currently in jest\nif (process.env.NODE_ENV !== 'test') {\n await initPluginTranslations(pluginJson.id);\n}\n\nexport const plugin = new DataSourcePlugin<Datasource, AzureMonitorQuery, AzureMonitorDataSourceJsonData>(Datasource)\n .setConfigEditor(ConfigEditor)\n .setQueryEditor(AzureMonitorQueryEditor);\n\ninterface Statistics {\n hidden: number;\n visible: number;\n multiResource: number;\n count: number;\n [key: string]: number;\n}\n\n// Track dashboard loads to RudderStack\ngetAppEvents().subscribe<DashboardLoadedEvent<AzureMonitorQuery>>(\n DashboardLoadedEvent,\n ({ payload: { dashboardId, orgId, userId, grafanaVersion, queries } }) => {\n const azureQueries = queries[pluginJson.id];\n const common = {\n hidden: 0,\n visible: 0,\n multiResource: 0,\n count: 0,\n };\n let stats: { [key in AzureQueryType | string]: Statistics } = {\n [AzureQueryType.AzureMonitor]: {\n ...common,\n },\n [AzureQueryType.LogAnalytics]: {\n ...common,\n grafanaTime: 0,\n queryTime: 0,\n },\n [AzureQueryType.AzureResourceGraph]: {\n ...common,\n },\n [AzureQueryType.AzureTraces]: {\n ...common,\n table: 0,\n trace: 0,\n operationIdSpecified: 0,\n eventTypesSpecified: 0,\n filtersSpecified: 0,\n },\n [AzureQueryType.SubscriptionsQuery]: { ...common },\n [AzureQueryType.ResourceGroupsQuery]: { ...common },\n [AzureQueryType.NamespacesQuery]: { ...common },\n [AzureQueryType.ResourceNamesQuery]: { ...common },\n [AzureQueryType.MetricNamesQuery]: { ...common },\n [AzureQueryType.WorkspacesQuery]: { ...common },\n [AzureQueryType.GrafanaTemplateVariableFn]: { ...common },\n [AzureQueryType.LocationsQuery]: { ...common },\n unknown: { ...common },\n };\n\n azureQueries.forEach((query) => {\n if (query.queryType === AzureQueryType.AzureMonitor) {\n stats[AzureQueryType.AzureMonitor][query.hide ? 'hidden' : 'visible']++;\n if (query.azureMonitor?.resources && query.azureMonitor.resources.length > 1) {\n stats[AzureQueryType.AzureMonitor].multiResource++;\n }\n }\n if (query.queryType === AzureQueryType.LogAnalytics) {\n stats[AzureQueryType.LogAnalytics][query.hide ? 'hidden' : 'visible']++;\n stats[AzureQueryType.LogAnalytics][query.azureLogAnalytics?.dashboardTime ? 'grafanaTime' : 'queryTime']++;\n if (query.azureLogAnalytics?.resources && query.azureLogAnalytics.resources.length > 1) {\n stats[AzureQueryType.LogAnalytics].multiResource++;\n }\n }\n if (query.queryType === AzureQueryType.AzureResourceGraph) {\n stats[AzureQueryType.AzureResourceGraph][query.hide ? 'hidden' : 'visible']++;\n if (query.subscriptions && query.subscriptions.length > 1) {\n stats[AzureQueryType.AzureResourceGraph].multiResource++;\n }\n }\n if (query.queryType === AzureQueryType.AzureTraces) {\n stats[AzureQueryType.AzureTraces][query.hide ? 'hidden' : 'visible']++;\n if (query.azureTraces) {\n if (query.azureTraces.resultFormat) {\n stats[AzureQueryType.AzureTraces][\n query.azureTraces.resultFormat === ResultFormat.Trace ? ResultFormat.Trace : ResultFormat.Table\n ]++;\n }\n if (query.azureTraces.resources && query.azureTraces.resources.length > 1) {\n stats[AzureQueryType.AzureTraces].multiResource++;\n }\n if (query.azureTraces.operationId && query.azureTraces.operationId !== '') {\n stats[AzureQueryType.AzureTraces].operationIdSpecified++;\n }\n if (query.azureTraces.traceTypes && query.azureTraces.traceTypes.length > 0) {\n stats[AzureQueryType.AzureTraces].eventTypesSpecified++;\n }\n if (query.azureTraces.filters && query.azureTraces.filters.length > 0) {\n stats[AzureQueryType.AzureTraces].filtersSpecified++;\n }\n }\n }\n\n switch (query.queryType) {\n case AzureQueryType.AzureMonitor:\n case AzureQueryType.LogAnalytics:\n case AzureQueryType.AzureResourceGraph:\n case AzureQueryType.AzureTraces:\n case AzureQueryType.SubscriptionsQuery:\n case AzureQueryType.ResourceGroupsQuery:\n case AzureQueryType.NamespacesQuery:\n case AzureQueryType.ResourceNamesQuery:\n case AzureQueryType.MetricNamesQuery:\n case AzureQueryType.WorkspacesQuery:\n case AzureQueryType.GrafanaTemplateVariableFn:\n case AzureQueryType.LocationsQuery:\n stats[query.queryType].count++;\n break;\n default:\n stats.unknown.count++;\n }\n });\n\n if (azureQueries && azureQueries.length > 0) {\n trackAzureMonitorDashboardLoaded({\n grafana_version: grafanaVersion,\n dashboard_id: dashboardId,\n org_id: orgId,\n // Metrics queries stats\n azure_monitor_queries: stats[AzureQueryType.AzureMonitor].visible,\n azure_monitor_queries_hidden: stats[AzureQueryType.AzureMonitor].hidden,\n azure_monitor_multiple_resource: stats[AzureQueryType.AzureMonitor].multiResource,\n azure_monitor_query: stats[AzureQueryType.AzureMonitor].count,\n\n // Logs queries stats\n azure_log_analytics_queries: stats[AzureQueryType.LogAnalytics].visible,\n azure_log_analytics_queries_hidden: stats[AzureQueryType.LogAnalytics].hidden,\n azure_log_multiple_resource: stats[AzureQueryType.LogAnalytics].multiResource,\n azure_log_analytics_queries_grafana_time: stats[AzureQueryType.LogAnalytics].grafanaTime,\n azure_log_analytics_queries_query_time: stats[AzureQueryType.LogAnalytics].queryTime,\n azure_log_query: stats[AzureQueryType.LogAnalytics].count,\n\n // ARG queries stats\n azure_resource_graph_queries: stats[AzureQueryType.AzureResourceGraph].visible,\n azure_resource_graph_queries_hidden: stats[AzureQueryType.AzureResourceGraph].hidden,\n azure_resource_graph_multiple_subscription: stats[AzureQueryType.AzureResourceGraph].multiResource,\n azure_resource_graph_query: stats[AzureQueryType.AzureResourceGraph].count,\n\n // Traces queries stats\n azure_traces_queries: stats[AzureQueryType.AzureTraces].visible,\n azure_traces_queries_hidden: stats[AzureQueryType.AzureTraces].hidden,\n azure_traces_multiple_resource: stats[AzureQueryType.AzureTraces].multiResource,\n azure_traces_table: stats[AzureQueryType.AzureTraces].table,\n azure_traces_trace: stats[AzureQueryType.AzureTraces].trace,\n azure_traces_operation_id_specified: stats[AzureQueryType.AzureTraces].operationIdSpecified,\n azure_traces_event_type_specified: stats[AzureQueryType.AzureTraces].eventTypesSpecified,\n azure_traces_filters: stats[AzureQueryType.AzureTraces].filtersSpecified,\n azure_traces_query: stats[AzureQueryType.AzureTraces].count,\n\n // Variable queries stats\n azure_subscriptions_query: stats[AzureQueryType.SubscriptionsQuery].count,\n azure_resource_groups_query: stats[AzureQueryType.ResourceGroupsQuery].count,\n azure_namespaces_query: stats[AzureQueryType.NamespacesQuery].count,\n azure_resource_names_query: stats[AzureQueryType.ResourceNamesQuery].count,\n azure_metric_names_query: stats[AzureQueryType.MetricNamesQuery].count,\n azure_workspaces_query: stats[AzureQueryType.WorkspacesQuery].count,\n azure_grafana_template_variable_query: stats[AzureQueryType.GrafanaTemplateVariableFn].count,\n azure_locations_query: stats[AzureQueryType.LocationsQuery].count,\n\n // Unknown query type\n azure_unknown_query: stats.unknown.count,\n });\n }\n }\n);\n","import { AzureMetricDimension, AzureMonitorQuery } from '../../types/query';\n\nexport function setCustomNamespace(query: AzureMonitorQuery, selection: string | undefined): AzureMonitorQuery {\n if (query.azureMonitor?.customNamespace === selection) {\n return query;\n }\n\n if (selection?.toLowerCase().startsWith('microsoft.storage/storageaccounts/')) {\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n metricNamespace: selection,\n metricName: undefined,\n aggregation: undefined,\n timeGrain: '',\n dimensionFilters: [],\n },\n };\n }\n\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n customNamespace: selection,\n metricName: undefined,\n aggregation: undefined,\n timeGrain: '',\n dimensionFilters: [],\n },\n };\n}\n\nexport function setMetricName(query: AzureMonitorQuery, metricName: string | undefined): AzureMonitorQuery {\n if (query.azureMonitor?.metricName === metricName) {\n return query;\n }\n\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n metricName: metricName,\n aggregation: undefined,\n timeGrain: '',\n dimensionFilters: [],\n },\n };\n}\n\nexport function setAggregation(query: AzureMonitorQuery, aggregation: string): AzureMonitorQuery {\n if (query.azureMonitor?.aggregation === aggregation) {\n return query;\n }\n\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n aggregation: aggregation,\n },\n };\n}\n\nexport function setTimeGrain(query: AzureMonitorQuery, timeGrain: string): AzureMonitorQuery {\n if (query.azureMonitor?.timeGrain === timeGrain) {\n return query;\n }\n\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n timeGrain: timeGrain,\n },\n };\n}\n\nexport function setDimensionFilters(query: AzureMonitorQuery, dimensions: AzureMetricDimension[]): AzureMonitorQuery {\n if (query.azureMonitor?.dimensionFilters === dimensions) {\n return query;\n }\n\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n dimensionFilters: dimensions,\n },\n };\n}\n\nexport function appendDimensionFilter(\n query: AzureMonitorQuery,\n dimension = '',\n operator = 'eq',\n filters: string[] = []\n): AzureMonitorQuery {\n const existingFilters = query.azureMonitor?.dimensionFilters ?? [];\n\n return setDimensionFilters(query, [\n ...existingFilters,\n {\n dimension,\n operator,\n filters,\n },\n ]);\n}\n\nexport function removeDimensionFilter(query: AzureMonitorQuery, indexToRemove: number): AzureMonitorQuery {\n const existingFilters = query.azureMonitor?.dimensionFilters ?? [];\n const newFilters = [...existingFilters];\n newFilters.splice(indexToRemove, 1);\n return setDimensionFilters(query, newFilters);\n}\n\nexport function setDimensionFilterValue<Key extends keyof AzureMetricDimension>(\n query: AzureMonitorQuery,\n index: number,\n fieldName: Key,\n value: AzureMetricDimension[Key]\n): AzureMonitorQuery {\n const existingFilters = query.azureMonitor?.dimensionFilters ?? [];\n const newFilters = [...existingFilters];\n const newFilter = newFilters[index];\n newFilter[fieldName] = value;\n if (fieldName === 'dimension' || fieldName === 'operator') {\n newFilter.filters = [];\n }\n return setDimensionFilters(query, newFilters);\n}\n\nexport function setTop(query: AzureMonitorQuery, top: string): AzureMonitorQuery {\n if (query.azureMonitor?.top === top) {\n return query;\n }\n\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n top: top,\n },\n };\n}\n\nexport function setLegendAlias(query: AzureMonitorQuery, alias: string): AzureMonitorQuery {\n if (query.azureMonitor?.alias === alias) {\n return query;\n }\n\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n alias: alias,\n },\n };\n}\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2, ReactUtils, Tooltip, Icon, Space, Field } from '@grafana/ui';\n\nconst EditorField = (props) => {\n var _a;\n const { label, optional, tooltip, tooltipInteractive, children, width, ...fieldProps } = props;\n const styles = useStyles2(getStyles, width);\n const childInputId = (fieldProps == null ? undefined : fieldProps.htmlFor) || ((_a = ReactUtils) == null ? undefined : _a.getChildId(children));\n const labelEl = /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(\"label\", { className: styles.label, htmlFor: childInputId }, label, optional && /* @__PURE__ */ React__default.createElement(\"span\", { className: styles.optional }, \" - optional\"), tooltip && /* @__PURE__ */ React__default.createElement(Tooltip, { placement: \"top\", content: tooltip, theme: \"info\", interactive: tooltipInteractive }, /* @__PURE__ */ React__default.createElement(Icon, { tabIndex: 0, name: \"info-circle\", size: \"sm\", className: styles.icon }))), /* @__PURE__ */ React__default.createElement(Space, { v: 0.5 }));\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, /* @__PURE__ */ React__default.createElement(Field, { className: styles.field, label: labelEl, ...fieldProps }, children));\n};\nconst getStyles = (theme, width) => {\n return {\n root: css({\n minWidth: theme.spacing(width != null ? width : 0)\n }),\n label: css({\n fontSize: 12,\n fontWeight: theme.typography.fontWeightMedium\n }),\n optional: css({\n fontStyle: \"italic\",\n color: theme.colors.text.secondary\n }),\n field: css({\n marginBottom: 0\n // GrafanaUI/Field has a bottom margin which we must remove\n }),\n icon: css({\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(1),\n \":hover\": {\n color: theme.colors.text.primary\n }\n })\n };\n};\n\nexport { EditorField };\n//# sourceMappingURL=EditorField.js.map\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","module.exports = __WEBPACK_EXTERNAL_MODULE__4831__;","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","import { reportInteraction } from '@grafana/runtime';\n\n/**\n * Loaded the first time a dashboard containing azure queries is loaded (not on every render)\n * Note: The queries used here are the ones pre-migration and pre-filterQuery\n *\n * This allows answering questions about:\n * - the adoption of the three query types (Azure Monitor, Azure Logs Analytics and Azure Resource Graph)\n * - stats about number of azure dashboards loaded, number of users\n * - stats about the grafana and plugins versions used by our users\n *\n * Dashboard: https://ops.grafana.net/d/Ad0pti0N/data-sources-adoption-tracking?orgId=1\n * Changelog:\n * - v9.1.0 : list of queries logged\n * - v9.1.2 : list removed in favour of stats, user_id removed\n */\nexport const trackAzureMonitorDashboardLoaded = (props: AzureMonitorDashboardLoadedProps) => {\n reportInteraction('grafana_ds_azuremonitor_dashboard_loaded', props);\n};\n\nexport type AzureMonitorDashboardLoadedProps = {\n grafana_version?: string;\n dashboard_id: string;\n org_id?: number;\n\n /** number of non hidden queries of type Azure Monitor if any */\n azure_monitor_queries: number;\n /** number of hidden queries (not executed) of type Azure Monitor if any */\n azure_monitor_queries_hidden: number;\n /** number of Azure Monitor queries using multiple resources */\n azure_monitor_multiple_resource: number;\n /** number of Azure Monitor queries */\n azure_monitor_query: number;\n\n /** number of non hidden queries of type Azure Logs Analytics if any */\n azure_log_analytics_queries: number;\n /** number of hidden queries (not executed) of type Azure Logs Analytics if any */\n azure_log_analytics_queries_hidden: number;\n /** number of Azure Log Analytics queries using multiple resources */\n azure_log_multiple_resource: number;\n /** number of Azure Log Analytics queries using time-range defined explicitly in query */\n azure_log_analytics_queries_query_time: number;\n /** number of Azure Log Analytics queries using Grafana time-range */\n azure_log_analytics_queries_grafana_time: number;\n /** number of Azure Log Analytics queries */\n azure_log_query: number;\n\n /** number of non hidden queries of type Azure Resource Graph if any */\n azure_resource_graph_queries: number;\n /** number of hidden queries (not executed) of type Azure Resource Graph if any */\n azure_resource_graph_queries_hidden: number;\n /** number of Azure Resource Graph queries using multiple subscriptions */\n azure_resource_graph_multiple_subscription: number;\n /** number of Azure Resource Graph queries */\n azure_resource_graph_query: number;\n\n /** number of non hidden queries of type Azure Traces if any */\n azure_traces_queries: number;\n /** number of hidden queries of type Azure Traces if any */\n azure_traces_queries_hidden: number;\n /** number of trace queries using multiple resources */\n azure_traces_multiple_resource: number;\n /** number of trace queries using table format */\n azure_traces_table: number;\n /** number of trace queries using trace format */\n azure_traces_trace: number;\n /** number of trace queries specifying operation ID */\n azure_traces_operation_id_specified: number;\n /** number of trace queries specifying event types */\n azure_traces_event_type_specified: number;\n /** number of trace queries using filters */\n azure_traces_filters: number;\n /** number of Azure Traces queries */\n azure_traces_query: number;\n\n /** variable query tracking */\n azure_subscriptions_query: number;\n azure_resource_groups_query: number;\n azure_namespaces_query: number;\n azure_resource_names_query: number;\n azure_metric_names_query: number;\n azure_workspaces_query: number;\n azure_grafana_template_variable_query: number;\n azure_locations_query: number;\n azure_unknown_query: number;\n};\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","/**\nThis list is obtained parsing https://docs.microsoft.com/en-us/azure/governance/resource-graph/reference/supported-tables-resources\nTo programatically get the list, execute in the browser console:\n \n const i = {};\n document.querySelectorAll('li').forEach((li) => { \n const m = li.textContent.match(/(.*\\..*\\/.*?)\\s\\((.*)\\)/);\n if (m) {\n i[m[1].toLowerCase()] = m[2];\n }\n });\n i;\n \nNote: Validate that the output makes sense, the format of the page may change.\n */\nexport const resourceTypeDisplayNames: { [k: string]: string } = {\n '84codes.cloudamqp/servers': 'CloudAMQP',\n 'citrix.services/xenappessentials': 'Citrix Virtual Apps Essentials',\n 'citrix.services/xendesktopessentials': 'Citrix Virtual Desktops Essentials',\n 'dynatrace.observability/monitors': 'Dynatrace',\n 'github.enterprise/accounts': 'GitHub AE',\n 'livearena.broadcast/services': 'LiveArena Broadcast',\n 'mailjet.email/services': 'Mailjet Email Service',\n 'microsoft.aad/domainservices': 'Azure AD Domain Services',\n 'microsoft.aadiam/privatelinkforazuread': 'Private Link for Azure AD',\n 'microsoft.agfoodplatform/farmbeats': 'Azure FarmBeats',\n 'microsoft.analysisservices/servers': 'Analysis Services',\n 'microsoft.anybuild/clusters': 'AnyBuild clusters',\n 'microsoft.apimanagement/service': 'API Management services',\n 'microsoft.appconfiguration/configurationstores': 'App Configuration',\n 'microsoft.appplatform/spring': 'Azure Spring Cloud',\n 'microsoft.attestation/attestationproviders': 'Attestation providers',\n 'microsoft.authorization/resourcemanagementprivatelinks': 'Resource management private links',\n 'microsoft.automation/automationaccounts': 'Automation Accounts',\n 'microsoft.automation/automationaccounts/runbooks': 'Runbook',\n 'microsoft.autonomoussystems/workspaces': 'Bonsai',\n 'microsoft.avs/privateclouds': 'AVS Private clouds',\n 'microsoft.azureactivedirectory/b2cdirectories': 'B2C Tenants',\n 'microsoft.azureactivedirectory/guestusages': 'Guest Usages',\n 'microsoft.azurearcdata/datacontrollers': 'Azure Arc data controllers',\n 'microsoft.azurearcdata/postgresinstances': 'Azure Arc-enabled PostgreSQL Hyperscale server groups',\n 'microsoft.azurearcdata/sqlmanagedinstances': 'SQL managed instances - Azure Arc',\n 'microsoft.azurearcdata/sqlserverinstances': 'SQL Server - Azure Arc',\n 'microsoft.azuredata/sqlserverregistrations': 'SQL Server registries',\n 'microsoft.azurepercept/accounts': 'Azure Percept accounts',\n 'microsoft.azurestack/registrations': 'Azure Stack Hubs',\n 'microsoft.azurestackhci/clusters': 'Azure Stack HCI',\n 'microsoft.azurestackhci/virtualmachines': 'Azure Stack HCI virtual machine - Azure Arc',\n 'microsoft.baremetal/crayservers': 'Cray Servers',\n 'microsoft.baremetal/monitoringservers': 'Monitoring Servers',\n 'microsoft.baremetalinfrastructure/baremetalinstances': 'BareMetal Instances',\n 'microsoft.batch/batchaccounts': 'Batch accounts',\n 'microsoft.bing/accounts': 'Bing Resources',\n 'microsoft.blockchain/blockchainmembers': 'Azure Blockchain Service',\n 'microsoft.blockchain/cordamembers': 'Corda',\n 'microsoft.botservice/botservices': 'Bot Services',\n 'microsoft.cache/redis': 'Azure Cache for Redis',\n 'microsoft.cache/redisenterprise': 'Redis Enterprise',\n 'microsoft.cdn/cdnwebapplicationfirewallpolicies': 'Content Delivery Network WAF policies',\n 'microsoft.cdn/profiles': '(Front Doors Standard/Premium Preview)',\n 'microsoft.cdn/profiles/afdendpoints': 'Endpoints',\n 'microsoft.cdn/profiles/endpoints': 'Endpoints',\n 'microsoft.certificateregistration/certificateorders': 'App Service Certificates',\n 'microsoft.chaos/chaosexperiments': 'Chaos Experiments (Classic)',\n 'microsoft.chaos/experiments': 'Chaos Experiments',\n 'microsoft.classiccompute/domainnames': 'Cloud services (classic)',\n 'microsoft.classiccompute/virtualmachines': 'Virtual machines (classic)',\n 'microsoft.classicnetwork/networksecuritygroups': 'Network security groups (classic)',\n 'microsoft.classicnetwork/reservedips': 'Reserved IP addresses (classic)',\n 'microsoft.classicnetwork/virtualnetworks': 'Virtual networks (classic)',\n 'microsoft.classicstorage/storageaccounts': 'Storage accounts (classic)',\n 'microsoft.cloudtest/accounts': 'CloudTest Accounts',\n 'microsoft.cloudtest/hostedpools': '1ES Hosted Pools',\n 'microsoft.cloudtest/images': 'CloudTest Images',\n 'microsoft.cloudtest/pools': 'CloudTest Pools',\n 'microsoft.cognition/syntheticsaccounts': 'Synthetics Accounts',\n 'microsoft.clusterstor/nodes': 'ClusterStors',\n 'microsoft.cognitiveservices/accounts': 'Cognitive Services',\n 'microsoft.compute/availabilitysets': 'Availability sets',\n 'microsoft.compute/capacityreservationgroups': 'Capacity Reservation Groups',\n 'microsoft.compute/cloudservices': 'Cloud services (extended support)',\n 'microsoft.compute/diskaccesses': 'Disk Accesses',\n 'microsoft.compute/diskencryptionsets': 'Disk Encryption Sets',\n 'microsoft.compute/disks': 'Disks',\n 'microsoft.compute/galleries': 'Azure compute galleries',\n 'microsoft.compute/galleries/applications': 'VM application definitions',\n 'microsoft.compute/galleries/applications/versions': 'VM application versions',\n 'microsoft.compute/galleries/images': 'VM image definitions',\n 'microsoft.compute/galleries/images/versions': 'VM image versions',\n 'microsoft.compute/hostgroups': 'Host groups',\n 'microsoft.compute/hostgroups/hosts': 'Hosts',\n 'microsoft.compute/images': 'Images',\n 'microsoft.compute/proximityplacementgroups': 'Proximity placement groups',\n 'microsoft.compute/restorepointcollections': 'Restore Point Collections',\n 'microsoft.compute/snapshots': 'Snapshots',\n 'microsoft.compute/sshpublickeys': 'SSH keys',\n 'microsoft.compute/virtualmachines': 'Virtual machines',\n 'microsoft.compute/virtualmachinescalesets': 'Virtual machine scale sets',\n 'microsoft.confidentialledger/ledgers': 'Confidential Ledgers',\n 'microsoft.confluent/organizations': 'Confluent organizations',\n 'microsoft.connectedcache/cachenodes': 'Connected Cache Resources',\n 'microsoft.connectedcache/enterprisecustomers': 'Connected Cache Resources',\n 'microsoft.connectedvehicle/platformaccounts': 'Connected Vehicle Platforms',\n 'microsoft.connectedvmwarevsphere/vcenters': 'VMware vCenters',\n 'microsoft.connectedvmwarevsphere/virtualmachines': 'VMware + AVS virtual machines',\n 'microsoft.containerinstance/containergroups': 'Container instances',\n 'microsoft.containerregistry/registries': 'Container registries',\n 'microsoft.containerregistry/registries/replications': 'Container registry replications',\n 'microsoft.containerregistry/registries/webhooks': 'Container registry webhooks',\n 'microsoft.containerservice/managedclusters': 'Kubernetes services',\n 'microsoft.dashboard/grafana': 'Grafana Workspaces',\n 'microsoft.databox/jobs': 'Azure Data Box',\n 'microsoft.databoxedge/databoxedgedevices': 'Azure Stack Edge / Data Box Gateway',\n 'microsoft.databricks/workspaces': 'Azure Databricks Services',\n 'microsoft.datacatalog/catalogs': 'Data Catalog',\n 'microsoft.datacollaboration/workspaces': 'Project CI',\n 'microsoft.datadog/monitors': 'Datadog',\n 'microsoft.datafactory/datafactories': 'Data factories',\n 'microsoft.datafactory/factories': 'Data factories (V2)',\n 'microsoft.datalakeanalytics/accounts': 'Data Lake Analytics',\n 'microsoft.datalakestore/accounts': 'Data Lake Storage Gen1',\n 'microsoft.datamigration/services': 'Azure Database Migration Services',\n 'microsoft.datamigration/services/projects': 'Azure Database Migration Projects',\n 'microsoft.datamigration/sqlmigrationservices': 'Azure Database Migration Services',\n 'microsoft.dataprotection/backupvaults': 'Backup vaults',\n 'microsoft.dataprotection/resourceguards': 'Resource Guards (Preview)',\n 'microsoft.datareplication/replicationvaults': 'Site Recovery Vaults',\n 'microsoft.datashare/accounts': 'Data Shares',\n 'microsoft.dbformariadb/servers': 'Azure Database for MariaDB servers',\n 'microsoft.dbformysql/flexibleservers': 'Azure Database for MySQL flexible servers',\n 'microsoft.dbformysql/servers': 'Azure Database for MySQL servers',\n 'microsoft.dbforpostgresql/flexibleservers': 'Azure Database for PostgreSQL flexible servers',\n 'microsoft.dbforpostgresql/servergroups': 'Azure Database for PostgreSQL server groups',\n 'microsoft.dbforpostgresql/servergroupsv2': 'Azure Database for PostgreSQL server groups',\n 'microsoft.dbforpostgresql/servers': 'Azure Database for PostgreSQL servers',\n 'microsoft.dbforpostgresql/serversv2': 'Azure Database for PostgreSQL servers v2',\n 'microsoft.deploymentmanager/rollouts': 'Rollouts',\n 'microsoft.desktopvirtualization/applicationgroups': 'Application groups',\n 'microsoft.desktopvirtualization/hostpools': 'Host pools',\n 'microsoft.desktopvirtualization/scalingplans': 'Scaling plans',\n 'microsoft.desktopvirtualization/workspaces': 'Workspaces',\n 'microsoft.devices/iothubs': 'IoT Hub',\n 'microsoft.devices/provisioningservices': 'Device Provisioning Services',\n 'microsoft.deviceupdate/accounts': 'Device Update for IoT Hubs',\n 'microsoft.devops/pipelines': 'DevOps Starter',\n 'microsoft.devtestlab/labs': 'DevTest Labs',\n 'microsoft.devtestlab/labs/virtualmachines': 'Virtual machines',\n 'microsoft.digitaltwins/digitaltwinsinstances': 'Azure Digital Twins',\n 'microsoft.documentdb/cassandraclusters': 'Azure Managed Instance for Apache Cassandra',\n 'microsoft.documentdb/databaseaccounts': 'Azure Cosmos DB accounts',\n 'microsoft.domainregistration/domains': 'App Service Domains',\n 'microsoft.edgeorder/addresses': 'Azure Edge Hardware Center Address',\n 'microsoft.edgeorder/orderitems': 'Azure Edge Hardware Center',\n 'microsoft.elastic/monitors': 'Elasticsearch (Elastic Cloud)',\n 'microsoft.eventgrid/domains': 'Event Grid Domains',\n 'microsoft.eventgrid/partnernamespaces': 'Event Grid Partner Namespaces',\n 'microsoft.eventgrid/partnerregistrations': 'Event Grid Partner Registrations',\n 'microsoft.eventgrid/partnertopics': 'Event Grid Partner Topics',\n 'microsoft.eventgrid/systemtopics': 'Event Grid System Topics',\n 'microsoft.eventgrid/topics': 'Event Grid Topics',\n 'microsoft.eventhub/clusters': 'Event Hubs Clusters',\n 'microsoft.eventhub/namespaces': 'Event Hubs Namespaces',\n 'microsoft.experimentation/experimentworkspaces': 'Experiment Workspaces',\n 'microsoft.extendedlocation/customlocations': 'Custom locations',\n 'microsoft.fidalgo/devcenters': 'Fidalgo DevCenters',\n 'microsoft.fidalgo/networksettings': 'Network Configurations',\n 'microsoft.fidalgo/projects': 'Fidalgo Projects',\n 'microsoft.fidalgo/projects/environments': 'Fidalgo Environments',\n 'microsoft.fluidrelay/fluidrelayservers': 'Fluid Relay',\n 'microsoft.genomics/accounts': 'Genomics accounts',\n 'microsoft.hanaonazure/hanainstances': 'SAP HANA on Azure',\n 'microsoft.hanaonazure/sapmonitors': 'Azure Monitors for SAP Solutions',\n 'microsoft.hdinsight/clusterpools': 'HDInsight cluster pools',\n 'microsoft.hdinsight/clusterpools/clusters': 'HDInsight gen2 clusters',\n 'microsoft.hdinsight/clusterpools/clusters/sessionclusters': 'HDInsight session clusters',\n 'microsoft.hdinsight/clusters': 'HDInsight clusters',\n 'microsoft.healthbot/healthbots': 'Azure Health Bot',\n 'microsoft.healthcareapis/services': 'Azure API for FHIR',\n 'microsoft.healthcareapis/workspaces': 'Healthcare APIs Workspaces',\n 'microsoft.healthcareapis/workspaces/dicomservices': 'DICOM services',\n 'microsoft.healthcareapis/workspaces/fhirservices': 'FHIR services',\n 'microsoft.healthcareapis/workspaces/iotconnectors': 'IoT connectors',\n 'microsoft.hpcworkbench/instances': 'HPC Workbenches (preview)',\n 'microsoft.hpcworkbench/instances/chambers': 'Chambers (preview)',\n 'microsoft.hpcworkbench/instances/chambers/accessprofiles': 'Chamber Profiles (preview)',\n 'microsoft.hpcworkbench/instances/chambers/workloads': 'Chamber VMs (preview)',\n 'microsoft.hpcworkbench/instances/consortiums': 'Consortiums (preview)',\n 'microsoft.hybridcompute/machines': 'Servers - Azure Arc',\n 'microsoft.hybridcompute/privatelinkscopes': 'Azure Arc Private Link Scopes',\n 'microsoft.hybridcontainerservice/provisionedclusters': 'Provisioned clusters',\n 'microsoft.hybriddata/datamanagers': 'StorSimple Data Managers',\n 'microsoft.hybridnetwork/devices': 'Azure Network Function Manager – Devices',\n 'microsoft.hybridnetwork/networkfunctions': 'Azure Network Function Manager – Network Functions',\n 'microsoft.importexport/jobs': 'Import/export jobs',\n 'microsoft.insights/components': 'Application Insights',\n 'microsoft.insights/datacollectionendpoints': 'Data collection endpoints',\n 'microsoft.insights/datacollectionrules': 'Data collection rules',\n 'microsoft.insights/privatelinkscopes': 'Azure Monitor Private Link Scopes',\n 'microsoft.insights/webtests': 'Availability tests',\n 'microsoft.insights/workbooks': 'Azure Workbooks',\n 'microsoft.insights/workbooktemplates': 'Azure Workbook Templates',\n 'microsoft.intelligentitdigitaltwin/digitaltwins': 'Minervas',\n 'microsoft.intelligentitdigitaltwin/digitaltwins/assets': 'Assets',\n 'microsoft.intelligentitdigitaltwin/digitaltwins/executionplans': 'Deployments',\n 'microsoft.intelligentitdigitaltwin/digitaltwins/testplans': 'Suites',\n 'microsoft.intelligentitdigitaltwin/digitaltwins/tests': 'Scripts',\n 'microsoft.iotcentral/iotapps': 'IoT Central Applications',\n 'microsoft.keyvault/vaults': 'Key vaults',\n 'microsoft.kubernetes/connectedclusters': 'Kubernetes - Azure Arc',\n 'microsoft.kusto/clusters': 'Azure Data Explorer Clusters',\n 'microsoft.kusto/clusters/databases': 'Azure Data Explorer Databases',\n 'microsoft.labservices/labaccounts': 'Lab Services',\n 'microsoft.labservices/labplans': 'Lab plans',\n 'microsoft.labservices/labs': 'Labs',\n 'microsoft.loadtestservice/loadtests': 'Azure Load Testing',\n 'microsoft.logic/integrationaccounts': 'Integration accounts',\n 'microsoft.logic/integrationserviceenvironments': 'Integration Service Environments',\n 'microsoft.logic/integrationserviceenvironments/managedapis': 'Managed Connector',\n 'microsoft.logic/workflows': 'Logic apps',\n 'microsoft.logz/monitors': 'Logz main account',\n 'microsoft.logz/monitors/accounts': 'Logz sub account',\n 'microsoft.logz/monitors/metricssource': 'Logz metrics data source',\n 'microsoft.machinelearning/commitmentplans': 'Machine Learning Studio (classic) web service plans',\n 'microsoft.machinelearning/webservices': 'Machine Learning Studio (classic) web services',\n 'microsoft.machinelearning/workspaces': 'Machine Learning Studio (classic) workspaces',\n 'microsoft.machinelearningservices/workspaces': 'Machine learning',\n 'microsoft.machinelearningservices/workspaces/onlineendpoints': 'Machine learning online endpoints',\n 'microsoft.machinelearningservices/workspaces/onlineendpoints/deployments': 'Machine learning online deployments',\n 'microsoft.maintenance/maintenanceconfigurations': 'Maintenance Configurations',\n 'microsoft.managedidentity/userassignedidentities': 'Managed Identities',\n 'microsoft.maps/accounts': 'Azure Maps Accounts',\n 'microsoft.maps/accounts/creators': 'Azure Maps Creator Resources',\n 'microsoft.marketplaceapps/classicdevservices': 'Classic Dev Services',\n 'microsoft.media/mediaservices': 'Media Services',\n 'microsoft.media/mediaservices/liveevents': 'Live events',\n 'microsoft.media/mediaservices/streamingendpoints': 'Streaming Endpoints',\n 'microsoft.media/videoanalyzers': 'Video Analyzers',\n 'microsoft.migrate/projects': 'Migration projects',\n 'microsoft.mixedreality/holographicsbroadcastaccounts': 'Holographics Broadcast Accounts',\n 'microsoft.mixedreality/objectanchorsaccounts': 'Object Anchors Accounts',\n 'microsoft.mixedreality/objectunderstandingaccounts': 'Object Understanding Accounts',\n 'microsoft.mixedreality/remoterenderingaccounts': 'Remote Rendering Accounts',\n 'microsoft.mixedreality/spatialanchorsaccounts': 'Spatial Anchors Accounts',\n 'microsoft.mobilenetwork/mobilenetworks': 'Mobile Networks',\n 'microsoft.mobilenetwork/mobilenetworks/datanetworks': 'Data Networks',\n 'microsoft.mobilenetwork/mobilenetworks/services': 'Services',\n 'microsoft.mobilenetwork/mobilenetworks/simpolicies': 'Sim Policies',\n 'microsoft.mobilenetwork/mobilenetworks/sites': 'Mobile Network Sites',\n 'microsoft.mobilenetwork/mobilenetworks/slices': 'Slices',\n 'microsoft.mobilenetwork/packetcorecontrolplanes': 'Packet Core Control Planes',\n 'microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes': 'Packet Core Data Planes',\n 'microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes/attacheddatanetworks': 'Attached Data Networks',\n 'microsoft.mobilenetwork/sims': 'Sims',\n 'microsoft.netapp/netappaccounts': 'NetApp accounts',\n 'microsoft.netapp/netappaccounts/capacitypools': 'Capacity pools',\n 'microsoft.netapp/netappaccounts/capacitypools/volumes': 'Volumes',\n 'microsoft.netapp/netappaccounts/capacitypools/volumes/snapshots': 'Snapshots',\n 'microsoft.netapp/netappaccounts/snapshotpolicies': 'Snapshot policies',\n 'microsoft.network/applicationgateways': 'Application gateways',\n 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies': 'Application Gateway WAF policies',\n 'microsoft.network/applicationsecuritygroups': 'Application security groups',\n 'microsoft.network/azurefirewalls': 'Firewalls',\n 'microsoft.network/bastionhosts': 'Bastions',\n 'microsoft.network/connections': 'Connections',\n 'microsoft.network/customipprefixes': 'Custom IP Prefixes',\n 'microsoft.network/ddosprotectionplans': 'DDoS protection plans',\n 'microsoft.network/dnsforwardingrulesets': 'Dns Forwarding Rulesets',\n 'microsoft.network/dnsresolvers': 'DNS Private Resolvers',\n 'microsoft.network/dnszones': 'DNS zones',\n 'microsoft.network/expressroutecircuits': 'ExpressRoute circuits',\n 'microsoft.network/expressrouteports': 'ExpressRoute Direct',\n 'microsoft.network/firewallpolicies': 'Firewall Policies',\n 'microsoft.network/frontdoors': 'Front Doors',\n 'microsoft.network/frontdoorwebapplicationfirewallpolicies': 'Web Application Firewall policies (WAF)',\n 'microsoft.network/ipgroups': 'IP Groups',\n 'microsoft.network/loadbalancers': 'Load balancers',\n 'microsoft.network/localnetworkgateways': 'Local network gateways',\n 'microsoft.network/natgateways': 'NAT gateways',\n 'microsoft.network/networkexperimentprofiles': 'Internet Analyzer profiles',\n 'microsoft.network/networkinterfaces': 'Network interfaces',\n 'microsoft.network/networkmanagers': 'Network Managers',\n 'microsoft.network/networksecuritygroups': 'Network security groups',\n 'microsoft.network/networkwatchers': 'Network Watchers',\n 'microsoft.network/networkwatchers/connectionmonitors': 'Connection Monitors',\n 'microsoft.network/networkwatchers/flowlogs': 'NSG Flow Logs',\n 'microsoft.network/privatednszones': 'Private DNS zones',\n 'microsoft.network/privateendpoints': 'Private endpoints',\n 'microsoft.network/privatelinkservices': 'Private link services',\n 'microsoft.network/publicipaddresses': 'Public IP addresses',\n 'microsoft.network/publicipprefixes': 'Public IP Prefixes',\n 'microsoft.network/routefilters': 'Route filters',\n 'microsoft.network/routetables': 'Route tables',\n 'microsoft.network/serviceendpointpolicies': 'Service endpoint policies',\n 'microsoft.network/trafficmanagerprofiles': 'Traffic Manager profiles',\n 'microsoft.network/virtualnetworkgateways': 'Virtual network gateways',\n 'microsoft.network/virtualnetworks': 'Virtual networks',\n 'microsoft.network/virtualwans': 'Virtual WANs',\n 'microsoft.notificationhubs/namespaces': 'Notification Hub Namespaces',\n 'microsoft.notificationhubs/namespaces/notificationhubs': 'Notification Hubs',\n 'microsoft.openenergyplatform/energyservices': 'Azure OpenEnergy',\n 'microsoft.openlogisticsplatform/workspaces': 'Open Supply Chain Platform',\n 'microsoft.operationalinsights/querypacks': 'Log Analytics query packs',\n 'microsoft.operationalinsights/workspaces': 'Log Analytics workspaces',\n 'microsoft.operationsmanagement/solutions': 'Solutions',\n 'microsoft.orbital/contactprofiles': 'Contact Profiles',\n 'microsoft.orbital/edgesites': 'Edge Sites',\n 'microsoft.orbital/groundstations': 'Ground Stations',\n 'microsoft.orbital/l2connections': 'L2 Connections',\n 'microsoft.orbital/spacecrafts': 'Spacecrafts',\n 'microsoft.peering/peerings': 'Peerings',\n 'microsoft.peering/peeringservices': 'Peering Services',\n 'microsoft.playfab/playeraccountpools': 'Player account pools',\n 'microsoft.playfab/titles': 'PlayFab titles',\n 'microsoft.portal/dashboards': 'Shared dashboards',\n 'microsoft.powerbidedicated/capacities': 'Power BI Embedded',\n 'microsoft.purview/accounts': 'Purview accounts',\n 'microsoft.quantum/workspaces': 'Quantum Workspaces',\n 'microsoft.recommendationsservice/accounts': 'Intelligent Recommendations Accounts',\n 'microsoft.recommendationsservice/accounts/modeling': 'Modeling',\n 'microsoft.recommendationsservice/accounts/serviceendpoints': 'Service Endpoints',\n 'microsoft.recoveryservices/vaults': 'Recovery Services vaults',\n 'microsoft.recoveryservices/vaults/backupfabrics/protectioncontainers/protecteditems': 'Backup Items',\n 'microsoft.redhatopenshift/openshiftclusters': 'Azure Red Hat OpenShift',\n 'microsoft.relay/namespaces': 'Relays',\n 'microsoft.resourceconnector/appliances': 'Resource bridges',\n 'microsoft.resourcegraph/queries': 'Resource Graph queries',\n 'microsoft.resources/deploymentscripts': 'Deployment Scripts',\n 'microsoft.resources/subscriptions': 'Subscriptions',\n 'microsoft.resources/subscriptions/resourcegroups': 'Resource groups',\n 'microsoft.resources/templatespecs': 'Template specs',\n 'microsoft.saas/applications': 'Software as a Service (classic)',\n 'microsoft.saas/resources': 'SaaS',\n 'microsoft.scheduler/jobcollections': 'Scheduler Job Collections',\n 'microsoft.scom/managedinstances': 'Aquila Instances',\n 'microsoft.scvmm/virtualmachines': 'SCVMM virtual machine - Azure Arc',\n 'microsoft.scvmm/vmmservers': 'SCVMM management servers',\n 'microsoft.search/searchservices': 'Search services',\n 'microsoft.security/insights/classification': 'Data Sensitivity Security Insights (Preview)',\n 'microsoft.security/locations/alerts': 'Security Alerts',\n 'microsoft.securitydetonation/chambers': 'Security Detonation Chambers',\n 'microsoft.servicebus/namespaces': 'Service Bus Namespaces',\n 'microsoft.servicefabric/clusters': 'Service Fabric clusters',\n 'microsoft.servicefabric/managedclusters': 'Service Fabric managed clusters',\n 'microsoft.serviceshub/connectors': 'Services Hub Connectors',\n 'microsoft.signalrservice/signalr': 'SignalR',\n 'microsoft.signalrservice/webpubsub': 'Web PubSub Service',\n 'microsoft.solutions/applicationdefinitions': 'Service catalog managed application definitions',\n 'microsoft.solutions/applications': 'Managed applications',\n 'microsoft.sql/instancepools': 'Instance pools',\n 'microsoft.sql/managedinstances': 'SQL managed instances',\n 'microsoft.sql/managedinstances/databases': 'Managed databases',\n 'microsoft.sql/servers': 'SQL servers',\n 'microsoft.sql/servers/databases': 'SQL databases',\n 'microsoft.sql/servers/elasticpools': 'SQL elastic pools',\n 'microsoft.sql/servers/jobagents': 'Elastic Job agents',\n 'microsoft.sql/virtualclusters': 'Virtual clusters',\n 'microsoft.sqlvirtualmachine/sqlvirtualmachines': 'SQL virtual machines',\n 'microsoft.storage/storageaccounts': 'Storage accounts',\n 'microsoft.storagecache/amlfilesystems': 'Lustre File Systems',\n 'microsoft.storagecache/caches': 'HPC caches',\n 'microsoft.storagepool/diskpools': 'Disk Pools',\n 'microsoft.storagesync/storagesyncservices': 'Storage Sync Services',\n 'microsoft.storagesyncdev/storagesyncservices': 'Storage Sync Services',\n 'microsoft.storagesyncint/storagesyncservices': 'Storage Sync Services',\n 'microsoft.storsimple/managers': 'StorSimple Device Managers',\n 'microsoft.streamanalytics/clusters': 'Stream Analytics clusters',\n 'microsoft.streamanalytics/streamingjobs': 'Stream Analytics jobs',\n 'microsoft.synapse/privatelinkhubs': 'Azure Synapse Analytics (private link hubs)',\n 'microsoft.synapse/workspaces': 'Azure Synapse Analytics',\n 'microsoft.synapse/workspaces/bigdatapools': 'Apache Spark pools',\n 'microsoft.synapse/workspaces/kustopools': 'Data Explorer pools (preview)',\n 'microsoft.synapse/workspaces/sqlpools': 'Dedicated SQL pools',\n 'microsoft.testbase/testbaseaccounts': 'Test Base Accounts',\n 'microsoft.testbase/testbaseaccounts/packages': 'Test Base Packages',\n 'microsoft.timeseriesinsights/environments': 'Time Series Insights environments',\n 'microsoft.timeseriesinsights/environments/eventsources': 'Time Series Insights event sources',\n 'microsoft.timeseriesinsights/environments/referencedatasets': 'Time Series Insights reference data sets',\n 'microsoft.videoindexer/accounts': 'Video Analyzer for Media',\n 'microsoft.virtualmachineimages/imagetemplates': 'Image Templates',\n 'microsoft.visualstudio/account': 'Azure DevOps organizations',\n 'microsoft.visualstudio/account/project': 'DevOps Starter',\n 'microsoft.vmwarecloudsimple/dedicatedcloudnodes': 'CloudSimple Nodes',\n 'microsoft.vmwarecloudsimple/dedicatedcloudservices': 'CloudSimple Services',\n 'microsoft.vmwarecloudsimple/virtualmachines': 'CloudSimple Virtual Machines',\n 'microsoft.vsonline/plans': 'Visual Studio Online Plans',\n 'microsoft.web/connectiongateways': 'On-premises data gateways',\n 'microsoft.web/connections': 'API Connections',\n 'microsoft.web/containerapps': 'Container Apps',\n 'microsoft.web/customapis': 'Logic Apps Custom Connector',\n 'microsoft.web/hostingenvironments': 'App Service Environments',\n 'microsoft.web/kubeenvironments': 'App Service Kubernetes Environments',\n 'microsoft.web/serverfarms': 'App Service plans',\n 'microsoft.web/sites': 'App Services',\n 'microsoft.web/sites/slots': 'App Service (Slots)',\n 'microsoft.web/staticsites': 'Static Web Apps',\n 'microsoft.windowsesu/multipleactivationkeys': 'Windows Multiple Activation Keys',\n 'microsoft.windowsiot/deviceservices': 'Windows 10 IoT Core Services',\n 'microsoft.workloads/monitors': 'Azure Monitors for SAP Solutions (v2)',\n 'microsoft.workloads/phpworkloads': 'Scalable WordPress on Linux',\n 'microsoft.workloads/sapvirtualinstances': 'SAP Virtual Instances',\n 'microsoft.workloads/sapvirtualinstances/applicationinstances': 'SAP app server instances',\n 'microsoft.workloads/sapvirtualinstances/centralinstances': 'SAP central server instances',\n 'microsoft.workloads/sapvirtualinstances/databaseinstances': 'SAP database server instances',\n 'nginx.nginxplus/nginxdeployments': 'NGINX Deployment',\n 'paraleap.cloudmonix/services': 'CloudMonix',\n 'pokitdok.platform/services': 'PokitDok Platform',\n 'providers.test/statefulibizaengines': 'My Resources',\n 'ravenhq.db/databases': 'RavenHQ',\n 'raygun.crashreporting/apps': 'Raygun',\n 'sendgrid.email/accounts': 'SendGrid Accounts',\n 'trendmicro.deepsecurity/accounts': 'Deep Security SaaS',\n 'wandisco.fusion/fusiongroups': 'LiveData Planes',\n 'wandisco.fusion/fusiongroups/azurezones': 'Azure Zones',\n 'wandisco.fusion/fusiongroups/azurezones/plugins': 'Plugins',\n 'wandisco.fusion/fusiongroups/hivereplicationrules': 'Hive Replication Rules',\n 'wandisco.fusion/fusiongroups/managedonpremzones': 'On-premises Zones',\n 'wandisco.fusion/fusiongroups/replicationrules': 'Replication Rules',\n 'wandisco.fusion/migrators': 'LiveData Migrators',\n 'wandisco.fusion/migrators/exclusiontemplates': 'Exclusions',\n 'wandisco.fusion/migrators/livedatamigrations': 'Migrations',\n 'wandisco.fusion/migrators/metadatamigrations': 'Metadata Migrations',\n 'wandisco.fusion/migrators/metadatatargets': 'Metadata Targets',\n 'wandisco.fusion/migrators/pathmappings': 'Path Mappings',\n 'wandisco.fusion/migrators/targets': 'Targets',\n};\n\n// This list has been manually written using the Azure Portal as the source.\n// Visit https://portal.azure.com/#view/Microsoft_Azure_Monitoring/AzureMonitoringBrowseBlade/~/metrics\n// and go to Select a scope > Resource types > Multi-resource compatible (preview)\nexport const multiResourceCompatibleTypes: { [ns: string]: boolean } = {\n 'microsoft.cache/redis': true, // 'Azure Cache for Redis'\n 'microsoft.documentdb/mongoclusters': true, // 'Azure Cosmos DB for MongoDB'\n 'microsoft.dbforpostgresql/flexibleservers': true, // 'Azure Database for PostgreSQL flexible servers'\n 'microsoft.storagecache/amlfilesystems': true, // 'Lustre File Systems'\n 'microsoft.monitor/accounts': true, // Azure Monitor Workspaces\n 'microsoft.databoxedge/databoxedgedevices': true, // 'Azure Stack Edge / Data Box Gateway'\n 'microsoft.azurestackhci/clusters': true, // 'Azure Stack HCI'\n 'microsoft.dataprotection/backupvaults': true, // 'Backup vaults'\n 'microsoft.networkcloud/baremetalmachines': true, // 'Bare Metal Machines'\n 'microsoft.netapp/netappaccounts/capacitypools': true, // 'Capacity pools'\n 'microsoft.netapp/netappaccounts/capacitypools/volumes': true, // 'Capacity pool volumes'\n 'microsoft.network/networkwatchers/connectionmonitors': true, // 'Connection Monitors'\n 'microsoft.keyvault/vaults': true, // 'Key vaults'\n 'microsoft.recoveryservices/vaults': true, // 'Recovery Services vaults'\n 'microsoft.sql/servers/databases': true, // 'SQL databases'\n 'microsoft.sql/servers/elasticpools': true, // 'SQL elastic pools'\n 'microsoft.compute/virtualmachinescalesets': true, // 'Virtual machine scale sets'\n 'microsoft.compute/virtualmachines': true, // 'Virtual machines'\n 'microsoft.signalrservice/webpubsub': true, // 'Web PubSub Service'\n};\n\nexport const resourceTypes = [\n 'microsoft.aad/domainservices',\n 'microsoft.aadiam/azureadmetrics',\n 'microsoft.analysisservices/servers',\n 'microsoft.apimanagement/service',\n 'microsoft.app/containerapps',\n 'microsoft.app/jobs',\n 'microsoft.app/managedenvironments',\n 'microsoft.appconfiguration/configurationstores',\n 'microsoft.appplatform/spring',\n 'microsoft.automation/automationaccounts',\n 'microsoft.avs/privateclouds',\n 'microsoft.azuresphere/catalogs',\n 'microsoft.azurestackhci/clusters',\n 'microsoft.azurestackresourcemonitor/storageaccountmonitor',\n 'microsoft.batch/batchaccounts',\n 'microsoft.batchai/workspaces',\n 'microsoft.bing/accounts',\n 'microsoft.botservice/botservices',\n 'microsoft.botservice/botservices/channels',\n 'microsoft.botservice/botservices/connections',\n 'microsoft.botservice/checknameavailability',\n 'microsoft.botservice/hostsettings',\n 'microsoft.botservice/listauthserviceproviders',\n 'microsoft.botservice/listqnamakerendpointkeys',\n 'microsoft.cache/redis',\n 'microsoft.cache/redisenterprise',\n 'microsoft.cdn/cdnwebapplicationfirewallpolicies',\n 'microsoft.cdn/profiles',\n 'microsoft.classiccompute/domainnames',\n 'microsoft.classiccompute/domainnames/slots/roles',\n 'microsoft.classiccompute/virtualmachines',\n 'microsoft.classicstorage/storageaccounts',\n 'microsoft.classicstorage/storageaccounts/blobservices',\n 'microsoft.classicstorage/storageaccounts/fileservices',\n 'microsoft.classicstorage/storageaccounts/queueservices',\n 'microsoft.classicstorage/storageaccounts/tableservices',\n 'microsoft.cloudtest/hostedpools',\n 'microsoft.cloudtest/pools',\n 'microsoft.clusterstor/nodes',\n 'microsoft.codesigning/codesigningaccounts',\n 'microsoft.cognitiveservices/accounts',\n 'microsoft.communication/communicationservices',\n 'microsoft.compute/cloudservices',\n 'microsoft.compute/cloudservices/roles',\n 'microsoft.compute/disks',\n 'microsoft.compute/virtualmachines',\n 'microsoft.compute/virtualmachinescalesets',\n 'microsoft.compute/virtualmachinescalesets/virtualmachines',\n 'microsoft.connectedcache/cachenodes',\n 'microsoft.connectedcache/enterprisemcccustomers',\n 'microsoft.connectedcache/ispcustomers',\n 'microsoft.connectedvehicle/platformaccounts',\n 'microsoft.containerinstance/containergroups',\n 'microsoft.containerinstance/containerscalesets',\n 'microsoft.containerregistry/registries',\n 'microsoft.containerservice/managedclusters',\n 'microsoft.customerinsights/hubs',\n 'microsoft.customproviders/resourceproviders',\n 'microsoft.dashboard/grafana',\n 'microsoft.databoxedge/databoxedgedevices',\n 'microsoft.databricks/workspaces',\n 'microsoft.datacollaboration/workspaces',\n 'microsoft.datafactory/datafactories',\n 'microsoft.datafactory/factories',\n 'microsoft.datalakeanalytics/accounts',\n 'microsoft.datalakestore/accounts',\n 'microsoft.dataprotection/backupvaults',\n 'microsoft.datashare/accounts',\n 'microsoft.dbformariadb/servers',\n 'microsoft.dbformysql/flexibleservers',\n 'microsoft.dbformysql/servers',\n 'microsoft.dbforpostgresql/flexibleservers',\n 'microsoft.dbforpostgresql/servergroupsv2',\n 'microsoft.dbforpostgresql/servers',\n 'microsoft.dbforpostgresql/serversv2',\n 'microsoft.devcenter/devcenters',\n 'microsoft.devices/iothubs',\n 'microsoft.devices/provisioningservices',\n 'microsoft.devopsinfrastructure/pools',\n 'microsoft.digitaltwins/digitaltwinsinstances',\n 'microsoft.documentdb/cassandraclusters',\n 'microsoft.documentdb/databaseaccounts',\n 'microsoft.documentdb/mongoclusters',\n 'microsoft.edgezones/edgezones',\n 'microsoft.elasticsan/elasticsans',\n 'microsoft.enterpriseknowledgegraph/services',\n 'microsoft.eventgrid/domains',\n 'microsoft.eventgrid/eventsubscriptions',\n 'microsoft.eventgrid/extensiontopics',\n 'microsoft.eventgrid/namespaces',\n 'microsoft.eventgrid/partnernamespaces',\n 'microsoft.eventgrid/partnertopics',\n 'microsoft.eventgrid/systemtopics',\n 'microsoft.eventgrid/topics',\n 'microsoft.eventhub/clusters',\n 'microsoft.eventhub/namespaces',\n 'microsoft.fabric.admin/fabriclocations',\n 'microsoft.hdinsight/clusters',\n 'microsoft.healthcareapis/services',\n 'microsoft.healthcareapis/workspaces/dicomservices',\n 'microsoft.healthcareapis/workspaces/fhirservices',\n 'microsoft.healthcareapis/workspaces/iotconnectors',\n 'microsoft.healthmodel/healthmodels',\n 'microsoft.hybridcontainerservice/provisionedclusters',\n 'microsoft.hybridnetwork/networkfunctions',\n 'microsoft.hybridnetwork/virtualnetworkfunctions',\n 'microsoft.insights/autoscalesettings',\n 'microsoft.insights/components',\n 'microsoft.insights/datacollectionrules',\n 'microsoft.iotcentral/iotapps',\n 'microsoft.iotspaces/graph',\n 'microsoft.keyvault/managedhsms',\n 'microsoft.keyvault/vaults',\n 'microsoft.kubernetes/connectedclusters',\n 'microsoft.kubernetesconfiguration/extensions',\n 'microsoft.kusto/clusters',\n 'microsoft.logic/integrationserviceenvironments',\n 'microsoft.logic/workflows',\n 'microsoft.machinelearningservices/workspaces',\n 'microsoft.machinelearningservices/workspaces/onlineendpoints',\n 'microsoft.machinelearningservices/workspaces/onlineendpoints/deployments',\n 'microsoft.managednetworkfabric/internetgateways',\n 'microsoft.managednetworkfabric/l2isolationdomains',\n 'microsoft.managednetworkfabric/l3isolationdomains',\n 'microsoft.managednetworkfabric/networkdevices',\n 'microsoft.maps/accounts',\n 'microsoft.media/mediaservices',\n 'microsoft.media/mediaservices/liveevents',\n 'microsoft.media/mediaservices/streamingendpoints',\n 'microsoft.media/videoanalyzers',\n 'microsoft.messagingconnectors/connectors',\n 'microsoft.mixedreality/remoterenderingaccounts',\n 'microsoft.mixedreality/spatialanchorsaccounts',\n 'microsoft.mobilenetwork/mobilenetworks/sites',\n 'microsoft.mobilenetwork/packetcorecontrolplanes',\n 'microsoft.mobilenetwork/packetcorecontrolplanes/packetcoredataplanes',\n 'microsoft.mobilenetwork/radioaccessnetworks',\n 'microsoft.monitor/accounts',\n 'microsoft.netapp/netappaccounts/capacitypools',\n 'microsoft.netapp/netappaccounts/capacitypools/volumes',\n 'microsoft.network/applicationgateways',\n 'microsoft.network/azurefirewalls',\n 'microsoft.network/bastionhosts',\n 'microsoft.network/connections',\n 'microsoft.network/dnsforwardingrulesets',\n 'microsoft.network/dnsresolverpolicies',\n 'microsoft.network/dnsresolvers',\n 'microsoft.network/dnszones',\n 'microsoft.network/expressroutecircuits',\n 'microsoft.network/expressroutecircuits/peerings',\n 'microsoft.network/expressroutegateways',\n 'microsoft.network/expressrouteports',\n 'microsoft.network/frontdoors',\n 'microsoft.network/loadbalancers',\n 'microsoft.network/natgateways',\n 'microsoft.network/networkinterfaces',\n 'microsoft.network/networkmanagers/ipampools',\n 'microsoft.network/networkvirtualappliances',\n 'microsoft.network/networkwatchers',\n 'microsoft.network/networkwatchers/connectionmonitors',\n 'microsoft.network/p2svpngateways',\n 'microsoft.network/privatednszones',\n 'microsoft.network/privateendpoints',\n 'microsoft.network/privatelinkservices',\n 'microsoft.network/publicipaddresses',\n 'microsoft.network/publicipprefixes',\n 'microsoft.network/trafficmanagerprofiles',\n 'microsoft.network/virtualhubs',\n 'microsoft.network/virtualnetworkgateways',\n 'microsoft.network/virtualnetworks',\n 'microsoft.network/virtualrouters',\n 'microsoft.network/vpngateways',\n 'microsoft.networkanalytics/dataconnectors',\n 'microsoft.networkcloud/baremetalmachines',\n 'microsoft.networkcloud/clustermanagers',\n 'microsoft.networkcloud/clusters',\n 'microsoft.networkcloud/storageappliances',\n 'microsoft.networkfunction/azuretrafficcollectors',\n 'microsoft.notificationhubs/namespaces/notificationhubs',\n 'microsoft.operationalinsights/workspaces',\n 'microsoft.operationsmanagement/solutions',\n 'microsoft.orbital/contactprofiles',\n 'microsoft.orbital/l2connections',\n 'microsoft.orbital/spacecrafts',\n 'microsoft.orbital/terminals',\n 'microsoft.peering/peerings',\n 'microsoft.peering/peeringservices',\n 'microsoft.playfab/titles',\n 'microsoft.powerbidedicated/capacities',\n 'microsoft.providerhub/providermonitorsettings',\n 'microsoft.purview/accounts',\n 'microsoft.recoveryservices/vaults',\n 'microsoft.relay/namespaces',\n 'microsoft.resources/subscriptions',\n 'microsoft.search/searchservices',\n 'microsoft.securitydetonation/chambers',\n 'microsoft.securitydetonation/securitydetonationchambers',\n 'microsoft.servicebus/namespaces',\n 'microsoft.servicefabricmesh/applications',\n 'microsoft.servicenetworking/trafficcontrollers',\n 'microsoft.signalrservice/signalr',\n 'microsoft.signalrservice/signalr/replicas',\n 'microsoft.signalrservice/webpubsub',\n 'microsoft.signalrservice/webpubsub/replicas',\n 'microsoft.singularity/accounts',\n 'microsoft.sql/managedinstances',\n 'microsoft.sql/servers/databases',\n 'microsoft.sql/servers/elasticpools',\n 'microsoft.sql/servers/jobagents',\n 'microsoft.storageactions/storagetasks',\n 'microsoft.storage/storageaccounts',\n 'microsoft.storage/storageaccounts/blobservices',\n 'microsoft.storage/storageaccounts/fileservices',\n 'microsoft.storage/storageaccounts/objectreplicationpolicies',\n 'microsoft.storage/storageaccounts/queueservices',\n 'microsoft.storage/storageaccounts/storagetasks',\n 'microsoft.storage/storageaccounts/tableservices',\n 'microsoft.storage/storagetasks',\n 'microsoft.storagecache/amlfilesystems',\n 'microsoft.storagecache/caches',\n 'microsoft.storagemover/storagemovers',\n 'microsoft.storagesync/storagesyncservices',\n 'microsoft.storagetasks/storagetasks',\n 'microsoft.streamanalytics/streamingjobs',\n 'microsoft.synapse/workspaces',\n 'microsoft.synapse/workspaces/bigdatapools',\n 'microsoft.synapse/workspaces/kustopools',\n 'microsoft.synapse/workspaces/scopepools',\n 'microsoft.synapse/workspaces/sqlpools',\n 'microsoft.timeseriesinsights/environments',\n 'microsoft.timeseriesinsights/environments/eventsources',\n 'microsoft.vmwarecloudsimple/virtualmachines',\n 'microsoft.voiceservices/communicationsgateways',\n 'microsoft.web/containerapps',\n 'microsoft.web/hostingenvironments',\n 'microsoft.web/hostingenvironments/multirolepools',\n 'microsoft.web/hostingenvironments/workerpools',\n 'microsoft.web/serverfarms',\n 'microsoft.web/sites',\n 'microsoft.web/sites/slots',\n 'microsoft.web/staticsites',\n 'nginx.nginxplus/nginxdeployments',\n 'oracle.database/autonomousdatabases',\n 'oracle.database/cloudvmclusters',\n 'oracle.database/exadbvmclusters',\n 'private.messagingconnectors/private.messagingconnectors/connectors',\n 'wandisco.fusion/migrators',\n 'wandisco.fusion/migrators/datatransferagents',\n 'wandisco.fusion/migrators/livedatamigrations',\n 'wandisco.fusion/migrators/metadatamigrations',\n];\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\n\nconst DataSourceDescription = ({ dataSourceName, docsLink, hasRequiredFields = true, className }) => {\n const theme = useTheme2();\n const styles = {\n container: css({\n p: {\n margin: 0\n },\n \"p + p\": {\n marginTop: theme.spacing(2)\n }\n }),\n text: css({\n ...theme.typography.body,\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, \"Before you can use the \", dataSourceName, \" data source, you must configure it below or in the config file. For detailed instructions,\", \" \", /* @__PURE__ */ React__default.createElement(\"a\", { href: docsLink, target: \"_blank\", rel: \"noreferrer\" }, \"view the documentation\"), \".\"), hasRequiredFields && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.text }, /* @__PURE__ */ React__default.createElement(\"i\", null, \"Fields marked with * are required\")));\n};\n\nexport { DataSourceDescription };\n//# sourceMappingURL=DataSourceDescription.js.map\n","import React__default, { useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, IconButton } from '@grafana/ui';\n\nconst GenericConfigSection = ({\n children,\n title,\n description,\n isCollapsible = false,\n isInitiallyOpen = true,\n kind = \"section\",\n className\n}) => {\n const { colors, typography, spacing } = useTheme2();\n const [isOpen, setIsOpen] = useState(isCollapsible ? isInitiallyOpen : true);\n const iconName = isOpen ? \"angle-up\" : \"angle-down\";\n const isSubSection = kind === \"sub-section\";\n const collapsibleButtonAriaLabel = `${isOpen ? \"Collapse\" : \"Expand\"} section ${title}`;\n const styles = {\n header: css({\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n }),\n title: css({\n margin: 0\n }),\n subtitle: css({\n margin: 0,\n fontWeight: typography.fontWeightRegular\n }),\n descriptionText: css({\n marginTop: spacing(isSubSection ? 0.25 : 0.5),\n marginBottom: 0,\n ...typography.bodySmall,\n color: colors.text.secondary\n }),\n content: css({\n marginTop: spacing(2)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.header }, kind === \"section\" ? /* @__PURE__ */ React__default.createElement(\"h3\", { className: styles.title }, title) : /* @__PURE__ */ React__default.createElement(\"h6\", { className: styles.subtitle }, title), isCollapsible && /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: iconName,\n onClick: () => setIsOpen(!isOpen),\n type: \"button\",\n size: \"xl\",\n \"aria-label\": collapsibleButtonAriaLabel\n }\n )), description && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.descriptionText }, description), isOpen && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { GenericConfigSection };\n//# sourceMappingURL=GenericConfigSection.js.map\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"section\" }, children);\n};\n\nexport { ConfigSection };\n//# sourceMappingURL=ConfigSection.js.map\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSubSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"sub-section\" }, children);\n};\n\nexport { ConfigSubSection };\n//# sourceMappingURL=ConfigSubSection.js.map\n","import React__default from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, TagsInput, Input } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection/ConfigSubSection.js';\nimport '@grafana/data';\n\nconst AdvancedHttpSettings = ({\n config,\n onChange,\n className\n}) => {\n const onCookiesChange = (cookies) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies\n }\n });\n };\n const onTimeoutChange = (event) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10)\n }\n });\n };\n const styles = {\n container: css({\n maxWidth: 578\n })\n };\n return /* @__PURE__ */ React__default.createElement(ConfigSubSection, { title: \"Advanced HTTP settings\", className: cx(styles.container, className) }, /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-cookies\",\n label: \"Allowed cookies\",\n labelWidth: 24,\n tooltip: \"Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n TagsInput,\n {\n id: \"advanced-http-cookies\",\n placeholder: \"New cookie (hit enter to add)\",\n tags: config.jsonData.keepCookies,\n onChange: onCookiesChange\n }\n )\n ), /* @__PURE__ */ React__default.createElement(\n InlineField,\n {\n htmlFor: \"advanced-http-timeout\",\n label: \"Timeout\",\n labelWidth: 24,\n tooltip: \"HTTP request timeout in seconds\",\n disabled: config.readOnly,\n grow: true\n },\n /* @__PURE__ */ React__default.createElement(\n Input,\n {\n id: \"advanced-http-timeout\",\n type: \"number\",\n min: 0,\n placeholder: \"Timeout in seconds\",\n \"aria-label\": \"Timeout in seconds\",\n value: config.jsonData.timeout,\n onChange: onTimeoutChange\n }\n )\n ));\n};\n\nexport { AdvancedHttpSettings };\n//# sourceMappingURL=AdvancedHttpSettings.js.map\n","import { ChangeEvent } from 'react';\n\nimport { AzureClientSecretCredentials, AzureCredentials } from '@grafana/azure-sdk';\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Field, Select, Input, Button } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\n\nexport interface AppRegistrationCredentialsProps {\n credentials: AzureClientSecretCredentials;\n azureCloudOptions?: SelectableValue[];\n onCredentialsChange: (updatedCredentials: AzureCredentials) => void;\n disabled?: boolean;\n}\n\nexport const AppRegistrationCredentials = (props: AppRegistrationCredentialsProps) => {\n const { azureCloudOptions, disabled, credentials, onCredentialsChange } = props;\n\n const onAzureCloudChange = (selected: SelectableValue<string>) => {\n const updated: AzureCredentials = {\n ...credentials,\n azureCloud: selected.value,\n };\n onCredentialsChange(updated);\n };\n\n const onTenantIdChange = (event: ChangeEvent<HTMLInputElement>) => {\n const updated: AzureCredentials = {\n ...credentials,\n tenantId: event.target.value,\n };\n onCredentialsChange(updated);\n };\n\n const onClientIdChange = (event: ChangeEvent<HTMLInputElement>) => {\n const updated: AzureCredentials = {\n ...credentials,\n clientId: event.target.value,\n };\n onCredentialsChange(updated);\n };\n\n const onClientSecretChange = (event: ChangeEvent<HTMLInputElement>) => {\n const updated: AzureCredentials = {\n ...credentials,\n clientSecret: event.target.value,\n };\n onCredentialsChange(updated);\n };\n\n const onClientSecretReset = () => {\n const updated: AzureCredentials = {\n ...credentials,\n clientSecret: '',\n };\n onCredentialsChange(updated);\n };\n\n return (\n <>\n {azureCloudOptions && (\n <Field\n label={t('components.app-registration-credentials.label-azure-cloud', 'Azure Cloud')}\n data-testid={selectors.components.configEditor.azureCloud.input}\n htmlFor=\"azure-cloud-type\"\n disabled={disabled}\n >\n <Select\n inputId=\"azure-cloud-type\"\n aria-label={t('components.app-registration-credentials.aria-label-azure-cloud', 'Azure Cloud')}\n className=\"width-15\"\n value={azureCloudOptions.find((opt) => opt.value === credentials.azureCloud)}\n options={azureCloudOptions}\n onChange={onAzureCloudChange}\n />\n </Field>\n )}\n <Field\n label={t('components.app-registration-credentials.label-tenant-id', 'Directory (tenant) ID')}\n required={credentials.authType === 'clientsecret'}\n data-testid={selectors.components.configEditor.tenantID.input}\n htmlFor=\"tenant-id\"\n invalid={credentials.authType === 'clientsecret' && !credentials.tenantId}\n error={'Tenant ID is required'}\n >\n <Input\n aria-label={t('components.app-registration-credentials.aria-label-tenant-id', 'Tenant ID')}\n className=\"width-30\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\"\n value={credentials.tenantId || ''}\n onChange={onTenantIdChange}\n disabled={disabled}\n />\n </Field>\n <Field\n label={t('components.app-registration-credentials.label-client-id', 'Application (client) ID')}\n required={credentials.authType === 'clientsecret'}\n data-testid={selectors.components.configEditor.clientID.input}\n htmlFor=\"client-id\"\n invalid={credentials.authType === 'clientsecret' && !credentials.clientId}\n error={'Client ID is required'}\n >\n <Input\n className=\"width-30\"\n aria-label={t('components.app-registration-credentials.aria-label-client-id', 'Client ID')}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\"\n value={credentials.clientId || ''}\n onChange={onClientIdChange}\n disabled={disabled}\n />\n </Field>\n {!disabled &&\n (typeof credentials.clientSecret === 'symbol' ? (\n <Field\n label={t('components.app-registration-credentials.label-symbol-client-secret', 'Client Secret')}\n htmlFor=\"client-secret\"\n required\n >\n <div className=\"width-30\" style={{ display: 'flex', gap: '4px' }}>\n <Input\n aria-label={t(\n 'components.app-registration-credentials.aria-label-symbol-client-secret',\n 'Client Secret'\n )}\n placeholder={t(\n 'components.app-registration-credentials.placeholder-symbol-client-secret',\n 'configured'\n )}\n disabled={true}\n data-testid={'client-secret'}\n />\n <Button variant=\"secondary\" type=\"button\" onClick={onClientSecretReset} disabled={disabled}>\n <Trans i18nKey=\"components.app-registration-credentials.reset-symbol-client-secret\">Reset</Trans>\n </Button>\n </div>\n </Field>\n ) : (\n <Field\n label={t('components.app-registration-credentials.label-client-secret', 'Client Secret')}\n data-testid={selectors.components.configEditor.clientSecret.input}\n required\n htmlFor=\"client-secret\"\n invalid={!credentials.clientSecret}\n error={'Client secret is required'}\n >\n <Input\n className=\"width-30\"\n aria-label={t('components.app-registration-credentials.aria-label-client-secret', 'Client Secret')}\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\"\n value={credentials.clientSecret || ''}\n onChange={onClientSecretChange}\n id=\"client-secret\"\n disabled={disabled}\n />\n </Field>\n ))}\n </>\n );\n};\n","import { useMemo } from 'react';\n\nimport { AadCurrentUserCredentials, AzureCredentials, instanceOfAzureCredential } from '@grafana/azure-sdk';\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { ConfigSection } from '@grafana/plugin-ui';\nimport { config } from '@grafana/runtime';\nimport { Select, Field, RadioButtonGroup, Alert, Stack, TextLink } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\n\nimport { AppRegistrationCredentials } from './AppRegistrationCredentials';\n\nexport interface Props {\n managedIdentityEnabled: boolean;\n workloadIdentityEnabled: boolean;\n credentials: AadCurrentUserCredentials;\n azureCloudOptions?: SelectableValue[];\n onCredentialsChange: (updatedCredentials: AzureCredentials) => void;\n disabled?: boolean;\n children?: JSX.Element;\n}\n\nexport const CurrentUserFallbackCredentials = (props: Props) => {\n const {\n credentials,\n azureCloudOptions,\n onCredentialsChange,\n disabled,\n managedIdentityEnabled,\n workloadIdentityEnabled,\n } = props;\n\n type FallbackCredentialAuthTypeOptions = 'clientsecret' | 'msi' | 'workloadidentity';\n const authTypeOptions = useMemo(() => {\n let opts: Array<SelectableValue<FallbackCredentialAuthTypeOptions>> = [\n {\n value: 'clientsecret',\n label: 'App Registration',\n },\n ];\n\n if (managedIdentityEnabled) {\n opts.push({\n value: 'msi',\n label: 'Managed Identity',\n });\n }\n\n if (workloadIdentityEnabled) {\n opts.push({\n value: 'workloadidentity',\n label: 'Workload Identity',\n });\n }\n\n return opts;\n }, [managedIdentityEnabled, workloadIdentityEnabled]);\n\n const onAuthTypeChange = (selected: SelectableValue<FallbackCredentialAuthTypeOptions>) => {\n const defaultAuthType = managedIdentityEnabled\n ? 'msi'\n : workloadIdentityEnabled\n ? 'workloadidentity'\n : 'clientsecret';\n const updated: AadCurrentUserCredentials = {\n ...credentials,\n serviceCredentials: {\n authType: selected.value || defaultAuthType,\n },\n };\n onCredentialsChange(updated);\n };\n\n const onServiceCredentialsEnabledChange = (value: boolean) => {\n let updated: AzureCredentials = {\n ...credentials,\n serviceCredentialsEnabled: value,\n };\n if (!value) {\n updated = { ...updated, serviceCredentials: undefined };\n }\n onCredentialsChange(updated);\n };\n\n const onServiceCredentialsChange = (serviceCredentials: AzureCredentials) => {\n if (!instanceOfAzureCredential('currentuser', serviceCredentials)) {\n onCredentialsChange({ ...credentials, serviceCredentials: serviceCredentials });\n }\n };\n\n if (!config.azure.userIdentityFallbackCredentialsEnabled) {\n return (\n <Alert\n severity=\"info\"\n title={t(\n 'components.current-user-fallback-credentials.title-fallback-credentials-disabled',\n 'Fallback Credentials Disabled'\n )}\n >\n <Trans i18nKey=\"components.current-user-fallback-credentials.alert-fallback-credentials-disabled\">\n Fallback credentials have been disabled. As user-based authentication only inherently supports requests with a\n user in scope, features such as alerting, recorded queries, or reporting will not function as expected. Please\n review the{' '}\n <TextLink\n href=\"https://grafana.com/docs/grafana/latest/datasources/azuremonitor/deprecated-application-insights/\"\n external\n >\n documentation\n </TextLink>{' '}\n for more details.\n </Trans>\n </Alert>\n );\n }\n\n return (\n <ConfigSection\n title={t(\n 'components.current-user-fallback-credentials.title-fallback-service-credentials',\n 'Fallback Service Credentials'\n )}\n isCollapsible={true}\n >\n <Alert\n severity=\"info\"\n title={t('components.current-user-fallback-credentials.title-service-credentials', 'Service Credentials')}\n >\n <Stack direction={'column'}>\n <div>\n <Trans i18nKey=\"components.current-user-fallback-credentials.body-service-credentials\">\n User-based authentication does not inherently support Grafana features that make requests to the data\n source without a users details available to the request. An example of this is alerting. If you wish to\n ensure that features that do not have a user in the context of the request still function, please provide\n fallback credentials below.\n </Trans>\n </div>\n <div>\n <b>\n <Trans i18nKey=\"components.current-user-fallback-credentials.note-service-credentials\">\n Note: Features like alerting will be restricted to the access level of the fallback credentials rather\n than the user. This may present confusion for users and should be clarified.\n </Trans>\n </b>\n </div>\n </Stack>\n </Alert>\n <Field\n label={t('components.current-user-fallback-credentials.label-service-credentials', 'Service Credentials')}\n description={t(\n 'components.current-user-fallback-credentials.description-service-credentials',\n 'Choose if fallback service credentials are enabled or disabled for this data source'\n )}\n data-testid={selectors.components.configEditor.serviceCredentialsEnabled.button}\n >\n <RadioButtonGroup\n options={[\n { label: 'Enabled', value: true },\n { label: 'Disabled', value: false },\n ]}\n value={credentials.serviceCredentialsEnabled ?? false}\n size={'md'}\n onChange={(val) => onServiceCredentialsEnabledChange(val)}\n />\n </Field>\n {credentials.serviceCredentialsEnabled ? (\n <>\n {authTypeOptions.length > 0 && (\n <Field\n label={t('components.current-user-fallback-credentials.label-authentication', 'Authentication')}\n description={t(\n 'components.current-user-fallback-credentials.description-authentication',\n 'Choose the type of authentication to Azure services'\n )}\n data-testid={selectors.components.configEditor.authType.select}\n htmlFor=\"authentication-type\"\n >\n <Select\n className=\"width-15\"\n value={authTypeOptions.find((opt) => opt.value === credentials.serviceCredentials?.authType)}\n options={authTypeOptions}\n onChange={onAuthTypeChange}\n disabled={disabled}\n />\n </Field>\n )}\n {credentials.serviceCredentials?.authType === 'clientsecret' && (\n <AppRegistrationCredentials\n credentials={credentials.serviceCredentials}\n azureCloudOptions={azureCloudOptions}\n onCredentialsChange={onServiceCredentialsChange}\n disabled={disabled}\n />\n )}\n </>\n ) : null}\n {props.children}\n </ConfigSection>\n );\n};\n\nexport default CurrentUserFallbackCredentials;\n","import { useMemo } from 'react';\n\nimport { AzureAuthType, AzureCredentials, getAzureClouds } from '@grafana/azure-sdk';\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ConfigSection } from '@grafana/plugin-ui';\nimport { Select, Field } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\n\nimport { AppRegistrationCredentials } from './AppRegistrationCredentials';\nimport CurrentUserFallbackCredentials from './CurrentUserFallbackCredentials';\n\nexport interface Props {\n managedIdentityEnabled: boolean;\n workloadIdentityEnabled: boolean;\n userIdentityEnabled: boolean;\n credentials: AzureCredentials;\n azureCloudOptions?: SelectableValue[];\n onCredentialsChange: (updatedCredentials: AzureCredentials) => void;\n disabled?: boolean;\n children?: JSX.Element;\n}\n\nexport function getAzureCloudOptions(): Array<SelectableValue<string>> {\n const cloudInfo = getAzureClouds();\n\n return cloudInfo.map((cloud) => ({\n value: cloud.name,\n label: cloud.displayName,\n }));\n}\n\nexport const AzureCredentialsForm = (props: Props) => {\n const {\n credentials,\n onCredentialsChange,\n disabled,\n managedIdentityEnabled,\n workloadIdentityEnabled,\n userIdentityEnabled,\n } = props;\n\n const authTypeOptions = useMemo(() => {\n let opts: Array<SelectableValue<AzureAuthType>> = [\n {\n value: 'clientsecret',\n label: 'App Registration',\n },\n ];\n\n if (managedIdentityEnabled) {\n opts.push({\n value: 'msi',\n label: 'Managed Identity',\n });\n }\n\n if (workloadIdentityEnabled) {\n opts.push({\n value: 'workloadidentity',\n label: 'Workload Identity',\n });\n }\n\n if (userIdentityEnabled) {\n opts.unshift({\n value: 'currentuser',\n label: 'Current User',\n });\n }\n\n return opts;\n }, [managedIdentityEnabled, workloadIdentityEnabled, userIdentityEnabled]);\n\n const onAuthTypeChange = (selected: SelectableValue<AzureAuthType>) => {\n const defaultAuthType = (() => {\n if (managedIdentityEnabled) {\n return 'msi';\n }\n\n if (workloadIdentityEnabled) {\n return 'workloadidentity';\n }\n\n if (userIdentityEnabled) {\n return 'currentuser';\n }\n\n return 'clientsecret';\n })();\n\n const updated: AzureCredentials = {\n ...credentials,\n authType: selected.value || defaultAuthType,\n };\n\n onCredentialsChange(updated);\n };\n\n return (\n <ConfigSection title={t('components.azure-credentials-form.title-authentication', 'Authentication')}>\n {authTypeOptions.length > 1 && (\n <Field\n label={t('components.azure-credentials-form.label-authentication', 'Authentication')}\n description={t(\n 'components.azure-credentials-form.description-authentication',\n 'Choose the type of authentication to Azure services'\n )}\n data-testid={selectors.components.configEditor.authType.select}\n htmlFor=\"authentication-type\"\n >\n <Select\n className=\"width-15\"\n value={authTypeOptions.find((opt) => opt.value === credentials.authType)}\n options={authTypeOptions}\n onChange={onAuthTypeChange}\n disabled={disabled}\n />\n </Field>\n )}\n {credentials.authType === 'clientsecret' && (\n <AppRegistrationCredentials\n credentials={credentials}\n azureCloudOptions={getAzureCloudOptions()}\n onCredentialsChange={onCredentialsChange}\n disabled={disabled}\n />\n )}\n {props.children}\n {credentials.authType === 'currentuser' && (\n <CurrentUserFallbackCredentials\n credentials={credentials}\n azureCloudOptions={getAzureCloudOptions()}\n onCredentialsChange={onCredentialsChange}\n disabled={disabled}\n managedIdentityEnabled={managedIdentityEnabled}\n workloadIdentityEnabled={workloadIdentityEnabled}\n />\n )}\n </ConfigSection>\n );\n};\n\nexport default AzureCredentialsForm;\n","import { css } from '@emotion/css';\nimport * as React from 'react';\n\nimport { Trans, t } from '@grafana/i18n';\nimport { Field, Switch, TextLink, useTheme2 } from '@grafana/ui';\n\nimport { AzureMonitorDataSourceJsonData } from '../../types/types';\n\nexport interface Props {\n options: AzureMonitorDataSourceJsonData;\n onBasicLogsEnabledChange: (basicLogsEnabled: boolean) => void;\n}\n\nexport const BasicLogsToggle = (props: Props) => {\n const { options, onBasicLogsEnabledChange } = props;\n\n const theme = useTheme2();\n const styles = {\n text: css({\n ...theme.typography.body,\n color: theme.colors.text.secondary,\n fontSize: '11px',\n a: css({\n color: theme.colors.text.link,\n textDecoration: 'underline',\n '&:hover': {\n textDecoration: 'none',\n },\n }),\n }),\n };\n const onChange = (e: React.ChangeEvent<HTMLInputElement>) => onBasicLogsEnabledChange(e.target.checked);\n const description = (\n <p className={styles.text}>\n <Trans i18nKey=\"components.basic-logs-toggle.description-basic-logs\">\n Enabling this feature incurs Azure Monitor per-query costs on dashboard panels that query tables configured for{' '}\n <TextLink\n href=\"https://learn.microsoft.com/en-us/azure/azure-monitor/logs/basic-logs-configure?tabs=portal-1\"\n external\n >\n Basic Logs\n </TextLink>\n .\n </Trans>\n </p>\n );\n return (\n <Field\n description={description}\n label={t('components.basic-logs-toggle.label-enable-basic-logs', 'Enable Basic Logs')}\n >\n <div>\n <Switch\n aria-label={t('components.basic-logs-toggle.aria-label-enable-basic-logs', 'Basic Logs')}\n onChange={onChange}\n value={options.basicLogsEnabled ?? false}\n />\n </div>\n </Field>\n );\n};\n","import { useEffect, useReducer } from 'react';\n\nimport { AzureCredentials, isCredentialsComplete } from '@grafana/azure-sdk';\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Select, Button, Field } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorDataSourceJsonData } from '../../types/types';\n\nexport interface Props {\n options: AzureMonitorDataSourceJsonData;\n credentials: AzureCredentials;\n getSubscriptions?: () => Promise<SelectableValue[]>;\n subscriptions: Array<SelectableValue<string>>;\n onSubscriptionsChange: (receivedSubscriptions: Array<SelectableValue<string>>) => void;\n onSubscriptionChange: (subscriptionId?: string) => void;\n disabled?: boolean;\n}\n\nexport const DefaultSubscription = (props: Props) => {\n const {\n credentials,\n disabled,\n options,\n subscriptions,\n getSubscriptions,\n onSubscriptionChange,\n onSubscriptionsChange,\n } = props;\n const hasRequiredFields = isCredentialsComplete(credentials);\n const [loadSubscriptionsClicked, onLoadSubscriptions] = useReducer((val) => val + 1, 0);\n\n useEffect(() => {\n if (!getSubscriptions || !hasRequiredFields) {\n updateSubscriptions([]);\n return;\n }\n let canceled = false;\n getSubscriptions().then((result) => {\n if (!canceled) {\n updateSubscriptions(result, loadSubscriptionsClicked);\n }\n });\n return () => {\n canceled = true;\n };\n // This effect is intended to be called only once initially and on Load Subscriptions click\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loadSubscriptionsClicked]);\n\n const updateSubscriptions = (received: Array<SelectableValue<string>>, autoSelect = false) => {\n onSubscriptionsChange(received);\n if (getSubscriptions) {\n if (autoSelect && !options.subscriptionId && received.length > 0) {\n // Selecting the default subscription if subscriptions received but no default subscription selected\n onChange(received[0]);\n } else if (options.subscriptionId) {\n const found = received.find((opt) => opt.value === options.subscriptionId);\n if (!found) {\n // Unselecting the default subscription if it isn't found among the received subscriptions\n onChange(undefined);\n }\n }\n }\n };\n\n const onChange = (selected: SelectableValue<string> | undefined) => onSubscriptionChange(selected?.value);\n\n return (\n <>\n <Field\n label={t('components.default-subscription.label-default-subscription', 'Default Subscription')}\n data-testid={selectors.components.configEditor.defaultSubscription.input}\n htmlFor=\"default-subscription\"\n >\n <div className=\"width-30\" style={{ display: 'flex', gap: '4px' }}>\n <Select\n inputId=\"default-subscription\"\n aria-label={t('components.default-subscription.aria-label-default-subscription', 'Default Subscription')}\n value={\n options.subscriptionId ? subscriptions.find((opt) => opt.value === options.subscriptionId) : undefined\n }\n options={subscriptions}\n onChange={onChange}\n disabled={disabled}\n />\n <Button\n variant=\"secondary\"\n type=\"button\"\n onClick={onLoadSubscriptions}\n disabled={!hasRequiredFields || disabled}\n data-testid={selectors.components.configEditor.loadSubscriptions.button}\n >\n <Trans i18nKey=\"components.default-subscription.load-subscriptions\">Load Subscriptions</Trans>\n </Button>\n </div>\n </Field>\n </>\n );\n};\n","import { useMemo, useState } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { AzureCredentials } from '@grafana/azure-sdk';\nimport { SelectableValue } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { getCredentials, updateCredentials } from '../../credentials';\nimport { AzureMonitorDataSourceSettings } from '../../types/types';\n\nimport { AzureCredentialsForm, getAzureCloudOptions } from './AzureCredentialsForm';\nimport { BasicLogsToggle } from './BasicLogsToggle';\nimport { DefaultSubscription } from './DefaultSubscription';\n\nexport interface Props {\n options: AzureMonitorDataSourceSettings;\n updateOptions: (optionsFunc: (options: AzureMonitorDataSourceSettings) => AzureMonitorDataSourceSettings) => void;\n getSubscriptions: () => Promise<Array<SelectableValue<string>>>;\n}\n\nexport const MonitorConfig = (props: Props) => {\n const { updateOptions, getSubscriptions, options } = props;\n const [subscriptions, setSubscriptions] = useState<Array<SelectableValue<string>>>([]);\n const credentials = useMemo(() => getCredentials(props.options), [props.options]);\n\n const onCredentialsChange = (credentials: AzureCredentials, subscriptionId?: string): void => {\n if (!subscriptionId) {\n setSubscriptions([]);\n }\n updateOptions((options: AzureMonitorDataSourceSettings) =>\n updateCredentials({ ...options, jsonData: { ...options.jsonData, subscriptionId } }, credentials)\n );\n };\n\n const onSubscriptionsChange = (receivedSubscriptions: Array<SelectableValue<string>>) =>\n setSubscriptions(receivedSubscriptions);\n\n const onSubscriptionChange = (subscriptionId?: string) =>\n updateOptions((options) => ({ ...options, jsonData: { ...options.jsonData, subscriptionId } }));\n\n const onBasicLogsEnabledChange = (enableBasicLogs: boolean) =>\n updateOptions((options) => ({ ...options, jsonData: { ...options.jsonData, basicLogsEnabled: enableBasicLogs } }));\n\n // The auth type needs to be set on the first load of the data source\n useEffectOnce(() => {\n if (!options.jsonData.authType || !credentials.authType) {\n onCredentialsChange(credentials, options.jsonData.subscriptionId);\n }\n });\n\n return (\n <>\n <AzureCredentialsForm\n managedIdentityEnabled={config.azure.managedIdentityEnabled}\n workloadIdentityEnabled={config.azure.workloadIdentityEnabled}\n userIdentityEnabled={config.azure.userIdentityEnabled && !!config.featureToggles.azureMonitorEnableUserAuth}\n credentials={credentials}\n azureCloudOptions={getAzureCloudOptions()}\n onCredentialsChange={onCredentialsChange}\n disabled={props.options.readOnly}\n >\n <>\n <DefaultSubscription\n subscriptions={subscriptions}\n credentials={credentials}\n getSubscriptions={getSubscriptions}\n disabled={props.options.readOnly}\n onSubscriptionsChange={onSubscriptionsChange}\n onSubscriptionChange={onSubscriptionChange}\n options={options.jsonData}\n />\n <BasicLogsToggle options={options.jsonData} onBasicLogsEnabledChange={onBasicLogsEnabledChange} />\n </>\n </AzureCredentialsForm>\n </>\n );\n};\n\nexport default MonitorConfig;\n","import { PureComponent } from 'react';\n\nimport { DataSourcePluginOptionsEditorProps, SelectableValue, updateDatasourcePluginOption } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { AdvancedHttpSettings, ConfigSection, DataSourceDescription } from '@grafana/plugin-ui';\nimport { getBackendSrv, getTemplateSrv, isFetchError, TemplateSrv, config } from '@grafana/runtime';\nimport { Alert, Divider, SecureSocksProxySettings } from '@grafana/ui';\n\nimport ResponseParser from '../../azure_monitor/response_parser';\nimport {\n AzureAPIResponse,\n AzureMonitorDataSourceJsonData,\n AzureMonitorDataSourceSecureJsonData,\n AzureMonitorDataSourceSettings,\n Subscription,\n} from '../../types/types';\nimport { routeNames } from '../../utils/common';\n\nimport { MonitorConfig } from './MonitorConfig';\n\nexport type Props = DataSourcePluginOptionsEditorProps<\n AzureMonitorDataSourceJsonData,\n AzureMonitorDataSourceSecureJsonData\n>;\n\ninterface ErrorMessage {\n title: string;\n description: string;\n details?: string;\n}\n\nexport interface State {\n unsaved: boolean;\n error?: ErrorMessage;\n}\n\nexport class ConfigEditor extends PureComponent<Props, State> {\n templateSrv: TemplateSrv = getTemplateSrv();\n baseURL: string;\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n unsaved: false,\n };\n this.baseURL = `/api/datasources/${this.props.options.id}/resources/${routeNames.azureMonitor}/subscriptions`;\n }\n\n private updateOptions = (\n optionsFunc: (options: AzureMonitorDataSourceSettings) => AzureMonitorDataSourceSettings\n ): void => {\n const updated = optionsFunc(this.props.options);\n this.props.onOptionsChange(updated);\n\n this.setState({ unsaved: true });\n };\n\n private saveOptions = async (): Promise<void> => {\n if (this.state.unsaved) {\n await getBackendSrv()\n .put(`/api/datasources/${this.props.options.id}`, this.props.options)\n .then((result: { datasource: AzureMonitorDataSourceSettings }) => {\n updateDatasourcePluginOption(this.props, 'version', result.datasource.version);\n });\n\n this.setState({ unsaved: false });\n }\n };\n\n private getSubscriptions = async (): Promise<Array<SelectableValue<string>>> => {\n await this.saveOptions();\n\n const query = `?api-version=2019-03-01`;\n try {\n const result = await getBackendSrv()\n .fetch<AzureAPIResponse<Subscription>>({\n url: this.baseURL + query,\n method: 'GET',\n })\n .toPromise();\n\n this.setState({ error: undefined });\n return ResponseParser.parseSubscriptionsForSelect(result);\n } catch (err) {\n if (isFetchError(err)) {\n this.setState({\n error: {\n title: 'Error requesting subscriptions',\n description: 'Could not request subscriptions from Azure. Check your credentials and try again.',\n details: err?.data?.message,\n },\n });\n }\n return Promise.resolve([]);\n }\n };\n\n render() {\n const { options, onOptionsChange } = this.props;\n const { error } = this.state;\n\n return (\n <>\n <DataSourceDescription\n dataSourceName=\"Azure Monitor\"\n docsLink=\"https://grafana.com/docs/grafana/latest/datasources/azure-monitor/\"\n hasRequiredFields\n />\n <Divider />\n <MonitorConfig options={options} updateOptions={this.updateOptions} getSubscriptions={this.getSubscriptions} />\n {error && (\n <Alert severity=\"error\" title={error.title}>\n <p>{error.description}</p>\n {error.details && <details style={{ whiteSpace: 'pre-wrap' }}>{error.details}</details>}\n </Alert>\n )}\n <>\n <Divider />\n <ConfigSection\n title={t('components.config-editor.title-additional-settings', 'Additional settings')}\n description={t(\n 'components.config-editor.description-additional-settings',\n 'Additional settings are optional settings that can be configured for more control over your data source. This includes Secure Socks Proxy, request timeout, and forwarded cookies.'\n )}\n isCollapsible={true}\n isInitiallyOpen={\n options.jsonData.enableSecureSocksProxy !== undefined ||\n options.jsonData.timeout !== undefined ||\n options.jsonData.keepCookies !== undefined\n }\n >\n <AdvancedHttpSettings config={options} onChange={onOptionsChange} />\n {config.secureSocksDSProxyEnabled && (\n <SecureSocksProxySettings options={options} onOptionsChange={onOptionsChange} />\n )}\n </ConfigSection>\n </>\n </>\n );\n }\n}\n\nexport default ConfigEditor;\n","import React__default from 'react';\nimport { Stack } from '@grafana/ui';\nimport '@grafana/data';\n\nconst EditorStack = ({ children, wrap: wrapItems = true, ...props }) => {\n var _a, _b;\n return /* @__PURE__ */ React__default.createElement(Stack, { wrap: wrapItems ? \"wrap\" : undefined, direction: (_a = props.direction) != null ? _a : \"row\", gap: (_b = props.gap) != null ? _b : 2, ...props }, children);\n};\n\nexport { EditorStack };\n//# sourceMappingURL=EditorStack.js.map\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5959__;","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","import { isValidElement } from 'react';\n\nimport { AzureMonitorErrorish } from '../types/types';\n\nexport function messageFromElement(error: AzureMonitorErrorish): AzureMonitorErrorish | undefined {\n if (isValidElement(error)) {\n return error;\n } else {\n return messageFromError(error);\n }\n}\n\nexport default function messageFromError(error: any): string | undefined {\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n if (typeof error.message === 'string') {\n return error.message;\n }\n\n if (typeof error.data?.error?.message === 'string') {\n return error.data.error.message;\n }\n\n // Copied from the old Angular code - this might be checking for errors in places\n // that the new code just doesnt use.\n // As new error objects are discovered they should be added to the above code, rather\n // than below\n const maybeAMessage =\n error.error?.data?.error?.innererror?.innererror?.message ||\n error.error?.data?.error?.innererror?.message ||\n error.error?.data?.error?.message ||\n error.error?.data?.message ||\n error.data?.message ||\n error;\n\n if (typeof maybeAMessage === 'string') {\n return maybeAMessage;\n } else if (maybeAMessage && maybeAMessage.toString) {\n return maybeAMessage.toString();\n }\n\n return undefined;\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6089__;","import { TemplateSrv } from '@grafana/runtime';\n\nimport { AzureMonitorResource } from '../types/query';\nimport { GetMetricNamespacesQuery, GetMetricNamesQuery } from '../types/types';\n\nexport default class UrlBuilder {\n static buildResourceUri(templateSrv: TemplateSrv, resource: AzureMonitorResource, multipleResources?: boolean) {\n const urlArray = [];\n const { subscription, resourceGroup, metricNamespace, resourceName } = resource;\n if (subscription) {\n urlArray.push('/subscriptions', subscription);\n if (resourceGroup && !multipleResources) {\n urlArray.push('resourceGroups', resourceGroup);\n\n if (metricNamespace && resourceName) {\n const metricNamespaceProcessed = templateSrv.replace(metricNamespace);\n const metricNamespaceArray = metricNamespace.split('/');\n const resourceNameProcessed = templateSrv.replace(resourceName);\n const resourceNameArray = resourceName.split('/');\n const provider = metricNamespaceArray.shift();\n if (provider) {\n urlArray.push('providers', provider);\n }\n\n if (\n metricNamespaceProcessed.toLowerCase().startsWith('microsoft.storage/storageaccounts/') &&\n !resourceNameProcessed.endsWith('default')\n ) {\n resourceNameArray.push('default');\n }\n\n if (resourceNameArray.length > metricNamespaceArray.length) {\n const parentResource = resourceNameArray.shift();\n if (parentResource) {\n urlArray.push(parentResource);\n }\n }\n\n for (const i in metricNamespaceArray) {\n urlArray.push(metricNamespaceArray[i]);\n urlArray.push(resourceNameArray[i]);\n }\n }\n }\n }\n\n return urlArray.join('/');\n }\n\n static buildAzureMonitorGetMetricNamespacesUrl(\n baseUrl: string,\n apiVersion: string,\n query: GetMetricNamespacesQuery,\n globalRegion: boolean,\n templateSrv: TemplateSrv,\n region?: string\n ) {\n let resourceUri: string;\n\n if ('resourceUri' in query) {\n resourceUri = query.resourceUri;\n } else {\n const { subscription, resourceGroup, metricNamespace, resourceName } = query;\n resourceUri = UrlBuilder.buildResourceUri(templateSrv, {\n subscription,\n resourceGroup,\n metricNamespace,\n resourceName,\n });\n }\n\n return `${baseUrl}${resourceUri}/providers/microsoft.insights/metricNamespaces?api-version=${apiVersion}${\n region ? `®ion=${region}` : globalRegion ? '®ion=global' : ''\n }`;\n }\n\n static buildAzureMonitorGetMetricNamesUrl(\n baseUrl: string,\n apiVersion: string,\n query: GetMetricNamesQuery,\n templateSrv: TemplateSrv,\n multipleResources?: boolean,\n region?: string\n ) {\n let resourceUri: string;\n const { customNamespace, metricNamespace } = query;\n if ('resourceUri' in query) {\n resourceUri = query.resourceUri;\n } else {\n const { subscription, resourceGroup, metricNamespace, resourceName } = query;\n resourceUri = UrlBuilder.buildResourceUri(\n templateSrv,\n {\n subscription,\n resourceGroup,\n metricNamespace,\n resourceName,\n },\n multipleResources\n );\n }\n let url = `${baseUrl}${resourceUri}/providers/microsoft.insights/metricdefinitions?api-version=${apiVersion}`;\n if (customNamespace) {\n url += `&metricnamespace=${encodeURIComponent(customNamespace)}`;\n }\n\n if (multipleResources && !customNamespace && metricNamespace) {\n url += `&metricnamespace=${encodeURIComponent(metricNamespace)}`;\n }\n\n if (region && multipleResources) {\n url += `®ion=${region}`;\n }\n\n return url;\n }\n\n static buildAzureMonitorGetLogsTableUrl(\n baseUrl: string,\n resourceUri: string,\n tableName: string,\n apiVersion = '2025-02-01'\n ) {\n return `${baseUrl}${resourceUri}/tables/${tableName}?api-version=${apiVersion}`;\n }\n}\n","import { E2ESelectors } from '@grafana/e2e-selectors';\n\nexport const components = {\n configEditor: {\n authType: {\n select: 'data-testid auth-type',\n },\n azureCloud: {\n input: 'data-testid azure-cloud',\n },\n tenantID: {\n input: 'data-testid tenant-id',\n },\n clientID: {\n input: 'data-testid client-id',\n },\n clientSecret: {\n input: 'data-testid client-secret',\n },\n loadSubscriptions: {\n button: 'data-testid load-subscriptions',\n },\n defaultSubscription: {\n input: 'data-testid default-subscription',\n },\n serviceCredentialsEnabled: {\n button: 'data-testid service-credentials-enabled',\n },\n },\n queryEditor: {\n header: {\n select: 'data-testid azure-monitor-experimental-header',\n },\n userAuthAlert: 'data-testid azure-monitor-user-auth-invalid-auth-provider-alert',\n userAuthFallbackAlert: 'data-testid azure-monitor-user-auth-fallback-alert',\n resourcePicker: {\n select: {\n button: 'data-testid resource-picker-select',\n },\n search: {\n input: 'data-testid resource-picker-search',\n },\n apply: {\n button: 'data-testid resource-picker-apply',\n },\n cancel: {\n button: 'data-testid resource-picker-cancel',\n },\n advanced: {\n collapse: 'data-testid resource-picker-advanced',\n subscription: {\n input: 'data-testid resource-picker-subscription',\n },\n resourceGroup: {\n input: 'data-testid resource-picker-resource-group',\n },\n namespace: {\n input: 'data-testid resource-picker-namespace',\n },\n region: {\n input: 'data-testid resource-picker-region',\n },\n resource: {\n input: 'data-testid resource-picker-resource',\n },\n },\n filters: {\n subscription: {\n input: 'data-testid resource-picker-filter-subscription',\n },\n type: {\n input: 'data-testid resource-picker-filter-type',\n },\n location: {\n input: 'data-testid resource-picker-filter-location',\n },\n },\n },\n metricsQueryEditor: {\n container: { input: 'data-testid azure-monitor-metrics-query-editor-with-experimental-ui' },\n metricName: {\n input: 'data-testid metric-name',\n },\n },\n logsQueryEditor: {\n container: { input: 'data-testid azure-monitor-logs-query-editor-with-experimental-ui' },\n formatSelection: {\n input: 'data-testid format-selection',\n },\n runQuery: {\n button: 'data-testid run-query',\n },\n },\n logsQueryBuilder: {\n container: { input: 'data-testid azure-monitor-logs-query-builder' },\n },\n argsQueryEditor: {\n container: {\n input: 'data-testid azure-monitor-arg-query-editor',\n },\n scope: {\n input: 'data-testid azure-monitor-arg-query-editor-scope',\n },\n subscriptions: {\n input: 'data-testid azure-monitor-args-subscription',\n },\n },\n tracesQueryEditor: {\n container: {\n input: 'data-testid azure-monitor-traces-query-editor-with-experimental-ui',\n },\n traceTypes: {\n select: 'data-testid azure-monitor-traces-query-editor-trace-types',\n },\n },\n },\n variableEditor: {\n queryType: {\n input: 'data-testid query-type',\n },\n subscription: {\n input: 'data-testid subscription',\n },\n resourceGroup: {\n input: 'data-testid resource-group',\n },\n namespace: {\n input: 'data-testid namespace',\n },\n resource: {\n input: 'data-testid resource',\n },\n region: {\n input: 'data-testid region',\n },\n customNamespace: {\n input: 'data-testid custom-namespace',\n },\n },\n};\n\nexport const selectors: { components: E2ESelectors<typeof components> } = {\n components: components,\n};\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","import { setKustoQuery } from '../components/LogsQueryEditor/setQueryValue';\nimport {\n appendDimensionFilter,\n setTimeGrain as setMetricsTimeGrain,\n} from '../components/MetricsQueryEditor/setQueryValue';\nimport { parseResourceDetails } from '../components/ResourcePicker/utils';\nimport TimegrainConverter from '../time_grain_converter';\nimport { AzureMetricDimension, AzureMonitorQuery, AzureQueryType } from '../types/query';\n\nconst OLD_DEFAULT_DROPDOWN_VALUE = 'select';\n\nexport default function migrateQuery(query: AzureMonitorQuery): AzureMonitorQuery {\n let workingQuery = query;\n\n if (!workingQuery.queryType) {\n workingQuery = {\n ...workingQuery,\n queryType: AzureQueryType.AzureMonitor,\n };\n }\n\n workingQuery = migrateLogAnalyticsToFromTimes(workingQuery);\n if (workingQuery.queryType === AzureQueryType.AzureMonitor && workingQuery.azureMonitor) {\n workingQuery = migrateTimeGrains(workingQuery);\n workingQuery = migrateToDefaultNamespace(workingQuery);\n workingQuery = migrateDimensionToDimensionFilter(workingQuery);\n workingQuery = migrateDimensionFilterToArray(workingQuery);\n workingQuery = migrateResourceUriToResourceObj(workingQuery);\n }\n\n if (workingQuery.azureMonitor?.resourceGroup || workingQuery.azureMonitor?.resourceName) {\n workingQuery = migrateResourceGroupAndName(workingQuery);\n }\n\n if (workingQuery.azureLogAnalytics?.resource) {\n workingQuery = {\n ...workingQuery,\n azureLogAnalytics: {\n ...workingQuery.azureLogAnalytics,\n resources: [workingQuery.azureLogAnalytics.resource],\n },\n };\n\n delete workingQuery.azureLogAnalytics?.resource;\n }\n\n if (workingQuery.azureLogAnalytics && workingQuery.azureLogAnalytics.dashboardTime === undefined) {\n if (workingQuery.azureLogAnalytics.intersectTime) {\n workingQuery = {\n ...workingQuery,\n azureLogAnalytics: {\n ...workingQuery.azureLogAnalytics,\n dashboardTime: true,\n },\n };\n } else {\n workingQuery = {\n ...workingQuery,\n azureLogAnalytics: {\n ...workingQuery.azureLogAnalytics,\n dashboardTime: false,\n },\n };\n }\n }\n\n return workingQuery;\n}\n\nfunction migrateTimeGrains(query: AzureMonitorQuery): AzureMonitorQuery {\n let workingQuery = query;\n\n if (workingQuery.azureMonitor?.timeGrainUnit && workingQuery.azureMonitor.timeGrain !== 'auto') {\n const newTimeGrain = TimegrainConverter.createISO8601Duration(\n workingQuery.azureMonitor.timeGrain ?? 'auto',\n workingQuery.azureMonitor.timeGrainUnit\n );\n workingQuery = setMetricsTimeGrain(workingQuery, newTimeGrain);\n\n delete workingQuery.azureMonitor?.timeGrainUnit;\n }\n\n return workingQuery;\n}\n\nfunction migrateLogAnalyticsToFromTimes(query: AzureMonitorQuery): AzureMonitorQuery {\n let workingQuery = query;\n\n if (workingQuery.azureLogAnalytics?.query?.match(/\\$__from\\s/gi)) {\n workingQuery = setKustoQuery(\n workingQuery,\n workingQuery.azureLogAnalytics.query.replace(/\\$__from\\s/gi, '$__timeFrom() ')\n );\n }\n\n if (workingQuery.azureLogAnalytics?.query?.match(/\\$__to\\s/gi)) {\n workingQuery = setKustoQuery(\n workingQuery,\n workingQuery.azureLogAnalytics.query.replace(/\\$__to\\s/gi, '$__timeTo() ')\n );\n }\n\n return workingQuery;\n}\n\nfunction migrateToDefaultNamespace(query: AzureMonitorQuery): AzureMonitorQuery {\n const haveMetricNamespace =\n query.azureMonitor?.metricNamespace && query.azureMonitor.metricNamespace !== OLD_DEFAULT_DROPDOWN_VALUE;\n\n if (!haveMetricNamespace && query.azureMonitor?.metricDefinition) {\n return {\n ...query,\n azureMonitor: {\n ...query.azureMonitor,\n metricNamespace: query.azureMonitor.metricDefinition,\n metricDefinition: undefined,\n },\n };\n }\n\n return query;\n}\n\nfunction migrateDimensionToDimensionFilter(query: AzureMonitorQuery): AzureMonitorQuery {\n let workingQuery = query;\n\n const oldDimension = workingQuery.azureMonitor?.dimension;\n if (oldDimension && oldDimension !== 'None') {\n workingQuery = appendDimensionFilter(workingQuery, oldDimension, 'eq', [\n workingQuery.azureMonitor?.dimensionFilter || '',\n ]);\n }\n\n delete workingQuery.azureMonitor?.dimension;\n delete workingQuery.azureMonitor?.dimensionFilter;\n\n return workingQuery;\n}\n\nfunction migrateDimensionFilterToArray(query: AzureMonitorQuery): AzureMonitorQuery {\n const azureMonitorQuery = query.azureMonitor;\n\n if (!azureMonitorQuery) {\n return query;\n }\n\n const newFilters: AzureMetricDimension[] = [];\n const dimensionFilters = azureMonitorQuery.dimensionFilters;\n if (dimensionFilters && dimensionFilters.length > 0) {\n dimensionFilters.forEach((filter) => {\n const staticProps = { dimension: filter.dimension, operator: filter.operator };\n if (!filter.filters && filter.filter) {\n newFilters.push({ ...staticProps, filters: [filter.filter] });\n } else {\n let hasFilter = false;\n if (filter.filters && filter.filter) {\n for (const oldFilter of filter.filters) {\n if (filter.filter === oldFilter) {\n hasFilter = true;\n break;\n }\n }\n if (!hasFilter && filter.filter !== '*') {\n filter.filters.push(filter.filter);\n }\n newFilters.push({ ...staticProps, filters: filter.filters });\n }\n }\n });\n if (newFilters.length > 0) {\n return { ...query, azureMonitor: { ...azureMonitorQuery, dimensionFilters: newFilters } };\n }\n }\n return query;\n}\n\nfunction migrateResourceUriToResourceObj(query: AzureMonitorQuery): AzureMonitorQuery {\n if (query.azureMonitor?.resourceUri && !query.azureMonitor.resourceUri.startsWith('$')) {\n const details = parseResourceDetails(query.azureMonitor.resourceUri);\n const isWellFormedUri = details?.subscription && details?.resourceGroup && details?.resourceName;\n return {\n ...query,\n subscription: details?.subscription,\n azureMonitor: {\n ...query.azureMonitor,\n resources: [{ resourceGroup: details?.resourceGroup, resourceName: details?.resourceName }],\n metricNamespace: details?.metricNamespace,\n resourceUri: isWellFormedUri ? undefined : query.azureMonitor.resourceUri,\n },\n };\n }\n\n return query;\n}\n\nfunction migrateResourceGroupAndName(query: AzureMonitorQuery): AzureMonitorQuery {\n let workingQuery = query;\n\n if (workingQuery.azureMonitor?.resourceGroup && workingQuery.azureMonitor?.resourceName) {\n workingQuery = {\n ...workingQuery,\n azureMonitor: {\n ...workingQuery.azureMonitor,\n resources: [\n {\n resourceGroup: workingQuery.azureMonitor.resourceGroup,\n resourceName: workingQuery.azureMonitor.resourceName,\n },\n ],\n },\n };\n\n delete workingQuery.azureMonitor?.resourceGroup;\n delete workingQuery.azureMonitor?.resourceName;\n }\n\n return workingQuery;\n}\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","import { SelectableValue } from '@grafana/data';\n\nimport { AzureMonitorQuery, ResultFormat } from '../../types/query';\n\nexport function setKustoQuery(query: AzureMonitorQuery, kustoQuery: string): AzureMonitorQuery {\n return {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n query: kustoQuery,\n },\n };\n}\n\nexport function setFormatAs(query: AzureMonitorQuery, formatAs: ResultFormat): AzureMonitorQuery {\n return {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n resultFormat: formatAs,\n },\n };\n}\n\nexport function setDashboardTime(query: AzureMonitorQuery, dashboardTime: string): AzureMonitorQuery {\n return {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n dashboardTime: dashboardTime === 'dashboard' ? true : false,\n },\n };\n}\n\nexport function setTimeColumn(query: AzureMonitorQuery, timeColumn: string): AzureMonitorQuery {\n return {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n timeColumn,\n },\n };\n}\n\nexport function setBasicLogsQuery(query: AzureMonitorQuery, basicLogsQuery: boolean): AzureMonitorQuery {\n return {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n basicLogsQuery,\n },\n };\n}\nexport function onLoad(\n query: AzureMonitorQuery,\n defaultValue: ResultFormat,\n handleChange: (change: SelectableValue<ResultFormat>) => void\n) {\n if (!query.azureLogAnalytics) {\n handleChange({ value: defaultValue });\n return;\n }\n if (!query.azureLogAnalytics.resultFormat) {\n handleChange({ value: ResultFormat.TimeSeries });\n }\n}\n","import { Button } from '@grafana/ui';\nimport React__default from 'react';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorList = React__default.forwardRef(function EditorList2({ items, renderItem, onChange }, ref) {\n const onAddItem = () => {\n const newItems = [...items, {}];\n onChange(newItems);\n };\n const onChangeItem = (itemIndex, newItem) => {\n const newItems = [...items];\n newItems[itemIndex] = newItem;\n onChange(newItems);\n };\n const onDeleteItem = (itemIndex) => {\n const newItems = [...items];\n newItems.splice(itemIndex, 1);\n onChange(newItems);\n };\n return /* @__PURE__ */ React__default.createElement(EditorStack, null, items.map((item, index) => /* @__PURE__ */ React__default.createElement(\"div\", { key: index }, renderItem(\n item,\n (newItem) => onChangeItem(index, newItem),\n () => onDeleteItem(index)\n ))), /* @__PURE__ */ React__default.createElement(Button, { ref, onClick: onAddItem, variant: \"secondary\", size: \"md\", icon: \"plus\", \"aria-label\": \"Add\", type: \"button\" }));\n});\n\nexport { EditorList };\n//# sourceMappingURL=EditorList.js.map\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","module.exports = __WEBPACK_EXTERNAL_MODULE__7781__;","import { EditorField } from '@grafana/plugin-ui';\nimport { InlineField } from '@grafana/ui';\nimport { InlineFieldProps } from '@grafana/ui/internal';\n\ninterface Props extends InlineFieldProps {\n label: string;\n inlineField?: boolean;\n labelWidth?: number;\n}\n\nconst DEFAULT_LABEL_WIDTH = 18;\n\nexport const Field = (props: Props) => {\n const { labelWidth, inlineField, ...remainingProps } = props;\n\n if (!inlineField) {\n return <EditorField width={labelWidth || DEFAULT_LABEL_WIDTH} {...remainingProps} />;\n } else {\n return <InlineField labelWidth={labelWidth || DEFAULT_LABEL_WIDTH} {...remainingProps} />;\n }\n};\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8146__;","import { useCallback } from 'react';\n\nimport { CodeEditor } from '@grafana/ui';\n\nimport { AzureQueryEditorFieldProps } from '../../types/types';\n\nconst QueryField = ({ query, onQueryChange }: AzureQueryEditorFieldProps) => {\n const onChange = useCallback(\n (newQuery: string) => {\n onQueryChange({\n ...query,\n azureResourceGraph: {\n ...query.azureResourceGraph,\n query: newQuery,\n },\n });\n },\n [onQueryChange, query]\n );\n\n return (\n <CodeEditor\n value={query.azureResourceGraph?.query ?? ''}\n language=\"kusto\"\n height={200}\n width=\"100%\"\n showMiniMap={false}\n onBlur={onChange}\n onSave={onChange}\n />\n );\n};\n\nexport default QueryField;\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { FieldValidationMessage, MultiSelect } from '@grafana/ui';\n\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorQuery } from '../../types/query';\nimport { AzureMonitorOption, AzureQueryEditorFieldProps } from '../../types/types';\nimport { findOptions } from '../../utils/common';\nimport { Field } from '../shared/Field';\n\ninterface SubscriptionFieldProps extends AzureQueryEditorFieldProps {\n onQueryChange: (newQuery: AzureMonitorQuery) => void;\n subscriptions: AzureMonitorOption[];\n}\n\nconst SubscriptionField = ({ query, subscriptions, variableOptionGroup, onQueryChange }: SubscriptionFieldProps) => {\n const [error, setError] = useState<boolean>(false);\n const [values, setValues] = useState<Array<SelectableValue<string>>>([]);\n const options = useMemo(() => [...subscriptions, variableOptionGroup], [subscriptions, variableOptionGroup]);\n\n useEffect(() => {\n if (query.subscriptions && query.subscriptions.length > 0) {\n setValues(findOptions([...subscriptions, ...variableOptionGroup.options], query.subscriptions));\n setError(false);\n } else {\n setError(true);\n }\n }, [query.subscriptions, subscriptions, variableOptionGroup.options]);\n\n const onChange = (change: Array<SelectableValue<string>>) => {\n const containsSelectAll = change.filter((c) => c.value === 'Select all subscriptions');\n if (!change || change.length === 0) {\n setValues([]);\n onQueryChange({\n ...query,\n subscriptions: [],\n });\n setError(true);\n } else if (containsSelectAll.length > 0) {\n const allSubs = subscriptions.map((c) => c.value ?? '').filter((c) => c !== 'Select all subscriptions');\n onQueryChange({\n ...query,\n subscriptions: allSubs,\n });\n } else {\n const newSubs = change.map((c) => c.value ?? '');\n onQueryChange({\n ...query,\n subscriptions: newSubs,\n });\n setValues(findOptions([...subscriptions, ...variableOptionGroup.options], newSubs));\n setError(false);\n }\n };\n\n return (\n <Field\n label={t('components.subscription-field.label-subscriptions', 'Subscriptions')}\n data-testid={selectors.components.queryEditor.argsQueryEditor.subscriptions.input}\n >\n <>\n <MultiSelect\n isClearable\n value={values}\n inputId=\"azure-monitor-subscriptions-field\"\n onChange={onChange}\n options={options}\n width={38}\n />\n {error ? (\n <FieldValidationMessage>\n <Trans i18nKey=\"components.subscription-field.validation-subscriptions\">\n At least one subscription must be chosen.\n </Trans>\n </FieldValidationMessage>\n ) : null}\n </>\n </Field>\n );\n};\n\nexport default SubscriptionField;\n","import { intersection } from 'lodash';\nimport { useState, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorFieldGroup, EditorRow, EditorRows } from '@grafana/plugin-ui';\nimport { Combobox } from '@grafana/ui';\n\nimport { ARGScope } from '../../dataquery.gen';\nimport Datasource from '../../datasource';\nimport { selectors } from '../../e2e/selectors';\nimport { AzureMonitorQuery } from '../../types/query';\nimport { AzureMonitorErrorish, AzureMonitorOption } from '../../types/types';\nimport { Field } from '../shared/Field';\n\nimport QueryField from './QueryField';\nimport SubscriptionField from './SubscriptionField';\n\ninterface ArgQueryEditorProps {\n query: AzureMonitorQuery;\n datasource: Datasource;\n subscriptionId?: string;\n onChange: (newQuery: AzureMonitorQuery) => void;\n variableOptionGroup: { label: string; options: AzureMonitorOption[] };\n setError: (source: string, error: AzureMonitorErrorish | undefined) => void;\n}\n\nconst ERROR_SOURCE = 'arg-subscriptions';\n\nfunction selectSubscriptions(\n fetchedSubscriptions: string[],\n currentSubscriptions?: string[],\n currentSubscription?: string\n) {\n let querySubscriptions = currentSubscriptions || [];\n if (querySubscriptions.length === 0 && currentSubscription) {\n querySubscriptions = [currentSubscription];\n }\n if (querySubscriptions.length === 0 && fetchedSubscriptions.length) {\n querySubscriptions = [fetchedSubscriptions[0]];\n }\n\n const templateVars = querySubscriptions.filter((sub) => sub.includes('$'));\n const commonSubscriptions = intersection(querySubscriptions, fetchedSubscriptions).concat(templateVars);\n if (fetchedSubscriptions.length && querySubscriptions.length > commonSubscriptions.length) {\n // If not all of the query subscriptions are in the list of fetched subscriptions, then\n // select only the ones present (or the first one if none is present)\n querySubscriptions = commonSubscriptions.length > 0 ? commonSubscriptions : [fetchedSubscriptions[0]];\n }\n return querySubscriptions;\n}\n\nconst ArgQueryEditor = ({\n query,\n datasource,\n subscriptionId,\n variableOptionGroup,\n onChange,\n setError,\n}: ArgQueryEditorProps) => {\n const [subscriptions, setSubscriptions] = useState<AzureMonitorOption[]>([]);\n useMemo(() => {\n if (query.azureResourceGraph?.scope !== ARGScope.Directory) {\n datasource\n .getSubscriptions()\n .then((results) => {\n const selectAllSubscriptionOption = [\n { label: 'Select all subscriptions', value: 'Select all subscriptions', description: 'Select all' },\n ];\n const fetchedSubscriptions = results.map((v) => ({ label: v.text, value: v.value, description: v.value }));\n setSubscriptions(selectAllSubscriptionOption.concat(fetchedSubscriptions));\n setError(ERROR_SOURCE, undefined);\n\n onChange({\n ...query,\n subscriptions: selectSubscriptions(\n fetchedSubscriptions.map((v) => v.value),\n query.subscriptions,\n query.subscription\n ),\n });\n })\n .catch((err) => setError(ERROR_SOURCE, err));\n }\n // We are only interested in re-fetching subscriptions if the data source changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [datasource, query?.azureResourceGraph?.scope]);\n\n const onChangeScope = (change: SelectableValue<ARGScope>) => {\n onChange({\n ...query,\n azureResourceGraph: {\n ...query.azureResourceGraph,\n scope: change.value,\n },\n subscriptions: [],\n });\n };\n\n return (\n <span data-testid={selectors.components.queryEditor.argsQueryEditor.container.input}>\n <EditorRows>\n <EditorRow>\n <EditorFieldGroup>\n <Field label={t('components.scope-selector.label', 'Scope')}>\n <Combobox\n onChange={onChangeScope}\n options={[\n { value: ARGScope.Directory, label: 'Directory' },\n { value: ARGScope.Subscription, label: 'Subscription' },\n ]}\n value={query.azureResourceGraph?.scope || ARGScope.Subscription}\n width={20}\n data-testid={selectors.components.queryEditor.argsQueryEditor.scope.input}\n />\n </Field>\n {query?.azureResourceGraph?.scope !== ARGScope.Directory ? (\n <SubscriptionField\n subscriptions={subscriptions}\n query={query}\n datasource={datasource}\n subscriptionId={subscriptionId}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n />\n ) : null}\n </EditorFieldGroup>\n </EditorRow>\n </EditorRows>\n <QueryField\n query={query}\n datasource={datasource}\n subscriptionId={subscriptionId}\n variableOptionGroup={variableOptionGroup}\n onQueryChange={onChange}\n setError={setError}\n />\n </span>\n );\n};\n\nexport default ArgQueryEditor;\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorRow = ({ children }) => {\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.root }, /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 2 }, children));\n};\nconst getStyles = (theme) => {\n return {\n root: css({\n padding: theme.spacing(1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default\n })\n };\n};\n\nexport { EditorRow };\n//# sourceMappingURL=EditorRow.js.map\n","import { useState, useCallback, useMemo } from 'react';\n\nimport { AzureMonitorErrorish } from '../types/types';\n\nimport { messageFromElement } from './messageFromError';\n\ntype SourcedError = [string, AzureMonitorErrorish];\n\nexport default function useLastError() {\n const [errors, setErrors] = useState<SourcedError[]>([]);\n\n // Handles errors from any child components that request data to display their options\n const addError = useCallback((errorSource: string, error: AzureMonitorErrorish | undefined) => {\n setErrors((errors) => {\n const errorsCopy = [...errors];\n const index = errors.findIndex(([vSource]) => vSource === errorSource);\n\n // If there's already an error, remove it. If we're setting a new error\n // below, we'll move it to the front\n if (index > -1) {\n errorsCopy.splice(index, 1);\n }\n\n // And then add the new error to the top of the array. If error is defined, it was already\n // removed above.\n if (error) {\n errorsCopy.unshift([errorSource, error]);\n }\n\n return errorsCopy;\n });\n }, []);\n\n const errorMessage = useMemo(() => {\n const recentError = errors[0];\n return recentError && messageFromElement(recentError[1]);\n }, [errors]);\n\n return [errorMessage, addError] as const;\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8531__;","export enum ResourceRowType {\n Subscription = 'Subscription',\n ResourceGroup = 'ResourceGroup',\n Resource = 'Resource',\n VariableGroup = 'TemplateVariableGroup',\n Variable = 'TemplateVariable',\n}\n\nexport interface ResourceRow {\n id: string; // azure's raw data id usually passes along a uri (except in the case of subscriptions), to make things less confusing for ourselves we parse the id string out of the uri or vice versa\n uri: string; // ex: /subscriptions/subid123\n name: string;\n type: ResourceRowType;\n typeLabel: string;\n location?: string;\n children?: ResourceRowGroup;\n}\n\nexport type ResourceRowGroup = ResourceRow[];\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","import React__default from 'react';\nimport { EditorStack } from './EditorStack.js';\n\nconst EditorFieldGroup = ({ children }) => {\n return /* @__PURE__ */ React__default.createElement(EditorStack, { gap: 1 }, children);\n};\n\nexport { EditorFieldGroup };\n//# sourceMappingURL=EditorFieldGroup.js.map\n","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","import { map } from 'lodash';\n\nimport { ScopedVars, SelectableValue, VariableWithMultiSupport } from '@grafana/data';\nimport { TemplateSrv, VariableInterpolation } from '@grafana/runtime';\n\nimport { AzureMonitorOption, VariableOptionGroup } from '../types/types';\n\nexport const hasOption = (options: AzureMonitorOption[], value: string): boolean =>\n options.some((v) => (v.options ? hasOption(v.options, value) : v.value === value));\n\nexport const findOptions = (options: AzureMonitorOption[], values: string[] = []) => {\n if (values.length === 0) {\n return [];\n }\n const set = values.reduce((accum, item) => {\n accum.add(item);\n return accum;\n }, new Set());\n return options.filter((option) => set.has(option.value));\n};\n\nexport const toOption = (v: { text: string; value: string }) => ({ value: v.value, label: v.text });\n\nexport const addValueToOptions = (\n values: Array<AzureMonitorOption | SelectableValue>,\n variableOptionGroup: VariableOptionGroup,\n value?: string\n) => {\n const options = [...values, variableOptionGroup];\n\n const optionValues = values.map((m) => m.value.toLowerCase()).concat(variableOptionGroup.options.map((p) => p.value));\n if (value && !optionValues.includes(value.toLowerCase())) {\n options.push({ label: value, value });\n }\n\n return options;\n};\n\n// Route definitions shared with the backend.\n// Check: /pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go <registerRoutes>\nexport const routeNames = {\n azureMonitor: 'azuremonitor',\n logAnalytics: 'loganalytics',\n appInsights: 'appinsights',\n resourceGraph: 'resourcegraph',\n};\n\nexport function interpolateVariable(\n value: string | number | Array<string | number>,\n variable: VariableWithMultiSupport\n) {\n if (typeof value === 'string') {\n // When enabling multiple responses, quote the value to mimic the array result below\n // even if only one response is selected. This does not apply if only the \"include all\"\n // option is enabled but with a custom value.\n if (variable.multi || (variable.includeAll && !variable.allValue)) {\n return \"'\" + value + \"'\";\n } else {\n return value;\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n const quotedValues = map(value, (val) => {\n if (typeof value === 'number') {\n return value;\n }\n\n return \"'\" + val + \"'\";\n });\n return quotedValues.join(',');\n}\n\nexport function replaceTemplateVariables<T extends { [K in keyof T]: string }>(\n templateSrv: TemplateSrv,\n query: T,\n scopedVars?: ScopedVars\n) {\n const workingQueries: Array<{ [K in keyof T]: string }> = [{ ...query }];\n const keys = Object.keys(query) as Array<keyof T>;\n keys.forEach((key) => {\n const rawValue = workingQueries[0][key];\n let interpolated: VariableInterpolation[] = [];\n const replaced = templateSrv.replace(rawValue, scopedVars, 'raw', interpolated);\n if (interpolated.length > 0) {\n for (const variable of interpolated) {\n if (variable.found === false) {\n continue;\n }\n if (variable.value.includes(',')) {\n const multiple = variable.value.split(',');\n const currentQueries = [...workingQueries];\n multiple.forEach((value, i) => {\n currentQueries.forEach((q) => {\n if (i === 0) {\n q[key] = rawValue.replace(variable.match, value);\n } else {\n workingQueries.push({ ...q, [key]: rawValue.replace(variable.match, value) });\n }\n });\n });\n } else {\n workingQueries.forEach((q) => {\n q[key] = replaced;\n });\n }\n }\n } else {\n workingQueries.forEach((q) => {\n q[key] = replaced;\n });\n }\n });\n\n return workingQueries;\n}\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nfunction isPlainObject(value) {\n if (!value || typeof value !== \"object\")\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n if (Ctor === Object)\n return true;\n return typeof Ctor == \"function\" && Function.toString.call(Ctor) === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter) {\n if (getArchtype(obj) === 0 /* Object */) {\n Reflect.ownKeys(obj).forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n const t = getArchtype(thing);\n if (t === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (t === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nfunction isMap(target) {\n return target instanceof Map;\n}\nfunction isSet(target) {\n return target instanceof Set;\n}\nfunction latest(state) {\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc.writable === false) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n configurable: true,\n writable: true,\n // could live with !!desc.set as well here...\n enumerable: desc.enumerable,\n value: base[key]\n };\n }\n return Object.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = Object.create(proto);\n return Object.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n Object.defineProperties(obj, {\n set: { value: dontMutateFrozenCollections },\n add: { value: dontMutateFrozenCollections },\n clear: { value: dontMutateFrozenCollections },\n delete: { value: dontMutateFrozenCollections }\n });\n }\n Object.freeze(obj);\n if (deep)\n Object.values(obj).forEach((value) => freeze(value, true));\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nfunction isFrozen(obj) {\n return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n return currentScope;\n}\nfunction createScope(parent_, immer_) {\n return {\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0\n };\n}\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n getPlugin(\"Patches\");\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nfunction enterScope(immer2) {\n return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n if (!scope.parent_)\n maybeFreeze(scope, result);\n }\n if (scope.patches_) {\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n );\n }\n } else {\n result = finalize(scope, baseDraft, []);\n }\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n each(\n value,\n (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)\n );\n return value;\n }\n if (state.scope_ !== rootScope)\n return value;\n if (!state.modified_) {\n maybeFreeze(rootScope, state.base_, true);\n return state.base_;\n }\n if (!state.finalized_) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n const result = state.copy_;\n let resultEach = result;\n let isSet2 = false;\n if (state.type_ === 3 /* Set */) {\n resultEach = new Set(result);\n result.clear();\n isSet2 = true;\n }\n each(\n resultEach,\n (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)\n );\n maybeFreeze(rootScope, result, false);\n if (path && rootScope.patches_) {\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n );\n }\n }\n return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n die(5);\n if (isDraft(childValue)) {\n const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n const res = finalize(rootScope, childValue, path);\n set(targetObject, prop, res);\n if (isDraft(res)) {\n rootScope.canAutoFreeze_ = false;\n } else\n return;\n } else if (targetIsSet) {\n targetObject.add(childValue);\n }\n if (isDraftable(childValue) && !isFrozen(childValue)) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return;\n }\n finalize(rootScope, childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && (isMap(targetObject) ? targetObject.has(prop) : Object.prototype.propertyIsEnumerable.call(targetObject, prop)))\n maybeFreeze(rootScope, childValue);\n }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const isArray = Array.isArray(base);\n const state = {\n type_: isArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false\n };\n let target = state;\n let traps = objectTraps;\n if (isArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return proxy;\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n const source = latest(state);\n if (!has(source, prop)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n return state.copy_[prop] = createProxy(value, state);\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_[prop] = false;\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_[prop] = true;\n return true;\n },\n deleteProperty(state, prop) {\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_[prop] = false;\n prepareCopy(state);\n markChanged(state);\n } else {\n delete state.assigned_[prop];\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n writable: true,\n configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n enumerable: desc.enumerable,\n value: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n arrayTraps[key] = function() {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? `value` in desc ? desc.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (typeof recipe !== \"function\")\n die(6);\n if (patchListener !== void 0 && typeof patchListener !== \"function\")\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || typeof base !== \"object\") {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (typeof base === \"function\") {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (typeof config?.autoFreeze === \"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy === \"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(value, parent) {\n const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent ? parent.scope_ : getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n } else {\n copy = shallowCopy(value, true);\n }\n each(copy, (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n });\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, patches, inversePatches) {\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n );\n case 1 /* Array */:\n return generateArrayPatches(state, basePath, patches, inversePatches);\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let i = 0; i < base_.length; i++) {\n if (assigned_[i] && copy_[i] !== base_[i]) {\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(base_[i])\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key);\n const value = get(copy_, key);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(op === REMOVE ? { op, path } : { op, path, value });\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n patches.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n die(errorOffset + 3);\n if (typeof base === \"function\" && p === \"prototype\")\n die(errorOffset + 3);\n base = get(base, p);\n if (typeof base !== \"object\")\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(\"Patches\", {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(value, state);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n return new DraftMap(target, parent);\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n return new DraftSet(target, parent);\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(value, state);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n return value;\n}\nfunction castImmutable(value) {\n return value;\n}\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { produce } from 'immer';\n\nimport { getTemplateSrv } from '@grafana/runtime';\n\nimport UrlBuilder from '../../azure_monitor/url_builder';\nimport { ResourcePickerQueryType } from '../../resourcePicker/resourcePickerData';\nimport { AzureMonitorQuery, AzureMonitorResource } from '../../types/query';\n\nimport { ResourceRow, ResourceRowGroup } from './types';\n\n// This regex matches URIs representing:\n// - subscriptions: /subscriptions/44693801-6ee6-49de-9b2d-9106972f9572\n// - resource groups: /subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources\n// - resources: /subscriptions/44693801-6ee6-49de-9b2d-9106972f9572/resourceGroups/cloud-datasources/providers/Microsoft.Compute/virtualMachines/GithubTestDataVM\nconst RESOURCE_URI_REGEX =\n /\\/subscriptions\\/(?<subscription>[^/]+)(?:\\/resourceGroups\\/(?<resourceGroup>[^/]+)(?:\\/providers\\/(?<metricNamespaceAndResource>.+))?)?/i;\n\ntype RegexGroups = Record<string, string | undefined>;\n\nfunction parseNamespaceAndName(metricNamespaceAndName?: string) {\n if (!metricNamespaceAndName) {\n return {};\n }\n const stringArray = metricNamespaceAndName.split('/');\n // The first two groups belong to the namespace (e.g. Microsoft.Storage/storageAccounts)\n const namespaceArray = stringArray.splice(0, 2);\n // The next element belong to the resource name (e.g. storageAcc1)\n const resourceNameArray = stringArray.splice(0, 1);\n // If there are more elements, keep adding them to the namespace and resource name, alternatively\n // e.g (blobServices/default)\n while (stringArray.length) {\n const nextElem = stringArray.shift()!;\n stringArray.length % 2 === 0 ? resourceNameArray.push(nextElem) : namespaceArray.push(nextElem);\n }\n return { metricNamespace: namespaceArray.join('/'), resourceName: resourceNameArray.join('/') };\n}\n\nexport function parseResourceURI(resourceURI: string): AzureMonitorResource {\n const matches = RESOURCE_URI_REGEX.exec(resourceURI);\n const groups: RegexGroups = matches?.groups ?? {};\n const { subscription, resourceGroup, metricNamespaceAndResource } = groups;\n const { metricNamespace, resourceName } = parseNamespaceAndName(metricNamespaceAndResource);\n\n return { subscription, resourceGroup, metricNamespace, resourceName };\n}\n\nexport function parseMultipleResourceDetails(resources: Array<string | AzureMonitorResource>, location?: string) {\n return resources.map((resource) => {\n return parseResourceDetails(resource, location);\n });\n}\n\nexport function parseResourceDetails(resource: string | AzureMonitorResource, location?: string) {\n if (typeof resource === 'string') {\n const res = parseResourceURI(resource);\n if (location) {\n res.region = location;\n }\n return res;\n }\n return resource;\n}\n\nexport function resourcesToStrings(resources: Array<string | AzureMonitorResource>) {\n return resources.map((resource) => resourceToString(resource));\n}\n\nexport function resourceToString(resource?: string | AzureMonitorResource) {\n return resource\n ? typeof resource === 'string'\n ? resource\n : UrlBuilder.buildResourceUri(getTemplateSrv(), resource)\n : '';\n}\n\nexport function isGUIDish(input: string) {\n return !!input.match(/^[A-Z0-9]+/i);\n}\n\nfunction compareNamespaceAndName(\n rowNamespace?: string,\n rowName?: string,\n resourceNamespace?: string,\n resourceName?: string\n) {\n // StorageAccounts subresources are not listed independently\n if (resourceNamespace?.startsWith('microsoft.storage/storageaccounts')) {\n resourceNamespace = 'microsoft.storage/storageaccounts';\n if (resourceName?.endsWith('/default')) {\n resourceName = resourceName.slice(0, -'/default'.length);\n }\n }\n return rowNamespace === resourceNamespace && rowName === resourceName;\n}\n\nexport function matchURI(rowURI: string, resourceURI: string) {\n const targetParams = parseResourceDetails(resourceURI);\n const rowParams = parseResourceDetails(rowURI);\n\n return (\n rowParams?.subscription === targetParams?.subscription &&\n rowParams?.resourceGroup?.toLowerCase() === targetParams?.resourceGroup?.toLowerCase() &&\n compareNamespaceAndName(\n rowParams?.metricNamespace?.toLowerCase(),\n rowParams?.resourceName,\n targetParams?.metricNamespace?.toLowerCase(),\n targetParams?.resourceName\n )\n );\n}\n\nexport function findRows(rows: ResourceRowGroup, uris: string[]): ResourceRow[] {\n const result: ResourceRow[] = [];\n uris.forEach((uri) => {\n const row = findRow(rows, uri);\n if (row) {\n result.push(row);\n }\n });\n return result;\n}\n\nexport function findRow(rows: ResourceRowGroup, uri: string): ResourceRow | undefined {\n for (const row of rows) {\n if (matchURI(row.uri, uri)) {\n return row;\n }\n\n if (row.children) {\n const result = findRow(row.children, uri);\n\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n}\n\nexport function addResources(rows: ResourceRowGroup, targetParentId: string, newResources: ResourceRowGroup) {\n return produce(rows, (draftState) => {\n const draftRow = findRow(draftState, targetParentId);\n\n // we can't find the selected resource in our list of resources,\n // probably means user has either mistyped in the input field\n // or is using template variables.\n // either way no need to throw, just show that none of the resources are checked\n if (!draftRow) {\n return;\n }\n\n draftRow.children = newResources;\n });\n}\n\nexport function setResources(\n query: AzureMonitorQuery,\n type: ResourcePickerQueryType,\n resources: Array<string | AzureMonitorResource>\n): AzureMonitorQuery {\n if (type === 'logs') {\n // Resource URI for LogAnalytics\n return {\n ...query,\n azureLogAnalytics: {\n ...query.azureLogAnalytics,\n resources: resourcesToStrings(resources).filter((resource) => resource !== ''),\n },\n };\n }\n if (type === 'traces') {\n // Resource URI for Traces\n return {\n ...query,\n azureTraces: {\n ...query.azureTraces,\n resources: resourcesToStrings(resources).filter((resource) => resource !== ''),\n },\n };\n }\n\n // Resource object for metrics\n const parsedResource = resources.length ? parseResourceDetails(resources[0]) : {};\n return {\n ...query,\n subscription: parsedResource.subscription,\n azureMonitor: {\n ...query.azureMonitor,\n metricNamespace: parsedResource.metricNamespace?.toLocaleLowerCase(),\n region: parsedResource.region,\n resources: parseMultipleResourceDetails(resources).filter(\n (resource) =>\n resource.resourceName !== '' &&\n resource.metricNamespace !== '' &&\n resource.subscription !== '' &&\n resource.resourceGroup !== ''\n ),\n metricName: undefined,\n aggregation: undefined,\n timeGrain: '',\n dimensionFilters: [],\n },\n };\n}\n","function instanceOfAzureCredential(authType, object) {\n if (!object) {\n return false;\n }\n return object.authType === authType;\n}\n\nexport { instanceOfAzureCredential };\n//# sourceMappingURL=AzureCredentials.js.map\n","import { config } from '@grafana/runtime';\n\nvar AzureCloud = /* @__PURE__ */ ((AzureCloud2) => {\n AzureCloud2[\"Public\"] = \"AzureCloud\";\n AzureCloud2[\"China\"] = \"AzureChinaCloud\";\n AzureCloud2[\"USGovernment\"] = \"AzureUSGovernment\";\n AzureCloud2[\"None\"] = \"\";\n return AzureCloud2;\n})(AzureCloud || {});\nconst predefinedClouds = [\n { name: \"AzureCloud\", displayName: \"Azure\" },\n { name: \"AzureChinaCloud\", displayName: \"Azure China\" },\n { name: \"AzureUSGovernment\", displayName: \"Azure US Government\" }\n];\nfunction getAzureClouds() {\n const settingsEx = config.azure;\n if (Array.isArray(settingsEx.clouds) && settingsEx.clouds.length > 0) {\n return settingsEx.clouds;\n }\n return predefinedClouds;\n}\nfunction getDefaultAzureCloud() {\n return config.azure.cloud || \"AzureCloud\" /* Public */;\n}\nfunction resolveLegacyCloudName(cloudName) {\n if (!cloudName) {\n return void 0;\n }\n switch (cloudName) {\n case \"azuremonitor\":\n return \"AzureCloud\" /* Public */;\n case \"chinaazuremonitor\":\n return \"AzureChinaCloud\" /* China */;\n case \"govazuremonitor\":\n return \"AzureUSGovernment\" /* USGovernment */;\n default:\n throw new Error(`Azure cloud '${cloudName}' is not recognized by datasource.`);\n }\n}\n\nexport { AzureCloud, getAzureClouds, getDefaultAzureCloud, resolveLegacyCloudName };\n//# sourceMappingURL=clouds.js.map\n","import { config } from '@grafana/runtime';\nimport { getDefaultAzureCloud } from '../clouds.js';\nimport { instanceOfAzureCredential } from './AzureCredentials.js';\n\nconst concealed = Symbol(\"Concealed client secret\");\nconst concealedLegacy = Symbol(\"Concealed legacy client secret\");\nfunction isCredentialsComplete(credentials, ignoreSecret = false) {\n const authType = credentials.authType;\n switch (authType) {\n case \"msi\":\n case \"workloadidentity\":\n case \"currentuser\":\n return true;\n case \"clientsecret\":\n case \"clientsecret-obo\":\n return !!(credentials.azureCloud && credentials.tenantId && credentials.clientId && // When ignoreSecret is set we consider the credentials complete without checking the secret\n !!(ignoreSecret || credentials.clientSecret));\n case \"ad-password\":\n return !!(credentials.clientId && credentials.password && credentials.userId);\n default:\n throw new Error(`The auth type '${authType}' not supported.`);\n }\n}\nfunction getClientSecret(options) {\n if (!(\"secureJsonFields\" in options) || !options.hasOwnProperty(\"secureJsonFields\")) {\n return void 0;\n }\n if (options.secureJsonFields.azureClientSecret) {\n return concealed;\n } else if (options.secureJsonFields.clientSecret) {\n return concealedLegacy;\n } else {\n const secret = options.secureJsonData?.azureClientSecret;\n return typeof secret === \"string\" && secret.length > 0 ? secret : void 0;\n }\n}\nfunction getAdPassword(options) {\n if (!(\"secureJsonFields\" in options) || !options.hasOwnProperty(\"secureJsonFields\")) {\n return void 0;\n }\n if (options.secureJsonFields.password) {\n return concealed;\n } else {\n const secret = options.secureJsonData?.password;\n return typeof secret === \"string\" && secret.length > 0 ? secret : void 0;\n }\n}\nfunction getDatasourceCredentials(options, oboEnabled) {\n const credentials = options.jsonData.azureCredentials;\n if (!credentials) {\n return void 0;\n }\n const authType = credentials.authType;\n switch (authType) {\n case \"msi\":\n case \"workloadidentity\":\n if (authType === \"msi\" && config.azure.managedIdentityEnabled || authType === \"workloadidentity\" && config.azure.workloadIdentityEnabled) {\n return {\n authType\n };\n } else {\n return void 0;\n }\n case \"clientsecret\":\n case \"clientsecret-obo\":\n if (authType === \"clientsecret-obo\" && !oboEnabled) {\n return void 0;\n }\n return {\n authType,\n azureCloud: credentials.azureCloud || getDefaultAzureCloud(),\n tenantId: credentials.tenantId,\n clientId: credentials.clientId,\n clientSecret: getClientSecret(options)\n };\n case \"ad-password\":\n return {\n authType,\n userId: credentials.userId,\n clientId: credentials.clientId,\n password: getAdPassword(options)\n };\n }\n if (instanceOfAzureCredential(authType, credentials)) {\n if (!config.azure.userIdentityEnabled) {\n return void 0;\n }\n if (instanceOfAzureCredential(\"clientsecret\", credentials.serviceCredentials)) {\n const serviceCredentials = { ...credentials.serviceCredentials, clientSecret: getClientSecret(options) };\n return {\n authType,\n serviceCredentialsEnabled: credentials.serviceCredentialsEnabled,\n serviceCredentials\n };\n }\n return {\n authType,\n serviceCredentialsEnabled: credentials.serviceCredentialsEnabled,\n serviceCredentials: credentials.serviceCredentials\n };\n }\n throw new Error(`The auth type '${authType}' is not supported.`);\n}\nfunction updateDatasourceCredentials(options, credentials, oboEnabled) {\n options = {\n ...options,\n jsonData: {\n ...options.jsonData,\n azureAuthType: void 0,\n cloudName: void 0,\n tenantId: void 0,\n clientId: void 0\n }\n };\n const authType = credentials.authType;\n switch (authType) {\n case \"msi\":\n case \"workloadidentity\":\n if (authType === \"msi\" && !config.azure.managedIdentityEnabled) {\n throw new Error(\"Managed Identity authentication is not enabled in Grafana config.\");\n }\n if (authType === \"workloadidentity\" && !config.azure.workloadIdentityEnabled) {\n throw new Error(\"Workload Identity authentication is not enabled in Grafana config.\");\n }\n options = {\n ...options,\n jsonData: {\n ...options.jsonData,\n azureCredentials: {\n authType\n }\n }\n };\n return options;\n case \"clientsecret\":\n case \"clientsecret-obo\":\n if (authType === \"clientsecret-obo\" && !oboEnabled) {\n throw new Error(\"Client Secret OBO authentication is not enabled in Grafana config.\");\n }\n options = {\n ...options,\n jsonData: {\n ...options.jsonData,\n azureCredentials: {\n authType,\n azureCloud: credentials.azureCloud || getDefaultAzureCloud(),\n tenantId: credentials.tenantId,\n clientId: credentials.clientId\n }\n },\n secureJsonData: {\n ...options.secureJsonData,\n azureClientSecret: typeof credentials.clientSecret === \"string\" && credentials.clientSecret.length > 0 ? credentials.clientSecret : void 0\n },\n secureJsonFields: {\n ...options.secureJsonFields,\n azureClientSecret: credentials.clientSecret === concealed,\n clientSecret: credentials.clientSecret === concealedLegacy\n }\n };\n if (authType === \"clientsecret-obo\") {\n options = {\n ...options,\n jsonData: {\n ...options.jsonData,\n oauthPassThru: true\n }\n };\n }\n return options;\n case \"ad-password\":\n options = {\n ...options,\n jsonData: {\n ...options.jsonData,\n azureCredentials: {\n authType: \"ad-password\",\n userId: credentials.userId,\n clientId: credentials.clientId\n }\n },\n secureJsonData: {\n ...options.secureJsonData,\n password: typeof credentials.password === \"string\" && credentials.password.length > 0 ? credentials.password : void 0\n },\n secureJsonFields: {\n ...options.secureJsonFields,\n password: typeof credentials.password === \"symbol\"\n }\n };\n return options;\n }\n if (instanceOfAzureCredential(\"currentuser\", credentials)) {\n if (!config.azure.userIdentityEnabled) {\n throw new Error(\"User Identity authentication is not enabled in Grafana config.\");\n }\n const serviceCredentials = credentials.serviceCredentials;\n let clientSecret;\n if (instanceOfAzureCredential(\"clientsecret\", serviceCredentials)) {\n clientSecret = serviceCredentials.clientSecret;\n delete serviceCredentials.clientSecret;\n }\n options = {\n ...options,\n jsonData: {\n ...options.jsonData,\n azureCredentials: {\n authType: \"currentuser\",\n serviceCredentialsEnabled: credentials.serviceCredentialsEnabled,\n serviceCredentials\n },\n oauthPassThru: true,\n disableGrafanaCache: true\n },\n secureJsonData: {\n ...options.secureJsonData,\n azureClientSecret: typeof clientSecret === \"string\" && clientSecret.length > 0 ? clientSecret : void 0\n },\n secureJsonFields: {\n ...options.secureJsonFields,\n azureClientSecret: clientSecret === concealed,\n clientSecret: clientSecret === concealedLegacy\n }\n };\n return options;\n }\n throw new Error(`The auth type '${authType}' is not supported.`);\n}\nfunction hasCredentials(options) {\n return !!options.jsonData.azureCredentials;\n}\n\nexport { concealed, concealedLegacy, getAdPassword, getClientSecret, getDatasourceCredentials, hasCredentials, isCredentialsComplete, updateDatasourceCredentials };\n//# sourceMappingURL=AzureCredentialsConfig.js.map\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\n import amdMetaModule from 'amd-module';\n\n __webpack_public_path__ =\n amdMetaModule && amdMetaModule.uri\n ? amdMetaModule.uri.slice(0, amdMetaModule.uri.lastIndexOf('/') + 1)\n : 'public/plugins/grafana-azure-monitor-datasource/';\n ","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"public/plugins/grafana-azure-monitor-datasource/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t231: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunkgrafana_azure_monitor_datasource\"] = globalThis[\"webpackChunkgrafana_azure_monitor_datasource\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(3963);\n"],"names":["hasSymbol","webpackQueues","webpackExports","webpackError","resolveQueue","inProgress","dataWebpackPrefix","TimeGrainConverter","createISO8601Duration","timeGrain","timeGrainUnit","includes","toUpperCase","createISO8601DurationFromInterval","interval","slice","length","unit","indexOf","toMinutes","findClosestTimeGrain","allowedTimeGrains","timeGrains","filter","o","closest","intervalMs","rangeUtil","intervalToMs","i","createTimeGrainFromISO8601Duration","duration","offset","substring","value","timeUnitToText","text","createKbnUnitFromISO8601Duration","timeUnitToKbn","outside","module","exports","version","range","options","constructor","this","max","map","Map","get","key","undefined","delete","set","size","firstKey","keys","next","Range","er","cssWithMappingToString","list","toString","item","content","needLayer","concat","join","modules","media","dedupe","supports","layer","alreadyImportedModules","k","id","_k","push","__WEBPACK_EXTERNAL_MODULE__211__","r1","r2","intersects","SemVer","parse","safeRe","re","t","String","match","rtl","coerceRtlRegex","includePrerelease","COERCERTLFULL","COERCERTL","exec","index","lastIndex","COERCEFULL","COERCE","major","minor","patch","prerelease","build","resources","onChange","renderAdvanced","isAdvancedOpen","setIsAdvancedOpen","useState","JSON","stringify","div","data-testid","selectors","components","queryEditor","resourcePicker","advanced","collapse","Collapse","label","isOpen","onToggle","Space","v","EntryIcon","entry","type","ResourceRowType","Subscription","Icon","name","ResourceGroup","Resource","VariableGroup","Variable","theme","table","css","width","tableLayout","overflow","scrollableTable","tableScroller","maxHeight","selectedTableScroller","header","background","colors","secondary","row","borderBottom","border","weak","borderBottomColor","medium","disabledRow","opacity","cell","padding","spacing","textOverflow","collapseButton","margin","loadingCell","textAlign","spinner","marginBottom","nestedEntry","display","alignItems","entryContentItem","truncated","minWidth","whiteSpace","resourceField","maxWidth","resourceFieldButton","nestedRowCheckbox","zIndex","selectionFooter","primary","paddingTop","loadingWrapper","paddingBottom","color","resultLimit","fontStyle","modal","breakpoints","values","lg","filterInput","queryType","marginTop","NestedEntry","isSelected","isDisabled","isSelectable","level","scrollIntoView","onToggleCollapse","onSelectedChange","useTheme2","styles","useStyles2","getStyles","hasChildren","children","handleToggleCollapse","useCallback","handleSelectedChanged","ev","target","checked","checkboxId","uri","useEffect","document","getElementById","behavior","block","className","style","marginLeft","gridSize","IconButton","aria-label","onClick","layout","h","Checkbox","disabled","htmlFor","cx","NestedRow","selectedRows","requestNestedRows","onRowSelectedChange","selectableEntryTypes","disableRow","rowStatus","setRowStatus","find","toLowerCase","parsedURI","parseResourceURI","selectedRow","findRow","tr","td","title","then","catch","some","resourceGroup","typeLabel","location","Object","childRow","FadeTransition","visible","colSpan","LoadingPlaceholder","searchFn","searchFilter","setSearchFilter","debouncedSearch","useMemo","debounce","cancel","Input","prefix","event","searchPhrase","currentTarget","placeholder","search","input","RECENT_RESOURCES_KEY","resourcePickerData","datasource","onApply","onCancel","selectionNotice","isLoading","setIsLoading","rows","setRows","setSelectedRows","internalSelected","setInternalSelected","errorMessage","setErrorMessage","shouldShowLimitFlag","setShouldShowLimitFlag","selectionNoticeText","subscriptions","setSubscriptions","isLoadingSubscriptions","setIsLoadingSubscriptions","namespaces","setNamespaces","isLoadingNamespaces","setIsLoadingNamespaces","locations","setLocations","isLoadingLocations","setIsLoadingLocations","filters","setFilters","types","view","setView","loadFilterOptions","getSubscriptions","sub","initialNamespaces","getMetricNamespaces","getDefaultSubscriptionId","ns","resourceTypeDisplayNames","initialLocations","getLocations","s","Array","from","displayName","loadInitialData","fetchInitialRows","parseMultipleResourceDetails","error","messageFromError","useEffectOnce","config","featureToggles","azureResourcePickerUpdates","isValid","r","subscription","resourceName","metricNamespace","sanitized","found","findRows","resourcesToStrings","parseRows","parentRow","nestedRows","fetchAndAppendNestedRow","handleSelectionChanged","newRes","newSelected","newInternalSelected","matchURI","resourceToString","handleApply","handleApplyWithLocalStorage","recentResources","onRecentResourcesSave","uniqBy","handleSearch","searchWord","searchResults","err","loadFilteredRows","filteredRows","updateFilters","filterType","updatedFilters","reportInteraction","subscriptionsFilters","typesFilters","locationsFilters","resourceTable","resourceRows","thead","Trans","i18nKey","tbody","aria-live","footer","h5","Alert","severity","AdvancedMulti","baseResourcePicker","localStorageSave","Search","Stack","direction","justifyContent","gap","Field","noMargin","MultiCombobox","isClearable","enableAllOption","loading","p","numResults","Modal","ButtonRow","Button","variant","fill","every","apply","button","LocalStorageValueProvider","storageKey","defaultValue","TabsBar","Tab","active","onChangeTab","recentResourcesCount","TabContent","ResourceLabel","resourcesComponents","setResourcesComponents","FormattedResource","icon","items","forEach","resource","split","span","query","onQueryChange","inlineField","labelWidth","pickerIsOpen","setPickerIsOpen","handleOpenPicker","closePicker","setResources","select","onDismiss","trapFocus","ResourcePicker","resourceList","marginBlock","Label","h6","Tooltip","TextLink","href","external","placement","interactive","newResources","onResourceChange","AccessoryButton","splice","removeResource","hidden","internalRe","constants","identifiers","valid","clean","inc","diff","compare","rcompare","compareLoose","compareBuild","sort","rsort","gt","lt","eq","neq","gte","lte","cmp","coerce","Comparator","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","gtr","ltr","simplifyRange","subset","src","tokens","SEMVER_SPEC_VERSION","RELEASE_TYPES","compareIdentifiers","rcompareIdentifiers","METADATA_FUNCTION_PARAMS","transformMetadataFunction","sourceSchema","functions","fn","params","parameters","arg","cslDefaultValue","body","inputParameters","AzureLogAnalyticsDatasource","DataSourceWithBackend","isConfigured","validateDatasource","filterQuery","hide","azureLogAnalytics","workspace","azureTraces","path","azureMonitorPath","getResource","result","ResponseParser","parseSubscriptions","getWorkspaces","response","getWorkspaceList","val","subscriptionId","templateSrv","replace","defaultSubscriptionId","workspaceListUrl","getMetadata","resourceUri","resourcePath","getKustoSchema","interpolatedUri","interpolateVariable","nameOrIdOrSomething","templateVariables","database","tables","majorVersion","minorVersion","entityGroups","clusterType","cluster","connectionString","databases","globalScalarParameters","transformMetadataToKustoSchema","getVariables","applyTemplateVariables","scopedVars","AzureQueryType","LogAnalytics","expandResourcesForMultipleVariables","firstWorkspace","builderQuery","resultFormat","dashboardTime","basicLogsQuery","timeColumn","AzureTraces","traceTypes","f","property","filtersReplaced","operation","operationId","expandedResources","getDeprecatedDefaultWorkSpace","instanceSettings","jsonData","logAnalyticsDefaultWorkspace","getDefaultOrFirstSubscription","getFirstWorkspace","workspaces","credentials","authType","isValidConfigField","tenantId","status","message","clientId","field","getAzureLogAnalyticsCheatsheetQueries","getBasicLogsQueryUsage","getTemplateSrv","data","to","postResource","super","getCredentials","routeNames","logAnalytics","azureMonitor","hasValue","AzureMonitorDatasource","hasResource","metricDefinition","hasResourceUri","metricName","aggregation","migratedQuery","preMigrationQuery","Error","TimegrainConverter","migratedTarget","migrateQuery","replaceTemplateVariables","flat","customNamespace","top","dimensionFilters","dimension","operator","azMonitorQuery","allowedTimeGrainsMs","region","alias","AzureMonitor","globalRegion","custom","url","UrlBuilder","buildAzureMonitorGetMetricNamespacesUrl","apiPreviewVersion","replaceSingleTemplateVariables","namespace","classification","parseResponseValues","storageNamespaces","reason","console","getMetricNames","multipleResources","apiVersion","buildAzureMonitorGetMetricNamesUrl","getMetricMetadata","parseMetadata","getWorkspaceTablePlan","tableName","workspaceUri","TablePlan","Analytics","buildAzureMonitorGetLogsTableUrl","tableResult","instanceOfLogAnalyticsTableError","properties","plan","getProvider","providerName","providerApiVersion","locationMap","subLocations","parseLocations","locationsApiVersion","listByResourceGroupApiVersion","basicLogsEnabled","logsSupportedResourceTypesKusto","ResourcePickerData","currentSelection","promises","selection","resourceGroupURI","resourceGroups","getResourceGroupsBySubscriptionId","addResources","resourceURI","resourcesForResourceGroup","getResourcesForResourceGroup","promise","azureResourceGraphDatasource","subscriptionName","filterByType","getResourceGroups","parsedUri","resourceGroupName","getResourceNames","locationDisplayName","getResourceURIDisplayProperties","parseResourceDetails","subscriptionURI","pagedResourceGraphRequest","responseResourceName","getResourceURIFromWorkspace","fetchAllNamespaces","supportedMetricNamespaces","Set","resourceTypes","add","getNamespacesForRegion","azureMonitorDatasource","toLocaleLowerCase","Promise","all","resourceObjs","newSelectedRows","rtype","searchType","searchQuery","filtersQuery","createFilter","l","AzureResourceGraphDatasource","azureResourceGraph","scope","ARGScope","Directory","ts","variableNames","subscriptionVar","AzureResourceGraph","maxRetries","$skipToken","allFetched","queryResponse","resourceGraphURL","metricNamespacesFilter","resourceFilters","validMetricNamespace","startsWith","namespacesFilter","resourceGraph","migrateAnnotation","annotation","oldQuery","rawQuery","oldWorkspace","newQuery","refId","grafanaTemplateVariableFnMatches","resourceGroupsWithSub","namespacesWithSub","resourceNames","resourceNamesWithSub","metricNamespaceWithSub","metricNames","metricNamesWithSub","appInsightsMetricNameQuery","appInsightsGroupByQuery","workspacesQuery","workspacesQueryWithSub","migrateGrafanaTemplateVariableFn","grafanaTemplateVariableFn","GrafanaTemplateVariableFn","kind","SubscriptionsQuery","ResourceGroupsQuery","ResourceNamesQuery","NamespacesQuery","MetricNamesQuery","WorkspacesQuery","migrateStringQueriesToObjectQueries","matches","isGrafanaTemplateVariableFnQuery","matchesForQuery","trim","createGrafanaTemplateVariableQuery","defaultWorkspaceId","azureLogAnalyticsDatasource","isGUIDish","createLogAnalyticsTemplateVariableQuery","updateQuery","inputVal","setInputVal","onRunQuery","updatedQuery","InlineField","example","onBlur","removeOption","props","AZURE_QUERY_VARIABLE_TYPE_OPTIONS","LocationsQuery","CustomNamespacesQuery","CustomMetricNamesQuery","variableOptionGroup","setVariableOptionGroup","requireSubscription","setRequireSubscription","hasResourceGroup","setHasResourceGroup","hasNamespace","setHasNamespace","hasRegion","setHasRegion","requireResourceGroup","setRequireResourceGroup","requireNamespace","setRequireNamespace","requireCustomNamespace","setRequireCustomNamespace","requireResource","setRequireResource","setResourceGroups","customNamespaces","setCustomNamespaces","regions","setRegions","setError","useLastError","isEqual","getVariablesRaw","subs","rgs","parsedResource","buildResourceUri","queryChange","variableEditor","Select","selectableValue","LogsQueryEditor","hideFormatAs","GrafanaTemplateVariableFnInput","ArgQueryEditor","parseResourceNamesAsTemplateVariable","VariableSupport","CustomVariableSupport","request","queryObj","targets","res","toDataFrame","getAzureLogAnalyticsWorkspaces","templateVariablesResults","callGrafanaTemplateVariableFn","loc","queryResp","lastValueFrom","promisedResults","replaceVariable","rg","metric","editor","VariableEditor","Datasource","ds","pseudoDatasource","byType","baseTarget","hasQueryForType","has","queryForType","cloneDeep","requestId","observables","entries","req","mappedQueryType","TraceExemplar","forkJoin","pipe","results","frame","state","LoadingState","Done","of","targetContainsTemplate","containsTemplate","subQuery","variableQuery","interpolateVariablesInQueries","queries","getRef","modifyQuery","action","expression","annotations","currentUserAuth","currentUserAuthFallbackAvailable","prepareAnnotation","variables","azureCredentials","instanceOfAzureCredential","serviceCredentials","isCredentialsComplete","azureAuthType","a","loose","debug","process","env","NODE_DEBUG","test","args","b","__WEBPACK_EXTERNAL_MODULE__1269__","__WEBPACK_EXTERNAL_MODULE__1308__","hasOwnProperty","inputId","formatOptions","onLoad","setFormatAs","handleChange","change","logsQueryEditor","formatSelection","canCookies","cookie","e","order","n","voidElement","attrs","charAt","comment","RegExp","c","create","reduce","m","u","d","x","g","warn","i18n","code","msg","rest","services","logger","forward","alreadyWarned","Date","obj","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","unescape","setDefaults","i18nInstance","setI18n","instance","node","checkLength","base","getChildren","i18nIsDynamicList","getAsArray","isArray","nodesToString","i18nOptions","stringNode","childrenArray","keepArray","child","childIndex","isValidElement","childPropsCount","shouldKeepChild","childChildren","format","clone","renderNodes","knownComponentsMap","targetString","combinedTOpts","shouldUnescape","emptyChildrenButNeedsHandling","keep","getData","childs","assign","ast","opts","renderInner","rootReactNode","mappedChildren","mapAST","hasValidReactChildren","pushTranslatedJSX","inner","mem","isVoid","dummy","cloneElement","Children","createElement","ref","reactNode","astNode","reactNodes","translationContent","interpolator","interpolate","language","tmp","parseInt","source","newTarget","mergeProps","isElement","isValidTranslationWithChildren","isEmptyTransWithHTML","isKnownComponent","call","Number","isNaN","parseFloat","wrapTextNodes","fixComponentProps","component","translation","componentKey","comp","Fragment","generateComponents","generateArrayComponents","componentMap","generateObjectComponents","isComponentsMap","object","acc","init","react","createContext","count","parent","context","tOptions","defaults","i18nFromProps","tFromProps","additionalProps","i18nFromContext","defaultNS","defaultNSFromContext","useContext","bind","reactI18nextOptions","nodeAsString","hashTransKey","interpolation","defaultVariables","interpolationOverride","alwaysFormat","suffix","generatedComponents","indexedChildren","componentsMap","useAsParent","defaultTransParent","ENGLISH_US","DEFAULT_LANGUAGE","PSEUDO_LOCALE","tFunc","transComponent","initTFuncAndTransComponent","getI18nInstance","getFixedT","I18NextTrans","loadNamespacedResources","loaders","resolvedLanguage","loader","addResourceBundle","initDefaultI18nInstance","initPromise","use","initReactI18next","returnEmptyString","lng","initPluginTranslations","getI18n","initDefaultReactI18nInstance","getResolvedLanguage","default","defaultMessage","Component","RawQuery","lang","highlighted","Prism","grammar","editorField","dangerouslySetInnerHTML","__html","fontFamily","typography","fontFamilyMonospace","fontSize","bodySmall","IP_FUNCTIONS","detail","documentation","STATS_FUNCS","FUNCTIONS","pattern","greedy","backticks","quote","regex","command","function","keyword","lookbehind","number","punctuation","whitespace","cheatsheetQueries","setCheatsheetQueries","areDropdownsOpen","setAreDropdownsOpen","visibleQueries","setVisibleQueries","searchInputValue","setSearchInputValue","tokenizer","dropdownMenu","category","getCheatsheetQueries","categories","alphabetizedQueries","queriesByCategory","categoryQueries","related","queryId","filterAlignment","filteredQueries","searchValue","visibleQueriesCategories","filteredQueriesBySearch","filterQueriesBySearch","categoryDropdown","updatedVisibleQueries","selectedCategory","queryCategory","filterQueriesByCategory","allowCustomValue","backspaceRemovesValue","noOptionsMessage","formatCreateLabel","isSearchable","isMulti","totalQueries","ScrollContainer","showScrollIndicators","Card","card","Heading","queryDisplayName","Actions","queryName","queryCategories","flexDirection","backgroundColor","AzureCheatSheetModal","onClose","AzureCheatSheet","columnGap","flexWrap","flex","resourceLabel","resourceGroupAndName","onCommonPropChange","grow","transparent","invalid","endsWith","tooltip","resourceNum","aggregationOptions","setAggregation","addValueToOptions","dimensionOptions","dimensionLabels","setDimensionLabels","labelsObj","series","labels","flatMap","fields","dimensionLower","prevLabels","newLabels","currentLabels","useDimensionLabels","dimensionOperators","validDimensionOptions","dimensionFilter","onFieldChange","fieldName","getValidFilterOptions","selectedFilter","getValidMultiSelectOptions","selectedFilters","labelOptions","EditorList","changed","properData","setDimensionFilters","renderItem","onDelete","selectedOperator","selectedDimension","menuShouldPortal","MultiSelect","setValue","HTMLInputElement","handleBlur","setLegendAlias","setMetricName","metricsQueryEditor","metricNamespaces","setCustomNamespace","timeGrainOptions","setTimeGrain","autoInterval","baseTimeGrains","description","setTop","useAsyncState","asyncFn","dependencies","errorSource","Math","random","finalValue","getResourceGroupAndName","defaultMetricMetadata","aggOptions","dimensions","supportedAggTypes","primaryAggType","rawResults","selectedValue","toOption","option","metricsMetadata","metricMetadata","setMetricMetadata","metadata","aggregations","supportedTimeGrains","newAggregation","newTimeGrain","useMetricMetadata","useMetricNamespaces","useMetricNames","supportMultipleResource","multiResourceCompatibleTypes","container","EditorRows","EditorRow","EditorFieldGroup","ResourceField","rowResource","selectedRowSample","AdvancedResourcePicker","MetricNamespaceField","MetricNameField","AggregationField","TimeGrainField","DimensionFields","TopField","LegendFormatField","resolveSelectors","versionedSelectors","grafanaVersion","resolveSelectorGroup","group","isVersionedSelectorGroup","assertIsSemverValid","resolveSelector","first","versionedSelector","versionToUse","versions","selectorName","MIN_GRAFANA_VERSION","versionedComponents","RadioButton","Breadcrumbs","breadcrumb","CanvasGridAddActions","addPanel","groupPanels","ungroup","ungroupRows","addRow","pasteRow","addTab","pasteTab","pastePanel","DashboardEditPaneSplitter","primaryBody","EditPaneHeader","deleteButton","copyDropdown","copy","duplicate","backButton","TimePicker","openButton","overlayContent","fromField","toField","applyTimeRange","copyTimeRange","pasteTimeRange","calendar","closeButton","absoluteTimeRangeTitle","DataSourcePermissions","form","roleType","rolePicker","permissionLevel","DateTimePicker","DataSource","TestData","QueryTab","scenarioSelectContainer","scenarioSelect","min","noise","seriesCount","spread","startValue","drop","DataSourceHttpSettings","urlInput","Jaeger","traceIDInput","Prometheus","configPage","connectionSettings","manageAlerts","allowAsRecordingRulesTarget","scrapeInterval","queryTimeout","defaultEditor","disableMetricLookup","prometheusType","prometheusVersion","cacheLevel","incrementalQuerying","queryOverlapWindow","disableRecordingRules","customQueryParameters","httpMethod","exemplarsAddButton","internalLinkSwitch","codeModeMetricNamesSuggestionLimit","seriesLimit","explain","editorToggle","legend","step","exemplars","builder","metricSelect","hints","metricsExplorer","queryAdvisor","queryField","metricsCountInfo","metricsBrowser","selectMetric","metricList","labelNamesFilter","labelValuesFilter","useQuery","useAsRateQuery","validateSelector","clear","exemplarMarker","variableQueryEditor","labelnames","metricRegex","labelValues","labelSelect","varQueryResult","seriesQuery","classicQuery","minStep","tags","seriesValueAsTimestamp","Menu","MenuComponent","MenuGroup","MenuItem","SubMenu","Panels","Panel","headerContainer","headerItems","menuItems","menu","containerByTitle","headerCornerInfo","mode","_","loadingBar","HoverWidget","dragIcon","PanelDataErrorMessage","Visualization","Graph","VisualizationTab","legendSection","Legend","legendItemAlias","showLegendSwitch","xAxis","BarGauge","valueV2","PieChart","svgSlice","Text","Table","TableNG","Filters","HeaderButton","Container","SelectAll","Wrapper","Caret","Footer","ReducerLabel","Value","VizLegend","seriesName","Drawer","General","expand","contract","close","rcContentWrapper","subtitle","DashboardSaveDrawer","saveButton","saveAsButton","saveAsTitleInput","PanelEditor","OptionsPane","fieldLabel","fieldInput","DataPane","applyButton","toggleVizPicker","toggleVizOptions","toggleTableView","showZoomField","showAttributionField","showScaleField","showMeasureField","showDebugField","measureButton","Outline","section","ElementEditPane","variableType","addVariableButton","variableNameInput","variableLabelInput","AutoGridLayout","minColumnWidth","customMinColumnWidth","clearCustomMinColumnWidth","maxColumns","rowHeight","customRowHeight","clearCustomRowHeight","fillScreen","TabsLayout","titleInput","PanelInspector","Data","Stats","Json","Query","refreshButton","jsonObjectKeys","RefreshPicker","runButtonV2","intervalButtonV2","queryInspectorButton","queryHistoryButton","addQuery","addQueryFromLibrary","queryGroupTopSection","addExpression","QueryHistory","queryText","QueryEditorRows","QueryEditorRow","actionButton","AlertTab","AlertRules","groupToggle","toggle","expandedContent","previewButton","ruleNameField","newFolderButton","newFolderNameField","newFolderNameCreateButton","newEvaluationGroupButton","newEvaluationGroupName","newEvaluationGroupInterval","newEvaluationGroupCreate","stepNo","stepAdvancedModeSwitch","alertV2","TransformTab","newTransform","transformationEditor","transformationEditorDebugger","Transforms","disableTransformationButton","Reduce","modeLabel","calculationsLabel","SpatialOperations","actionLabel","locationLabel","autoOption","coords","latitudeFieldLabel","longitudeFieldLabel","geohash","geohashFieldLabel","lookup","lookupFieldLabel","gazetteerFieldLabel","searchInput","noTransformationsMessage","addTransformationButton","removeAllTransformationsButton","NavBar","Configuration","Toggle","Reporting","NavMenu","NavToolbar","commandPaletteTrigger","shareDashboard","markAsFavorite","editDashboard","editButton","exitButton","settingsButton","addRowButton","addLibraryPanelButton","addVisualizationButton","pastePanelButton","discardChangesButton","discardLibraryPanelButton","unlinkLibraryPanelButton","saveLibraryPanelButton","backToDashboardButton","PageToolbar","itemButton","QueryEditorToolbarItem","BackButton","backArrow","OptionsGroup","PluginVisualization","current","toggleAllOptions","singleValue","FieldConfigEditor","OverridesConfigEditor","FolderPicker","containerV2","ReadonlyFolderPicker","DataSourcePicker","inputV2","dataSourceList","advancedModal","builtInDataSourceList","TimeZonePicker","changeTimeSettingsButton","WeekStartPicker","TraceViewer","spanBar","QueryField","QueryBuilder","queryPatterns","inputSelect","valueSelect","matchOperatorSelect","ValuePicker","sectionV2","itemsV2","cards","collapseFolder","sectionId","expandFolder","dashboardItem","dashboardCard","folderHeader","folderName","folderContent","dashboardItems","DashboardLinks","dropDown","link","LoadingIndicator","CallToActionCard","buttonV2","DataLinksContextMenu","singleLink","DataLinksActionsTooltip","tooltipWrapper","CodeEditor","ReactMonacoEditor","editorLazy","DashboardImportPage","textarea","submit","ImportDashboardForm","PanelAlertTabContent","VisualizationPreview","ColorSwatch","DashboardRow","wrapper","UserProfile","profileSaveButton","preferencesSaveButton","orgsTable","sessionsTable","extensionPointTabs","extensionPointTab","tabId","FileUpload","inputField","fileNameSpan","DebugOverlay","OrgRolePicker","AnalyticsToolbarButton","Variables","variableOption","variableLinkWrapper","Annotations","annotationsTypeInput","annotationsChoosePanelInput","testButton","resultContainer","ReturnToPrevious","buttonGroup","dismissButton","SQLQueryEditor","selectColumn","selectColumnInput","selectFunctionParameter","selectAggregation","selectAggregationInput","selectAlias","selectAliasInput","selectInputParameter","filterConjunction","filterField","filterOperator","headerTableSelector","headerFilterSwitch","headerGroupSwitch","headerOrderSwitch","headerPreviewSwitch","EntityNotFound","Portal","ExportImage","png","jpg","rendererAlert","buttons","generate","download","preview","image","pages","Alerting","AddAlertRule","EditAlertRule","alertRuleUid","Login","username","password","skip","PasswordlessLogin","email","Home","readOnly","saveAndTest","alert","DataSources","dataSources","dataSourceName","EditDataSource","dataSourceUid","settings","AddDataSource","dataSourcePluginsV2","pluginName","ConfirmModal","SecretsManagement","SecretForm","AddDashboard","addNewPanel","itemButtonAddViz","addNewRow","addNewPanelLibrary","Settings","List","Edit","annotationIndex","editIndex","ImportDashboard","Dashboard","uid","DashNav","nav","navV2","publicDashboardTag","shareButton","scrollContainer","newShareButton","shareLink","arrowMenu","shareInternally","shareExternally","shareSnapshot","NewExportButton","exportAsJson","exportAsImage","playlistControls","prev","stop","Controls","submenu","submenuItem","submenuItemLabels","submenuItemValueDropDownValueLinkTexts","submenuItemValueDropDownDropDown","submenuItemValueDropDownOptionTexts","annotationsWrapper","annotationLabel","annotationToggle","deleteDashBoard","sectionItems","saveDashBoard","saveAsDashBoard","urlParams","dashboardUid","addAnnotationCTAV2","NewAnnotation","panelFilterSelect","showInLabel","previewInDashboard","enable","addVariableCTAV2","newButton","tableRowNameFields","variableName","tableRowDefinitionFields","tableRowArrowUpButtons","tableRowArrowDownButtons","tableRowDuplicateButtons","tableRowRemoveButtons","headerLink","modeLabelNew","modeLabelEdit","generalNameInput","generalNameInputV2","generalTypeSelect","generalTypeSelectV2","generalLabelInput","generalLabelInputV2","generalHideSelect","generalHideSelectV2","selectionOptionsAllowCustomValueSwitch","selectionOptionsMultiSwitch","selectionOptionsIncludeAllSwitch","selectionOptionsCustomAllInput","previewOfValuesOption","submitButton","QueryVariable","queryOptionsDataSourceSelect","queryOptionsOpenButton","queryOptionsRefreshSelect","queryOptionsRefreshSelectV2","queryOptionsRegExInput","queryOptionsRegExInputV2","queryOptionsSortSelect","queryOptionsSortSelectV2","queryOptionsQueryInput","queryOptionsStaticOptionsToggle","queryOptionsStaticOptionsOrderDropdown","valueGroupsTagsEnabledSwitch","valueGroupsTagsTagsQueryInput","valueGroupsTagsTagsValuesQueryInput","ConstantVariable","constantOptionsQueryInput","constantOptionsQueryInputV2","DatasourceVariable","datasourceSelect","nameFilter","TextBoxVariable","textBoxOptionsQueryInput","textBoxOptionsQueryInputV2","CustomVariable","customValueInput","optionsOpenButton","IntervalVariable","intervalsValueInput","autoEnabledCheckbox","stepCountIntervalSelect","minIntervalInput","GroupByVariable","dataSourceSelect","infoText","modeToggle","AdHocFiltersVariable","SwitchVariable","valuePairTypeSelect","enabledValueInput","disabledValueInput","StaticOptionsEditor","addButton","labelInput","valueInput","moveButton","marker","Rows","Repeated","ConfigSection","warningMessage","Dashboards","dashboards","toggleView","SaveDashboardAsModal","newName","save","SaveDashboardModal","saveVariables","saveTimerange","saveRefresh","variablesWarningAlert","SharePanelModal","linkToRenderedImage","ShareDashboardModal","PublicDashboard","WillBePublicCheckbox","LimitedDSCheckbox","CostIncreaseCheckbox","PauseSwitch","EnableAnnotationsSwitch","CreateButton","DeleteButton","CopyUrlInput","CopyUrlButton","SettingsDropdown","TemplateVariablesWarningAlert","UnsupportedDataSourcesWarningAlert","NoUpsertPermissionsWarningAlert","EnableTimeRangeSwitch","EmailSharingConfiguration","ShareType","EmailSharingInput","EmailSharingInviteButton","EmailSharingList","DeleteEmail","ReshareLink","SnapshotScene","PublishSnapshot","ShareDashboardDrawer","ShareInternally","lockTimeRangeSwitch","shortenUrlSwitch","copyUrlButton","SharePanel","widthInput","heightInput","scaleFactorInput","generateImageButton","downloadImageButton","ShareExternally","publicAlert","emailSharingAlert","shareTypeSelect","Creation","PublicShare","createButton","cancelButton","EmailShare","willBePublicCheckbox","enableTimeRangeSwitch","enableAnnotationsSwitch","revokeAccessButton","toggleAccessButton","ShareSnapshot","publishSnapshot","ExportDashboardDrawer","ExportAsJson","codeEditor","exportExternallyToggle","saveToFileButton","copyToClipboardButton","page","NotAvailable","pausedDescription","PublicDashboardScene","loadingPage","controls","RequestViewAccess","recipientInput","PublicDashboardConfirmAccess","Explore","graph","scrollView","addFromQueryLibrary","SoloPanel","PluginsList","listItem","signatureErrorNotice","PluginPage","signatureInfo","disabledInfo","PlaylistForm","itemDelete","BrowseDashboards","checkbox","NewFolderForm","nameInput","SearchDashboards","FolderView","PublicDashboards","ListItem","linkButton","configButton","trashcanButton","pauseSwitch","UserListPage","tabs","allUsers","orgUsers","anonUserDevices","publicDashboardsUsers","users","org","admin","publicDashboards","UserListAdminPage","UsersListPage","UserAnonListPage","UsersListPublicDashboardsPage","DashboardsListModal","ProfilePage","Plugin","pluginId","MigrateToCloud","selected","Option","innerProps","innerRef","isFocused","getSelectStyles","onClickMultiOption","selectOption","stopPropagation","preventDefault","optionFocused","optionSelected","optionDisabled","onKeyDown","role","aria-checked","tabIndex","optionBody","Filter","propertyMap","setPropertyMap","queryTraceTypes","setLoading","setValues","setSelected","loadOptions","vals","resolve","queryString","timezone","startTime","app","CoreApp","Unknown","getDefaultTimeRange","toArray","getTraceProperties","ButtonSelect","AsyncMultiSelect","blurInputOnSelect","onOpenMenu","closeMenuOnSelect","onCloseMenu","hideSelectedOptions","Tables","availabilityResults","customEvents","exceptions","pageViews","requests","traces","attributesOmit","common","appId","application_Version","appName","client_Browser","client_City","client_CountryOrRegion","client_IP","client_Model","client_OS","client_StateOrProvince","client_Type","cloud_RoleInstance","cloud_RoleName","customDimensions","customMeasurements","iKey","itemCount","itemId","itemType","operation_Id","operation_Name","operation_ParentId","operation_SyntheticSource","performanceBucket","sdkVersion","session_Id","success","timestamp","user_AccountId","user_AuthenticatedId","user_Id","availabilityResultsSchema","dependenciesSchema","resultCode","eventsSchema","omit","pageViewsSchema","tablesSchema","assembly","details","handledAt","innermostAssembly","innermostMessage","innermostMethod","innermostType","method","outerAssembly","outerMessage","outerMethod","outerType","problemId","severityLevel","formatAs","setTraceTypes","excludedProperties","uniq","queryFilters","findOptions","allEventTypes","defaultQuery","getDefaultOptions","tracesQueryEditor","setOperationId","previousOperationId","useRef","setDefaultTracesQuery","setQueryOperationId","TraceTypeField","FormatAsField","ResultFormat","Trace","EditorHeader","root","minHeight","InlineSelect","labelProp","SelectContainer","ValueContainer","SingleValue","openMenuOnFocus","valueContainer","borderColor","FlexItem","shrink","flexGrow","flexShrink","QueryHeader","setAzureLogsCheatSheetModalOpen","Loading","showModeSwitchWarning","setShowModeSwitchWarning","pendingModeChange","setPendingModeChange","EDITOR_MODES","LogsEditorMode","Builder","Raw","currentMode","queryTypes","azureMonitorLogsBuilderEditor","applyModeChange","confirmText","newMode","onConfirm","editorMode","RadioButtonGroup","goingToBuilder","goingToRaw","hasRawKql","hasBuilderQuery","runQuery","DEFAULT_QUERY","prepareQuery","transformedQuery","transformExemplarQuery","deepEqual","onChangeQuery","preparedQuery","EditorForQueryType","NewMetricsQueryEditor","timeRange","TracesQueryEditor","height","UserAuthAlert","userAuthAlert","UserAuthFallbackAlert","userAuthFallbackAlert","baseQuery","baseOnRunQuery","azureLogsCheatSheetModalOpen","setDefaultSubscriptionId","usePreparedQuery","UnifiedAlerting","CloudAlerting","isAzureAuthenticated","bootData","user","authenticatedBy","azure","userIdentityFallbackCredentialsEnabled","__WEBPACK_EXTERNAL_MODULE__2007__","ANY","minimumVersionWithPreRelease","minimumVersion","simpleSubset","dom","semver","eqSet","gtltComp","higher","lower","hasDomLT","hasDomGT","higherGT","lowerLT","needDomLTPre","needDomGTPre","sawNonNull","OUTER","simpleSub","simpleDom","isSub","MAX_SAFE_INTEGER","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","creds","getDatasourceCredentials","azureCloud","resolveLegacyCloudName","cloudName","getDefaultAzureCloud","clientSecret","getClientSecret","getLegacyCredentials","managedIdentityEnabled","workloadIdentityEnabled","updateCredentials","updateDatasourceCredentials","InputGroup","modifiedChildren","invalidChild","borderPriority","borderTopRightRadius","borderBottomRightRadius","borderTopLeftRadius","borderBottomLeftRadius","borderRadius","position","inputFieldSize","DEFAULT_LOGS_BUILDER_QUERY","columns","BuilderQueryEditorExpressionType","Property","BuilderQueryEditorPropertyType","groupBy","expressions","Group_by","where","And","limit","OPERATORS_BY_TYPE","string","int","datetime","bool","aggregateOptions","aggregate","templateVariableOptions","isPercentile","isCountAggregate","percentileValue","setPercentileValue","columnValue","setColumnValue","safeTemplateVariables","selectableOptions","buildPercentileParams","percentile","column","Function_parameter","fieldType","updateAggregate","updates","handleAggregateChange","funcName","Function","newValue","percentileParams","handlePercentileChange","newCol","handleColumnChange","AggregateSection","allColumns","buildAndUpdateQuery","aggregates","setAggregates","prevTable","hasLoadedAggregates","currentTable","availableColumns","col","EditorField","optional","newItems","makeRenderAggregate","aggregateToDelete","prevAggregates","updatedAggregates","agg","onDeleteAggregate","AggregateItem","buildCondition","exp","isGroupOfFilters","nested","Boolean","joiner","joined","isNestedExpression","op","prop","escapedValue","AzureMonitorKustoQueryBuilder","timeFilter","fuzzySearch","phrases","condition","appendWhere","selectedColumns","appendProject","phrase","reduceExprs","summarizeParts","expr","func","summarizeClause","appendSummarize","orderBy","clauses","appendOrderBy","appendLimit","FilterItem","filterIndex","groupIndex","usedColumns","getFilterValues","showOr","escapeRegExp","opt","Combobox","inputValue","FilterSection","hasLoadedFilters","variableOptions","completeCol","filterDynamicColumns","updated","onAddOrFilters","Operator","onAddAndFilters","Or","onDeleteFilter","toISOString","kustoQuery","currentGroupIndex","idx","FuzzySearch","searchTerm","setSearchTerm","selectedColumn","setSelectedColumn","setIsOpen","hasLoadedFuzzySearch","fuzzy","strValue","removeExtraQuotes","updateFuzzySearch","term","fuzzyExpression","GroupByItem","isTemplateVariable","GroupBySection","groupBys","setGroupBys","hasLoadedGroupBy","handleGroupByChange","makeRenderGroupBy","propertyName","prevGroupBys","updatedGroupBys","gb","onDeleteGroupBy","onChangeItem","onDeleteItem","updatedItem","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","codeBlock","setHidden","pre","LimitSection","setLimit","newLimit","OrderBySection","hasLoadedOrderBy","setOrderBy","groupByColumns","aggregateColumns","columnOptions","orderOptions","handleOrderByChange","BuilderQueryEditorOrderByOptions","Asc","Order_by","Desc","onDeleteOrderBy","TableSection","isLoadingSchema","tableOptions","Basic","selectAllOption","allColumnNames","columnSelectValue","selectedTable","selectedArray","includesAll","lastSelected","filtered","LogsQueryBuilder","schema","isKQLPreviewHidden","setIsKQLPreviewHidden","datetimeColumn","timeFilterExpression","Datetime","updatedBuilderQuery","updatedQueryString","logsQueryBuilder","KQLPreview","LogsManagement","basicLogsAckOpen","setBasicLogsAckOpen","updatedBasicLogsQuery","setBasicLogsQuery","setDashboardTime","setKustoQuery","confirmButtonVariant","monaco","setMonaco","model","getModel","kustoWorker","getKustoWorker","kustoMode","setSchema","setupEditor","handleEditorMount","showMiniMap","onSave","onEditorDidMount","TimeManagement","defaultTimeColumns","setDefaultTimeColumns","timeColumns","setTimeColumns","disabledTimePicker","setDisabledTimePicker","setDefaultColumn","setTimeColumn","db","timeColumnOptions","timeColumnsSet","defaultColumnsMap","cols","curr","timespanColumn","defaultColumns","handleTimeColumnChange","disabledOptions","migrateWorkspaceQueryToResourceQuery","shouldShowBasicLogsToggle","selectedResource","migrationError","setMigrationError","useMigrations","showBasicLogsToggle","setShowBasicLogsToggle","dataIngestedWarning","setDataIngestedWarning","isBasicLogsQuery","setIsLoadingSchema","fetchAllPlans","hasNoBuilder","modeUnset","dataIngested","textToShow","getBasicLogsUsage","portalLinkButton","querySeries","meta","azurePortalLink","LinkButton","Logs","TimeSeries","minSV","rangeObj","release","identifier","identifierBase","getButtonStyles","paddingLeft","paddingRight","SPACE_CHARACTERS","parseOptions","raw","formatted","parseRange","TypeError","isNullSet","isAny","comps","memoKey","cached","cache","hr","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","parseComparator","replaceGTE0","COMPARATORLOOSE","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","remainingComparators","testComparator","pop","otherComparator","BUILD","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","M","pr","ret","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fp","fpr","fb","tM","tm","tp","tpr","allowed","languages","kusto","__WEBPACK_EXTERNAL_MODULE__3059__","__WEBPACK_EXTERNAL_MODULE__3241__","___CSS_LOADER_EXPORT___","textFieldName","valueFieldName","defaultAggTypes","metricData","primaryAggregationType","supportedAggregationTypes","parseTimeGrains","metricAvailabilities","parseDimensions","avail","metadataDimensions","localizedValue","parseSubscriptionsForSelect","supportsLogs","effect","numeric","anum","bnum","pluginJson","plugin","DataSourcePlugin","setConfigEditor","ConfigEditor","setQueryEditor","AzureMonitorQueryEditor","getAppEvents","subscribe","DashboardLoadedEvent","payload","dashboardId","orgId","userId","azureQueries","multiResource","stats","grafanaTime","queryTime","trace","operationIdSpecified","eventTypesSpecified","filtersSpecified","unknown","trackAzureMonitorDashboardLoaded","grafana_version","dashboard_id","org_id","azure_monitor_queries","azure_monitor_queries_hidden","azure_monitor_multiple_resource","azure_monitor_query","azure_log_analytics_queries","azure_log_analytics_queries_hidden","azure_log_multiple_resource","azure_log_analytics_queries_grafana_time","azure_log_analytics_queries_query_time","azure_log_query","azure_resource_graph_queries","azure_resource_graph_queries_hidden","azure_resource_graph_multiple_subscription","azure_resource_graph_query","azure_traces_queries","azure_traces_queries_hidden","azure_traces_multiple_resource","azure_traces_table","azure_traces_trace","azure_traces_operation_id_specified","azure_traces_event_type_specified","azure_traces_filters","azure_traces_query","azure_subscriptions_query","azure_resource_groups_query","azure_namespaces_query","azure_resource_names_query","azure_metric_names_query","azure_workspaces_query","azure_grafana_template_variable_query","azure_locations_query","azure_unknown_query","appendDimensionFilter","throwErrors","styleElement","nonce","setAttribute","_a","tooltipInteractive","fieldProps","childInputId","ReactUtils","getChildId","labelEl","fontWeight","fontWeightMedium","equal","flags","valueOf","prototype","LOOSE","FULL","num","other","compareMain","comparePre","PRERELEASELOOSE","PRERELEASE","styleSheet","cssText","firstChild","removeChild","appendChild","createTextNode","memo","styleTarget","querySelector","window","HTMLIFrameElement","contentDocument","head","getTarget","__WEBPACK_EXTERNAL_MODULE__4831__","version1","version2","v1","v2","comparison","v1Higher","highVersion","lowVersion","highHasPre","safeSrc","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","token","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","FULLPLAIN","MAINVERSIONLOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","LONETILDE","LONECARET","DataSourceDescription","docsLink","hasRequiredFields","textDecoration","rel","GenericConfigSection","isCollapsible","isInitiallyOpen","iconName","isSubSection","collapsibleButtonAriaLabel","fontWeightRegular","descriptionText","ConfigSubSection","AdvancedHttpSettings","TagsInput","keepCookies","cookies","timeout","AppRegistrationCredentials","azureCloudOptions","onCredentialsChange","configEditor","required","tenantID","clientID","authTypeOptions","serviceCredentialsEnabled","onServiceCredentialsEnabledChange","defaultAuthType","getAzureCloudOptions","getAzureClouds","cloud","AzureCredentialsForm","userIdentityEnabled","unshift","CurrentUserFallbackCredentials","BasicLogsToggle","onBasicLogsEnabledChange","Switch","DefaultSubscription","onSubscriptionChange","onSubscriptionsChange","loadSubscriptionsClicked","onLoadSubscriptions","useReducer","updateSubscriptions","canceled","received","autoSelect","defaultSubscription","loadSubscriptions","MonitorConfig","updateOptions","azureMonitorEnableUserAuth","receivedSubscriptions","enableBasicLogs","PureComponent","render","onOptionsChange","Divider","enableSecureSocksProxy","secureSocksDSProxyEnabled","SecureSocksProxySettings","baseURL","optionsFunc","setState","unsaved","saveOptions","getBackendSrv","put","updateDatasourcePluginOption","fetch","toPromise","isFetchError","EditorStack","wrap","wrapItems","_b","__WEBPACK_EXTERNAL_MODULE__5959__","messageFromElement","maybeAMessage","innererror","__WEBPACK_EXTERNAL_MODULE__6089__","urlArray","metricNamespaceProcessed","metricNamespaceArray","resourceNameProcessed","resourceNameArray","provider","shift","parentResource","baseUrl","encodeURIComponent","argsQueryEditor","update","remove","sourceMap","btoa","parentNode","removeStyleElement","OLD_DEFAULT_DROPDOWN_VALUE","workingQuery","migrateLogAnalyticsToFromTimes","setMetricsTimeGrain","migrateTimeGrains","haveMetricNamespace","migrateToDefaultNamespace","oldDimension","migrateDimensionToDimensionFilter","azureMonitorQuery","newFilters","staticProps","hasFilter","oldFilter","migrateDimensionFilterToArray","isWellFormedUri","migrateResourceUriToResourceObj","migrateResourceGroupAndName","intersectTime","parsed","maxSV","newItem","itemIndex","stylesInDOM","getIndexByIdentifier","modulesToDom","idCountMap","indexByIdentifier","references","updater","addElementStyle","byIndex","api","newObj","lastIdentifiers","newList","newLastIdentifiers","_i","_index","minver","setMin","comparator","compver","versionA","versionB","hilo","gtfn","ltefn","ltfn","ecomp","high","low","__WEBPACK_EXTERNAL_MODULE__7781__","remainingProps","Symbol","for","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","__self","__source","q","defaultProps","$$typeof","_owner","jsx","jsxs","__WEBPACK_EXTERNAL_MODULE__8146__","containsSelectAll","allSubs","newSubs","FieldValidationMessage","ERROR_SOURCE","selectSubscriptions","fetchedSubscriptions","currentSubscriptions","currentSubscription","querySubscriptions","templateVars","commonSubscriptions","intersection","SubscriptionField","ranges","simplified","original","element","attributes","shape","radius","errors","setErrors","addError","errorsCopy","findIndex","vSource","recentError","__WEBPACK_EXTERNAL_MODULE__8531__","cssMapping","base64","sourceMapping","COMPARATOR","accum","optionValues","appInsights","variable","multi","includeAll","allValue","workingQueries","rawValue","interpolated","replaced","multiple","currentQueries","looseOption","freeze","emptyOpts","NOTHING","DRAFTABLE","DRAFT_STATE","die","getPrototypeOf","isDraft","isDraftable","isPlainObject","isMap","isSet","objectCtorString","proto","Ctor","each","iter","getArchtype","Reflect","ownKeys","thing","type_","propOrOldValue","latest","copy_","base_","shallowCopy","strict","isPlain","descriptors","getOwnPropertyDescriptors","desc","writable","configurable","enumerable","deep","isFrozen","defineProperties","dontMutateFrozenCollections","currentScope","plugins","getPlugin","pluginKey","getCurrentScope","usePatchesInScope","patchListener","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","drafts_","revokeDraft","parent_","enterScope","immer2","immer_","canAutoFreeze_","unfinalizedDrafts_","draft","revoke_","revoked_","processResult","baseDraft","modified_","finalize","maybeFreeze","generateReplacementPatches_","rootScope","childValue","finalizeProperty","scope_","finalized_","resultEach","isSet2","generatePatches_","parentState","targetObject","rootPath","targetIsSet","assigned_","autoFreeze_","propertyIsEnumerable","objectTraps","getDescriptorFromProto","draft_","readPropFromProto","peek","prepareCopy","createProxy","current2","currentState","y","markChanged","deleteProperty","getOwnPropertyDescriptor","owner","defineProperty","setPrototypeOf","arrayTraps","useStrictShallowCopy_","arguments","proxyMap_","proxySet_","isManual_","traps","revoke","proxy","Proxy","revocable","createProxyProxy","currentImpl","immer","produce","recipe","defaultBase","self","base2","hasError","ip","produceWithPatches","patches","inversePatches","autoFreeze","setAutoFreeze","useStrictShallowCopy","setUseStrictShallowCopy","createDraft","finishDraft","applyPatches","applyPatchesImpl","applyPatches_","RESOURCE_URI_REGEX","groups","metricNamespaceAndResource","metricNamespaceAndName","stringArray","namespaceArray","nextElem","parseNamespaceAndName","rowURI","rowParams","targetParams","rowNamespace","rowName","resourceNamespace","uris","targetParentId","draftState","draftRow","predefinedClouds","settingsEx","clouds","concealed","concealedLegacy","ignoreSecret","secureJsonFields","azureClientSecret","secret","secureJsonData","getAdPassword","oboEnabled","oauthPassThru","disableGrafanaCache","lastIndexOf","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","queue","hasAwait","currentDeps","outerResolve","reject","depQueues","rej","deps","dep","wrapDeps","getResult","fnQueue","getter","__esModule","definition","chunkId","done","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","onScriptComplete","onerror","onload","clearTimeout","doneFns","setTimeout","toStringTag","installedChunks","j","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","globalThis"],"sourceRoot":""}
.
Edit
..
Edit
360.js
Edit
360.js.map
Edit
CHANGELOG.md
Edit
LICENSE
Edit
README.md
Edit
dashboards
Edit
img
Edit
locales
Edit
module.js
Edit
module.js.LICENSE.txt
Edit
module.js.map
Edit
plugin.json
Edit