@grafana/plugin-ui 0.14.0-dev.1 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/dist/cjs/index.cjs +3382 -353
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +102 -39
- package/dist/cjs/test-utils.cjs +7881 -62
- package/dist/cjs/test-utils.cjs.map +1 -1
- package/dist/cjs/test-utils.d.cts +24 -24
- package/dist/esm/_virtual/chance.js +6 -0
- package/dist/esm/_virtual/chance.js.map +1 -0
- package/dist/esm/_virtual/chance2.js +4 -0
- package/dist/esm/_virtual/chance2.js.map +1 -0
- package/dist/esm/_virtual/index.js +6 -0
- package/dist/esm/_virtual/index.js.map +1 -0
- package/dist/esm/_virtual/re.js +4 -0
- package/dist/esm/_virtual/re.js.map +1 -0
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js +155 -0
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js.map +1 -0
- package/dist/esm/async-query-data/RunQueryButtons.js +52 -0
- package/dist/esm/async-query-data/RunQueryButtons.js.map +1 -0
- package/dist/esm/async-query-data/requestLooper.js +74 -0
- package/dist/esm/async-query-data/requestLooper.js.map +1 -0
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLink.js +4 -4
- package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLinks.js +3 -3
- package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/styles.js +2 -2
- package/dist/esm/components/DatePicker/styles.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
- package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
- package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
- package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
- package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorField.js +5 -5
- package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
- package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
- package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
- package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
- package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
- package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
- package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditor.js +10 -8
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryHeader.js +20 -20
- package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/Space.js +2 -2
- package/dist/esm/components/QueryEditor/Space.js.map +1 -1
- package/dist/esm/components/QueryEditor/TableSelector.js +0 -1
- package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/defaults.js +7 -7
- package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
- package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js +10 -2
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +7 -2
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +14 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/types.js +0 -1
- package/dist/esm/components/QueryEditor/types.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/formatSQL.js +15 -4
- package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
- package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +27 -26
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js +0 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js +0 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js +0 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js +10 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
- package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
- package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/definition.js +0 -6
- package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +5 -4
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +27 -26
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/types.js +1 -17
- package/dist/esm/components/SQLEditor/types.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js +8 -8
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +3 -3
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/tokenType.js +18 -0
- package/dist/esm/components/SQLEditor/utils/tokenType.js.map +1 -0
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js +10 -10
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
- package/dist/esm/components/Segment/Segment.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +4 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +6 -6
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
- package/dist/esm/datasource/SqlDatasource.js +14 -14
- package/dist/esm/datasource/SqlDatasource.js.map +1 -1
- package/dist/esm/datasource/constants.js.map +1 -1
- package/dist/esm/hooks/useDebounce.js.map +1 -1
- package/dist/esm/index.d.ts +102 -39
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/chance/chance.js +7820 -0
- package/dist/esm/node_modules/chance/chance.js.map +1 -0
- package/dist/esm/node_modules/semver/classes/comparator.js +160 -0
- package/dist/esm/node_modules/semver/classes/comparator.js.map +1 -0
- package/dist/esm/node_modules/semver/classes/range.js +575 -0
- package/dist/esm/node_modules/semver/classes/range.js.map +1 -0
- package/dist/esm/node_modules/semver/classes/semver.js +349 -0
- package/dist/esm/node_modules/semver/classes/semver.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/clean.js +20 -0
- package/dist/esm/node_modules/semver/functions/clean.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/cmp.js +71 -0
- package/dist/esm/node_modules/semver/functions/cmp.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/coerce.js +76 -0
- package/dist/esm/node_modules/semver/functions/coerce.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/compare-build.js +21 -0
- package/dist/esm/node_modules/semver/functions/compare-build.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/compare-loose.js +17 -0
- package/dist/esm/node_modules/semver/functions/compare-loose.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/compare.js +19 -0
- package/dist/esm/node_modules/semver/functions/compare.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/diff.js +72 -0
- package/dist/esm/node_modules/semver/functions/diff.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/eq.js +17 -0
- package/dist/esm/node_modules/semver/functions/eq.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/gt.js +17 -0
- package/dist/esm/node_modules/semver/functions/gt.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/gte.js +17 -0
- package/dist/esm/node_modules/semver/functions/gte.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/inc.js +33 -0
- package/dist/esm/node_modules/semver/functions/inc.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/lt.js +17 -0
- package/dist/esm/node_modules/semver/functions/lt.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/lte.js +17 -0
- package/dist/esm/node_modules/semver/functions/lte.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/major.js +17 -0
- package/dist/esm/node_modules/semver/functions/major.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/minor.js +17 -0
- package/dist/esm/node_modules/semver/functions/minor.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/neq.js +17 -0
- package/dist/esm/node_modules/semver/functions/neq.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/parse.js +30 -0
- package/dist/esm/node_modules/semver/functions/parse.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/patch.js +17 -0
- package/dist/esm/node_modules/semver/functions/patch.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/prerelease.js +20 -0
- package/dist/esm/node_modules/semver/functions/prerelease.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/rcompare.js +17 -0
- package/dist/esm/node_modules/semver/functions/rcompare.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/rsort.js +17 -0
- package/dist/esm/node_modules/semver/functions/rsort.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/satisfies.js +24 -0
- package/dist/esm/node_modules/semver/functions/satisfies.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/sort.js +17 -0
- package/dist/esm/node_modules/semver/functions/sort.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/valid.js +20 -0
- package/dist/esm/node_modules/semver/functions/valid.js.map +1 -0
- package/dist/esm/node_modules/semver/index.js +143 -0
- package/dist/esm/node_modules/semver/index.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/constants.js +47 -0
- package/dist/esm/node_modules/semver/internal/constants.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/debug.js +21 -0
- package/dist/esm/node_modules/semver/internal/debug.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/identifiers.js +39 -0
- package/dist/esm/node_modules/semver/internal/identifiers.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/lrucache.js +52 -0
- package/dist/esm/node_modules/semver/internal/lrucache.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/parse-options.js +27 -0
- package/dist/esm/node_modules/semver/internal/parse-options.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/re.js +238 -0
- package/dist/esm/node_modules/semver/internal/re.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/gtr.js +18 -0
- package/dist/esm/node_modules/semver/ranges/gtr.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/intersects.js +21 -0
- package/dist/esm/node_modules/semver/ranges/intersects.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/ltr.js +18 -0
- package/dist/esm/node_modules/semver/ranges/ltr.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/max-satisfying.js +40 -0
- package/dist/esm/node_modules/semver/ranges/max-satisfying.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/min-satisfying.js +39 -0
- package/dist/esm/node_modules/semver/ranges/min-satisfying.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/min-version.js +77 -0
- package/dist/esm/node_modules/semver/ranges/min-version.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/outside.js +101 -0
- package/dist/esm/node_modules/semver/ranges/outside.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/simplify.js +62 -0
- package/dist/esm/node_modules/semver/ranges/simplify.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/subset.js +264 -0
- package/dist/esm/node_modules/semver/ranges/subset.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/to-comparators.js +22 -0
- package/dist/esm/node_modules/semver/ranges/to-comparators.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/valid.js +25 -0
- package/dist/esm/node_modules/semver/ranges/valid.js.map +1 -0
- package/dist/esm/test/mocks/DataQuery.js +5 -5
- package/dist/esm/test/mocks/DataQuery.js.map +1 -1
- package/dist/esm/test/mocks/Datasource.js +22 -22
- package/dist/esm/test/mocks/Datasource.js.map +1 -1
- package/dist/esm/test/mocks/Plugin.js +30 -30
- package/dist/esm/test/mocks/Plugin.js.map +1 -1
- package/dist/esm/test/mocks/QueryEditorProps.js +6 -6
- package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
- package/dist/esm/test/mocks/utils.js +5 -5
- package/dist/esm/test/mocks/utils.js.map +1 -1
- package/dist/esm/test-utils.d.ts +24 -24
- package/package.json +77 -68
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/components/QueryEditorRow/QueryEditorRow.tsx","../../src/hooks/useDebounce.ts","../../src/components/DebounceInput/DebounceInput.tsx","../../src/components/Segment/Segment.tsx","../../src/components/DatePicker/styles.ts","../../src/components/DatePicker/DatePicker.tsx","../../src/components/DatePickerWithInput/styles.ts","../../src/components/DatePickerWithInput/DatePickerWithInput.tsx","../../src/components/Plugins/PluginSignatureBadge.tsx","../../src/components/DataSourcePicker/DataSourcePicker.tsx","../../src/components/DataLinks/DataLink.tsx","../../src/components/DataLinks/DataLinks.tsx","../../src/components/QueryEditor/expressions.ts","../../src/components/QueryEditor/utils/sql.utils.ts","../../src/components/QueryEditor/defaults.ts","../../src/components/SQLEditor/utils/LinkedToken.ts","../../src/components/SQLEditor/types.ts","../../src/components/SQLEditor/standardSql/getStatementPosition.ts","../../src/components/SQLEditor/utils/toCompletionItem.ts","../../src/components/SQLEditor/standardSql/getStandardSuggestions.ts","../../src/components/SQLEditor/standardSql/suggestionsKindRegistry.ts","../../src/components/SQLEditor/utils/getSuggestionKind.ts","../../src/components/SQLEditor/utils/linkedTokenBuilder.ts","../../src/components/SQLEditor/standardSql/language.ts","../../src/components/SQLEditor/utils/tokenUtils.ts","../../src/components/SQLEditor/utils/commands.ts","../../src/components/SQLEditor/standardSql/standardSuggestionsRegistry.ts","../../src/components/SQLEditor/standardSql/statementPositionResolversRegistry.ts","../../src/components/SQLEditor/utils/debugger.ts","../../src/components/SQLEditor/standardSql/macros.ts","../../src/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.ts","../../src/components/SQLEditor/standardSql/definition.ts","../../src/components/SQLEditor/hooks/useLatestCallback.ts","../../src/components/SQLEditor/components/SQLEditor.tsx","../../src/components/SQLEditor/mocks/queries/singleLineFullQuery.ts","../../src/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.ts","../../src/components/SQLEditor/mocks/queries/multiLineFullQuery.ts","../../src/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.ts","../../src/components/SQLEditor/mocks/queries/singleLineEmptyQuery.ts","../../src/components/SQLEditor/mocks/queries/singleLineTwoQueries.ts","../../src/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.ts","../../src/components/SQLEditor/mocks/queries/singleLineMultipleColumns.ts","../../src/components/SQLEditor/mocks/queries/multiLineMultipleColumns.ts","../../src/components/SQLEditor/mocks/Monaco.ts","../../src/components/SQLEditor/mocks/TextModel.ts","../../src/components/SQLEditor/test-utils/statementPosition.ts","../../src/components/SQLEditor/test-utils/index.ts","../../src/components/QueryEditor/types.ts","../../src/components/QueryEditor/EditorStack.tsx","../../src/components/QueryEditor/EditorList.tsx","../../src/components/QueryEditor/AccessoryButton.tsx","../../src/components/QueryEditor/InputGroup.tsx","../../src/components/QueryEditor/visual-query-builder/GroupByRow.tsx","../../src/components/QueryEditor/EditorFieldGroup.tsx","../../src/components/QueryEditor/EditorHeader.tsx","../../src/components/QueryEditor/EditorField.tsx","../../src/components/QueryEditor/EditorRow.tsx","../../src/components/QueryEditor/EditorRows.tsx","../../src/components/QueryEditor/EditorSwitch.tsx","../../src/components/QueryEditor/FlexItem.tsx","../../src/components/QueryEditor/InlineSelect.tsx","../../src/components/QueryEditor/Space.tsx","../../src/components/QueryEditor/ConfirmModal.tsx","../../src/components/QueryEditor/DatasetSelector.tsx","../../src/components/QueryEditor/CatalogSelector.tsx","../../src/components/QueryEditor/TableSelector.tsx","../../src/components/QueryEditor/RunQueryButton.tsx","../../src/components/QueryEditor/QueryHeader.tsx","../../src/components/QueryEditor/utils/formatSQL.ts","../../src/components/QueryEditor/query-editor-raw/QueryEditorRaw.tsx","../../src/components/QueryEditor/query-editor-raw/QueryValidator.tsx","../../src/components/QueryEditor/query-editor-raw/QueryToolbox.tsx","../../src/components/QueryEditor/query-editor-raw/RawEditor.tsx","../../src/components/QueryEditor/visual-query-builder/Preview.tsx","../../src/components/QueryEditor/utils/useSqlChange.ts","../../src/components/QueryEditor/visual-query-builder/SQLGroupByRow.tsx","../../src/components/QueryEditor/visual-query-builder/OrderByRow.tsx","../../src/components/QueryEditor/visual-query-builder/SQLOrderByRow.tsx","../../src/components/QueryEditor/visual-query-builder/SelectRow.tsx","../../src/components/QueryEditor/visual-query-builder/SQLSelectRow.tsx","../../src/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.tsx","../../src/components/QueryEditor/visual-query-builder/WhereRow.tsx","../../src/components/QueryEditor/visual-query-builder/SQLWhereRow.tsx","../../src/components/QueryEditor/visual-query-builder/EditorRow.tsx","../../src/components/QueryEditor/visual-query-builder/EditorField.tsx","../../src/components/QueryEditor/visual-query-builder/EditorRows.tsx","../../src/components/QueryEditor/visual-query-builder/VisualEditor.tsx","../../src/datasource/constants.ts","../../src/datasource/SqlDatasource.ts","../../src/components/QueryEditor/QueryEditor.tsx","../../src/components/ConfigEditor/SecureSocksProxyToggle.tsx","../../src/components/ConfigEditor/DataSourceDescription.tsx","../../src/components/ConfigEditor/ConfigSection/GenericConfigSection.tsx","../../src/components/ConfigEditor/ConfigSection/ConfigSection.tsx","../../src/components/ConfigEditor/ConfigSection/ConfigSubSection.tsx","../../src/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.tsx","../../src/components/ConfigEditor/Auth/types.ts","../../src/components/ConfigEditor/Auth/styles.ts","../../src/components/ConfigEditor/Auth/auth-method/BasicAuth.tsx","../../src/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.tsx","../../src/components/ConfigEditor/Auth/tls/TLSSettingsSection.tsx","../../src/components/ConfigEditor/Auth/tls/SelfSignedCertificate.tsx","../../src/components/ConfigEditor/Auth/tls/TLSClientAuth.tsx","../../src/components/ConfigEditor/Auth/tls/SkipTLSVerification.tsx","../../src/components/ConfigEditor/Auth/tls/TLSSettings.tsx","../../src/components/ConfigEditor/Auth/custom-headers/CustomHeader.tsx","../../src/components/ConfigEditor/Auth/custom-headers/CustomHeaders.tsx","../../src/components/ConfigEditor/Auth/Auth.tsx","../../src/components/ConfigEditor/Auth/utils.ts","../../src/components/ConfigEditor/Connection/ConnectionSettings.tsx","../../src/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.tsx","../../src/components/CustomHeadersSettings/CustomHeadersSettings.tsx","../../src/components/VisualQueryBuilder/types.ts","../../src/components/VisualQueryBuilder/QueryModellerBase.ts","../../src/components/VisualQueryBuilder/components/LabelFilterItem.tsx","../../src/components/VisualQueryBuilder/components/LabelFilters.tsx","../../src/components/VisualQueryBuilder/components/OperationExplainedBox.tsx","../../src/components/VisualQueryBuilder/components/OperationInfoButton.tsx","../../src/components/VisualQueryBuilder/components/OperationHeader.tsx","../../src/components/VisualQueryBuilder/components/OperationParamEditor.tsx","../../src/components/VisualQueryBuilder/components/OperationEditorBody.tsx","../../src/components/VisualQueryBuilder/components/OperationEditor.tsx","../../src/components/VisualQueryBuilder/components/OperationList.tsx","../../src/components/VisualQueryBuilder/components/RawQuery.tsx","../../src/components/VisualQueryBuilder/components/OperationListExplained.tsx","../../src/components/VisualQueryBuilder/components/OperationsEditorRow.tsx","../../src/components/VisualQueryBuilder/components/QueryBuilderHints.tsx","../../src/components/VisualQueryBuilder/components/QueryEditorModeToggle.tsx","../../src/components/VisualQueryBuilder/components/QueryHeaderSwitch.tsx","../../src/components/VisualQueryBuilder/components/QueryOptionGroup.tsx"],"sourcesContent":["import React from 'react';\nexport interface QueryEditorRowProps {\n label?: string;\n className?: string;\n noFillEnd?: boolean;\n children?: React.ReactNode;\n}\n\nexport const QueryEditorRow = (props: QueryEditorRowProps) => {\n const className: string = props.className ?? 'width-8';\n const noFillEnd: boolean = props.noFillEnd ?? false;\n\n return (\n <div className=\"gf-form\">\n {props.label && <label className={`gf-form-label query-keyword ${className}`}>{props.label}</label>}\n {props.children}\n\n <div className={'gf-form--grow'}>{noFillEnd || <div className={'gf-form-label gf-form-label--grow'}></div>}</div>\n </div>\n );\n};\n","import { useState, useEffect } from 'react';\n\nexport const DEFAULT_DELAY = 275;\n\nexport const useDebounce = <T>(value: T, delay: number = DEFAULT_DELAY) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n return debouncedValue;\n};\n","import React, { type ComponentProps, useState, useEffect } from 'react';\nimport { Input } from '@grafana/ui';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface DebounceInputProps extends Omit<ComponentProps<typeof Input>, 'ref'> {\n value: string;\n onDebounce: (debouncedInput?: string) => void;\n delay?: number;\n}\n\nexport const DebounceInput = (props: DebounceInputProps) => {\n const { delay, onDebounce, value, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedInput = useDebounce(input, delay);\n\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedInput), [debouncedInput]);\n useEffect(() => setInput(value), [value]);\n\n return <Input onChange={(ev) => setInput(ev.currentTarget.value)} value={input} {...rest} />;\n};\n","import React, { useEffect, type ComponentProps, useState } from 'react';\nimport { Segment as GrafanaSegment } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface SegmentProps<T> extends Omit<ComponentProps<typeof GrafanaSegment<T>>, 'onChange'> {\n value: T;\n onDebounce: (debouncedSegment?: T) => void;\n delay?: number;\n}\n\nexport function Segment<T>(props: SegmentProps<T>) {\n const { delay, onDebounce, value, options, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedSegment = useDebounce(input, delay);\n\n // TODO: We should fix the exhaustive-deps rule\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedSegment), [debouncedSegment]);\n useEffect(() => setInput(value), [value]);\n\n return (\n <GrafanaSegment\n options={options}\n onChange={(ev: SelectableValue<T>) => setInput(ev.value!)}\n value={input}\n {...rest}\n />\n );\n}\n","import { type GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n container: css`\n top: -1px;\n position: absolute;\n right: 544px;\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n background-color: ${theme.v1.colors.bodyBg};\n z-index: -1;\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n &:after {\n display: block;\n background-color: ${theme.v1.colors.bodyBg};\n width: 19px;\n height: 100%;\n content: '';\n position: absolute;\n top: 0;\n right: -19px;\n border-left: 1px solid ${theme.v1.colors.border1};\n }\n `,\n modal: css`\n z-index: ${theme.v1.zIndex.modal};\n `,\n content: css`\n margin: 0 auto;\n width: 268px;\n `,\n backdrop: css`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: #202226;\n opacity: 0.7;\n z-index: ${theme.v1.zIndex.modalBackdrop};\n text-align: center;\n `,\n };\n};\n\nexport const getBodyStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n title: css`\n color: ${theme.colors.text};\n background-color: ${theme.v1.colors.bodyBg};\n font-size: ${theme.v1.typography.size.md};\n border: 1px solid transparent;\n\n &:hover {\n position: relative;\n }\n `,\n body: css`\n z-index: ${theme.zIndex.modal};\n position: fixed;\n background-color: ${theme.v1.colors.bodyBg};\n width: 268px;\n\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n .react-calendar__navigation__label,\n .react-calendar__navigation__arrow,\n .react-calendar__navigation {\n padding-top: 4px;\n background-color: inherit;\n color: ${theme.colors.text};\n border: 0;\n font-weight: ${theme.v1.typography.weight.semibold};\n }\n\n .react-calendar__month-view__weekdays {\n background-color: inherit;\n text-align: center;\n color: ${theme.v1.palette.blue77};\n\n abbr {\n border: 0;\n text-decoration: none;\n cursor: default;\n display: block;\n padding: 4px 0 4px 0;\n }\n }\n\n .react-calendar__month-view__days {\n background-color: inherit;\n }\n\n .react-calendar__tile,\n .react-calendar__tile--now {\n margin-bottom: 4px;\n background-color: inherit;\n height: 26px;\n }\n\n .react-calendar__navigation__label,\n .react-calendar__navigation > button:focus,\n .time-picker-calendar-tile:focus {\n outline: 0;\n }\n\n .react-calendar__tile--active,\n .react-calendar__tile--active:hover {\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n box-shadow: none;\n border: 0px;\n }\n\n .react-calendar__tile--rangeEnd,\n .react-calendar__tile--rangeStart {\n padding: 0;\n border: 0px;\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n\n abbr {\n background-color: ${theme.v1.palette.blue77};\n border-radius: 100px;\n display: block;\n padding-top: 2px;\n height: 26px;\n }\n }\n\n .react-calendar__tile--rangeStart {\n border-top-left-radius: 20px;\n border-bottom-left-radius: 20px;\n }\n\n .react-calendar__tile--rangeEnd {\n border-top-right-radius: 20px;\n border-bottom-right-radius: 20px;\n }\n `,\n };\n};\n","import React, { memo } from 'react';\nimport Calendar from 'react-calendar';\nimport { useTheme2, ClickOutsideWrapper, Icon } from '@grafana/ui';\nimport { getStyles, getBodyStyles } from './styles';\n\nexport interface DatePickerProps {\n isOpen?: boolean;\n onClose: () => void;\n onChange: (value: Date) => void;\n value?: Date;\n}\n\nexport const DatePicker = memo<DatePickerProps>((props) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const { isOpen, onClose } = props;\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <ClickOutsideWrapper useCapture={true} includeButtonPress={false} onClick={onClose}>\n <div className={styles.modal} data-testid=\"date-picker\">\n <Body {...props} />\n </div>\n </ClickOutsideWrapper>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\nconst Body = memo<DatePickerProps>(({ value, onChange }) => {\n const theme = useTheme2();\n const styles = getBodyStyles(theme);\n\n return (\n <Calendar\n className={styles.body}\n tileClassName={styles.title}\n value={value || new Date()}\n nextLabel={<Icon name=\"angle-right\" />}\n prevLabel={<Icon name=\"angle-left\" />}\n onChange={(ev: any) => {\n if (!Array.isArray(ev)) {\n onChange(ev);\n }\n }}\n locale=\"en\"\n />\n );\n});\n\nBody.displayName = 'Body';\n","import { css } from '@emotion/css';\n\nexport function getStyles() {\n return {\n input: css({\n /* hides the native Calendar picker icon given when using type=date */\n \"input[type='date']::-webkit-inner-spin-button, input[type='date']::-webkit-calendar-picker-indicator\": {\n display: 'none',\n WebkitAppearance: 'none',\n },\n }),\n };\n}\n","import React, { type ComponentProps, useState } from 'react';\nimport { Input } from '@grafana/ui';\nimport { DatePicker } from '../DatePicker/DatePicker';\nimport { getStyles } from './styles';\nimport { cx } from '@emotion/css';\n\nexport const formatDate = (date: Date) => date.toISOString().split('T')[0];\n\nexport interface DatePickerWithInputProps extends Omit<ComponentProps<typeof Input>, 'ref' | 'value' | 'onChange'> {\n value?: Date;\n onChange: (value: Date) => void;\n}\n\nexport const DatePickerWithInput = (props: DatePickerWithInputProps) => {\n const { value, onChange, className, ...rest } = props;\n const [open, setOpen] = useState(false);\n const styles = getStyles();\n\n return (\n <>\n <Input\n type=\"date\"\n placeholder=\"Date\"\n value={formatDate(value || new Date())}\n onClick={() => setOpen(true)}\n onChange={() => {}}\n className={cx(styles.input, className)}\n {...rest}\n />\n <DatePicker isOpen={open} value={value} onChange={(ev: any) => onChange(ev)} onClose={() => setOpen(false)} />\n </>\n );\n};\n","import React, { type HTMLAttributes } from 'react';\nimport { Badge, type BadgeProps } from '@grafana/ui';\nimport { PluginErrorCode, PluginSignatureStatus } from '@grafana/data';\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n status?: PluginSignatureStatus;\n}\n\nexport const PluginSignatureBadge = ({ status, ...otherProps }: Props) => {\n const display = getSignatureDisplayModel(status);\n return (\n <Badge\n text={display.text}\n color={display.color as any}\n icon={display.icon}\n tooltip={display.tooltip}\n {...otherProps}\n />\n );\n};\n\nexport function isUnsignedPluginSignature(signature?: PluginSignatureStatus) {\n return signature && signature !== PluginSignatureStatus.valid && signature !== PluginSignatureStatus.internal;\n}\n\nexport function mapPluginErrorCodeToSignatureStatus(code: PluginErrorCode) {\n switch (code) {\n case PluginErrorCode.invalidSignature:\n return PluginSignatureStatus.invalid;\n case PluginErrorCode.missingSignature:\n return PluginSignatureStatus.missing;\n case PluginErrorCode.modifiedSignature:\n return PluginSignatureStatus.modified;\n default:\n return PluginSignatureStatus.missing;\n }\n}\n\nfunction getSignatureDisplayModel(signature?: PluginSignatureStatus): BadgeProps {\n if (!signature) {\n signature = PluginSignatureStatus.invalid;\n }\n\n switch (signature) {\n case PluginSignatureStatus.internal:\n return { text: 'Core', icon: 'cube', color: 'blue', tooltip: 'Core plugin that is bundled with Grafana' };\n case PluginSignatureStatus.valid:\n return { text: 'Signed', icon: 'lock', color: 'green', tooltip: 'Signed and verified plugin' };\n case PluginSignatureStatus.invalid:\n return {\n text: 'Invalid signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Invalid plugin signature',\n };\n case PluginSignatureStatus.modified:\n return {\n text: 'Modified signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Valid signature but content has been modified',\n };\n case PluginSignatureStatus.missing:\n return {\n text: 'Missing signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Missing plugin signature',\n };\n }\n\n return { text: 'Unsigned', icon: 'exclamation-triangle', color: 'red', tooltip: 'Unsigned external plugin' };\n}\n\nPluginSignatureBadge.displayName = 'PluginSignatureBadge';\n","import React, { PureComponent } from 'react';\nimport { HorizontalGroup, Select } from '@grafana/ui';\nimport { type DataSourceInstanceSettings, type SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { isUnsignedPluginSignature, PluginSignatureBadge } from '../Plugins/PluginSignatureBadge';\nimport { getDataSourceSrv, type DataSourceSrv } from '@grafana/runtime';\n\nexport interface Props {\n onChange: (ds: DataSourceInstanceSettings) => void;\n current: string | null;\n hideTextValue?: boolean;\n onBlur?: () => void;\n autoFocus?: boolean;\n openMenuOnFocus?: boolean;\n placeholder?: string;\n tracing?: boolean;\n mixed?: boolean;\n dashboard?: boolean;\n metrics?: boolean;\n annotations?: boolean;\n variables?: boolean;\n pluginId?: string;\n noDefault?: boolean;\n}\n\nexport interface State {\n error?: string;\n}\n\nexport class DataSourcePicker extends PureComponent<Props, State> {\n dataSourceSrv: DataSourceSrv = getDataSourceSrv();\n\n static defaultProps: Partial<Props> = {\n autoFocus: false,\n openMenuOnFocus: false,\n placeholder: 'Select datasource',\n };\n\n state: State = {};\n\n constructor(props: Props) {\n super(props);\n }\n\n componentDidMount() {\n const { current } = this.props;\n const dsSettings = this.dataSourceSrv.getInstanceSettings(current!);\n if (!dsSettings) {\n this.setState({ error: 'Could not find data source ' + current });\n }\n }\n\n onChange = (item: SelectableValue<string>) => {\n const dsSettings = this.dataSourceSrv.getInstanceSettings(item.value!);\n\n if (dsSettings) {\n this.props.onChange(dsSettings);\n this.setState({ error: undefined });\n }\n };\n\n private getCurrentValue(): SelectableValue<string> {\n const { current, hideTextValue, noDefault } = this.props;\n\n if (!current && noDefault) {\n return {\n label: 'No datasources found',\n };\n }\n\n const ds = this.dataSourceSrv.getInstanceSettings(current!);\n\n if (ds) {\n return {\n label: ds.name.substr(0, 37),\n value: ds.name,\n imgUrl: ds.meta.info.logos.small,\n hideText: hideTextValue,\n meta: ds.meta,\n };\n }\n\n return {\n label: (current ?? 'no name') + ' - not found',\n value: (current ?? 'no name') + ' - not found',\n imgUrl: '',\n hideText: hideTextValue,\n };\n }\n\n getDataSourceOptions(): Array<SelectableValue<string>> {\n const options: Array<SelectableValue<string>> = this.dataSourceSrv.getList().map((ds) => ({\n value: ds.uid,\n label: ds.name,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n }));\n\n return options;\n }\n\n render() {\n const { autoFocus, onBlur, openMenuOnFocus, placeholder } = this.props;\n const { error } = this.state;\n const options = this.getDataSourceOptions();\n const value = this.getCurrentValue();\n\n return (\n <div aria-label={selectors.components.DataSourcePicker.container}>\n <Select\n className=\"ds-picker select-container\"\n isMulti={false}\n isClearable={false}\n backspaceRemovesValue={false}\n onChange={this.onChange}\n options={options}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={500}\n placeholder={placeholder}\n noOptionsMessage=\"No datasources found\"\n value={value}\n invalid={!!error}\n getOptionLabel={(o) => {\n if (o.meta && isUnsignedPluginSignature(o.meta.signature) && o !== value) {\n return (\n <HorizontalGroup align=\"center\" justify=\"space-between\">\n <span>{o.label}</span> <PluginSignatureBadge status={o.meta.signature} />\n </HorizontalGroup>\n );\n }\n return o.label || '';\n }}\n />\n </div>\n );\n }\n}\n","import React, { type Dispatch, type SetStateAction, useEffect, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { type VariableSuggestion, type DataSourceInstanceSettings, type DataSourceJsonData } from '@grafana/data';\nimport { Button, LegacyForms, DataLinkInput, stylesFactory } from '@grafana/ui';\nconst { FormField, Switch } = LegacyForms;\nimport { type DataLinkConfig } from './types';\nimport { usePrevious } from 'react-use';\nimport { DataSourcePicker } from '../DataSourcePicker/DataSourcePicker';\n\nconst getStyles = stylesFactory(() => ({\n firstRow: css`\n display: flex;\n `,\n nameField: css`\n flex: 2;\n `,\n regexField: css`\n flex: 3;\n `,\n row: css`\n display: flex;\n align-items: baseline;\n `,\n}));\n\ntype Props = {\n value: DataLinkConfig;\n datasources?: Array<DataSourceInstanceSettings<DataSourceJsonData>>;\n onChange: (value: DataLinkConfig) => void;\n onDelete: () => void;\n suggestions: VariableSuggestion[];\n className?: string;\n};\nexport const DataLink = (props: Props) => {\n const { value, onChange, onDelete, suggestions, className } = props;\n const styles = getStyles();\n const [showInternalLink, setShowInternalLink] = useInternalLink(value.datasourceUid);\n\n const handleChange = (field: keyof typeof value) => (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange({\n ...value,\n [field]: event.currentTarget.value,\n });\n };\n\n return (\n <div className={className}>\n <div className={styles.firstRow + ' gf-form'}>\n <FormField\n className={styles.nameField}\n labelWidth={6}\n // A bit of a hack to prevent using default value for the width from FormField\n inputWidth={null}\n label=\"Field\"\n type=\"text\"\n value={value.field}\n tooltip={'Can be exact field name or a regex pattern that will match on the field name.'}\n onChange={handleChange('field')}\n />\n <Button\n variant={'destructive'}\n title=\"Remove field\"\n icon=\"times\"\n onClick={(event) => {\n event.preventDefault();\n onDelete();\n }}\n />\n </div>\n <div className=\"gf-form\">\n <FormField\n className={styles.nameField}\n inputWidth={null}\n label=\"Label\"\n type=\"text\"\n value={value.label}\n onChange={handleChange('label')}\n tooltip={'Use to provide a meaningful label to the data matched in the regex'}\n />\n <FormField\n className={styles.regexField}\n inputWidth={null}\n label=\"Regex\"\n type=\"text\"\n value={value.matcherRegex}\n onChange={handleChange('matcherRegex')}\n tooltip={\n 'Use to parse and capture some part of the log message. You can use the captured groups in the template.'\n }\n />\n </div>\n <div className=\"gf-form\">\n <FormField\n label={showInternalLink ? 'Query' : 'URL'}\n labelWidth={6}\n inputEl={\n <DataLinkInput\n placeholder={showInternalLink ? '${__value.raw}' : 'http://example.com/${__value.raw}'}\n value={value.url || ''}\n onChange={(newValue) =>\n onChange({\n ...value,\n url: newValue,\n })\n }\n suggestions={suggestions}\n />\n }\n className={css`\n width: 100%;\n `}\n />\n </div>\n\n <div className={styles.row}>\n <Switch\n labelClass={'width-6'}\n label=\"Internal link\"\n checked={showInternalLink}\n onChange={() => {\n if (showInternalLink) {\n onChange({\n ...value,\n datasourceUid: undefined,\n });\n }\n setShowInternalLink(!showInternalLink);\n }}\n />\n {showInternalLink && (\n <DataSourcePicker\n // Uid and value should be always set in the db and so in the items.\n onChange={(ds) => {\n onChange({\n ...value,\n datasourceUid: ds.uid,\n });\n }}\n current={value.datasourceUid}\n />\n )}\n </div>\n </div>\n );\n};\n\nfunction useInternalLink(datasourceUid?: string): [boolean, Dispatch<SetStateAction<boolean>>] {\n const [showInternalLink, setShowInternalLink] = useState<boolean>(!!datasourceUid);\n const previousUid = usePrevious(datasourceUid);\n\n // Force internal link visibility change if uid changed outside of this component.\n useEffect(() => {\n if (!previousUid && datasourceUid && !showInternalLink) {\n setShowInternalLink(true);\n }\n if (previousUid && !datasourceUid && showInternalLink) {\n setShowInternalLink(false);\n }\n }, [previousUid, datasourceUid, showInternalLink]);\n\n return [showInternalLink, setShowInternalLink];\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { Button, useTheme2 } from '@grafana/ui';\nimport { type GrafanaTheme2, VariableOrigin, DataLinkBuiltInVars } from '@grafana/data';\nimport { type DataLinkConfig } from './types';\nimport { DataLink } from './DataLink';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: css`\n padding-bottom: ${theme.v1.spacing.md};\n color: ${theme.v1.colors.textWeak};\n `,\n dataLink: css`\n margin-bottom: ${theme.v1.spacing.sm};\n `,\n});\n\ntype Props = {\n value?: DataLinkConfig[];\n onChange: (value: DataLinkConfig[]) => void;\n};\nexport const DataLinks = (props: Props) => {\n const { value, onChange } = props;\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n return (\n <>\n <h3 className=\"page-heading\">Data links</h3>\n\n <div className={styles.infoText}>\n Add links to existing fields. Links will be shown in log row details next to the field value.\n </div>\n\n <div className=\"gf-form-group\">\n {value &&\n value.map((field, index) => {\n return (\n <DataLink\n className={styles.dataLink}\n key={index}\n value={field}\n onChange={(newField) => {\n const newDataLinks = [...value];\n newDataLinks.splice(index, 1, newField);\n onChange(newDataLinks);\n }}\n onDelete={() => {\n const newDataLinks = [...value];\n newDataLinks.splice(index, 1);\n onChange(newDataLinks);\n }}\n suggestions={[\n {\n value: DataLinkBuiltInVars.valueRaw,\n label: 'Raw value',\n documentation: 'Raw value of the field',\n origin: VariableOrigin.Value,\n },\n ]}\n />\n );\n })}\n <div>\n <Button\n variant={'secondary'}\n className={css`\n margin-right: 10px;\n `}\n icon=\"plus\"\n onClick={(event) => {\n event.preventDefault();\n const newDataLinks = [...(value || []), { field: '', label: '', matcherRegex: '', url: '' }];\n onChange(newDataLinks);\n }}\n >\n Add\n </Button>\n </div>\n </div>\n </>\n );\n};\n","export enum QueryEditorPropertyType {\n String = 'string',\n}\n\nexport interface QueryEditorProperty {\n type: QueryEditorPropertyType;\n name?: string;\n}\n\nexport type QueryEditorOperatorType = string | boolean | number;\ntype QueryEditorOperatorValueType = QueryEditorOperatorType | QueryEditorOperatorType[];\n\nexport interface QueryEditorOperator<T extends QueryEditorOperatorValueType> {\n name?: string;\n value?: T;\n}\n\nexport interface QueryEditorOperatorExpression {\n type: QueryEditorExpressionType.Operator;\n property: QueryEditorProperty;\n operator: QueryEditorOperator<QueryEditorOperatorValueType>;\n}\n\nexport interface QueryEditorArrayExpression {\n type: QueryEditorExpressionType.And | QueryEditorExpressionType.Or;\n expressions: QueryEditorExpression[] | QueryEditorArrayExpression[];\n}\n\nexport interface QueryEditorPropertyExpression {\n type: QueryEditorExpressionType.Property;\n property: QueryEditorProperty;\n}\n\nexport enum QueryEditorExpressionType {\n Property = 'property',\n Operator = 'operator',\n Or = 'or',\n And = 'and',\n GroupBy = 'groupBy',\n Function = 'function',\n FunctionParameter = 'functionParameter',\n}\n\nexport type QueryEditorExpression =\n | QueryEditorArrayExpression\n | QueryEditorPropertyExpression\n | QueryEditorGroupByExpression\n | QueryEditorFunctionExpression\n | QueryEditorFunctionParameterExpression\n | QueryEditorOperatorExpression;\n\nexport interface QueryEditorGroupByExpression {\n type: QueryEditorExpressionType.GroupBy;\n property: QueryEditorProperty;\n}\n\nexport interface QueryEditorFunctionExpression {\n type: QueryEditorExpressionType.Function;\n name?: string;\n parameters?: QueryEditorFunctionParameterExpression[];\n}\n\nexport interface QueryEditorFunctionParameterExpression {\n type: QueryEditorExpressionType.FunctionParameter;\n name?: string;\n}\n","import { isEmpty } from 'lodash';\n\nimport {\n QueryEditorExpressionType,\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n QueryEditorPropertyType,\n} from '../expressions';\nimport { type SQLQuery, type SQLExpression, type DB } from '../types';\n\nexport function getRawSqlFn(db: DB) {\n return db.toRawSql ? db.toRawSql : (query: SQLQuery) => toRawSql(query, Boolean(db.disableDatasets));\n}\n\n/**\n * Converts a SQLQuery object into a raw SQL string.\n *\n * Table reference naming:\n * - When catalog is present: catalog.dataset.table (dataset acts as schema)\n * - When catalog is absent: dataset.table (dataset acts as dataset/schema)\n * - When both are disabled: just table\n *\n * Note: Semantically, the dataset field has dual meaning:\n * - With catalog: dataset = schema (Unity Catalog: catalog.schema.table)\n * - Without catalog: dataset = dataset (Legacy: dataset.table)\n */\nexport function toRawSql({ sql, dataset, catalog, table }: SQLQuery, disableDatasets: boolean): string {\n let rawQuery = '';\n\n if (!sql || !haveColumns(sql.columns)) {\n return rawQuery;\n }\n\n rawQuery += createSelectClause(sql.columns);\n\n // Three-part naming: catalog.dataset.table (dataset acts as schema when catalog is present)\n if (catalog && dataset && table) {\n rawQuery += `FROM ${catalog}.${dataset}.${table} `;\n }\n // Two-part naming: dataset.table (legacy style, only if catalogs not used)\n else if (!disableDatasets && dataset && table) {\n rawQuery += `FROM ${dataset}.${table} `;\n }\n // Just table name (when datasets are disabled or neither catalog nor dataset is present)\n else if (table) {\n rawQuery += `FROM ${table} `;\n }\n\n if (sql.whereString) {\n rawQuery += `WHERE ${sql.whereString} `;\n }\n\n if (sql.groupBy?.[0]?.property.name) {\n const groupBy = sql.groupBy.map((g) => g.property.name).filter((g) => !isEmpty(g));\n rawQuery += `GROUP BY ${groupBy.join(', ')} `;\n }\n\n if (sql.orderBy?.property.name) {\n rawQuery += `ORDER BY ${sql.orderBy.property.name} `;\n }\n\n if (sql.orderBy?.property.name && sql.orderByDirection) {\n rawQuery += `${sql.orderByDirection} `;\n }\n\n if (sql.limit !== undefined && sql.limit >= 0) {\n rawQuery += `LIMIT ${sql.limit} `;\n }\n\n return rawQuery;\n}\n\nfunction createSelectClause(sqlColumns: NonNullable<SQLExpression['columns']>): string {\n const columns = sqlColumns.map((c) => {\n let rawColumn = '';\n if (c.name) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)})`;\n } else {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)}`;\n }\n return rawColumn;\n });\n return `SELECT ${columns.join(', ')} `;\n}\n\nexport function haveColumns(columns: SQLExpression['columns']): columns is NonNullable<SQLExpression['columns']> {\n if (!columns) {\n return false;\n }\n\n const haveColumn = columns.some((c) => c.parameters?.length || c.parameters?.some((p) => p.name));\n const haveFunction = columns.some((c) => c.name);\n return haveColumn || haveFunction;\n}\n\n/**\n * Creates a GroupByExpression for a specified field\n */\nexport function setGroupByField(field?: string): QueryEditorGroupByExpression {\n return {\n type: QueryEditorExpressionType.GroupBy,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\n/**\n * Creates a PropertyExpression for a specified field\n */\nexport function setPropertyField(field?: string): QueryEditorPropertyExpression {\n return {\n type: QueryEditorExpressionType.Property,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\nexport function createFunctionField(functionName?: string): QueryEditorFunctionExpression {\n return {\n type: QueryEditorExpressionType.Function,\n name: functionName,\n parameters: [],\n };\n}\n","import { EditorMode, QueryFormat, type SQLQuery } from './types';\nimport { createFunctionField, setGroupByField } from './utils/sql.utils';\n\nexport function applyQueryDefaults(q?: SQLQuery): SQLQuery {\n let editorMode = q?.editorMode || EditorMode.Builder;\n\n // Switching to code editor if the query was created before visual query builder was introduced.\n if (q?.editorMode === undefined && q?.rawSql !== undefined) {\n editorMode = EditorMode.Code;\n }\n\n const result: SQLQuery = {\n ...q,\n refId: q?.refId || 'A',\n format: q?.format !== undefined ? q.format : QueryFormat.Table,\n rawSql: q?.rawSql || '',\n editorMode,\n sql: q?.sql || {\n columns: [createFunctionField()],\n groupBy: [setGroupByField()],\n limit: 50,\n },\n };\n\n return result;\n}\n\nexport type QueryWithDefaults = ReturnType<typeof applyQueryDefaults>;\n","import { type monacoTypes } from '@grafana/ui';\nimport { TokenType } from '../types';\n\nexport class LinkedToken {\n constructor(\n public type: string,\n public value: string,\n public range: monacoTypes.IRange,\n public previous: LinkedToken | null,\n public next: LinkedToken | null\n ) {}\n\n isKeyword(): boolean {\n return this.type === TokenType.Keyword;\n }\n\n isWhiteSpace(): boolean {\n return this.type === TokenType.Whitespace;\n }\n\n isParenthesis(): boolean {\n return this.type === TokenType.Parenthesis;\n }\n\n isIdentifier(): boolean {\n return this.type === TokenType.Identifier;\n }\n\n isString(): boolean {\n return this.type === TokenType.String;\n }\n\n isNumber(): boolean {\n return this.type === TokenType.Number;\n }\n\n isDoubleQuotedString(): boolean {\n return this.type === TokenType.Type;\n }\n\n isVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n isFunction(): boolean {\n return this.type === TokenType.Function;\n }\n\n isOperator(): boolean {\n return this.type === TokenType.Operator;\n }\n\n isTemplateVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n is(type: TokenType, value?: string | number | boolean): boolean {\n const isType = this.type === type;\n\n return value !== undefined ? isType && compareTokenWithValue(type, this, value) : isType;\n }\n\n getPreviousNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.previous;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.previous;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.previous;\n }\n\n return tokens;\n }\n\n getNextUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.next;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.next;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.next;\n }\n\n return tokens;\n }\n\n getPreviousKeyword(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (curr.isKeyword()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getNextNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n\n getNextOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n}\n\nfunction compareTokenWithValue(type: TokenType, token: LinkedToken, value: string | number | boolean) {\n return type === TokenType.Keyword || type === TokenType.Operator\n ? token.value.toLowerCase() === value.toString().toLowerCase()\n : token.value === value;\n}\n","import { type Monaco, type monacoTypes } from '@grafana/ui';\nimport { type SQLMonarchLanguage, type StatementPositionResolver, type SuggestionsResolver } from './standardSql/types';\nimport { type LinkedToken } from './utils/LinkedToken';\n\n/**\n * Provides a context for suggestions resolver\n * @alpha\n */\nexport interface PositionContext {\n position: monacoTypes.IPosition;\n kind: SuggestionKind[];\n statementPosition: StatementPosition[];\n currentToken: LinkedToken | null;\n range: monacoTypes.IRange;\n}\n\nexport type CustomSuggestion = Partial<monacoTypes.languages.CompletionItem> & { label: string };\n\nexport interface CustomSuggestionKind {\n id: string;\n suggestionsResolver: SuggestionsResolver;\n applyTo?: Array<StatementPosition | string>;\n overrideDefault?: boolean;\n}\n\nexport interface CustomStatementPlacement {\n id: string;\n name?: string;\n resolve: StatementPositionResolver;\n overrideDefault?: boolean;\n}\nexport type StatementPlacementProvider = () => CustomStatementPlacement[];\nexport type SuggestionKindProvider = () => CustomSuggestionKind[];\n\nexport interface ColumnDefinition {\n name: string;\n type?: string;\n description?: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface SchemaDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface TableDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface Operator {\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n}\n\nexport interface TableIdentifier {\n table?: string;\n schema?: string;\n catalog?: string;\n}\n\nexport interface SQLCompletionItemProvider\n extends Omit<monacoTypes.languages.CompletionItemProvider, 'provideCompletionItems'> {\n /**\n * Allows dialect specific functions to be added to the completion list.\n * @alpha\n */\n supportedFunctions?: () => Array<{\n id: string;\n name: string;\n description?: string;\n }>;\n\n /**\n * Allows dialect specific operators to be added to the completion list.\n * @alpha\n */\n supportedOperators?: () => Array<{\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n }>;\n\n supportedMacros?: () => Array<{\n id: string;\n text: string;\n type: MacroType;\n args: string[];\n description?: string;\n }>;\n\n /**\n * Allows custom suggestion kinds to be defined and correlate them with <Custom>StatementPosition.\n * @alpha\n */\n customSuggestionKinds?: SuggestionKindProvider;\n\n /**\n * Allows custom statement placement definition.\n * @alpha\n */\n customStatementPlacement?: StatementPlacementProvider;\n\n /**\n * Allows providing a custom function for resolving schemas.\n * It's up to the consumer to decide whether the schemas are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n schemas?: {\n resolve: () => Promise<SchemaDefinition[]>;\n };\n\n /**\n * Allows providing a custom function for resolving db tables.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n tables?: {\n resolve: (TableIdentifier: TableIdentifier | null) => Promise<TableDefinition[]>;\n // Allows providing a custom function for calculating the table name from the query. If not specified a default implementation is used.\n parseName?: (token: LinkedToken | null | undefined) => TableIdentifier;\n };\n /**\n * Allows providing a custom function for resolving table.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n columns?: {\n resolve: (identifier?: TableIdentifier) => Promise<ColumnDefinition[]>;\n };\n\n /**\n * TODO: Not sure whether or not we need this. Would like to avoid this kind of flexibility.\n * @alpha\n */\n provideCompletionItems?: (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n context: monacoTypes.languages.CompletionContext,\n token: monacoTypes.CancellationToken,\n positionContext: PositionContext // Decorates original provideCompletionItems function with our custom statement position context\n ) => monacoTypes.languages.CompletionList;\n}\n\nexport type LanguageCompletionProvider = (m: Monaco, l?: SQLMonarchLanguage) => SQLCompletionItemProvider;\n\nexport enum OperatorType {\n Comparison,\n Logical,\n}\n\nexport enum MacroType {\n Value,\n Filter,\n Group,\n Column,\n Table,\n}\n\nexport enum TokenType {\n Parenthesis = 'delimiter.parenthesis.sql',\n Whitespace = 'white.sql',\n Keyword = 'keyword.sql',\n Delimiter = 'delimiter.sql',\n Operator = 'operator.sql',\n Identifier = 'identifier.sql',\n IdentifierQuote = 'identifier.quote.sql',\n Type = 'type.sql',\n Function = 'predefined.sql',\n Number = 'number.sql',\n String = 'string.sql',\n Variable = 'variable.sql',\n}\n\nexport enum StatementPosition {\n Unknown = 'unknown',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n AfterSelectKeyword = 'afterSelectKeyword',\n AfterSelectArguments = 'afterSelectArguments',\n AfterSelectFuncFirstArgument = 'afterSelectFuncFirstArgument',\n SelectAlias = 'selectAlias',\n AfterFromKeyword = 'afterFromKeyword',\n AfterTable = 'afterTable',\n SchemaFuncFirstArgument = 'schemaFuncFirstArgument',\n SchemaFuncExtraArgument = 'schemaFuncExtraArgument',\n FromKeyword = 'fromKeyword',\n AfterFrom = 'afterFrom',\n WhereKeyword = 'whereKeyword',\n WhereComparisonOperator = 'whereComparisonOperator',\n WhereValue = 'whereValue',\n AfterWhereFunctionArgument = 'afterWhereFunctionArgument',\n AfterGroupByFunctionArgument = 'afterGroupByFunctionArgument',\n AfterWhereValue = 'afterWhereValue',\n AfterGroupByKeywords = 'afterGroupByKeywords',\n AfterGroupBy = 'afterGroupBy',\n AfterOrderByKeywords = 'afterOrderByKeywords',\n AfterOrderByFunction = 'afterOrderByFunction',\n AfterOrderByDirection = 'afterOrderByDirection',\n AfterIsOperator = 'afterIsOperator',\n AfterIsNotOperator = 'afterIsNotOperator',\n AfterSchema = 'afterSchema',\n}\n\nexport enum SuggestionKind {\n Schemas = 'schemas',\n Tables = 'tables',\n Columns = 'columns',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n FunctionsWithArguments = 'functionsWithArguments',\n FromKeyword = 'fromKeyword',\n WhereKeyword = 'whereKeyword',\n GroupByKeywords = 'groupByKeywords',\n OrderByKeywords = 'orderByKeywords',\n FunctionsWithoutArguments = 'functionsWithoutArguments',\n LimitKeyword = 'limitKeyword',\n SortOrderDirectionKeyword = 'sortOrderDirectionKeyword',\n ComparisonOperators = 'comparisonOperators',\n LogicalOperators = 'logicalOperators',\n SelectMacro = 'selectMacro',\n TableMacro = 'tableMacro',\n FilterMacro = 'filterMacro',\n GroupMacro = 'groupMacro',\n BoolValues = 'boolValues',\n NullValue = 'nullValue',\n NotKeyword = 'notKeyword',\n TemplateVariables = 'templateVariables',\n StarWildCard = 'starWildCard',\n}\n\n// TODO: export from grafana/ui\nexport enum CompletionItemPriority {\n High = 'a',\n MediumHigh = 'd',\n Medium = 'g',\n MediumLow = 'k',\n Low = 'q',\n}\n\nexport enum CompletionItemKind {\n Method = 0,\n Function = 1,\n Constructor = 2,\n Field = 3,\n Variable = 4,\n Class = 5,\n Struct = 6,\n Interface = 7,\n Module = 8,\n Property = 9,\n Event = 10,\n Operator = 11,\n Unit = 12,\n Value = 13,\n Constant = 14,\n Enum = 15,\n EnumMember = 16,\n Keyword = 17,\n Text = 18,\n Color = 19,\n File = 20,\n Reference = 21,\n Customcolor = 22,\n Folder = 23,\n TypeParameter = 24,\n User = 25,\n Issue = 26,\n Snippet = 27,\n}\n\nexport enum CompletionItemInsertTextRule {\n KeepWhitespace = 1,\n InsertAsSnippet = 4,\n}\n\nexport enum SQLEditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n","import { StatementPosition, TokenType } from '../types';\nimport { type LinkedToken } from '../utils/LinkedToken';\nimport { type StatementPositionResolversRegistryItem } from './types';\nimport { type Registry } from '@grafana/data';\n\n// Given current cursor position in the SQL editor, returns the statement position.\nexport function getStatementPosition(\n currentToken: LinkedToken | null,\n statementPositionResolversRegistry: Registry<StatementPositionResolversRegistryItem>\n): StatementPosition[] {\n const previousNonWhiteSpace = currentToken?.getPreviousNonWhiteSpaceToken();\n const previousKeyword = currentToken?.getPreviousKeyword();\n const previousIsSlash = currentToken?.getPreviousNonWhiteSpaceToken()?.is(TokenType.Operator, '/');\n const resolvers = statementPositionResolversRegistry.list();\n const positions = [];\n\n for (const resolver of resolvers) {\n if (\n resolver.resolve(currentToken, previousKeyword ?? null, previousNonWhiteSpace ?? null, Boolean(previousIsSlash))\n ) {\n positions.push(resolver.id);\n }\n }\n\n if (positions.length === 0) {\n return [StatementPosition.Unknown];\n }\n return positions;\n}\n","import { type monacoTypes } from '@grafana/ui';\nimport { CompletionItemKind, CompletionItemPriority } from '../types';\n\nexport const toCompletionItem = (\n value: string,\n range: monacoTypes.IRange,\n rest: Partial<monacoTypes.languages.CompletionItem> = {}\n) => {\n const item: monacoTypes.languages.CompletionItem = {\n label: value,\n insertText: value,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.Medium,\n range,\n ...rest,\n };\n return item;\n};\n","import { type Registry } from '@grafana/data';\nimport { type Monaco, type monacoTypes } from '@grafana/ui';\nimport { type PositionContext, type SuggestionKind } from '../types';\nimport { type LinkedToken } from '../utils/LinkedToken';\nimport { toCompletionItem } from '../utils/toCompletionItem';\nimport { type SuggestionsRegistryItem } from './types';\n\n// Given standard and custom registered suggestions and kinds of suggestion expected, return a list of completion items\nexport const getStandardSuggestions = async (\n monaco: Monaco,\n currentToken: LinkedToken | null,\n suggestionKinds: SuggestionKind[],\n positionContext: PositionContext,\n suggestionsRegistry: Registry<SuggestionsRegistryItem>\n): Promise<monacoTypes.languages.CompletionItem[]> => {\n let suggestions: monacoTypes.languages.CompletionItem[] = [];\n const invalidRangeToken =\n currentToken?.isWhiteSpace() ||\n currentToken?.isParenthesis() ||\n (currentToken?.isIdentifier() && currentToken.value.endsWith('.'));\n const range =\n invalidRangeToken || !currentToken?.range\n ? monaco.Range.fromPositions(positionContext.position)\n : currentToken?.range;\n\n // iterating over Set to deduplicate\n for (const suggestion of [...new Set(suggestionKinds)]) {\n const registeredSuggestions = suggestionsRegistry.getIfExists(suggestion);\n if (registeredSuggestions) {\n const su = await registeredSuggestions.suggestions({ ...positionContext, range }, monaco);\n suggestions = [...suggestions, ...su.map((s) => toCompletionItem(s.label, range, { kind: s.kind, ...s }))];\n }\n }\n return Promise.resolve(suggestions);\n};\n","import { type RegistryItem } from '@grafana/data';\nimport { StatementPosition, SuggestionKind } from '../types';\n\nexport interface SuggestionKindRegistryItem extends RegistryItem {\n id: StatementPosition;\n kind: SuggestionKind[];\n}\n\n// Registry of possible suggestions for the given statement position\nexport const initSuggestionsKindRegistry = (): SuggestionKindRegistryItem[] => {\n return [\n {\n id: StatementPosition.SelectKeyword,\n name: StatementPosition.SelectKeyword,\n kind: [SuggestionKind.SelectKeyword],\n },\n {\n id: StatementPosition.WithKeyword,\n name: StatementPosition.WithKeyword,\n kind: [SuggestionKind.WithKeyword],\n },\n {\n id: StatementPosition.AfterSelectKeyword,\n name: StatementPosition.AfterSelectKeyword,\n kind: [\n SuggestionKind.StarWildCard,\n SuggestionKind.FunctionsWithArguments,\n SuggestionKind.Columns,\n SuggestionKind.SelectMacro,\n ],\n },\n {\n id: StatementPosition.AfterSelectFuncFirstArgument,\n name: StatementPosition.AfterSelectFuncFirstArgument,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterGroupByFunctionArgument,\n name: StatementPosition.AfterGroupByFunctionArgument,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterWhereFunctionArgument,\n name: StatementPosition.AfterWhereFunctionArgument,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterSelectArguments,\n name: StatementPosition.AfterSelectArguments,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterFromKeyword,\n name: StatementPosition.AfterFromKeyword,\n kind: [SuggestionKind.Schemas, SuggestionKind.Tables, SuggestionKind.TableMacro],\n },\n {\n id: StatementPosition.AfterSchema,\n name: StatementPosition.AfterSchema,\n kind: [SuggestionKind.Tables, SuggestionKind.TableMacro],\n },\n {\n id: StatementPosition.SelectAlias,\n name: StatementPosition.SelectAlias,\n kind: [SuggestionKind.Columns, SuggestionKind.FunctionsWithArguments],\n },\n {\n id: StatementPosition.FromKeyword,\n name: StatementPosition.FromKeyword,\n kind: [SuggestionKind.FromKeyword],\n },\n {\n id: StatementPosition.AfterFrom,\n name: StatementPosition.AfterFrom,\n kind: [\n SuggestionKind.WhereKeyword,\n SuggestionKind.GroupByKeywords,\n SuggestionKind.OrderByKeywords,\n SuggestionKind.LimitKeyword,\n ],\n },\n {\n id: StatementPosition.AfterTable,\n name: StatementPosition.AfterTable,\n kind: [\n SuggestionKind.WhereKeyword,\n SuggestionKind.GroupByKeywords,\n SuggestionKind.OrderByKeywords,\n SuggestionKind.LimitKeyword,\n ],\n },\n {\n id: StatementPosition.WhereKeyword,\n name: StatementPosition.WhereKeyword,\n kind: [SuggestionKind.Columns, SuggestionKind.FilterMacro, SuggestionKind.TemplateVariables],\n },\n {\n id: StatementPosition.WhereComparisonOperator,\n name: StatementPosition.WhereComparisonOperator,\n kind: [SuggestionKind.ComparisonOperators],\n },\n {\n id: StatementPosition.WhereValue,\n name: StatementPosition.WhereValue,\n kind: [SuggestionKind.FilterMacro, SuggestionKind.TemplateVariables],\n },\n {\n id: StatementPosition.AfterWhereValue,\n name: StatementPosition.AfterWhereValue,\n kind: [\n SuggestionKind.LogicalOperators,\n SuggestionKind.GroupByKeywords,\n SuggestionKind.OrderByKeywords,\n SuggestionKind.LimitKeyword,\n SuggestionKind.Columns,\n SuggestionKind.TemplateVariables,\n ],\n },\n {\n id: StatementPosition.AfterGroupByKeywords,\n name: StatementPosition.AfterGroupByKeywords,\n kind: [SuggestionKind.GroupMacro, SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterGroupBy,\n name: StatementPosition.AfterGroupBy,\n kind: [SuggestionKind.OrderByKeywords, SuggestionKind.LimitKeyword],\n },\n {\n id: StatementPosition.AfterOrderByKeywords,\n name: StatementPosition.AfterOrderByKeywords,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterOrderByFunction,\n name: StatementPosition.AfterOrderByFunction,\n kind: [SuggestionKind.SortOrderDirectionKeyword, SuggestionKind.LimitKeyword],\n },\n {\n id: StatementPosition.AfterOrderByDirection,\n name: StatementPosition.AfterOrderByDirection,\n kind: [SuggestionKind.LimitKeyword],\n },\n {\n id: StatementPosition.AfterIsOperator,\n name: StatementPosition.AfterOrderByDirection,\n kind: [SuggestionKind.NotKeyword, SuggestionKind.NullValue, SuggestionKind.BoolValues],\n },\n {\n id: StatementPosition.AfterIsNotOperator,\n name: StatementPosition.AfterOrderByDirection,\n kind: [SuggestionKind.NullValue, SuggestionKind.BoolValues],\n },\n ];\n};\n","import { type Registry } from '@grafana/data';\nimport { type SuggestionKindRegistryItem } from '../standardSql/suggestionsKindRegistry';\nimport { type StatementPosition, type SuggestionKind } from '../types';\n\n/**\n * Given statement positions, returns list of suggestion kinds that apply to those positions.\n */\nexport function getSuggestionKinds(\n statementPosition: StatementPosition[],\n suggestionsKindRegistry: Registry<SuggestionKindRegistryItem>\n): SuggestionKind[] {\n let result: SuggestionKind[] = [];\n for (let i = 0; i < statementPosition.length; i++) {\n const exists = suggestionsKindRegistry.getIfExists(statementPosition[i]);\n if (exists) {\n result = result.concat(exists.kind);\n }\n }\n\n return result;\n}\n","import type { monacoTypes } from '@grafana/ui';\nimport { TokenType } from '../types';\nimport { LinkedToken } from './LinkedToken';\nimport { type Monaco } from './types';\n\nexport function linkedTokenBuilder(\n monaco: Monaco,\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.IPosition,\n languageId = 'sql'\n) {\n let current: LinkedToken | null = null;\n let previous: LinkedToken | null = null;\n const tokensPerLine = monaco.editor.tokenize(model.getValue() ?? '', languageId);\n for (let lineIndex = 0; lineIndex < tokensPerLine.length; lineIndex++) {\n const tokens = tokensPerLine[lineIndex];\n // In case position is first column in new line, add empty whitespace token so that links are not broken\n if (!tokens.length && previous) {\n const token: monacoTypes.Token = {\n offset: 0,\n type: TokenType.Whitespace,\n language: languageId,\n _tokenBrand: undefined,\n };\n tokens.push(token);\n }\n\n for (let columnIndex = 0; columnIndex < tokens.length; columnIndex++) {\n const token = tokens[columnIndex];\n let endColumn =\n tokens.length > columnIndex + 1 ? tokens[columnIndex + 1].offset + 1 : model.getLineLength(lineIndex + 1) + 1;\n\n const range: monacoTypes.IRange = {\n startLineNumber: lineIndex + 1,\n startColumn: token.offset === 0 ? 0 : token.offset + 1,\n endLineNumber: lineIndex + 1,\n endColumn,\n };\n\n const value = model.getValueInRange(range);\n const sqlToken: LinkedToken = new LinkedToken(token.type, value, range, previous, null);\n\n if (monaco.Range.containsPosition(range, position)) {\n current = sqlToken;\n }\n\n if (previous) {\n previous.next = sqlToken;\n }\n previous = sqlToken;\n }\n }\n return current;\n}\n","import { type monacoTypes } from '@grafana/ui';\nimport { type SQLMonarchLanguage } from './types';\n\n// STD basic SQL\nexport const SELECT = 'select';\nexport const FROM = 'from';\nexport const WHERE = 'where';\nexport const GROUP = 'group';\nexport const ORDER = 'order';\nexport const BY = 'by';\nexport const DESC = 'desc';\nexport const ASC = 'asc';\nexport const LIMIT = 'limit';\nexport const WITH = 'with';\nexport const AS = 'as';\nexport const SCHEMA = 'schema';\n\nexport const AND = 'AND';\nexport const OR = 'OR';\nexport const LOGICAL_OPERATORS = [AND, OR];\n\nexport const EQUALS = '=';\nexport const NOT_EQUALS = '!=';\nexport const COMPARISON_OPERATORS = [EQUALS, NOT_EQUALS];\n\nexport const STD_OPERATORS = [...COMPARISON_OPERATORS];\n\nexport const conf: monacoTypes.languages.LanguageConfiguration = {\n comments: {\n lineComment: '--',\n blockComment: ['/*', '*/'],\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n};\n\n// based on https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/sql/sql.ts\nexport const language: SQLMonarchLanguage = {\n defaultToken: '',\n tokenPostfix: '.sql',\n ignoreCase: true,\n\n brackets: [\n { open: '[', close: ']', token: 'delimiter.square' },\n { open: '(', close: ')', token: 'delimiter.parenthesis' },\n ],\n\n keywords: [\n 'ABORT',\n 'ABSOLUTE',\n 'ACTION',\n 'ADA',\n 'ADD',\n 'AFTER',\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'ALWAYS',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARE',\n 'AS',\n 'ASC',\n 'ASSERTION',\n 'AT',\n 'ATTACH',\n 'AUTHORIZATION',\n 'AUTOINCREMENT',\n 'AVG',\n 'BACKUP',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BIT',\n 'BIT_LENGTH',\n 'BOTH',\n 'BREAK',\n 'BROWSE',\n 'BULK',\n 'BY',\n 'CASCADE',\n 'CASCADED',\n 'CASE',\n 'CAST',\n 'CATALOG',\n 'CHAR',\n 'CHARACTER',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHECK',\n 'CHECKPOINT',\n 'CLOSE',\n 'CLUSTERED',\n 'COALESCE',\n 'COLLATE',\n 'COLLATION',\n 'COLUMN',\n 'COMMIT',\n 'COMPUTE',\n 'CONFLICT',\n 'CONNECT',\n 'CONNECTION',\n 'CONSTRAINT',\n 'CONSTRAINTS',\n 'CONTAINS',\n 'CONTAINSTABLE',\n 'CONTINUE',\n 'CONVERT',\n 'CORRESPONDING',\n 'COUNT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DATE',\n 'DAY',\n 'DBCC',\n 'DEALLOCATE',\n 'DEC',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFERRED',\n 'DELETE',\n 'DENY',\n 'DESC',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DETACH',\n 'DIAGNOSTICS',\n 'DISCONNECT',\n 'DISK',\n 'DISTINCT',\n 'DISTRIBUTED',\n 'DO',\n 'DOMAIN',\n 'DOUBLE',\n 'DROP',\n 'DUMP',\n 'EACH',\n 'ELSE',\n 'END',\n 'END-EXEC',\n 'ERRLVL',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCEPTION',\n 'EXCLUDE',\n 'EXCLUSIVE',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXPLAIN',\n 'EXTERNAL',\n 'EXTRACT',\n 'FAIL',\n 'FALSE',\n 'FETCH',\n 'FILE',\n 'FILLFACTOR',\n 'FILTER',\n 'FIRST',\n 'FLOAT',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FORTRAN',\n 'FOUND',\n 'FREETEXT',\n 'FREETEXTTABLE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GENERATED',\n 'GET',\n 'GLOB',\n 'GLOBAL',\n 'GO',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'GROUPS',\n 'HAVING',\n 'HOLDLOCK',\n 'HOUR',\n 'IDENTITY',\n 'IDENTITYCOL',\n 'IDENTITY_INSERT',\n 'IF',\n 'IGNORE',\n 'IMMEDIATE',\n 'IN',\n 'INCLUDE',\n 'INDEX',\n 'INDEXED',\n 'INDICATOR',\n 'INITIALLY',\n 'INNER',\n 'INPUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INSTEAD',\n 'INT',\n 'INTEGER',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'ISOLATION',\n 'JOIN',\n 'KEY',\n 'KILL',\n 'LANGUAGE',\n 'LAST',\n 'LEADING',\n 'LEFT',\n 'LEVEL',\n 'LIKE',\n 'LIMIT',\n 'LINENO',\n 'LOAD',\n 'LOCAL',\n 'LOWER',\n 'MATCH',\n 'MATERIALIZED',\n 'MAX',\n 'MERGE',\n 'MIN',\n 'MINUTE',\n 'MODULE',\n 'MONTH',\n 'NAMES',\n 'NATIONAL',\n 'NATURAL',\n 'NCHAR',\n 'NEXT',\n 'NO',\n 'NOCHECK',\n 'NONCLUSTERED',\n 'NONE',\n 'NOT',\n 'NOTHING',\n 'NOTNULL',\n 'NULL',\n 'NULLIF',\n 'NULLS',\n 'NUMERIC',\n 'OCTET_LENGTH',\n 'OF',\n 'OFF',\n 'OFFSET',\n 'OFFSETS',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OPENDATASOURCE',\n 'OPENQUERY',\n 'OPENROWSET',\n 'OPENXML',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'OTHERS',\n 'OUTER',\n 'OUTPUT',\n 'OVER',\n 'OVERLAPS',\n 'PAD',\n 'PARTIAL',\n 'PARTITION',\n 'PASCAL',\n 'PERCENT',\n 'PIVOT',\n 'PLAN',\n 'POSITION',\n 'PRAGMA',\n 'PRECEDING',\n 'PRECISION',\n 'PREPARE',\n 'PRESERVE',\n 'PRIMARY',\n 'PRINT',\n 'PRIOR',\n 'PRIVILEGES',\n 'PROC',\n 'PROCEDURE',\n 'PUBLIC',\n 'QUERY',\n 'RAISE',\n 'RAISERROR',\n 'RANGE',\n 'READ',\n 'READTEXT',\n 'REAL',\n 'RECONFIGURE',\n 'RECURSIVE',\n 'REFERENCES',\n 'REGEXP',\n 'REINDEX',\n 'RELATIVE',\n 'RELEASE',\n 'RENAME',\n 'REPLACE',\n 'REPLICATION',\n 'RESTORE',\n 'RESTRICT',\n 'RETURN',\n 'RETURNING',\n 'REVERT',\n 'REVOKE',\n 'RIGHT',\n 'ROLLBACK',\n 'ROW',\n 'ROWCOUNT',\n 'ROWGUIDCOL',\n 'ROWS',\n 'RULE',\n 'SAVE',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCROLL',\n 'SECOND',\n 'SECTION',\n 'SECURITYAUDIT',\n 'SELECT',\n 'SEMANTICKEYPHRASETABLE',\n 'SEMANTICSIMILARITYDETAILSTABLE',\n 'SEMANTICSIMILARITYTABLE',\n 'SESSION',\n 'SESSION_USER',\n 'SET',\n 'SETUSER',\n 'SHUTDOWN',\n 'SIZE',\n 'SMALLINT',\n 'SOME',\n 'SPACE',\n 'SQL',\n 'SQLCA',\n 'SQLCODE',\n 'SQLERROR',\n 'SQLSTATE',\n 'SQLWARNING',\n 'STATISTICS',\n 'SUBSTRING',\n 'SUM',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESAMPLE',\n 'TEMP',\n 'TEMPORARY',\n 'TEXTSIZE',\n 'THEN',\n 'TIES',\n 'TIME',\n 'TIMESTAMP',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRAN',\n 'TRANSACTION',\n 'TRANSLATE',\n 'TRANSLATION',\n 'TRIGGER',\n 'TRIM',\n 'TRUE',\n 'TRUNCATE',\n 'TRY_CONVERT',\n 'TSEQUAL',\n 'UNBOUNDED',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNPIVOT',\n 'UPDATE',\n 'UPDATETEXT',\n 'UPPER',\n 'USAGE',\n 'USE',\n 'USER',\n 'USING',\n 'VACUUM',\n 'VALUE',\n 'VALUES',\n 'VARCHAR',\n 'VARYING',\n 'VIEW',\n 'VIRTUAL',\n 'WAITFOR',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WITHIN GROUP',\n 'WITHOUT',\n 'WORK',\n 'WRITE',\n 'WRITETEXT',\n 'YEAR',\n 'ZONE',\n ],\n operators: [\n // Set\n 'EXCEPT',\n 'INTERSECT',\n 'UNION',\n // Join\n 'APPLY',\n 'CROSS',\n 'FULL',\n 'INNER',\n 'JOIN',\n 'LEFT',\n 'OUTER',\n 'RIGHT',\n // Predicates\n 'CONTAINS',\n 'FREETEXT',\n 'IS',\n 'NULL',\n // Pivoting\n 'PIVOT',\n 'UNPIVOT',\n // Merging\n 'MATCHED',\n ],\n logicalOperators: ['ALL', 'AND', 'ANY', 'BETWEEN', 'EXISTS', 'IN', 'LIKE', 'NOT', 'OR', 'SOME'],\n comparisonOperators: ['<>', '>', '<', '>=', '<=', '=', '!=', '&', '~', '^', '%'],\n\n builtinFunctions: [\n // Aggregate\n 'AVG',\n 'CHECKSUM_AGG',\n 'COUNT',\n 'COUNT_BIG',\n 'GROUPING',\n 'GROUPING_ID',\n 'MAX',\n 'MIN',\n 'SUM',\n 'STDEV',\n 'STDEVP',\n 'VAR',\n 'VARP',\n // Analytic\n 'CUME_DIST',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n // Collation\n 'COLLATE',\n 'COLLATIONPROPERTY',\n 'TERTIARY_WEIGHTS',\n // Azure\n 'FEDERATION_FILTERING_VALUE',\n // Conversion\n 'CAST',\n 'CONVERT',\n 'PARSE',\n 'TRY_CAST',\n 'TRY_CONVERT',\n 'TRY_PARSE',\n // Cryptographic\n 'ASYMKEY_ID',\n 'ASYMKEYPROPERTY',\n 'CERTPROPERTY',\n 'CERT_ID',\n 'CRYPT_GEN_RANDOM',\n 'DECRYPTBYASYMKEY',\n 'DECRYPTBYCERT',\n 'DECRYPTBYKEY',\n 'DECRYPTBYKEYAUTOASYMKEY',\n 'DECRYPTBYKEYAUTOCERT',\n 'DECRYPTBYPASSPHRASE',\n 'ENCRYPTBYASYMKEY',\n 'ENCRYPTBYCERT',\n 'ENCRYPTBYKEY',\n 'ENCRYPTBYPASSPHRASE',\n 'HASHBYTES',\n 'IS_OBJECTSIGNED',\n 'KEY_GUID',\n 'KEY_ID',\n 'KEY_NAME',\n 'SIGNBYASYMKEY',\n 'SIGNBYCERT',\n 'SYMKEYPROPERTY',\n 'VERIFYSIGNEDBYCERT',\n 'VERIFYSIGNEDBYASYMKEY',\n // Cursor\n 'CURSOR_STATUS',\n // Datatype\n 'DATALENGTH',\n 'IDENT_CURRENT',\n 'IDENT_INCR',\n 'IDENT_SEED',\n 'IDENTITY',\n 'SQL_VARIANT_PROPERTY',\n // Datetime\n 'CURRENT_TIMESTAMP',\n 'DATEADD',\n 'DATEDIFF',\n 'DATEFROMPARTS',\n 'DATENAME',\n 'DATEPART',\n 'DATETIME2FROMPARTS',\n 'DATETIMEFROMPARTS',\n 'DATETIMEOFFSETFROMPARTS',\n 'DAY',\n 'EOMONTH',\n 'GETDATE',\n 'GETUTCDATE',\n 'ISDATE',\n 'MONTH',\n 'SMALLDATETIMEFROMPARTS',\n 'SWITCHOFFSET',\n 'SYSDATETIME',\n 'SYSDATETIMEOFFSET',\n 'SYSUTCDATETIME',\n 'TIMEFROMPARTS',\n 'TODATETIMEOFFSET',\n 'YEAR',\n // Logical\n 'CHOOSE',\n 'COALESCE',\n 'IIF',\n 'NULLIF',\n // Mathematical\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATN2',\n 'CEILING',\n 'COS',\n 'COT',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LOG',\n 'LOG10',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SIGN',\n 'SIN',\n 'SQRT',\n 'SQUARE',\n 'TAN',\n // Metadata\n 'APP_NAME',\n 'APPLOCK_MODE',\n 'APPLOCK_TEST',\n 'ASSEMBLYPROPERTY',\n 'COL_LENGTH',\n 'COL_NAME',\n 'COLUMNPROPERTY',\n 'DATABASE_PRINCIPAL_ID',\n 'DATABASEPROPERTYEX',\n 'DB_ID',\n 'DB_NAME',\n 'FILE_ID',\n 'FILE_IDEX',\n 'FILE_NAME',\n 'FILEGROUP_ID',\n 'FILEGROUP_NAME',\n 'FILEGROUPPROPERTY',\n 'FILEPROPERTY',\n 'FULLTEXTCATALOGPROPERTY',\n 'FULLTEXTSERVICEPROPERTY',\n 'INDEX_COL',\n 'INDEXKEY_PROPERTY',\n 'INDEXPROPERTY',\n 'OBJECT_DEFINITION',\n 'OBJECT_ID',\n 'OBJECT_NAME',\n 'OBJECT_SCHEMA_NAME',\n 'OBJECTPROPERTY',\n 'OBJECTPROPERTYEX',\n 'ORIGINAL_DB_NAME',\n 'PARSENAME',\n 'SCHEMA_ID',\n 'SCHEMA_NAME',\n 'SCOPE_IDENTITY',\n 'SERVERPROPERTY',\n 'STATS_DATE',\n 'TYPE_ID',\n 'TYPE_NAME',\n 'TYPEPROPERTY',\n // Ranking\n 'DENSE_RANK',\n 'NTILE',\n 'RANK',\n 'ROW_NUMBER',\n // Replication\n 'PUBLISHINGSERVERNAME',\n // Rowset\n 'OPENDATASOURCE',\n 'OPENQUERY',\n 'OPENROWSET',\n 'OPENXML',\n // Security\n 'CERTENCODED',\n 'CERTPRIVATEKEY',\n 'CURRENT_USER',\n 'HAS_DBACCESS',\n 'HAS_PERMS_BY_NAME',\n 'IS_MEMBER',\n 'IS_ROLEMEMBER',\n 'IS_SRVROLEMEMBER',\n 'LOGINPROPERTY',\n 'ORIGINAL_LOGIN',\n 'PERMISSIONS',\n 'PWDENCRYPT',\n 'PWDCOMPARE',\n 'SESSION_USER',\n 'SESSIONPROPERTY',\n 'SUSER_ID',\n 'SUSER_NAME',\n 'SUSER_SID',\n 'SUSER_SNAME',\n 'SYSTEM_USER',\n 'USER',\n 'USER_ID',\n 'USER_NAME',\n // String\n 'ASCII',\n 'CHAR',\n 'CHARINDEX',\n 'CONCAT',\n 'DIFFERENCE',\n 'FORMAT',\n 'LEFT',\n 'LEN',\n 'LOWER',\n 'LTRIM',\n 'NCHAR',\n 'PATINDEX',\n 'QUOTENAME',\n 'REPLACE',\n 'REPLICATE',\n 'REVERSE',\n 'RIGHT',\n 'RTRIM',\n 'SOUNDEX',\n 'SPACE',\n 'STR',\n 'STUFF',\n 'SUBSTRING',\n 'UNICODE',\n 'UPPER',\n // System\n 'BINARY_CHECKSUM',\n 'CHECKSUM',\n 'CONNECTIONPROPERTY',\n 'CONTEXT_INFO',\n 'CURRENT_REQUEST_ID',\n 'ERROR_LINE',\n 'ERROR_NUMBER',\n 'ERROR_MESSAGE',\n 'ERROR_PROCEDURE',\n 'ERROR_SEVERITY',\n 'ERROR_STATE',\n 'FORMATMESSAGE',\n 'GETANSINULL',\n 'GET_FILESTREAM_TRANSACTION_CONTEXT',\n 'HOST_ID',\n 'HOST_NAME',\n 'ISNULL',\n 'ISNUMERIC',\n 'MIN_ACTIVE_ROWVERSION',\n 'NEWID',\n 'NEWSEQUENTIALID',\n 'ROWCOUNT_BIG',\n 'XACT_STATE',\n // TextImage\n 'TEXTPTR',\n 'TEXTVALID',\n // Trigger\n 'COLUMNS_UPDATED',\n 'EVENTDATA',\n 'TRIGGER_NESTLEVEL',\n 'UPDATE',\n // ChangeTracking\n 'CHANGETABLE',\n 'CHANGE_TRACKING_CONTEXT',\n 'CHANGE_TRACKING_CURRENT_VERSION',\n 'CHANGE_TRACKING_IS_COLUMN_IN_MASK',\n 'CHANGE_TRACKING_MIN_VALID_VERSION',\n // FullTextSearch\n 'CONTAINSTABLE',\n 'FREETEXTTABLE',\n // SemanticTextSearch\n 'SEMANTICKEYPHRASETABLE',\n 'SEMANTICSIMILARITYDETAILSTABLE',\n 'SEMANTICSIMILARITYTABLE',\n // FileStream\n 'FILETABLEROOTPATH',\n 'GETFILENAMESPACEPATH',\n 'GETPATHLOCATOR',\n 'PATHNAME',\n // ServiceBroker\n 'GET_TRANSMISSION_STATUS',\n ],\n builtinVariables: [\n // Configuration\n '@@DATEFIRST',\n '@@DBTS',\n '@@LANGID',\n '@@LANGUAGE',\n '@@LOCK_TIMEOUT',\n '@@MAX_CONNECTIONS',\n '@@MAX_PRECISION',\n '@@NESTLEVEL',\n '@@OPTIONS',\n '@@REMSERVER',\n '@@SERVERNAME',\n '@@SERVICENAME',\n '@@SPID',\n '@@TEXTSIZE',\n '@@VERSION',\n // Cursor\n '@@CURSOR_ROWS',\n '@@FETCH_STATUS',\n // Datetime\n '@@DATEFIRST',\n // Metadata\n '@@PROCID',\n // System\n '@@ERROR',\n '@@IDENTITY',\n '@@ROWCOUNT',\n '@@TRANCOUNT',\n // Stats\n '@@CONNECTIONS',\n '@@CPU_BUSY',\n '@@IDLE',\n '@@IO_BUSY',\n '@@PACKET_ERRORS',\n '@@PACK_RECEIVED',\n '@@PACK_SENT',\n '@@TIMETICKS',\n '@@TOTAL_ERRORS',\n '@@TOTAL_READ',\n '@@TOTAL_WRITE',\n ],\n pseudoColumns: ['$ACTION', '$IDENTITY', '$ROWGUID', '$PARTITION'],\n tokenizer: {\n root: [\n { include: '@templateVariables' },\n { include: '@macros' },\n { include: '@comments' },\n { include: '@whitespace' },\n { include: '@pseudoColumns' },\n { include: '@numbers' },\n { include: '@strings' },\n { include: '@complexIdentifiers' },\n { include: '@scopes' },\n { include: '@schemaTable' },\n [/[;,.]/, 'delimiter'],\n [/[()]/, '@brackets'],\n [\n /[\\w@#$|<|>|=|!|%|&|+|\\|-|*|/|~|^]+/,\n {\n cases: {\n '@operators': 'operator',\n '@comparisonOperators': 'operator',\n '@logicalOperators': 'operator',\n '@builtinVariables': 'predefined',\n '@builtinFunctions': 'predefined',\n '@keywords': 'keyword',\n '@default': 'identifier',\n },\n },\n ],\n ],\n templateVariables: [[/\\$[a-zA-Z0-9]+/, 'variable']],\n macros: [[/\\$__[a-zA-Z0-9-_]+/, 'type']],\n schemaTable: [\n [/(\\w+)\\./, 'identifier'],\n [/(\\w+\\.\\w+)/, 'identifier'],\n ],\n whitespace: [[/\\s+/, 'white']],\n comments: [\n [/--+.*/, 'comment'],\n [/\\/\\*/, { token: 'comment.quote', next: '@comment' }],\n ],\n comment: [\n [/[^*/]+/, 'comment'],\n // Not supporting nested comments, as nested comments seem to not be standard?\n // i.e. http://stackoverflow.com/questions/728172/are-there-multiline-comment-delimiters-in-sql-that-are-vendor-agnostic\n // [/\\/\\*/, { token: 'comment.quote', next: '@push' }], // nested comment not allowed :-(\n [/\\*\\//, { token: 'comment.quote', next: '@pop' }],\n [/./, 'comment'],\n ],\n pseudoColumns: [\n [\n /[$][A-Za-z_][\\w@#$]*/,\n {\n cases: {\n '@pseudoColumns': 'predefined',\n '@default': 'identifier',\n },\n },\n ],\n ],\n numbers: [\n [/0[xX][0-9a-fA-F]*/, 'number'],\n [/[$][+-]*\\d*(\\.\\d*)?/, 'number'],\n [/((\\d+(\\.\\d*)?)|(\\.\\d+))([eE][\\-+]?\\d+)?/, 'number'],\n ],\n strings: [\n [/N'/, { token: 'string', next: '@string' }],\n [/'/, { token: 'string', next: '@string' }],\n ],\n string: [\n [/[^']+/, 'string'],\n [/''/, 'string'],\n [/'/, { token: 'string', next: '@pop' }],\n ],\n complexIdentifiers: [\n [/\\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],\n [/\"/, { token: 'identifier.quote', next: '@quotedIdentifier' }],\n ],\n bracketedIdentifier: [\n [/[^\\]]+/, 'identifier'],\n [/]]/, 'identifier'],\n [/]/, { token: 'identifier.quote', next: '@pop' }],\n ],\n quotedIdentifier: [\n [/[^\"]+/, 'identifier'],\n [/\"\"/, 'identifier'],\n [/\"/, { token: 'identifier.quote', next: '@pop' }],\n ],\n scopes: [\n [/BEGIN\\s+(DISTRIBUTED\\s+)?TRAN(SACTION)?\\b/i, 'keyword'],\n [/BEGIN\\s+TRY\\b/i, { token: 'keyword.try' }],\n [/END\\s+TRY\\b/i, { token: 'keyword.try' }],\n [/BEGIN\\s+CATCH\\b/i, { token: 'keyword.catch' }],\n [/END\\s+CATCH\\b/i, { token: 'keyword.catch' }],\n [/(BEGIN|CASE)\\b/i, { token: 'keyword.block' }],\n [/END\\b/i, { token: 'keyword.block' }],\n [/WHEN\\b/i, { token: 'keyword.choice' }],\n [/THEN\\b/i, { token: 'keyword.choice' }],\n ],\n },\n};\n","import { FROM, SCHEMA, SELECT } from '../standardSql/language';\nimport { TokenType } from '../types';\nimport { type LinkedToken } from './LinkedToken';\n\nexport const getSelectToken = (currentToken: LinkedToken | null) =>\n currentToken?.getPreviousOfType(TokenType.Keyword, SELECT) ?? null;\n\nexport const getSelectStatisticToken = (currentToken: LinkedToken | null) => {\n const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken();\n return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null;\n};\n\nexport const getMetricNameToken = (currentToken: LinkedToken | null) => {\n // statistic function is followed by `(` and then an argument\n const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next;\n return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null;\n};\n\nexport const getFromKeywordToken = (currentToken: LinkedToken | null) => {\n const selectToken = getSelectToken(currentToken);\n return selectToken?.getNextOfType(TokenType.Keyword, FROM);\n};\n\nexport const getNamespaceToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n\n if (\n nextNonWhiteSpace?.isDoubleQuotedString() ||\n (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA)\n ) {\n // schema is not used\n return nextNonWhiteSpace;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n // schema is specified\n const assumedNamespaceToken = nextNonWhiteSpace.next?.next;\n if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) {\n return assumedNamespaceToken;\n }\n }\n return null;\n};\nexport const getTableToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n if (nextNonWhiteSpace?.isVariable()) {\n // TODO: resolve column from variable?\n return null;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n return null;\n } else {\n return nextNonWhiteSpace;\n }\n};\n\nexport const defaultTableNameParser = (token: LinkedToken | null | undefined) => {\n const parts = token?.value.split('.');\n\n if (parts?.length === 1) {\n return { table: parts[0] };\n } else if (parts?.length === 2) {\n return { schema: parts[0], table: parts[1] };\n } else if (parts?.length === 3) {\n return { catalog: parts[0], schema: parts[1], table: parts[2] };\n }\n\n return null;\n};\n","export const TRIGGER_SUGGEST = {\n id: 'editor.action.triggerSuggest',\n title: '',\n};\n","import { type Registry } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { TRIGGER_SUGGEST } from '../utils/commands';\nimport {\n CompletionItemInsertTextRule,\n CompletionItemKind,\n CompletionItemPriority,\n MacroType,\n OperatorType,\n SuggestionKind,\n} from '../types';\nimport { ASC, DESC } from './language';\nimport {\n type FunctionsRegistryItem,\n type MacrosRegistryItem,\n type OperatorsRegistryItem,\n type SuggestionsRegistryItem,\n} from './types';\n\n/**\n * This registry glues particular SuggestionKind with an async function that provides completion items for it.\n * To add a new suggestion kind, SQLEditor should be configured with a provider that implements customSuggestionKinds.\n */\n\nexport const initStandardSuggestions =\n (\n functions: Registry<FunctionsRegistryItem>,\n operators: Registry<OperatorsRegistryItem>,\n macros: Registry<MacrosRegistryItem>\n ) =>\n (): SuggestionsRegistryItem[] => [\n {\n id: SuggestionKind.SelectKeyword,\n name: SuggestionKind.SelectKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: `SELECT <column>`,\n insertText: `SELECT $0`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n },\n {\n label: `SELECT <column> FROM <table>`,\n insertText: `SELECT $2 FROM $1`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n },\n ]),\n },\n {\n id: SuggestionKind.TemplateVariables,\n name: SuggestionKind.TemplateVariables,\n suggestions: (_, m) => {\n const templateSrv = getTemplateSrv();\n if (!templateSrv) {\n return Promise.resolve([]);\n }\n\n return Promise.resolve(\n templateSrv.getVariables().map((variable) => {\n const label = `\\$${variable.name}`;\n const val = templateSrv.replace(label);\n return {\n label,\n detail: `(Template Variable) ${val}`,\n kind: CompletionItemKind.Snippet,\n documentation: `(Template Variable) ${val}`,\n insertText: `\\\\$${variable.name} `,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Low,\n };\n })\n );\n },\n },\n {\n id: SuggestionKind.SelectMacro,\n name: SuggestionKind.SelectMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Value || m.type === MacroType.Column)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.TableMacro,\n name: SuggestionKind.TableMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Table)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.GroupMacro,\n name: SuggestionKind.GroupMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Group)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.FilterMacro,\n name: SuggestionKind.FilterMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Filter)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.WithKeyword,\n name: SuggestionKind.WithKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: `WITH <alias> AS ( ... )`,\n insertText: `WITH $1 AS ( $2 )`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n },\n ]),\n },\n {\n id: SuggestionKind.StarWildCard,\n name: SuggestionKind.StarWildCard,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: '*',\n insertText: `* $0`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Field,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.High,\n },\n ]),\n },\n {\n id: SuggestionKind.FunctionsWithArguments,\n name: SuggestionKind.FunctionsWithArguments,\n suggestions: (_, m) =>\n Promise.resolve([\n ...functions.list().map((f) => ({\n label: f.name,\n insertText: `${f.name}($0)`,\n documentation: f.description,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Function,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n })),\n ]),\n },\n {\n id: SuggestionKind.FunctionsWithoutArguments,\n name: SuggestionKind.FunctionsWithoutArguments,\n suggestions: (_, m) =>\n Promise.resolve([\n ...functions.list().map((f) => ({\n label: f.name,\n insertText: `${f.name}()`,\n documentation: f.description,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Function,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n })),\n ]),\n },\n {\n id: SuggestionKind.FromKeyword,\n name: SuggestionKind.FromKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'FROM',\n insertText: `FROM $0`,\n command: TRIGGER_SUGGEST,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.Schemas,\n name: SuggestionKind.Schemas,\n suggestions: (_, m) => Promise.resolve([]),\n },\n {\n id: SuggestionKind.Tables,\n name: SuggestionKind.Tables,\n suggestions: (_, m) => Promise.resolve([]),\n },\n {\n id: SuggestionKind.Columns,\n name: SuggestionKind.Columns,\n suggestions: (_, m) => Promise.resolve([]),\n },\n {\n id: SuggestionKind.LogicalOperators,\n name: SuggestionKind.LogicalOperators,\n suggestions: (_, m) =>\n Promise.resolve(\n operators\n .list()\n .filter((o) => o.type === OperatorType.Logical)\n .map((o) => ({\n label: o.operator,\n insertText: `${o.operator} `,\n documentation: o.description,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Operator,\n }))\n ),\n },\n {\n id: SuggestionKind.WhereKeyword,\n name: SuggestionKind.WhereKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'WHERE',\n insertText: `WHERE `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.ComparisonOperators,\n name: SuggestionKind.ComparisonOperators,\n suggestions: (_, m) =>\n Promise.resolve([\n ...operators\n .list()\n .filter((o) => o.type === OperatorType.Comparison)\n .map((o) => ({\n label: o.operator,\n insertText: `${o.operator} `,\n documentation: o.description,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Operator,\n })),\n {\n label: 'IN (...)',\n insertText: `IN ( $0 )`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n {\n label: 'NOT IN (...)',\n insertText: `NOT IN ( $0 )`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n {\n label: 'IS',\n insertText: `IS`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n },\n {\n label: 'IS NOT',\n insertText: `IS NOT`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n },\n ]),\n },\n {\n id: SuggestionKind.GroupByKeywords,\n name: SuggestionKind.GroupByKeywords,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'GROUP BY',\n insertText: `GROUP BY `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.OrderByKeywords,\n name: SuggestionKind.OrderByKeywords,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'ORDER BY',\n insertText: `ORDER BY `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Keyword,\n },\n {\n label: 'ORDER BY(ascending)',\n insertText: `ORDER BY $1 ASC `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n kind: CompletionItemKind.Snippet,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n {\n label: 'ORDER BY(descending)',\n insertText: `ORDER BY $1 DESC`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n kind: CompletionItemKind.Snippet,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n ]),\n },\n {\n id: SuggestionKind.LimitKeyword,\n name: SuggestionKind.LimitKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'LIMIT',\n insertText: `LIMIT `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.SortOrderDirectionKeyword,\n name: SuggestionKind.SortOrderDirectionKeyword,\n suggestions: (_, m) =>\n Promise.resolve(\n [ASC, DESC].map((o) => ({\n label: o,\n insertText: `${o} `,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n }))\n ),\n },\n {\n id: SuggestionKind.NotKeyword,\n name: SuggestionKind.NotKeyword,\n suggestions: () =>\n Promise.resolve([\n {\n label: 'NOT',\n insertText: 'NOT',\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n sortText: CompletionItemPriority.High,\n },\n ]),\n },\n {\n id: SuggestionKind.BoolValues,\n name: SuggestionKind.BoolValues,\n suggestions: () =>\n Promise.resolve(\n ['TRUE', 'FALSE'].map((o) => ({\n label: o,\n insertText: `${o}`,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n sortText: CompletionItemPriority.Medium,\n }))\n ),\n },\n {\n id: SuggestionKind.NullValue,\n name: SuggestionKind.NullValue,\n suggestions: () =>\n Promise.resolve(\n ['NULL'].map((o) => ({\n label: o,\n insertText: `${o}`,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n sortText: CompletionItemPriority.Low,\n }))\n ),\n },\n ];\n\nfunction createMacroSuggestionItem(m: MacrosRegistryItem) {\n return {\n label: m.name,\n insertText: `${'\\\\' + m.text}${argsString(m.args)} `,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n documentation: m.description,\n command: TRIGGER_SUGGEST,\n };\n}\n\nfunction argsString(args?: string[]): string {\n if (!args) {\n return '()';\n }\n return '('.concat(args.map((t, i) => `\\${${i}:${t}}`).join(', ')).concat(')');\n}\n","import { StatementPosition, TokenType } from '../types';\nimport { AND, AS, ASC, BY, DESC, FROM, GROUP, ORDER, SELECT, WHERE, WITH } from './language';\nimport { type StatementPositionResolversRegistryItem } from './types';\n\nexport function initStatementPositionResolvers(): StatementPositionResolversRegistryItem[] {\n return [\n {\n id: StatementPosition.SelectKeyword,\n name: StatementPosition.SelectKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n currentToken === null ||\n (currentToken.isWhiteSpace() && currentToken.previous === null) ||\n currentToken.is(TokenType.Keyword, SELECT) ||\n (currentToken.is(TokenType.Keyword, SELECT) && currentToken.previous === null) ||\n previousIsSlash ||\n (currentToken.isIdentifier() && (previousIsSlash || currentToken?.previous === null)) ||\n (currentToken.isIdentifier() && SELECT.startsWith(currentToken.value.toLowerCase()))\n ),\n },\n {\n id: StatementPosition.WithKeyword,\n name: StatementPosition.WithKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n currentToken === null ||\n (currentToken.isWhiteSpace() && currentToken.previous === null) ||\n (currentToken.is(TokenType.Keyword, WITH) && currentToken.previous === null) ||\n (currentToken.isIdentifier() && WITH.toLowerCase().startsWith(currentToken.value.toLowerCase()))\n ),\n },\n {\n id: StatementPosition.AfterSelectKeyword,\n name: StatementPosition.AfterSelectKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(previousNonWhiteSpace?.value.toLowerCase() === SELECT),\n },\n {\n id: StatementPosition.AfterSelectArguments,\n name: StatementPosition.AfterSelectArguments,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(previousKeyword?.value.toLowerCase() === SELECT && previousNonWhiteSpace?.value === ',');\n },\n },\n {\n id: StatementPosition.AfterSelectFuncFirstArgument,\n name: StatementPosition.AfterSelectFuncFirstArgument,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n (previousKeyword?.value.toLowerCase() === SELECT || previousKeyword?.value.toLowerCase() === AS) &&\n (previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') || currentToken?.is(TokenType.Parenthesis, '()'))\n );\n },\n },\n {\n id: StatementPosition.AfterWhereFunctionArgument,\n name: StatementPosition.AfterWhereFunctionArgument,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.is(TokenType.Keyword, WHERE) &&\n (previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') || currentToken?.is(TokenType.Parenthesis, '()'))\n );\n },\n },\n {\n id: StatementPosition.AfterGroupBy,\n name: StatementPosition.AfterGroupBy,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, GROUP) &&\n (previousNonWhiteSpace?.isIdentifier() ||\n previousNonWhiteSpace?.isDoubleQuotedString() ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, ')') ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, '()'))\n ),\n },\n {\n id: StatementPosition.SelectAlias,\n name: StatementPosition.SelectAlias,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n if (previousNonWhiteSpace?.value === ',' && previousKeyword?.value.toLowerCase() === AS) {\n return true;\n }\n\n return false;\n },\n },\n\n {\n id: StatementPosition.FromKeyword,\n name: StatementPosition.FromKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n // cloudwatch specific commented out\n // Boolean(previousKeyword?.value === SELECT && previousNonWhiteSpace?.isParenthesis()),\n return Boolean(\n (previousKeyword?.value.toLowerCase() === SELECT && previousNonWhiteSpace?.value !== ',') ||\n ((currentToken?.isKeyword() || currentToken?.isIdentifier()) &&\n FROM.toLowerCase().startsWith(currentToken.value.toLowerCase()))\n );\n },\n },\n {\n id: StatementPosition.AfterFromKeyword,\n name: StatementPosition.AfterFromKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(!currentToken?.value.includes('.') && previousNonWhiteSpace?.value.toLowerCase() === FROM),\n },\n {\n id: StatementPosition.AfterSchema,\n name: StatementPosition.AfterSchema,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n // depending on whether the schema was the last token in the query or not, current token might be whitespace or dot. if whitespace, just use the previous token\n if (currentToken?.isWhiteSpace() && currentToken?.next) {\n currentToken = currentToken?.previous;\n previousNonWhiteSpace = currentToken!.getPreviousNonWhiteSpaceToken();\n }\n return Boolean(\n currentToken?.isIdentifier() &&\n currentToken?.value.endsWith('.') &&\n previousNonWhiteSpace?.value.toLowerCase() === FROM\n );\n },\n },\n {\n id: StatementPosition.AfterFrom,\n name: StatementPosition.AfterFrom,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n (previousKeyword?.value.toLowerCase() === FROM && previousNonWhiteSpace?.isDoubleQuotedString()) ||\n (previousKeyword?.value.toLowerCase() === FROM && previousNonWhiteSpace?.isIdentifier()) ||\n (previousKeyword?.value.toLowerCase() === FROM && previousNonWhiteSpace?.isVariable())\n // cloudwatch specific\n // (previousKeyword?.value === SCHEMA && previousNonWhiteSpace?.is(TokenType.Parenthesis, ')'))\n ),\n },\n {\n id: StatementPosition.AfterTable,\n name: StatementPosition.AfterTable,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.value.toLowerCase() === FROM &&\n (previousNonWhiteSpace?.isVariable() ||\n (previousNonWhiteSpace?.value !== '' && previousNonWhiteSpace?.value.toLowerCase() !== FROM))\n );\n },\n },\n {\n id: StatementPosition.WhereKeyword,\n name: StatementPosition.WhereKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.value.toLowerCase() === WHERE &&\n (previousNonWhiteSpace?.isKeyword() ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') ||\n previousNonWhiteSpace?.is(TokenType.Operator, AND))\n ),\n },\n {\n id: StatementPosition.WhereComparisonOperator,\n name: StatementPosition.WhereComparisonOperator,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.value.toLowerCase() === WHERE &&\n !previousNonWhiteSpace?.getPreviousNonWhiteSpaceToken()?.isOperator() &&\n !currentToken?.is(TokenType.Delimiter, '.') &&\n !currentToken?.isParenthesis() &&\n (previousNonWhiteSpace?.isIdentifier() || previousNonWhiteSpace?.isDoubleQuotedString())\n ),\n },\n {\n id: StatementPosition.WhereValue,\n name: StatementPosition.WhereValue,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(previousKeyword?.value.toLowerCase() === WHERE && previousNonWhiteSpace?.isOperator()),\n },\n {\n id: StatementPosition.AfterWhereValue,\n name: StatementPosition.AfterWhereValue,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.value.toLowerCase() === WHERE &&\n (previousNonWhiteSpace?.is(TokenType.Operator, 'and') ||\n previousNonWhiteSpace?.is(TokenType.Operator, 'or') ||\n previousNonWhiteSpace?.isString() ||\n previousNonWhiteSpace?.isNumber() ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, ')') ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, '()') ||\n previousNonWhiteSpace?.isTemplateVariable() ||\n (previousNonWhiteSpace?.is(TokenType.IdentifierQuote) &&\n previousNonWhiteSpace.getPreviousNonWhiteSpaceToken()?.is(TokenType.Identifier) &&\n previousNonWhiteSpace\n ?.getPreviousNonWhiteSpaceToken()\n ?.getPreviousNonWhiteSpaceToken()\n ?.is(TokenType.IdentifierQuote)))\n );\n },\n },\n {\n id: StatementPosition.AfterGroupByKeywords,\n name: StatementPosition.AfterGroupByKeywords,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, GROUP) &&\n (previousNonWhiteSpace?.is(TokenType.Keyword, BY) || previousNonWhiteSpace?.is(TokenType.Delimiter, ','))\n ),\n },\n {\n id: StatementPosition.AfterGroupByFunctionArgument,\n name: StatementPosition.AfterGroupByFunctionArgument,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, GROUP) &&\n (previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') || currentToken?.is(TokenType.Parenthesis, '()'))\n );\n },\n },\n {\n id: StatementPosition.AfterOrderByKeywords,\n name: StatementPosition.AfterOrderByKeywords,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousNonWhiteSpace?.is(TokenType.Keyword, BY) &&\n previousNonWhiteSpace?.getPreviousKeyword()?.is(TokenType.Keyword, ORDER)\n ),\n },\n {\n id: StatementPosition.AfterOrderByFunction,\n name: StatementPosition.AfterOrderByFunction,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, ORDER) &&\n previousNonWhiteSpace?.is(TokenType.Parenthesis) &&\n previousNonWhiteSpace?.getPreviousNonWhiteSpaceToken()?.is(TokenType.Function)\n ),\n },\n {\n id: StatementPosition.AfterOrderByDirection,\n name: StatementPosition.AfterOrderByDirection,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(previousKeyword?.is(TokenType.Keyword, DESC) || previousKeyword?.is(TokenType.Keyword, ASC)),\n },\n {\n id: StatementPosition.AfterIsOperator,\n name: StatementPosition.AfterIsOperator,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(previousNonWhiteSpace?.is(TokenType.Operator, 'IS'));\n },\n },\n {\n id: StatementPosition.AfterIsNotOperator,\n name: StatementPosition.AfterIsNotOperator,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousNonWhiteSpace?.is(TokenType.Operator, 'NOT') &&\n previousNonWhiteSpace.getPreviousNonWhiteSpaceToken()?.is(TokenType.Operator, 'IS')\n );\n },\n },\n ];\n}\n","import { attachDebugger, createLogger } from '@grafana/ui';\n\nlet sqlEditorLogger = { logger: () => {} };\nlet sqlEditorLog: (...t: any[]) => void = () => {};\n\nif (attachDebugger && createLogger) {\n sqlEditorLogger = createLogger('SQLEditor');\n sqlEditorLog = sqlEditorLogger.logger;\n attachDebugger('sqleditor', undefined, sqlEditorLogger as any);\n}\n\nexport { sqlEditorLog, sqlEditorLogger };\n","import { MacroType } from '../types';\nimport { type MacrosRegistryItem } from './types';\n\nconst COLUMN = 'column',\n RELATIVE_TIME_STRING = \"'5m'\";\n\nexport const MACROS: MacrosRegistryItem[] = [\n {\n id: '$__timeFilter(dateColumn)',\n name: '$__timeFilter(dateColumn)',\n text: '$__timeFilter',\n args: [COLUMN],\n type: MacroType.Filter,\n description:\n 'Will be replaced by a time range filter using the specified column name. For example, dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)',\n },\n {\n id: '$__timeFrom()',\n name: '$__timeFrom()',\n text: '$__timeFrom',\n args: [],\n type: MacroType.Filter,\n description:\n 'Will be replaced by the start of the currently active time selection. For example, FROM_UNIXTIME(1494410783)',\n },\n {\n id: '$__timeTo()',\n name: '$__timeTo()',\n text: '$__timeTo',\n args: [],\n type: MacroType.Filter,\n description:\n 'Will be replaced by the end of the currently active time selection. For example, FROM_UNIXTIME(1494410983)',\n },\n {\n id: \"$__timeGroup(dateColumn, '5m')\",\n name: \"$__timeGroup(dateColumn, '5m')\",\n text: '$__timeGroup',\n args: [COLUMN, RELATIVE_TIME_STRING],\n type: MacroType.Value,\n description:\n 'Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),*',\n },\n {\n id: '$__table',\n name: '$__table',\n text: '$__table',\n args: [],\n type: MacroType.Table,\n description: 'Will be replaced by the query table.',\n },\n {\n id: '$__column',\n name: '$__column',\n text: '$__column',\n args: [],\n type: MacroType.Column,\n description: 'Will be replaced by the query column.',\n },\n];\n\n/*\n {\n id: \"$__timeGroupAlias(dateColumn, '5m', fill)\",\n name: \"$__timeGroupAlias(dateColumn, '5m', fill)\",\n text: \"$__timeGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING , FILL_TYPE],\n type: MacroType.Group,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),* with an added column alias\",\n },\n {\n id: \"$__unixEpochFilter(dateColumn)\",\n name: \"$__unixEpochFilter(dateColumn)\",\n text: \"$__unixEpochFilter\",\n args: [COLUMN],\n type: MacroType.Filter,\n description:\n \"Will be replaced by a time range filter using the specified column name with times represented as Unix timestamp. For example, dateColumn > 1494410783 AND dateColumn < 1494497183\",\n },\n {\n id: \"$__unixEpochFrom()\",\n name: \"$__unixEpochFrom()\",\n text: \"$__unixEpochFrom\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the start of the currently active time selection as Unix timestamp. For example, 1494410783\",\n },\n {\n id: \"$__unixEpochTo()\",\n name: \"$__unixEpochTo()\",\n text: \"$__unixEpochTo\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the end of the currently active time selection as Unix timestamp. For example, 1494410783\",\n },\n {\n id: \"$__unixEpochNanoFilter(dateColumn)\",\n name: \"$__unixEpochNanoFilter(dateColumn)\",\n text: \"$__unixEpochNanoFilter\",\n args: [COLUMN],\n type: MacroType.Filter,\n description:\n \"Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamp. For example, dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872\",\n },\n {\n id: \"$__unixEpochNanoFrom()\",\n name: \"$__unixEpochNanoFrom()\",\n text: \"$__unixEpochNanoFrom\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, 1494410783152415214\",\n },\n {\n id: \"$__unixEpochNanoTo()\",\n name: \"$__unixEpochNanoTo()\",\n text: \"$__unixEpochNanoTo\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the end of the currently active time selection as nanosecond timestamp. For example, 1494410783152415214\",\n },\n {\n id: \"$__unixEpochGroup(dateColumn, '5m')\",\n name: \"$__unixEpochGroup(dateColumn, '5m')\",\n text: \"$__unixEpochGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING],\n type: MacroType.Group,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For values stored as unix timestamp.\",\n },\n {\n id: \"$__unixEpochGroup(dateColumn, '5m', fill)\",\n name: \"$__unixEpochGroup(dateColumn, '5m', fill)\",\n text: \"$__unixEpochGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING, FILL_TYPE],\n type: MacroType.Group,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For values stored as unix timestamp. Missing values can be filled with 0, NULL or previous\",\n },\n {\n id: \"$__timeEpoch(dateColumn, )\",\n name: \"$__timeEpoch(dateColumn)\",\n text: \"$__timeEpoch\",\n args: [COLUMN],\n type: MacroType.Value,\n description:\n \"Will be replaced by an expression to convert to a UNIX timestamp and rename the column to time_sec. For example, UNIX_TIMESTAMP(dateColumn) as time_sec\",\n },\n {\n id: \"$__time(dateColumn)\",\n name: \"$__time(dateColumn)\",\n text: \"$__time\",\n args: [COLUMN],\n type: MacroType.Value,\n description:\n \"Will be replaced by an expression to convert to a UNIX timestamp and rename the column to time_sec. For example, UNIX_TIMESTAMP(dateColumn) as time_sec\",\n },\n {\n id: \"$__timeGroup(dateColumn, '5m', fill)\",\n name: \"$__timeGroup(dateColumn, '5m', fill)\",\n text: \"$__timeGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING, FILL_TYPE],\n type: MacroType.Value,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),* missing values can be filled with 0, NULL or previous\",\n },\n */\n","import { type Monaco } from '@grafana/ui';\nimport { type Operator, OperatorType, type SQLCompletionItemProvider } from '../types';\nimport { MACROS } from './macros';\nimport { type SQLMonarchLanguage } from './types';\n\nexport function getStandardSQLCompletionProvider(\n monaco: Monaco,\n language: SQLMonarchLanguage\n): SQLCompletionItemProvider {\n const provider: SQLCompletionItemProvider = { triggerCharacters: ['.', ' ', '$', ',', '(', \"'\"] };\n if (language && Array.isArray(language.builtinFunctions)) {\n provider.supportedFunctions = () => language.builtinFunctions!.map((f) => ({ id: f, name: f }));\n }\n\n const operators: Operator[] = [];\n if (language?.comparisonOperators?.length) {\n operators.push(\n ...language.comparisonOperators.map((f) => ({\n id: f.toLocaleLowerCase(),\n operator: f,\n type: OperatorType.Comparison,\n }))\n );\n }\n\n // some languages in the monaco language registry don't specify logical operators, only operators. if so, suggest them instead\n language.logicalOperators = language.logicalOperators ?? language.operators;\n if (language?.logicalOperators?.length) {\n operators.push(\n ...language.logicalOperators.map((f) => ({ id: f.toLocaleLowerCase(), operator: f, type: OperatorType.Logical }))\n );\n }\n\n provider.supportedOperators = () => operators;\n\n provider.supportedMacros = () => MACROS;\n\n return provider;\n}\n","import { type LanguageDefinition } from '../components/SQLEditor';\nimport { getStandardSQLCompletionProvider } from './standardSQLCompletionItemProvider';\n\nconst standardSQLLanguageDefinition: LanguageDefinition = {\n id: 'standardSql',\n extensions: ['.sql'],\n aliases: ['sql'],\n mimetypes: [],\n loader: () => import('./language'),\n\n completionProvider: getStandardSQLCompletionProvider,\n};\n\nexport default standardSQLLanguageDefinition;\n","import { useRef, useEffect, useMemo } from 'react';\n\n/**\n * Returns a stable callback that always calls the latest version of the provided callback.\n * Useful for avoiding stale closures in imperative APIs like Monaco editor callbacks.\n *\n * @param callback The callback function that may change between renders (can be undefined)\n * @returns A stable callback reference that always calls the latest version, or undefined if no callback provided\n */\nexport function useLatestCallback<T extends (...args: any[]) => unknown>(callback: T | undefined): T | undefined {\n const ref = useRef(callback);\n\n useEffect(() => {\n ref.current = callback;\n });\n\n const hasCallback = Boolean(callback);\n\n return useMemo(\n () => (hasCallback ? (((...args: Parameters<T>) => ref.current!(...args)) as T) : undefined),\n [hasCallback]\n );\n}\n","import { CodeEditor, type Monaco, type monacoTypes } from '@grafana/ui';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { getStatementPosition } from '../standardSql/getStatementPosition';\nimport { getStandardSuggestions } from '../standardSql/getStandardSuggestions';\nimport { initSuggestionsKindRegistry, type SuggestionKindRegistryItem } from '../standardSql/suggestionsKindRegistry';\nimport {\n CompletionItemInsertTextRule,\n CompletionItemKind,\n CompletionItemPriority,\n type CustomSuggestion,\n type PositionContext,\n type SQLCompletionItemProvider,\n type StatementPosition,\n SuggestionKind,\n} from '../types';\nimport { getSuggestionKinds } from '../utils/getSuggestionKind';\nimport { linkedTokenBuilder } from '../utils/linkedTokenBuilder';\nimport { defaultTableNameParser, getTableToken } from '../utils/tokenUtils';\nimport { TRIGGER_SUGGEST } from '../utils/commands';\nimport { v4 } from 'uuid';\nimport { Registry } from '@grafana/data';\nimport {\n type FunctionsRegistryItem,\n type MacrosRegistryItem,\n type OperatorsRegistryItem,\n type SQLMonarchLanguage,\n type StatementPositionResolversRegistryItem,\n type SuggestionsRegistryItem,\n} from '../standardSql/types';\nimport { initStandardSuggestions } from '../standardSql/standardSuggestionsRegistry';\nimport { initStatementPositionResolvers } from '../standardSql/statementPositionResolversRegistry';\nimport { sqlEditorLog } from '../utils/debugger';\nimport standardSQLLanguageDefinition from '../standardSql/definition';\nimport { getStandardSQLCompletionProvider } from '../standardSql/standardSQLCompletionItemProvider';\nimport { useLatestCallback } from '../hooks/useLatestCallback';\n\nconst STANDARD_SQL_LANGUAGE = 'sql';\n\nexport interface LanguageDefinition extends monacoTypes.languages.ILanguageExtensionPoint {\n loader?: (module: any) => Promise<{\n language: SQLMonarchLanguage;\n conf: monacoTypes.languages.LanguageConfiguration;\n }>;\n // Provides API for customizing the autocomplete\n completionProvider?: (m: Monaco, language: SQLMonarchLanguage) => SQLCompletionItemProvider;\n // Function that returns a formatted query\n formatter?: (q: string) => string;\n}\n\ninterface SQLEditorProps {\n query: string;\n /**\n * Use for inspecting the query as it changes. I.e. for validation.\n */\n onChange?: (q: string, processQuery: boolean) => void;\n onBlur?: (text: string) => void;\n language?: LanguageDefinition;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n}\n\ninterface LanguageRegistries {\n functions: Registry<FunctionsRegistryItem>;\n operators: Registry<OperatorsRegistryItem>;\n suggestionKinds: Registry<SuggestionKindRegistryItem>;\n positionResolvers: Registry<StatementPositionResolversRegistryItem>;\n macros: Registry<MacrosRegistryItem>;\n}\n\nconst LANGUAGES_CACHE = new Map<string, LanguageRegistries>();\nconst INSTANCE_CACHE = new Map<string, Registry<SuggestionsRegistryItem>>();\n\nexport const SQLEditor = ({\n children,\n onBlur,\n onChange,\n query,\n language = { id: STANDARD_SQL_LANGUAGE },\n width,\n height,\n}: SQLEditorProps) => {\n const monacoRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const langUid = useRef<string>();\n const stableOnChange = useLatestCallback(onChange);\n\n // create unique language id for each SQLEditor instance\n const id = useMemo(() => {\n const uid = v4();\n const id = `${language.id}-${uid}`;\n langUid.current = id;\n return id;\n }, [language.id]);\n\n useEffect(() => {\n return () => {\n if (langUid.current) {\n INSTANCE_CACHE.delete(langUid.current);\n }\n sqlEditorLog(`Removing instance cache ${langUid.current}`, false, INSTANCE_CACHE);\n };\n }, []);\n\n const formatQuery = useCallback(() => {\n if (monacoRef.current) {\n monacoRef.current.getAction('editor.action.formatDocument').run();\n }\n }, []);\n\n const onSqlBlur = (text: string) => {\n stableOnChange && stableOnChange(text, false);\n onBlur && onBlur(text);\n };\n\n return (\n <div style={{ width }}>\n <CodeEditor\n height={height || '240px'}\n // -2px to compensate for borders width\n width={width ? `${width - 2}px` : undefined}\n language={id}\n value={query}\n onBlur={onSqlBlur}\n showMiniMap={false}\n showLineNumbers={true}\n // Using onEditorDidMount instead of onBeforeEditorMount to support Grafana < 8.2.x\n onEditorDidMount={(editor, m) => {\n monacoRef.current = editor;\n editor.onDidChangeModelContent((e) => {\n const text = editor.getValue();\n // Use ref to get the latest onChange callback, avoiding stale closures\n if (stableOnChange) {\n stableOnChange(text, false);\n }\n });\n\n editor.addCommand(m.KeyMod.CtrlCmd | m.KeyCode.Enter, () => {\n const text = editor.getValue();\n // Use ref to get the latest onChange callback, avoiding stale closures\n if (stableOnChange) {\n stableOnChange(text, true);\n }\n });\n\n editor.onKeyUp((e) => {\n // keyCode 84 is . (DOT)\n if (e.keyCode === 84) {\n editor.trigger(TRIGGER_SUGGEST.id, TRIGGER_SUGGEST.id, {});\n }\n });\n registerLanguageAndSuggestions(m, language, id);\n }}\n />\n {children && children({ formatQuery })}\n </div>\n );\n};\n\n// There's three ways to define Monaco language:\n// 1. Leave language.id empty or set it to 'sql'. This will load a standard sql language definition, including syntax highlighting and tokenization for\n// common Grafana entities such as macros and template variables\n// 2. Provide a custom language and load it via the async LanguageDefinition.loader callback\n// 3. Specify a language.id that exists in the Monaco language registry. A custom completion item provider can still be provided.\n// If not, the standard SQL completion item provider will be used. See available languages here: https://github.com/microsoft/monaco-editor/tree/main/src/basic-languages\n// If a custom language is specified, its LanguageDefinition will be merged with the LanguageDefinition for standard SQL. This allows the consumer to only\n// override parts of the LanguageDefinition, such as for example the completion item provider.\nconst resolveLanguage = (monaco: Monaco, languageDefinitionProp: LanguageDefinition): LanguageDefinition => {\n if (languageDefinitionProp?.id !== STANDARD_SQL_LANGUAGE && !languageDefinitionProp.loader) {\n sqlEditorLog(`Loading language '${languageDefinitionProp?.id}' from Monaco registry`, false);\n const allLangs = monaco.languages.getLanguages();\n const custom = allLangs.find(({ id }) => id === languageDefinitionProp?.id);\n if (!custom) {\n throw Error(`Unknown Monaco language ${languageDefinitionProp?.id}`);\n }\n\n return { completionProvider: getStandardSQLCompletionProvider, ...custom, ...languageDefinitionProp };\n }\n\n return {\n ...standardSQLLanguageDefinition,\n ...languageDefinitionProp,\n };\n};\n\nexport const registerLanguageAndSuggestions = async (monaco: Monaco, l: LanguageDefinition, lid: string) => {\n const languageDefinition = resolveLanguage(monaco, l);\n if (!languageDefinition.loader) {\n return;\n }\n const { language, conf } = await languageDefinition.loader(monaco);\n monaco.languages.register({ id: lid });\n monaco.languages.setMonarchTokensProvider(lid, { ...language });\n monaco.languages.setLanguageConfiguration(lid, { ...conf });\n\n if (languageDefinition.formatter) {\n monaco.languages.registerDocumentFormattingEditProvider(lid, {\n provideDocumentFormattingEdits: (model) => {\n const formatted = l.formatter?.(model.getValue());\n return [\n {\n range: model.getFullModelRange(),\n text: formatted || '',\n },\n ];\n },\n });\n }\n\n if (languageDefinition.completionProvider) {\n const customProvider = languageDefinition.completionProvider(monaco, language);\n extendStandardRegistries(l.id, lid, customProvider);\n const languageSuggestionsRegistries = LANGUAGES_CACHE.get(l.id)!;\n const instanceSuggestionsRegistry = INSTANCE_CACHE.get(lid)!;\n\n const completionProvider: monacoTypes.languages.CompletionItemProvider['provideCompletionItems'] = async (\n model,\n position,\n context,\n token\n ) => {\n const currentToken = linkedTokenBuilder(monaco, model, position, lid);\n const statementPosition = getStatementPosition(currentToken, languageSuggestionsRegistries.positionResolvers);\n const kind = getSuggestionKinds(statementPosition, languageSuggestionsRegistries.suggestionKinds);\n\n sqlEditorLog('Statement position', false, statementPosition);\n sqlEditorLog('Suggestion kinds', false, kind);\n\n const ctx: PositionContext = {\n position,\n currentToken,\n statementPosition,\n kind,\n range: monaco.Range.fromPositions(position),\n };\n\n const stdSuggestions = await getStandardSuggestions(monaco, currentToken, kind, ctx, instanceSuggestionsRegistry);\n\n return {\n suggestions: stdSuggestions,\n };\n };\n\n monaco.languages.registerCompletionItemProvider(lid, {\n ...customProvider,\n provideCompletionItems: completionProvider,\n });\n }\n};\n\nfunction extendStandardRegistries(id: string, lid: string, customProvider: SQLCompletionItemProvider) {\n if (!LANGUAGES_CACHE.has(id)) {\n initializeLanguageRegistries(id);\n }\n\n const languageRegistries = LANGUAGES_CACHE.get(id)!;\n\n if (!INSTANCE_CACHE.has(lid)) {\n INSTANCE_CACHE.set(\n lid,\n new Registry(\n initStandardSuggestions(languageRegistries.functions, languageRegistries.operators, languageRegistries.macros)\n )\n );\n }\n\n const instanceSuggestionsRegistry = INSTANCE_CACHE.get(lid)!;\n\n if (customProvider.supportedFunctions) {\n for (const func of customProvider.supportedFunctions()) {\n const exists = languageRegistries.functions.getIfExists(func.id);\n if (!exists) {\n languageRegistries.functions.register(func);\n }\n }\n }\n\n if (customProvider.supportedOperators) {\n for (const op of customProvider.supportedOperators()) {\n const exists = languageRegistries.operators.getIfExists(op.id);\n if (!exists) {\n languageRegistries.operators.register({ ...op, name: op.id });\n }\n }\n }\n\n if (customProvider.supportedMacros) {\n for (const macro of customProvider.supportedMacros()) {\n const exists = languageRegistries.macros.getIfExists(macro.id);\n if (!exists) {\n languageRegistries.macros.register({ ...macro, name: macro.id });\n }\n }\n }\n\n if (customProvider.customStatementPlacement) {\n for (const placement of customProvider.customStatementPlacement()) {\n const exists = languageRegistries.positionResolvers.getIfExists(placement.id);\n if (!exists) {\n languageRegistries.positionResolvers.register({\n ...placement,\n id: placement.id as StatementPosition,\n name: placement.id,\n });\n languageRegistries.suggestionKinds.register({\n id: placement.id as StatementPosition,\n name: placement.id,\n kind: [],\n });\n } else {\n // Allow extension to the built-in placement resolvers\n const origResolve = exists.resolve;\n exists.resolve = (...args) => {\n const ext = placement.resolve(...args);\n if (placement.overrideDefault) {\n return ext;\n }\n const orig = origResolve(...args);\n return orig || ext;\n };\n }\n }\n }\n\n if (customProvider.customSuggestionKinds) {\n for (const kind of customProvider.customSuggestionKinds()) {\n kind.applyTo?.forEach((applyTo) => {\n const exists = languageRegistries.suggestionKinds.getIfExists(applyTo);\n if (exists) {\n // avoid duplicates\n if (exists.kind.indexOf(kind.id as SuggestionKind) === -1) {\n exists.kind.push(kind.id as SuggestionKind);\n }\n }\n });\n\n if (kind.overrideDefault) {\n const stbBehavior = instanceSuggestionsRegistry.get(kind.id);\n if (stbBehavior !== undefined) {\n stbBehavior.suggestions = kind.suggestionsResolver;\n continue;\n }\n }\n\n instanceSuggestionsRegistry.register({\n id: kind.id as SuggestionKind,\n name: kind.id,\n suggestions: kind.suggestionsResolver,\n });\n }\n }\n\n if (customProvider.schemas) {\n const stbBehavior = instanceSuggestionsRegistry.get(SuggestionKind.Schemas);\n const s = stbBehavior.suggestions;\n stbBehavior.suggestions = async (ctx, m) => {\n const standardSchemas = await s(ctx, m);\n if (!customProvider.schemas) {\n return [...standardSchemas];\n }\n const customSchemas = await customProvider.schemas.resolve();\n const customSchemaCompletionItems = customSchemas.map((x) => ({\n label: x.name,\n insertText: `${x.completion ?? x.name}.`,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Module, // it's nice to differentiate schemas from tables\n sortText: CompletionItemPriority.High,\n }));\n return [...standardSchemas, ...customSchemaCompletionItems];\n };\n }\n\n if (customProvider.tables) {\n const stbBehavior = instanceSuggestionsRegistry.get(SuggestionKind.Tables);\n const s = stbBehavior.suggestions;\n stbBehavior.suggestions = async (ctx, m) => {\n const o = await s(ctx, m);\n const tableToken = getTableToken(ctx.currentToken);\n const tableNameParser = customProvider.tables?.parseName ?? defaultTableNameParser;\n\n const tableIdentifier = tableNameParser(tableToken);\n\n const oo = ((await customProvider.tables?.resolve?.(tableIdentifier)) ?? []).map((x) => ({\n label: x.name,\n // if no custom completion is provided it's safe to move cursor further in the statement\n insertText: `${x.completion ?? x.name}${x.completion === x.name ? ' $0' : ''}`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.MediumHigh,\n }));\n return [...o, ...oo];\n };\n }\n\n if (customProvider.columns) {\n const stbBehavior = instanceSuggestionsRegistry.get(SuggestionKind.Columns);\n const s = stbBehavior.suggestions;\n stbBehavior.suggestions = async (ctx, m) => {\n const o = await s(ctx, m);\n const tableToken = getTableToken(ctx.currentToken);\n let tableIdentifier;\n const tableNameParser = customProvider.tables?.parseName ?? defaultTableNameParser;\n\n if (tableToken && tableToken.value) {\n tableIdentifier = tableNameParser(tableToken);\n }\n\n let oo: CustomSuggestion[] = [];\n if (tableIdentifier) {\n const columns = await customProvider.columns?.resolve!(tableIdentifier);\n oo = columns\n ? columns.map<CustomSuggestion>((x) => ({\n label: x.name,\n insertText: x.completion ?? x.name,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.High,\n detail: x.type,\n documentation: x.description,\n }))\n : [];\n }\n return [...o, ...oo];\n };\n }\n}\n\n/**\n * Initializes language specific registries that are treated as singletons\n */\nfunction initializeLanguageRegistries(id: string) {\n if (!LANGUAGES_CACHE.has(id)) {\n LANGUAGES_CACHE.set(id, {\n functions: new Registry(),\n operators: new Registry(),\n suggestionKinds: new Registry(initSuggestionsKindRegistry),\n positionResolvers: new Registry(initStatementPositionResolvers),\n macros: new Registry(),\n });\n }\n\n return LANGUAGES_CACHE.get(id)!;\n}\n","import { type monacoTypes } from '@grafana/ui';\nimport { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineFullQuery: TestQueryModel = {\n query: `SELECT column1, FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 42,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 43,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 44,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 45,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 53,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 61,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 62,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 70,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 75,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 78,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 79,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 87,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 91,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 92,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 97,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 100,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ] as monacoTypes.Token[][],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineFullQueryWithAggregation: TestQueryModel = {\n query: 'SELECT count(column1), FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 40,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 49,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 50,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 60,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 65,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 66,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 68,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 77,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 82,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 83,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 85,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 93,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 94,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 99,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 104,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 105,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 107,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const multiLineFullQuery: TestQueryModel = {\n query: `SELECT column1,\n FROM table1\n\n WHERE column1 = \"value1\"\n GROUP BY column1 ORDER BY column1 DESC\n LIMIT 10;`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 4,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 11,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 24,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 9,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 25,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 26,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 38,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const multiLineFullQueryWithAggregation: TestQueryModel = {\n query: `SELECT count(column1),\n FROM table1\n\n WHERE column1 = \"value1\"\n GROUP BY column1 ORDER BY column1 DESC\n LIMIT 10;`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 4,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 11,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 24,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 9,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 25,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 26,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 38,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineEmptyQuery: TestQueryModel = {\n query: '',\n tokens: [],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineTwoQueries: TestQueryModel = {\n query:\n 'SELECT column1, FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10; SELECT column2, FROM table2 WHERE column2 = \"value2\" GROUP BY column1 ORDER BY column2 DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 42,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 43,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 44,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 45,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 53,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 61,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 62,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 70,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 75,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 78,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 79,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 87,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 91,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 92,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 97,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 100,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 101,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 102,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 108,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 109,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 116,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 117,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 118,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 122,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 123,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 129,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 130,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 135,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 136,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 143,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 144,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 145,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 146,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 147,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 153,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 154,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 155,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 160,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 161,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 163,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 164,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 171,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 172,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 177,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 178,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 180,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 181,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 188,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 189,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 193,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 194,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 199,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 200,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 202,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineTwoQueriesWithAggregation: TestQueryModel = {\n query:\n 'SELECT count(column1), FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10; SELECT count(column2), FROM table2 WHERE column2 = \"value2\" GROUP BY column1 ORDER BY column2 DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 40,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 49,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 50,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 60,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 65,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 66,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 68,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 77,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 82,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 83,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 85,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 93,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 94,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 99,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 104,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 105,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 107,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 108,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 109,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 115,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 116,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 121,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 122,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 129,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 130,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 131,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 132,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 136,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 137,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 143,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 144,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 149,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 150,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 157,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 158,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 159,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 160,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 161,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 167,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 168,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 169,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 174,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 175,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 177,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 178,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 185,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 186,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 191,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 192,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 194,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 195,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 202,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 203,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 207,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 208,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 213,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 214,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 216,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineMultipleColumns: TestQueryModel = {\n query:\n 'SELECT count(column1), column2 FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1, avg(column2) DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 30,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 31,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 36,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 42,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 43,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 49,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 56,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 57,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 60,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 66,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 67,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 68,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 73,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 74,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 77,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 84,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 85,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 90,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 91,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 93,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 94,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 101,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 102,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 103,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 106,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 107,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 114,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 115,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 116,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 120,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 121,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 126,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 127,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 129,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const multiLineMultipleColumns: TestQueryModel = {\n query: `SELECT count(column1), column2\n FROM table1\n\n WHERE column1 = \"value1\"\n GROUP BY column1 ORDER BY column1, avg(column2) DESC\n LIMIT 10;`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 30,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 4,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 11,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 24,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 9,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 25,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 26,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 38,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 39,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 46,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 47,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type monacoTypes } from '@grafana/ui';\n\n// Stub for the Monaco instance. Only implements the parts that are used in cloudwatch sql\nconst getMonacoMock: (\n testData: Map<string, Array<Array<Pick<monacoTypes.Token, 'language' | 'offset' | 'type'>>>>\n) => any = (testData) => ({\n editor: {\n tokenize: (value: string, languageId: string) => testData.get(value),\n },\n Range: {\n containsPosition: (range: monacoTypes.IRange, position: monacoTypes.IPosition) => {\n return (\n position.lineNumber >= range.startLineNumber &&\n position.lineNumber <= range.endLineNumber &&\n position.column >= range.startColumn &&\n position.column <= range.endColumn\n );\n },\n },\n languages: {\n CompletionItemKind: { Snippet: 2, Function: 1, Keyword: 3 },\n CompletionItemInsertTextRule: { InsertAsSnippet: 2 },\n },\n});\n\nexport { getMonacoMock };\n","import { type monacoTypes } from '@grafana/ui';\n\n// Stub for monacoTypes.editor.ITextModel\nfunction TextModel(value: string) {\n return {\n getValue: function (eol?: monacoTypes.editor.EndOfLinePreference, preserveBOM?: boolean): string {\n return value;\n },\n getValueInRange: function (range: monacoTypes.IRange, eol?: monacoTypes.editor.EndOfLinePreference): string {\n const lines = value.split('\\n');\n const line = lines[range.startLineNumber - 1];\n return line.trim().slice(range.startColumn === 0 ? 0 : range.startColumn - 1, range.endColumn - 1);\n },\n getLineLength: function (lineNumber: number): number {\n const lines = value.split('\\n');\n return lines[lineNumber - 1].trim().length;\n },\n };\n}\n\nexport { TextModel };\n","import { Registry } from '@grafana/data';\nimport { type monacoTypes } from '@grafana/ui';\nimport { getMonacoMock } from '../mocks/Monaco';\nimport { TextModel } from '../mocks/TextModel';\nimport { getStatementPosition } from '../standardSql/getStatementPosition';\nimport { type StatementPositionResolversRegistryItem } from '../standardSql/types';\nimport { type CustomStatementPlacement, type StatementPosition } from '../types';\nimport { linkedTokenBuilder } from '../utils/linkedTokenBuilder';\nimport { type StatementPositionResolverTestCase } from './types';\n\nfunction assertPosition(\n query: string,\n position: monacoTypes.IPosition,\n expected: StatementPosition | string,\n monacoMock: any,\n resolversRegistry: Registry<StatementPositionResolversRegistryItem>\n) {\n const testModel = TextModel(query);\n const current = linkedTokenBuilder(monacoMock, testModel as monacoTypes.editor.ITextModel, position);\n const statementPosition = getStatementPosition(current, resolversRegistry);\n\n expect(statementPosition).toContain(expected);\n}\n\nexport const testStatementPosition = (\n expected: StatementPosition | string,\n cases: StatementPositionResolverTestCase[],\n resolvers: () => CustomStatementPlacement[]\n) => {\n describe(`${expected}`, () => {\n let MonacoMock: any;\n let statementPositionResolversRegistry: Registry<StatementPositionResolversRegistryItem>;\n\n beforeEach(() => {\n const mockQueries = new Map<string, Array<Array<Pick<monacoTypes.Token, 'language' | 'offset' | 'type'>>>>();\n cases.forEach((c) => mockQueries.set(c.query.query, c.query.tokens));\n\n MonacoMock = getMonacoMock(mockQueries);\n statementPositionResolversRegistry = new Registry(() => {\n return resolvers().map((r) => ({\n id: r.id as StatementPosition,\n name: r.name || r.id,\n resolve: r.resolve,\n }));\n });\n });\n\n // using forEach here rather than test.each as been struggling to get the arguments interpolated in test name string\n cases.forEach((c) => {\n test(`${c.query.query}`, () => {\n assertPosition(\n c.query.query,\n { lineNumber: c.position.line, column: c.position.column },\n expected,\n MonacoMock,\n statementPositionResolversRegistry\n );\n });\n });\n });\n};\n","import * as testData from '../mocks/testData';\nimport { testStatementPosition } from './statementPosition';\nimport { type TestQueryModel } from './types';\n\nexport const SQLEditorTestUtils = {\n testData,\n testStatementPosition,\n};\n\nexport type { TestQueryModel };\n","import { type JsonTree } from '@react-awesome-query-builder/ui';\n\nimport {\n type DataFrame,\n type DataSourceJsonData,\n type MetricFindValue,\n type SelectableValue,\n type TimeRange,\n toOption as toOptionFromData,\n} from '@grafana/data';\n\nimport { type DataQuery } from '@grafana/schema';\n\nimport { type QueryWithDefaults } from './defaults';\nimport {\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n} from './expressions';\nimport { type CompletionItemKind, type LanguageCompletionProvider } from '../SQLEditor';\n\nexport interface SqlQueryForInterpolation {\n dataset?: string;\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n refId: string;\n hide?: boolean;\n}\n\nexport interface SQLConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n connMaxLifetime: number;\n}\n\nexport interface SQLOptions extends SQLConnectionLimits, DataSourceJsonData {\n tlsAuth: boolean;\n tlsAuthWithCACert: boolean;\n timezone: string;\n tlsSkipVerify: boolean;\n user: string;\n database: string;\n url: string;\n timeInterval: string;\n}\n\n// Match the Enums Expected in SqlUtil and SqlDS\n// https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/sqlutil/query.go#L18-L29\nexport enum QueryFormat {\n Timeseries,\n Table,\n Logs,\n Trace,\n OptionMulti,\n}\n\nexport enum EditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n\nexport interface SQLQuery extends DataQuery {\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n dataset?: string; // When catalog is present, dataset represents the schema. Otherwise, it's the dataset.\n catalog?: string;\n table?: string;\n sql?: SQLExpression;\n editorMode?: EditorMode;\n rawQuery?: boolean;\n}\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\nexport type SQLFilters = NameValue[];\n\nexport interface SQLExpression {\n columns?: QueryEditorFunctionExpression[];\n whereJsonTree?: JsonTree;\n whereString?: string;\n filters?: SQLFilters;\n groupBy?: QueryEditorGroupByExpression[];\n orderBy?: QueryEditorPropertyExpression;\n orderByDirection?: 'ASC' | 'DESC';\n limit?: number;\n offset?: number;\n}\n\nexport interface TableSchema {\n name?: string;\n schema?: TableFieldSchema[];\n}\n\nexport interface TableFieldSchema {\n name: string;\n description?: string;\n type: string;\n repeated: boolean;\n schema: TableFieldSchema[];\n}\n\nexport interface QueryRowFilter {\n filter: boolean;\n group: boolean;\n order: boolean;\n preview: boolean;\n}\n\nexport const QUERY_FORMAT_OPTIONS = [\n { label: 'Time series', value: QueryFormat.Timeseries },\n { label: 'Table', value: QueryFormat.Table },\n];\n\nconst backWardToOption = (value: string) => ({ label: value, value });\n\nexport const toOption = toOptionFromData ?? backWardToOption;\n\nexport interface ResourceSelectorProps {\n disabled?: boolean;\n className?: string;\n applyDefault?: boolean;\n}\n// React Awesome Query builder field types.\n// These are responsible for rendering the correct UI for the field.\nexport type RAQBFieldTypes = 'text' | 'number' | 'boolean' | 'datetime' | 'date' | 'time';\n\nexport interface SQLSelectableValue extends SelectableValue {\n type?: string;\n raqbFieldType?: RAQBFieldTypes;\n}\n\nexport interface Aggregate {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface DB {\n init?: (datasourceId?: string) => Promise<boolean>;\n datasets: (catalog?: string) => Promise<string[]>; // When catalog is provided, returns schemas for that catalog\n catalogs?: () => Promise<string[]>;\n tables: (dataset?: string, catalog?: string, schema?: string) => Promise<string[]>;\n fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;\n validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;\n dsID: () => number;\n dispose?: (dsID?: string) => void;\n lookup: (path?: string) => Promise<Array<{ name: string; completion: string }>>;\n getSqlCompletionProvider: () => LanguageCompletionProvider;\n toRawSql?: (query: SQLQuery) => string;\n functions: () => Promise<Aggregate[]>;\n labels?: Map<'dataset', string>;\n disableDatasets?: boolean;\n disableCatalogs?: boolean;\n}\n\nexport interface QueryEditorProps {\n db: DB;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n range?: TimeRange;\n}\n\nexport interface ValidationResults {\n query: SQLQuery;\n rawSql?: string;\n error: string;\n isError: boolean;\n isValid: boolean;\n statistics?: {\n TotalBytesProcessed: number;\n } | null;\n}\n\nexport interface SqlQueryModel {\n interpolate: () => string;\n quoteLiteral: (v: string) => string;\n}\n\nexport interface ResponseParser {\n transformMetricFindResponse: (frame: DataFrame) => MetricFindValue[];\n}\n\nexport interface MetaDefinition {\n name: string;\n completion?: string;\n kind: CompletionItemKind;\n}\n","import React from 'react';\nimport { Stack } from '@grafana/ui';\nimport { type ThemeSpacingTokens } from '@grafana/data';\n\nexport type Direction = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type AlignItems =\n | 'stretch'\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'baseline'\n | 'start'\n | 'end'\n | 'self-start'\n | 'self-end';\n\ninterface StackProps {\n children?: React.ReactNode;\n direction?: Direction;\n alignItems?: AlignItems;\n wrap?: boolean;\n gap?: ThemeSpacingTokens;\n}\n\nexport const EditorStack = ({ children, wrap: wrapItems = true, ...props }: StackProps) => {\n return (\n <Stack wrap={wrapItems ? 'wrap' : undefined} direction={props.direction ?? 'row'} gap={props.gap ?? 2} {...props}>\n {children}\n </Stack>\n );\n};\n","import React, { type ReactElement, type Ref, forwardRef } from 'react';\nimport { Button } from '@grafana/ui';\n\nimport { EditorStack } from './EditorStack';\n\ninterface EditorListProps<T> {\n items: Array<Partial<T>>;\n renderItem: (item: Partial<T>, onChangeItem: (item: Partial<T>) => void, onDeleteItem: () => void) => ReactElement;\n onChange: (items: Array<Partial<T>>) => void;\n}\n\nexport const EditorList = forwardRef(function EditorList<T>(\n { items, renderItem, onChange }: EditorListProps<T>,\n ref: Ref<HTMLButtonElement>\n) {\n const onAddItem = () => {\n const newItems = [...items, {}];\n\n onChange(newItems);\n };\n\n const onChangeItem = (itemIndex: number, newItem: Partial<T>) => {\n const newItems = [...items];\n newItems[itemIndex] = newItem;\n onChange(newItems);\n };\n\n const onDeleteItem = (itemIndex: number) => {\n const newItems = [...items];\n newItems.splice(itemIndex, 1);\n onChange(newItems);\n };\n return (\n <EditorStack>\n {items.map((item, index) => (\n <div key={index}>\n {renderItem(\n item,\n (newItem) => onChangeItem(index, newItem),\n () => onDeleteItem(index)\n )}\n </div>\n ))}\n <Button ref={ref} onClick={onAddItem} variant=\"secondary\" size=\"md\" icon=\"plus\" aria-label=\"Add\" type=\"button\" />\n </EditorStack>\n );\n});\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Button, type ButtonProps, useStyles2 } from '@grafana/ui';\n\ntype AccessoryButtonProps = ButtonProps & {};\n\nexport const AccessoryButton = ({ className, ...props }: AccessoryButtonProps) => {\n const styles = useStyles2(getButtonStyles);\n\n return <Button {...props} className={cx(className, styles.button)} />;\n};\n\nconst getButtonStyles = (theme: GrafanaTheme2) => ({\n button: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2),\n }),\n});\n","import React, { Children, cloneElement, isValidElement, type ReactElement } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useStyles2 } from '@grafana/ui';\n\ntype Child = string | undefined | ReactElement<{ className?: string; invalid?: unknown }>;\ninterface InputGroupProps {\n // we type the children props so we can test them later on\n children: Child | Child[];\n}\n\nexport const InputGroup = ({ children }: InputGroupProps) => {\n const styles = useStyles2(getStyles);\n\n // Find children with an invalid prop, and set a class name to raise their z-index so all\n // of the invalid border is visible\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\n return child;\n });\n\n return <div className={styles.root}>{modifiedChildren}</div>;\n};\n\n// The later in the array the higher the priority for showing that element's border\nconst borderPriority = [\n '' as const, // lowest priority\n 'base' as const,\n 'hovered' as const,\n 'invalid' as const,\n 'focused' as const, // highest priority\n];\n\nconst getStyles = () => ({\n root: css({\n display: 'flex',\n\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\n '&:first-child': {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n '&:last-child': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0,\n },\n\n //\n position: 'relative',\n zIndex: borderPriority.indexOf('base'),\n\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\n invalidChild: css({\n zIndex: borderPriority.indexOf('invalid'),\n }),\n});\n","import React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { type SQLExpression } from '../types';\nimport { type QueryEditorGroupByExpression } from '../expressions';\nimport { setGroupByField } from '../utils/sql.utils';\nimport { EditorList } from '../EditorList';\nimport { Select } from '@grafana/ui';\nimport { AccessoryButton } from '../AccessoryButton';\nimport { InputGroup } from '../InputGroup';\n\ninterface GroupByRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n}\n\nexport function GroupByRow({ sql, columns, onSqlChange }: GroupByRowProps) {\n const onGroupByChange = useCallback(\n (item: Array<Partial<QueryEditorGroupByExpression>>) => {\n // As new (empty object) items come in, we need to make sure they have the correct type\n const cleaned = item.map((v) => setGroupByField(v.property?.name));\n const newSql = { ...sql, groupBy: cleaned };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <EditorList\n items={sql.groupBy!}\n onChange={onGroupByChange}\n renderItem={makeRenderColumn({\n options: columns,\n })}\n />\n );\n}\n\nfunction makeRenderColumn({ options }: { options?: Array<SelectableValue<string>> }) {\n const renderColumn = function (\n item: Partial<QueryEditorGroupByExpression>,\n onChangeItem: (item: QueryEditorGroupByExpression) => void,\n onDeleteItem: () => void\n ) {\n return (\n <InputGroup>\n <Select\n value={item.property?.name ? toOption(item.property.name) : null}\n aria-label=\"Group by\"\n options={options}\n menuShouldPortal\n onChange={({ value }) => value && onChangeItem(setGroupByField(value))}\n />\n <AccessoryButton aria-label=\"Remove group by column\" icon=\"times\" variant=\"secondary\" onClick={onDeleteItem} />\n </InputGroup>\n );\n };\n return renderColumn;\n}\n","import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorFieldGroupProps {\n children?: React.ReactNode;\n}\n\nexport const EditorFieldGroup = ({ children }: EditorFieldGroupProps) => {\n return <EditorStack gap={1}>{children}</EditorStack>;\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface EditorHeaderProps {\n children?: React.ReactNode;\n}\n\nexport const EditorHeader = ({ children }: EditorHeaderProps) => {\n const styles = useStyles2(getStyles);\n\n return <div className={styles.root}>{children}</div>;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\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","import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Field, Icon, type PopoverContent, ReactUtils, Space, Tooltip, useStyles2 } from '@grafana/ui';\n\ninterface EditorFieldProps extends ComponentProps<typeof Field> {\n label: string;\n children: React.ReactElement;\n width?: number | string;\n optional?: boolean;\n tooltip?: PopoverContent;\n tooltipInteractive?: boolean;\n}\nexport const EditorField = (props: EditorFieldProps) => {\n const { label, optional, tooltip, tooltipInteractive, children, width, ...fieldProps } = props;\n\n const styles = useStyles2(getStyles, width);\n\n // Null check for backward compatibility\n const childInputId = fieldProps?.htmlFor || ReactUtils?.getChildId(children);\n\n const labelEl = (\n <>\n <label className={styles.label} htmlFor={childInputId}>\n {label}\n {optional && <span className={styles.optional}> - optional</span>}\n {tooltip && (\n <Tooltip placement=\"top\" content={tooltip} theme=\"info\" interactive={tooltipInteractive}>\n <Icon tabIndex={0} name=\"info-circle\" size=\"sm\" className={styles.icon} />\n </Tooltip>\n )}\n </label>\n <Space v={0.5} />\n </>\n );\n\n return (\n <div className={styles.root}>\n <Field className={styles.field} label={labelEl} {...fieldProps}>\n {children}\n </Field>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, width?: number | string) => {\n return {\n root: css({\n minWidth: theme.spacing(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, // 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","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRow = ({ children }: EditorRowProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={2}>{children}</EditorStack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\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","import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowsProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRows = ({ children }: EditorRowsProps) => {\n return (\n <EditorStack gap={0.5} direction=\"column\">\n {children}\n </EditorStack>\n );\n};\n","import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { Switch } from '@grafana/ui';\n\n// Wrapper component around <Switch /> that properly aligns it in <EditorField />\nexport const EditorSwitch = (props: ComponentProps<typeof Switch>) => {\n const styles = getStyles();\n\n return (\n <div className={styles.switch}>\n <Switch {...props} />\n </div>\n );\n};\n\nconst getStyles = () => {\n return {\n switch: css({\n display: 'flex',\n alignItems: 'center',\n minHeight: 30,\n }),\n };\n};\n","import React from 'react';\ninterface FlexItemProps {\n grow?: number;\n shrink?: number;\n}\n\nexport const FlexItem = ({ grow, shrink }: FlexItemProps) => {\n return <div style={{ display: 'block', flexGrow: grow, flexShrink: shrink }} />;\n};\n","import React, { useState } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GroupBase } from 'react-select';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport {\n Select,\n type SelectCommonProps,\n type SelectContainerProps,\n SelectContainer as BaseSelectContainer,\n useStyles2,\n} from '@grafana/ui';\n\ninterface InlineSelectProps<T> extends SelectCommonProps<T> {\n label?: string;\n}\n\nexport function InlineSelect<T>({ label: labelProp, ...props }: InlineSelectProps<T>) {\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\n return (\n <div className={styles.root}>\n {labelProp && (\n <label className={styles.label} htmlFor={id}>\n {labelProp}\n {':'} \n </label>\n )}\n <Select openMenuOnFocus inputId={id} {...props} components={components} />\n </div>\n );\n}\n\nconst SelectContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { children } = props;\n\n const styles = useStyles2(getSelectStyles);\n\n return (\n <BaseSelectContainer {...props} className={cx(props.className, styles.container)}>\n {children}\n </BaseSelectContainer>\n );\n};\n\nconst ValueContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { className, children } = props;\n const styles = useStyles2(getSelectStyles);\n\n return <div className={cx(className, styles.valueContainer)}>{children}</div>;\n};\n\nconst getSelectStyles = (theme: GrafanaTheme2) => ({\n root: css({\n display: 'flex',\n fontSize: 12,\n alignItems: 'center',\n }),\n\n label: css({\n color: theme.colors.text.secondary,\n whiteSpace: 'nowrap',\n }),\n\n container: css({\n background: 'none',\n borderColor: 'transparent',\n }),\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","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nexport interface SpaceProps {\n v?: number;\n h?: number;\n layout?: 'block' | 'inline';\n}\n\nexport const Space = ({ v = 0, h = 0, layout = 'block' }: SpaceProps) => {\n const styles = useStyles2(getStyles, v, h, layout);\n\n return <span className={cx(styles.wrapper)} />;\n};\n\nconst getStyles = (theme: GrafanaTheme2, v: number, h: number, layout: 'block' | 'inline') => ({\n wrapper: css([\n {\n paddingRight: theme.spacing(h ?? 0),\n paddingBottom: theme.spacing(v ?? 0),\n },\n layout === 'inline' && {\n display: 'inline-block',\n },\n layout === 'block' && {\n display: 'block',\n },\n ]),\n});\n","import React, { useRef, useEffect } from 'react';\n\nimport { Button, Icon, Modal } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className=\"modal-header-title\">\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className=\"p-l-1\">Warning</span>\n </div>\n }\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n Builder mode does not display changes made in code. The query builder will display the last changes you made in\n builder mode.\n </p>\n <p>Do you want to copy your code to the clipboard?</p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n Cancel\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n Discard code and switch\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n Copy code and switch\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps, toOption } from './types';\n\ninterface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset?: string;\n catalog?: string; // When provided, fetch schemas instead of datasets\n value: string | null;\n applyDefault?: boolean;\n disabled?: boolean;\n onChange: (v: SelectableValue) => void;\n inputId?: string;\n enableCatalogs?: boolean;\n 'data-testid'?: string;\n}\n\nexport const DatasetSelector = ({\n db,\n dataset,\n catalog,\n value,\n onChange,\n disabled,\n className,\n applyDefault,\n inputId,\n enableCatalogs,\n 'data-testid': dataTestId,\n}: DatasetSelectorProps) => {\n const state = useAsync(async () => {\n // If a default dataset is provided, use it\n if (dataset) {\n onChange(toOption(dataset));\n return [toOption(dataset)];\n }\n\n // Fetch datasets - when catalog is provided, db.datasets(catalog) returns schemas for that catalog\n const datasets = await db.datasets(catalog);\n return datasets.map(toOption);\n }, [catalog]);\n\n useEffect(() => {\n if (!applyDefault) {\n return;\n }\n // Set default dataset when values are fetched\n if (!value) {\n if (state.value && state.value[0]) {\n onChange(state.value[0]);\n }\n } else {\n if (state.value && state.value.find((v) => v.value === value) === undefined) {\n // if value is set and newly fetched values does not contain selected value\n if (state.value.length > 0) {\n onChange(state.value[0]);\n }\n }\n }\n }, [state.value, value, applyDefault, onChange]);\n\n return (\n <Select\n inputId={inputId}\n className={className}\n aria-label=\"Dataset selector\"\n value={value}\n options={state.value}\n onChange={onChange}\n disabled={disabled}\n isLoading={state.loading}\n menuShouldPortal={true}\n data-testid={dataTestId}\n placeholder={enableCatalogs ? 'Select schema' : 'Select dataset'}\n />\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Select } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { type DB } from './types';\n\nexport interface CatalogSelectorProps {\n db: DB;\n inputId?: string;\n value: string | null;\n onChange: (catalog: string | null) => void;\n}\n\nexport const CatalogSelector = ({ db, inputId, value, onChange }: CatalogSelectorProps) => {\n const [catalogs, setCatalogs] = useState<Array<SelectableValue<string>>>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const loadCatalogs = useCallback(async () => {\n if (!db.catalogs) {\n return;\n }\n\n setIsLoading(true);\n try {\n const catalogList = await db.catalogs();\n const catalogOptions = catalogList.map((catalog) => ({\n label: catalog,\n value: catalog,\n }));\n setCatalogs(catalogOptions);\n } catch (error) {\n console.error('Error loading catalogs:', error);\n setCatalogs([]);\n } finally {\n setIsLoading(false);\n }\n }, [db]);\n\n useEffect(() => {\n loadCatalogs();\n }, [db, loadCatalogs]);\n\n const handleChange = (selectable: SelectableValue<string>) => {\n onChange(selectable?.value || null);\n };\n\n const selectedValue = catalogs.find((catalog) => catalog.value === value) || null;\n\n return (\n <Select\n inputId={inputId}\n options={catalogs}\n value={selectedValue}\n onChange={handleChange}\n isLoading={isLoading}\n placeholder=\"Select catalog\"\n isClearable\n allowCustomValue\n menuShouldPortal={true}\n />\n );\n};\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Select } from '@grafana/ui';\nimport { type DB, type ResourceSelectorProps } from './types';\nimport { type QueryWithDefaults } from './defaults';\n\ninterface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset?: string; // When catalog is present, this represents the schema. Otherwise, it's the dataset.\n catalog?: string;\n value: string | null;\n query: QueryWithDefaults;\n onChange: (v: SelectableValue) => void;\n inputId?: string;\n enableCatalogs?: boolean;\n}\n\nexport const TableSelector = ({\n db,\n dataset,\n catalog,\n value,\n className,\n onChange,\n inputId,\n enableCatalogs,\n}: TableSelectorProps) => {\n const state = useAsync(async () => {\n if (!dataset && !catalog) {\n return [];\n }\n\n // When catalogs are enabled, we need both catalog and dataset (acting as schema) to load tables\n if (enableCatalogs && (!catalog || !dataset)) {\n return [];\n }\n\n // db.tables(dataset, catalog)\n // dataset acts as schema when catalog is present, otherwise it's the dataset\n const tables = await db.tables(dataset, catalog);\n return tables.map(toOption);\n }, [dataset, catalog, enableCatalogs]);\n\n return (\n <Select\n inputId={inputId}\n className={className}\n aria-label=\"Table selector\"\n value={value}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={state.loading ? 'Loading tables' : 'Select table'}\n />\n );\n};\n","import React from 'react';\nimport { Button, type IconName, type PopoverContent, Tooltip } from '@grafana/ui';\n\ntype RunQueryButtonProps = {\n ariaLabel?: string;\n queryInvalid?: boolean;\n invalidQueryTooltip?: PopoverContent;\n disabled?: boolean;\n queryRunning?: boolean;\n onClick: () => void;\n dataTestId?: string;\n};\n\nexport const RunQueryButton = ({\n ariaLabel = 'Query editor Run button',\n queryRunning = false,\n queryInvalid = false,\n invalidQueryTooltip,\n disabled = false,\n onClick,\n dataTestId,\n}: RunQueryButtonProps) => {\n let icon: IconName | undefined = queryInvalid ? 'exclamation-triangle' : undefined;\n if (queryRunning) {\n icon = 'fa fa-spinner';\n }\n\n const RunButton = (\n <Button\n aria-label={ariaLabel}\n size=\"sm\"\n variant=\"secondary\"\n icon={icon}\n disabled={disabled || queryRunning}\n onClick={onClick}\n data-testid={dataTestId}\n >\n Run query\n </Button>\n );\n\n return queryInvalid ? (\n <Tooltip\n theme=\"error\"\n placement=\"top\"\n content={\n invalidQueryTooltip ?? (\n <>\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </>\n )\n }\n >\n {RunButton}\n </Tooltip>\n ) : (\n RunButton\n );\n};\n","import React, { useCallback, useState, useId } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { CatalogSelector } from './CatalogSelector';\nimport { TableSelector } from './TableSelector';\nimport { InlineSwitch, RadioButtonGroup } from '@grafana/ui';\nimport { type QueryWithDefaults } from './defaults';\nimport { EditorField } from './EditorField';\nimport { EditorHeader } from './EditorHeader';\nimport { EditorRow } from './EditorRow';\nimport { FlexItem } from './FlexItem';\nimport { InlineSelect } from './InlineSelect';\nimport { Space } from './Space';\nimport { RunQueryButton } from './RunQueryButton';\nimport { type DB, type SQLQuery, type QueryRowFilter, EditorMode, QueryFormat, QUERY_FORMAT_OPTIONS } from './types';\nimport { getRawSqlFn } from './utils/sql.utils';\n\ninterface QueryHeaderProps {\n db: DB;\n defaultDataset: string;\n enableDatasets: boolean;\n enableCatalogs?: boolean;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n onRunQuery: () => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n queryRowFilter: QueryRowFilter;\n isQueryRunnable: boolean;\n labels?: Map<string, string>;\n}\n\nconst editorModes = [\n { label: 'Builder', value: EditorMode.Builder },\n { label: 'Code', value: EditorMode.Code },\n];\n\nexport function QueryHeader({\n db,\n defaultDataset,\n enableDatasets,\n enableCatalogs,\n query,\n queryRowFilter,\n onChange,\n onRunQuery,\n onQueryRowChange,\n isQueryRunnable,\n labels = new Map([['dataset', 'Dataset']]),\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = getRawSqlFn(db);\n const htmlId = useId();\n\n // Derive enableCatalogs from db.disableCatalogs when not explicitly provided\n // Catalogs are disabled by default (when disableCatalogs is undefined or true)\n const catalogsEnabled = enableCatalogs ?? db.disableCatalogs === false;\n\n // When catalogs are enabled, datasets MUST be enabled (they act as schema selector)\n // This ensures the dataset selector is shown to select schemas\n const effectiveEnableDatasets = catalogsEnabled ? true : enableDatasets;\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n // dataset field has dual meaning:\n // - When catalogs enabled: dataset = schema\n // - When catalogs disabled: dataset = dataset\n const datasetValue = e.value || undefined;\n if (datasetValue === query.dataset) {\n return;\n }\n const next: SQLQuery = {\n ...query,\n dataset: datasetValue,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n const onCatalogChange = (catalog: string | null) => {\n const catalogValue = catalog || undefined;\n if (catalogValue === query.catalog) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n catalog: catalogValue,\n dataset: undefined, // Reset dataset (which acts as schema when catalog is present)\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n return (\n <>\n <EditorHeader>\n <InlineSelect\n label=\"Format\"\n value={query.format}\n placeholder=\"Select format\"\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label=\"Filter\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label=\"Group\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label=\"Order\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label=\"Preview\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked })\n }\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n <RunQueryButton queryInvalid={!isQueryRunnable} onClick={() => onRunQuery()} />\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => setShowConfirm(false)}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n\n <EditorRow>\n {/* Catalog selector: only when catalogs are not disabled */}\n {catalogsEnabled && (\n <EditorField label={labels.get('catalog') || 'Catalog'} width={25}>\n <CatalogSelector\n db={db}\n inputId={`sql-catalog-${htmlId}`}\n value={query.catalog === undefined ? null : query.catalog}\n onChange={onCatalogChange}\n />\n </EditorField>\n )}\n\n {/* Schema selector when catalogs enabled, dataset selector otherwise */}\n {effectiveEnableDatasets && (\n <EditorField\n label={catalogsEnabled ? labels.get('schema') || 'Schema' : labels.get('dataset') || 'Dataset'}\n width={25}\n >\n <DatasetSelector\n db={db}\n inputId={catalogsEnabled ? `sql-schema-${htmlId}` : `sql-dataset-${htmlId}`}\n data-testid={catalogsEnabled ? 'schema-selector' : 'dataset-selector'}\n dataset={catalogsEnabled ? undefined : defaultDataset}\n value={query.dataset === undefined ? null : query.dataset}\n onChange={onDatasetChange}\n catalog={catalogsEnabled ? query.catalog : undefined}\n />\n </EditorField>\n )}\n\n {/* Table selector: always shown */}\n <EditorField label={labels.get('table') || 'Table'} width={25}>\n <TableSelector\n db={db}\n inputId={`sql-table-${htmlId}`}\n dataset={query.dataset || (catalogsEnabled ? undefined : defaultDataset)}\n catalog={catalogsEnabled ? query.catalog : undefined}\n query={query}\n value={query.table === undefined ? null : query.table}\n onChange={onTableChange}\n enableCatalogs={catalogsEnabled}\n applyDefault\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n","// @ts-ignore\nimport sqlFormatter from 'sql-formatter-plus';\n\nexport function formatSQL(q: string) {\n return sqlFormatter.format(q).replace(/(\\$ \\{ .* \\})|(\\$ __)|(\\$ \\w+)/g, (m: string) => {\n return m.replace(/\\s/g, '');\n });\n}\n","import React, { useCallback, useEffect, useRef } from 'react';\n\nimport { type SQLQuery } from '../types';\n\nimport { formatSQL } from '../utils/formatSQL';\nimport { type LanguageCompletionProvider, SQLEditor } from '../../SQLEditor';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n completionProvider: LanguageCompletionProvider;\n};\n\nexport function QueryEditorRaw({ children, onChange, query, width, height, completionProvider }: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={{ id: 'sql', completionProvider, formatter: formatSQL }}\n >\n {children}\n </SQLEditor>\n );\n}\n","import { css } from '@emotion/css';\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { useAsyncFn, useDebounce } from 'react-use';\nimport { formattedValueToString, getValueFormat, type TimeRange } from '@grafana/data';\nimport { Icon, Spinner, useTheme2 } from '@grafana/ui';\nimport { type DB, type SQLQuery, type ValidationResults } from '../types';\n\nexport interface QueryValidatorProps {\n db: DB;\n query: SQLQuery;\n range?: TimeRange;\n onValidate: (isValid: boolean) => void;\n}\n\nexport function QueryValidator({ db, query, onValidate, range }: QueryValidatorProps) {\n const [validationResult, setValidationResult] = useState<ValidationResults | null>();\n const theme = useTheme2();\n const valueFormatter = useMemo(() => getValueFormat('bytes'), []);\n\n const styles = useMemo(() => {\n return {\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n };\n }, [theme]);\n\n const [state, validateQuery] = useAsyncFn(\n async (q: SQLQuery) => {\n if (q.rawSql?.trim() === '') {\n return null;\n }\n\n return await db.validateQuery(q, range);\n },\n [db]\n );\n\n const [,] = useDebounce(\n async () => {\n const result = await validateQuery(query);\n if (result) {\n setValidationResult(result);\n }\n\n return null;\n },\n 1000,\n [query, validateQuery]\n );\n\n useEffect(() => {\n if (validationResult?.isError) {\n onValidate(false);\n }\n if (validationResult?.isValid) {\n onValidate(true);\n }\n }, [validationResult, onValidate]);\n\n if (!state.value && !state.loading) {\n return null;\n }\n\n const error = state.value?.error ? processErrorMessage(state.value.error) : '';\n\n return (\n <>\n {state.loading && (\n <div className={styles.info}>\n <Spinner inline={true} size={12} /> Validating query...\n </div>\n )}\n {!state.loading && state.value && (\n <>\n <>\n {state.value.isValid && state.value.statistics && (\n <div className={styles.valid}>\n <Icon name=\"check\" /> This query will process{' '}\n <strong>{formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed))}</strong>{' '}\n when run.\n </div>\n )}\n </>\n\n <>{state.value.isError && <div className={styles.error}>{error}</div>}</>\n </>\n )}\n </>\n );\n}\n\nfunction processErrorMessage(error: string) {\n const splat = error.split(':');\n if (splat.length > 2) {\n return splat.slice(2).join(':');\n }\n return error;\n}\n","import { css } from '@emotion/css';\nimport React, { useMemo, useState } from 'react';\n\nimport { HorizontalGroup, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, type QueryValidatorProps } from './QueryValidator';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css`\n border: 1px solid ${theme.colors.border.medium};\n border-top: none;\n padding: ${theme.spacing(0.5, 0.5, 0.5, 0.5)};\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n font-size: ${theme.typography.bodySmall.fontSize};\n `,\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n hint: css`\n color: ${theme.colors.text.disabled};\n white-space: nowrap;\n cursor: help;\n `,\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <HorizontalGroup spacing=\"sm\">\n {onFormatCode && (\n <IconButton onClick={onFormatCode} name=\"brackets-curly\" size=\"xs\" tooltip=\"Format query\" />\n )}\n {onExpand && (\n <IconButton\n onClick={() => onExpand(!isExpanded)}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={isExpanded ? 'Collapse editor' : 'Expand editor'}\n />\n )}\n <Tooltip content=\"Hit CTRL/CMD+Return to run query\">\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </HorizontalGroup>\n </div>\n )}\n </div>\n );\n}\n","import React, { useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useMeasure } from 'react-use';\n// @ts-ignore\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Modal, useStyles2, useTheme2 } from '@grafana/ui';\nimport { QueryEditorRaw } from './QueryEditorRaw';\nimport { QueryToolbox } from './QueryToolbox';\nimport { type QueryEditorProps, type SQLQuery } from '../types';\n\ninterface RawEditorProps extends Omit<QueryEditorProps, 'onChange'> {\n onRunQuery: () => void;\n onChange: (q: SQLQuery, processQuery: boolean) => void;\n onValidate: (isValid: boolean) => void;\n queryToValidate: SQLQuery;\n}\n\nexport function RawEditor({ db, query, onChange, onRunQuery, onValidate, queryToValidate, range }: RawEditorProps) {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const [isExpanded, setIsExpanded] = useState(false);\n const [toolboxRef, toolboxMeasure] = useMeasure<HTMLDivElement>();\n const [editorRef, editorMeasure] = useMeasure<HTMLDivElement>();\n\n const completionProvider = useMemo(() => db.getSqlCompletionProvider(), [db]);\n\n const renderQueryEditor = (width?: number, height?: number) => {\n return (\n <QueryEditorRaw\n completionProvider={completionProvider}\n query={query}\n width={width}\n height={height ? height - toolboxMeasure.height : undefined}\n onChange={onChange}\n >\n {({ formatQuery }) => {\n return (\n <div ref={toolboxRef}>\n <QueryToolbox\n db={db}\n query={queryToValidate}\n onValidate={onValidate}\n onFormatCode={formatQuery}\n showTools\n range={range}\n onExpand={setIsExpanded}\n isExpanded={isExpanded}\n />\n </div>\n );\n }}\n </QueryEditorRaw>\n );\n };\n\n interface AutoSizerProps {\n width: number;\n height: number;\n }\n\n const renderEditor = (standalone = false) => {\n return standalone ? (\n <AutoSizer>\n {({ width, height }: AutoSizerProps) => {\n return renderQueryEditor(width, height);\n }}\n </AutoSizer>\n ) : (\n <div ref={editorRef}>{renderQueryEditor()}</div>\n );\n };\n\n const renderPlaceholder = () => {\n return (\n <div\n style={{\n width: editorMeasure.width,\n height: editorMeasure.height,\n background: theme.colors.background.primary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n Editing in expanded code editor\n </div>\n );\n };\n\n return (\n <>\n {isExpanded ? renderPlaceholder() : renderEditor()}\n {isExpanded && (\n <Modal\n title={`Query ${query.refId}`}\n closeOnBackdropClick={false}\n closeOnEscape={false}\n className={styles.modal}\n contentClassName={styles.modalContent}\n isOpen={isExpanded}\n onDismiss={() => {\n setIsExpanded(false);\n }}\n >\n {renderEditor(true)}\n </Modal>\n )}\n </>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n modal: css`\n width: 95vw;\n height: 95vh;\n `,\n modalContent: css`\n height: 100%;\n padding-top: 0;\n `,\n };\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui';\n\nimport { formatSQL } from '../utils/formatSQL';\n\ntype PreviewProps = {\n rawSql: string;\n};\n\nexport function Preview({ rawSql }: PreviewProps) {\n // TODO: use zero index to give feedback about copy success\n const [_, copyToClipboard] = useCopyToClipboard();\n const styles = useStyles2(getStyles);\n\n const labelElement = (\n <div className={styles.labelWrapper}>\n <label className={styles.label}>Preview</label>\n <IconButton tooltip=\"Copy to clipboard\" onClick={() => copyToClipboard(rawSql)} name=\"copy\" />\n </div>\n );\n\n return (\n <Field label={labelElement} className={styles.grow}>\n <CodeEditor\n language=\"sql\"\n height={80}\n value={formatSQL(rawSql)}\n monacoOptions={{ scrollbar: { vertical: 'hidden' }, scrollBeyondLastLine: false }}\n readOnly={true}\n showMiniMap={false}\n />\n </Field>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grow: css({ flexGrow: 1 }),\n label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),\n labelWrapper: css({ display: 'flex', justifyContent: 'space-between', paddingBottom: theme.spacing(0.5) }),\n };\n}\n","import { useCallback } from 'react';\n\nimport { type DB, type SQLExpression, type SQLQuery } from '../types';\n\nimport { getRawSqlFn } from './sql.utils';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = getRawSqlFn(db);\n const rawSql = toRawSql({\n sql,\n catalog: query.catalog,\n dataset: query.dataset,\n table: query.table,\n refId: query.refId,\n });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n","import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\n\nimport { GroupByRow } from './GroupByRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLGroupByRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLGroupByRow({ fields, query, onQueryChange, db }: SQLGroupByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return <GroupByRow columns={fields} sql={query.sql!} onSqlChange={onSqlChange} />;\n}\n","import { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Input, RadioButtonGroup, Select } from '@grafana/ui';\nimport { type SQLExpression } from '../types';\nimport { setPropertyField } from '../utils/sql.utils';\nimport { Space } from '../Space';\nimport { EditorField } from '../EditorField';\nimport { InputGroup } from '../InputGroup';\n\ntype OrderByRowProps = {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n showOffset?: boolean;\n};\n\nconst sortOrderOptions = [\n { description: 'Sort by ascending', value: 'ASC', icon: 'sort-amount-up' } as const,\n { description: 'Sort by descending', value: 'DESC', icon: 'sort-amount-down' } as const,\n];\n\nexport function OrderByRow({ sql, onSqlChange, columns, showOffset }: OrderByRowProps) {\n const onSortOrderChange = useCallback(\n (item: 'ASC' | 'DESC') => {\n const newSql: SQLExpression = { ...sql, orderByDirection: item };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onLimitChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, limit: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOffsetChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, offset: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOrderByChange = useCallback(\n (item: SelectableValue<string>) => {\n const newSql: SQLExpression = { ...sql, orderBy: setPropertyField(item?.value) };\n if (item === null) {\n newSql.orderByDirection = undefined;\n }\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <>\n <EditorField label=\"Order by\" width={25}>\n <InputGroup>\n <Select\n aria-label=\"Order by\"\n options={columns}\n value={sql.orderBy?.property.name ? toOption(sql.orderBy.property.name) : null}\n isClearable\n menuShouldPortal\n onChange={onOrderByChange}\n />\n\n <Space h={1.5} />\n\n <RadioButtonGroup\n options={sortOrderOptions}\n disabled={!sql?.orderBy?.property.name}\n value={sql.orderByDirection}\n onChange={onSortOrderChange}\n />\n </InputGroup>\n </EditorField>\n <EditorField label=\"Limit\" optional width={25}>\n <Input type=\"number\" min={0} id={uniqueId('limit-')} value={sql.limit || ''} onChange={onLimitChange} />\n </EditorField>\n {showOffset && (\n <EditorField label=\"Offset\" optional width={25}>\n <Input type=\"number\" id={uniqueId('offset-')} value={sql.offset || ''} onChange={onOffsetChange} />\n </EditorField>\n )}\n </>\n );\n}\n","import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\nimport { OrderByRow } from './OrderByRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ntype SQLOrderByRowProps = {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n};\n\nexport function SQLOrderByRow({ fields, query, onQueryChange, db }: SQLOrderByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = [];\n\n if (fields) {\n const options = query.sql?.columns?.map((c, i) => {\n const value = c.name ? `${c.name}(${c.parameters?.map((p) => p.name)})` : c.parameters?.map((p) => p.name);\n return {\n value,\n label: `${i + 1} - ${value}`,\n };\n });\n columnsWithIndices = [\n {\n value: '',\n label: 'Selected columns',\n options,\n expanded: true,\n },\n ...fields,\n ];\n }\n\n return <OrderByRow sql={query.sql!} onSqlChange={onSqlChange} columns={columnsWithIndices} />;\n}\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Button, Select, useStyles2 } from '@grafana/ui';\nimport { EditorField } from '../EditorField';\nimport { type QueryEditorFunctionExpression, QueryEditorExpressionType } from '../expressions';\nimport { type SQLExpression } from '../types';\nimport { createFunctionField } from '../utils/sql.utils';\nimport { EditorStack } from '../EditorStack';\n\ninterface SelectRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n functions?: Array<SelectableValue<string>>;\n}\n\nconst asteriskValue = { label: '*', value: '*' };\n\nexport function SelectRow({ sql, columns, onSqlChange, functions }: SelectRowProps) {\n const styles = useStyles2(getStyles);\n const columnsWithAsterisk = [asteriskValue, ...(columns || [])];\n\n const onColumnChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (column: SelectableValue<string>) => {\n let modifiedItem = { ...item };\n if (!item.parameters?.length) {\n modifiedItem.parameters = [{ type: QueryEditorExpressionType.FunctionParameter, name: column.value } as const];\n } else {\n modifiedItem.parameters = item.parameters.map((p) =>\n p.type === QueryEditorExpressionType.FunctionParameter ? { ...p, name: column.value } : p\n );\n }\n\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? modifiedItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onAggregationChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (aggregation: SelectableValue<string>) => {\n const newItem = {\n ...item,\n name: aggregation?.value,\n };\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? newItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const removeColumn = useCallback(\n (index: number) => () => {\n const clone = [...sql.columns!];\n clone.splice(index, 1);\n const newSql: SQLExpression = {\n ...sql,\n columns: clone,\n };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const addColumn = useCallback(() => {\n const newSql: SQLExpression = { ...sql, columns: [...sql.columns!, createFunctionField()] };\n onSqlChange(newSql);\n }, [onSqlChange, sql]);\n\n return (\n <EditorStack gap={2} alignItems=\"end\" direction=\"column\">\n {sql.columns?.map((item, index) => (\n <div key={index}>\n <EditorStack gap={2} alignItems=\"end\">\n <EditorField label=\"Column\" width={25}>\n <Select\n value={getColumnValue(item)}\n options={columnsWithAsterisk}\n inputId={`select-column-${index}-${uniqueId()}`}\n menuShouldPortal\n allowCustomValue\n onChange={onColumnChange(item, index)}\n />\n </EditorField>\n\n <EditorField label=\"Aggregation\" optional width={25}>\n <Select\n value={item.name ? toOption(item.name) : null}\n inputId={`select-aggregation-${index}-${uniqueId()}`}\n isClearable\n menuShouldPortal\n allowCustomValue\n options={functions}\n onChange={onAggregationChange(item, index)}\n />\n </EditorField>\n <Button\n aria-label=\"Remove\"\n type=\"button\"\n icon=\"trash-alt\"\n variant=\"secondary\"\n size=\"md\"\n onClick={removeColumn(index)}\n />\n </EditorStack>\n </div>\n ))}\n <Button\n type=\"button\"\n onClick={addColumn}\n variant=\"secondary\"\n size=\"md\"\n icon=\"plus\"\n aria-label=\"Add\"\n className={styles.addButton}\n />\n </EditorStack>\n );\n}\n\nconst getStyles = () => {\n return { addButton: css({ alignSelf: 'flex-start' }) };\n};\n\nfunction getColumnValue({ parameters }: QueryEditorFunctionExpression): SelectableValue<string> | null {\n const column = parameters?.find((p) => p.type === QueryEditorExpressionType.FunctionParameter);\n if (column?.name) {\n return toOption(column.name);\n }\n return null;\n}\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { SelectRow } from './SelectRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLSelectRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLSelectRow({ fields, query, onQueryChange, db }: SQLSelectRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n const state = useAsync(async () => {\n const functions = await db.functions();\n return functions.map((f) => toOption(f.name));\n }, [db]);\n\n return <SelectRow columns={fields} sql={query.sql!} functions={state.value} onSqlChange={onSqlChange} />;\n}\n","import React from 'react';\nimport { type List } from 'immutable';\nimport { isString } from 'lodash';\nimport {\n BasicConfig,\n Utils,\n type Config,\n type JsonItem,\n type JsonTree,\n type Operator,\n type Settings,\n type Field,\n type ValueSource,\n type WidgetProps,\n type Widgets,\n type OperatorOptionsI,\n} from '@react-awesome-query-builder/ui';\nimport { dateTime, toOption } from '@grafana/data';\nimport { Button, DateTimePicker, Input, Select } from '@grafana/ui';\n\nconst buttonLabels = {\n add: 'Add',\n remove: 'Remove',\n};\n\nexport const emptyInitValue: JsonItem = {\n id: Utils.uuid(),\n type: 'group' as const,\n children1: [\n {\n id: Utils.uuid(),\n type: 'rule',\n properties: {\n field: null,\n operator: null,\n value: [],\n valueSrc: [],\n },\n },\n ],\n};\n\nexport const emptyInitTree: JsonTree = {\n id: Utils.uuid(),\n type: 'group' as const,\n children1: [\n {\n id: Utils.uuid(),\n type: 'rule',\n properties: {\n field: null,\n operator: null,\n value: [],\n valueSrc: [],\n },\n },\n ],\n};\n\nexport const widgets: Widgets = {\n ...BasicConfig.widgets,\n text: {\n ...BasicConfig.widgets.text,\n factory: function TextInput(props: WidgetProps) {\n return (\n <Input\n value={props?.value || ''}\n placeholder={props?.placeholder}\n onChange={(e) => props?.setValue(e.currentTarget.value)}\n />\n );\n },\n },\n number: {\n ...BasicConfig.widgets.number,\n factory: function NumberInput(props: WidgetProps) {\n return (\n <Input\n value={props?.value}\n placeholder={props?.placeholder}\n type=\"number\"\n onChange={(e) => props?.setValue(Number.parseInt(e.currentTarget.value, 10))}\n />\n );\n },\n },\n datetime: {\n ...BasicConfig.widgets.datetime,\n factory: function DateTimeInput(props: WidgetProps) {\n return (\n <DateTimePicker\n onChange={(e) => {\n props?.setValue(e?.format(BasicConfig.widgets.datetime.valueFormat));\n }}\n date={dateTime(props?.value).utc()}\n />\n );\n },\n },\n};\n\nexport const settings: Settings = {\n ...BasicConfig.settings,\n canRegroup: false,\n maxNesting: 1,\n canReorder: false,\n showNot: false,\n addRuleLabel: buttonLabels.add,\n deleteLabel: buttonLabels.remove,\n renderConjs: function Conjunctions(conjProps) {\n return (\n <Select\n id={conjProps?.id}\n aria-label=\"Conjunction\"\n menuShouldPortal\n options={conjProps?.conjunctionOptions ? Object.keys(conjProps?.conjunctionOptions).map(toOption) : undefined}\n value={conjProps?.selectedConjunction}\n onChange={(val) => conjProps?.setConjunction(val.value!)}\n />\n );\n },\n renderField: function Field(fieldProps) {\n const fields = fieldProps?.config?.fields || {};\n return (\n <Select\n id={fieldProps?.id}\n width={25}\n aria-label=\"Field\"\n menuShouldPortal\n options={fieldProps?.items.map((f) => {\n // @ts-ignore\n const icon = fields[f.key].mainWidgetProps?.customProps?.icon;\n return {\n label: f.label,\n value: f.key,\n icon,\n };\n })}\n value={fieldProps?.selectedKey}\n onChange={(val) => {\n fieldProps?.setField(val.label!);\n }}\n />\n );\n },\n renderButton: function RAQBButton(buttonProps) {\n return (\n <Button\n type=\"button\"\n title={`${buttonProps?.label} filter`}\n onClick={buttonProps?.onClick}\n variant=\"secondary\"\n size=\"md\"\n icon={buttonProps?.label === buttonLabels.add ? 'plus' : 'times'}\n />\n );\n },\n renderOperator: function Operator(operatorProps) {\n return (\n <Select\n options={operatorProps?.items.map((op) => ({ label: op.label, value: op.key }))}\n aria-label=\"Operator\"\n menuShouldPortal\n value={operatorProps?.selectedKey}\n onChange={(val) => {\n operatorProps?.setField(val.value || '');\n }}\n />\n );\n },\n};\n\n// add IN / NOT IN operators to text to support multi-value variables\nconst enum Op {\n IN = 'select_any_in',\n NOT_IN = 'select_not_any_in',\n}\n\nconst customOperators = getCustomOperators(BasicConfig);\nconst textWidget = BasicConfig.types.text.widgets.text;\nconst opers = [...(textWidget.operators || []), Op.IN, Op.NOT_IN];\nconst customTextWidget = {\n ...textWidget,\n operators: opers,\n};\n\nconst customTypes = {\n ...BasicConfig.types,\n text: {\n ...BasicConfig.types.text,\n widgets: {\n ...BasicConfig.types.text.widgets,\n text: customTextWidget,\n },\n },\n};\n\nexport const raqbConfig: Config = {\n ...BasicConfig,\n widgets,\n settings,\n operators: customOperators as typeof BasicConfig.operators,\n types: customTypes,\n};\n\nexport type { Config };\n\nfunction getCustomOperators(config: BasicConfig) {\n const { ...supportedOperators } = config.operators;\n const noop = () => '';\n // IN operator expects array, override IN formatter for multi-value variables\n\n const sqlFormatInOp = supportedOperators[Op.IN].sqlFormatOp || noop;\n const customSqlInFormatter = (\n field: string,\n op: string,\n value: string | List<string>,\n valueSrc: ValueSource,\n valueType: string,\n opDef: Operator,\n operatorOptions: OperatorOptionsI,\n fieldDef: Field\n ) =>\n sqlFormatInOp.call(\n config.ctx,\n field,\n op,\n splitIfString(value),\n valueSrc,\n valueType,\n opDef,\n operatorOptions,\n fieldDef\n );\n // NOT IN operator expects array, override NOT IN formatter for multi-value variables\n const sqlFormatNotInOp = supportedOperators[Op.NOT_IN].sqlFormatOp || noop;\n const customSqlNotInFormatter = (\n field: string,\n op: string,\n value: string | List<string>,\n valueSrc: ValueSource,\n valueType: string,\n opDef: Operator,\n operatorOptions: OperatorOptionsI,\n fieldDef: Field\n ) =>\n sqlFormatNotInOp.call(\n config.ctx,\n field,\n op,\n splitIfString(value),\n valueSrc,\n valueType,\n opDef,\n operatorOptions,\n fieldDef\n );\n\n const customOperators = {\n ...supportedOperators,\n [Op.IN]: {\n ...supportedOperators[Op.IN],\n sqlFormatOp: customSqlInFormatter,\n },\n [Op.NOT_IN]: {\n ...supportedOperators[Op.NOT_IN],\n sqlFormatOp: customSqlNotInFormatter,\n },\n };\n\n return customOperators;\n}\n\n// value: string | List<string> but AQB uses a different version of Immutable\n// eslint-ignore\nfunction splitIfString(value: any) {\n if (isString(value)) {\n return value.split(',');\n }\n return value;\n}\n","import { injectGlobal } from '@emotion/css';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Builder, type Config, type ImmutableTree, Query, Utils } from '@react-awesome-query-builder/ui';\nimport { type SQLExpression } from '../types';\nimport { emptyInitTree, raqbConfig } from './AwesomeQueryBuilder';\n\ninterface SQLBuilderWhereRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n config?: Partial<Config>;\n}\n\nexport function WhereRow({ sql, config, onSqlChange }: SQLBuilderWhereRowProps) {\n const [tree, setTree] = useState<ImmutableTree>();\n const configWithDefaults = useMemo(() => ({ ...raqbConfig, ...config }), [config]);\n\n useEffect(() => {\n // Set the initial tree\n if (!tree) {\n const initTree = Utils.checkTree(Utils.loadTree(sql.whereJsonTree ?? emptyInitTree), configWithDefaults);\n setTree(initTree);\n }\n }, [configWithDefaults, sql.whereJsonTree, tree]);\n\n useEffect(() => {\n if (!sql.whereJsonTree) {\n setTree(Utils.checkTree(Utils.loadTree(emptyInitTree), configWithDefaults));\n }\n }, [configWithDefaults, sql.whereJsonTree]);\n\n const onTreeChange = useCallback(\n (changedTree: ImmutableTree, config: Config) => {\n setTree(changedTree);\n const newSql = {\n ...sql,\n whereJsonTree: Utils.getTree(changedTree),\n whereString: Utils.sqlFormat(changedTree, config),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n if (!tree) {\n return null;\n }\n\n return (\n <Query\n {...configWithDefaults}\n value={tree}\n onChange={onTreeChange}\n renderBuilder={(props) => <Builder {...props} />}\n />\n );\n}\n\nfunction flex(direction: string) {\n return `\n display: flex;\n gap: 8px;\n flex-direction: ${direction};`;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\ninjectGlobal`\n .group--header {\n ${flex('row')}\n }\n\n .group-or-rule {\n ${flex('column')}\n .rule {\n flex-direction: row;\n }\n }\n\n .rule--body {\n ${flex('row')}\n }\n\n .group--children {\n ${flex('column')}\n }\n\n .group--conjunctions:empty {\n display: none;\n }\n`;\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue } from '@grafana/data';\nimport { type Config } from './AwesomeQueryBuilder';\nimport { WhereRow } from './WhereRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB, type SQLExpression, type SQLSelectableValue } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface WhereRowProps {\n query: QueryWithDefaults;\n fields: SelectableValue[];\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLWhereRow({ query, fields, onQueryChange, db }: WhereRowProps) {\n const state = useAsync(async () => {\n return mapFieldsToTypes(fields);\n }, [fields]);\n\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return (\n <WhereRow\n // TODO: fix key that's used to force clean render or SQLWhereRow - otherwise it doesn't render operators correctly\n key={JSON.stringify(state.value)}\n config={{ fields: state.value || {} }}\n sql={query.sql!}\n onSqlChange={(val: SQLExpression) => {\n onSqlChange(val);\n }}\n />\n );\n}\n\n// needed for awesome query builder\nfunction mapFieldsToTypes(columns: SQLSelectableValue[]) {\n const fields: Config['fields'] = {};\n for (const col of columns) {\n fields[col.value] = {\n type: col.raqbFieldType || 'text',\n valueSources: ['value'],\n mainWidgetProps: { customProps: { icon: col.icon } },\n };\n }\n return fields;\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from '../EditorStack';\n\ninterface EditorRowProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRow = ({ children }: EditorRowProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={2}>{children}</EditorStack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.borderRadius(1),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport React, { type ComponentProps } from 'react';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Field, type PopoverContent, useTheme2, ReactUtils, Tooltip, Icon, stylesFactory } from '@grafana/ui';\nimport { Space } from '../Space';\n\ninterface EditorFieldProps extends ComponentProps<typeof Field> {\n label: string;\n children: React.ReactElement;\n width?: number | string;\n optional?: boolean;\n tooltip?: PopoverContent;\n}\n\nexport const EditorField = (props: EditorFieldProps) => {\n const { label, optional, tooltip, children, width, ...fieldProps } = props;\n\n const theme = useTheme2();\n const styles = getStyles(theme, width);\n\n // Null check for backward compatibility\n const childInputId = fieldProps?.htmlFor || ReactUtils?.getChildId(children);\n\n const labelEl = (\n <>\n <label className={styles.label} htmlFor={childInputId}>\n {label}\n {optional && <span className={styles.optional}> - optional</span>}\n {tooltip && (\n <Tooltip placement=\"top\" content={tooltip} theme=\"info\">\n <Icon name=\"info-circle\" size=\"sm\" className={styles.icon} />\n </Tooltip>\n )}\n </label>\n <Space v={0.5} />\n </>\n );\n\n return (\n <div className={styles.root}>\n <Field className={styles.field} label={labelEl} {...fieldProps}>\n {children}\n </Field>\n </div>\n );\n};\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2, width?: number | string) => {\n return {\n root: css({\n minWidth: theme.spacing(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, // 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","import React from 'react';\nimport { EditorStack } from '../EditorStack';\n\ninterface EditorRowsProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRows = ({ children }: EditorRowsProps) => {\n return (\n <EditorStack gap={0.5} direction=\"column\">\n {children}\n </EditorStack>\n );\n};\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type DB, type QueryEditorProps, type QueryRowFilter, type SQLQuery } from '../types';\nimport { QueryToolbox } from '../query-editor-raw/QueryToolbox';\nimport { Preview } from './Preview';\nimport { SQLGroupByRow } from './SQLGroupByRow';\nimport { SQLOrderByRow } from './SQLOrderByRow';\nimport { SQLSelectRow } from './SQLSelectRow';\nimport { SQLWhereRow } from './SQLWhereRow';\nimport { type TimeRange } from '@grafana/data';\nimport { EditorRow } from './EditorRow';\nimport { EditorField } from './EditorField';\nimport { EditorRows } from './EditorRows';\n\ninterface VisualEditorProps extends QueryEditorProps {\n query: SQLQuery;\n db: DB;\n queryRowFilter: QueryRowFilter;\n onChange: (q: SQLQuery) => void;\n onValidate: (isValid: boolean) => void;\n range?: TimeRange;\n}\n\nexport const VisualEditor = ({ query, db, queryRowFilter, onChange, onValidate, range }: VisualEditorProps) => {\n const state = useAsync(async () => {\n const fields = await db.fields(query);\n return fields;\n }, [db, query.dataset, query.table]);\n\n return (\n <>\n <EditorRows>\n <EditorRow>\n <SQLSelectRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n {queryRowFilter.filter && (\n <EditorRow>\n <EditorField label=\"Filter by column value\" optional>\n <SQLWhereRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.group && (\n <EditorRow>\n <EditorField label=\"Group by column\">\n <SQLGroupByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.order && (\n <EditorRow>\n <SQLOrderByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n )}\n {queryRowFilter.preview && query.rawSql && (\n <EditorRow>\n <Preview rawSql={query.rawSql} />\n </EditorRow>\n )}\n </EditorRows>\n <QueryToolbox db={db} query={query} onValidate={onValidate} range={range} />\n </>\n );\n};\n","export const MACRO_NAMES = [\n '$__time',\n '$__timeEpoch',\n '$__timeFilter',\n '$__timeFrom',\n '$__timeTo',\n '$__timeGroup',\n '$__timeGroupAlias',\n '$__unixEpochFilter',\n '$__unixEpochNanoFilter',\n '$__unixEpochNanoFrom',\n '$__unixEpochNanoTo',\n '$__unixEpochGroup',\n '$__unixEpochGroupAlias',\n];\n","import { lastValueFrom, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n type DataFrame,\n DataFrameView,\n type DataSourceInstanceSettings,\n type MetricFindValue,\n type ScopedVars,\n type TimeRange,\n type VariableModel,\n} from '@grafana/data';\nimport {\n type BackendDataSourceResponse,\n DataSourceWithBackend,\n type FetchResponse,\n getBackendSrv,\n getTemplateSrv,\n type TemplateSrv,\n toDataQueryResponse,\n} from '@grafana/runtime';\nimport { type DataQuery } from '@grafana/schema';\n\nimport { MACRO_NAMES } from './constants';\n// import { toTestingStatus } from '@grafana/runtime/utils/queryResponse';\nimport {\n type SQLQuery,\n type SQLOptions,\n type DB,\n type SqlQueryModel,\n type ResponseParser,\n QueryFormat,\n} from '../components/QueryEditor/types';\n\nexport interface SearchFilterOptions {\n searchFilter?: string;\n}\n\nexport interface VariableWithMultiSupport extends VariableWithOptions {\n multi: boolean;\n includeAll: boolean;\n allValue?: string | null;\n}\n\nexport interface VariableWithOptions extends VariableModel {\n current: VariableOption;\n options: VariableOption[];\n query: string;\n}\n\nexport interface VariableOption {\n selected: boolean;\n text: string | string[];\n value: string | string[];\n isNone?: boolean;\n}\n\nexport abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {\n id: number;\n name: string;\n interval: string;\n db: DB;\n dataset?: string;\n annotations = {};\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<SQLOptions>,\n protected readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.id = instanceSettings.id;\n const settingsData = instanceSettings.jsonData || {};\n this.interval = settingsData.timeInterval || '1m';\n this.db = this.getDB();\n }\n\n abstract getDB(dsID?: number): DB;\n\n abstract getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): SqlQueryModel;\n\n abstract getResponseParser(): ResponseParser;\n\n interpolateVariable = (value: string | string[] | number, variable: VariableWithMultiSupport) => {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n const result = this.getQueryModel().quoteLiteral(value);\n return result;\n } else {\n return value;\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value)) {\n const quotedValues = value.map((v) => this.getQueryModel().quoteLiteral(v));\n return quotedValues.join(',');\n }\n\n return value;\n };\n\n interpolateVariablesInQueries(queries: SQLQuery[], scopedVars: ScopedVars): SQLQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n filterQuery(query: SQLQuery): boolean {\n return !query.hide;\n }\n\n applyTemplateVariables(target: SQLQuery, scopedVars: ScopedVars): SQLQuery {\n const queryModel = this.getQueryModel(target, this.templateSrv, scopedVars);\n const rawSql = this.clean(queryModel.interpolate());\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql,\n format: target.format,\n };\n }\n\n clean(value: string) {\n return value.replace(/''/g, \"'\");\n }\n\n async metricFindQuery(query: string, optionalOptions?: MetricFindQueryOptions): Promise<MetricFindValue[]> {\n const rawSql = this.templateSrv.replace(\n query,\n getSearchFilterScopedVar({ query, wildcardChar: '%', options: optionalOptions }),\n this.interpolateVariable\n );\n\n const interpolatedQuery: SQLQuery = {\n refId: 'tempvar',\n datasource: this.getRef(),\n rawSql,\n format: QueryFormat.Table,\n };\n\n const response = await this.runMetaQuery(interpolatedQuery, optionalOptions);\n return this.getResponseParser().transformMetricFindResponse(response);\n }\n\n async runSql<T extends object>(query: string, options?: RunSQLOptions) {\n const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options?.refId }, options);\n return new DataFrameView<T>(frame);\n }\n\n private runMetaQuery(request: Partial<SQLQuery>, options?: MetricFindQueryOptions): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const queries: DataQuery[] = [{ ...request, datasource: request.datasource || this.getRef(), refId }];\n\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: options?.range?.from.valueOf().toString(),\n to: options?.range?.to.valueOf().toString(),\n queries,\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0];\n })\n )\n );\n }\n\n testDatasource(): Promise<{ status: string; message: string }> {\n return lastValueFrom(\n getBackendSrv()\n .fetch({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: '5m',\n to: 'now',\n queries: [\n {\n refId: 'A',\n intervalMs: 1,\n maxDataPoints: 1,\n datasource: this.getRef(),\n datasourceId: this.id,\n rawSql: 'SELECT 1',\n format: 'table',\n },\n ],\n },\n })\n .pipe(\n map(() => ({ status: 'success', message: 'Database Connection OK' })),\n catchError((err) => {\n // return of(toTestingStatus(err));\n return of(err);\n })\n )\n );\n }\n\n targetContainsTemplate(target: SQLQuery) {\n let queryWithoutMacros = target.rawSql;\n MACRO_NAMES.forEach((value) => {\n queryWithoutMacros = queryWithoutMacros?.replace(value, '') || '';\n });\n return this.templateSrv.containsTemplate(queryWithoutMacros);\n }\n}\n\ninterface RunSQLOptions extends MetricFindQueryOptions {\n refId?: string;\n}\n\ninterface MetricFindQueryOptions extends SearchFilterOptions {\n range?: TimeRange;\n}\n\nexport const SEARCH_FILTER_VARIABLE = '__searchFilter';\n\nexport const containsSearchFilter = (query: string | unknown): boolean =>\n query && typeof query === 'string' ? query.indexOf(SEARCH_FILTER_VARIABLE) !== -1 : false;\n\nexport const getSearchFilterScopedVar = (args: {\n query: string;\n wildcardChar: string;\n options?: SearchFilterOptions;\n}): ScopedVars => {\n const { query, wildcardChar } = args;\n if (!containsSearchFilter(query)) {\n return {};\n }\n\n let { options } = args;\n\n options = options || { searchFilter: '' };\n const value = options.searchFilter ? `${options.searchFilter}${wildcardChar}` : `${wildcardChar}`;\n\n return {\n __searchFilter: {\n value,\n text: '',\n },\n };\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type QueryEditorProps } from '@grafana/data';\n\nimport { applyQueryDefaults } from './defaults';\nimport { type SQLQuery, type QueryRowFilter, type SQLOptions, EditorMode } from './types';\nimport { haveColumns } from './utils/sql.utils';\n\nimport { QueryHeader } from './QueryHeader';\nimport { RawEditor } from './query-editor-raw/RawEditor';\nimport { VisualEditor } from './visual-query-builder/VisualEditor';\n\nimport { type SqlDatasource } from '../../datasource/SqlDatasource';\nimport { Space } from './Space';\n\ninterface Props extends QueryEditorProps<SqlDatasource, SQLQuery, SQLOptions> {}\n\nexport function SqlQueryEditor({ datasource, query, onChange, onRunQuery, range }: Props) {\n const [isQueryRunnable, setIsQueryRunnable] = useState(true);\n const db = datasource.getDB();\n const defaultDataset = datasource.dataset;\n\n const { loading, error } = useAsync(async () => {\n return () => {\n if (datasource.getDB(datasource.id).init !== undefined) {\n datasource.getDB(datasource.id).init!();\n }\n };\n }, [datasource]);\n\n const queryWithDefaults = applyQueryDefaults(query);\n const [queryRowFilter, setQueryRowFilter] = useState<QueryRowFilter>({\n filter: !!queryWithDefaults.sql?.whereString,\n group: !!queryWithDefaults.sql?.groupBy?.[0]?.property.name,\n order: !!queryWithDefaults.sql?.orderBy?.property.name,\n preview: true,\n });\n const [queryToValidate, setQueryToValidate] = useState(queryWithDefaults);\n\n useEffect(() => {\n return () => {\n if (datasource.getDB(datasource.id).dispose !== undefined) {\n datasource.getDB(datasource.id).dispose!();\n }\n };\n }, [datasource]);\n\n const processQuery = useCallback(\n (q: SQLQuery) => {\n if (isQueryValid(q) && onRunQuery) {\n onRunQuery();\n }\n },\n [onRunQuery]\n );\n\n const onQueryChange = (q: SQLQuery, process = true) => {\n setQueryToValidate(q);\n onChange(q);\n\n if (haveColumns(q.sql?.columns) && q.sql?.columns.some((c) => c.name) && !queryRowFilter.group) {\n setQueryRowFilter({ ...queryRowFilter, group: true });\n }\n\n if (process) {\n processQuery(q);\n }\n };\n\n const onQueryHeaderChange = (q: SQLQuery) => {\n setQueryToValidate(q);\n onChange(q);\n };\n\n if (loading || error) {\n return null;\n }\n\n const catalogsEnabled = db.disableCatalogs === false;\n const datasetsEnabled = !db.disableDatasets;\n\n // When catalogs are enabled, datasets MUST be enabled (they act as schema selector)\n const effectiveEnableDatasets = catalogsEnabled ? true : datasetsEnabled;\n\n return (\n <>\n <QueryHeader\n db={db}\n defaultDataset={defaultDataset || ''}\n enableDatasets={effectiveEnableDatasets}\n enableCatalogs={catalogsEnabled}\n onChange={onQueryHeaderChange}\n onRunQuery={onRunQuery}\n onQueryRowChange={setQueryRowFilter}\n queryRowFilter={queryRowFilter}\n query={queryWithDefaults}\n isQueryRunnable={isQueryRunnable}\n labels={datasource.getDB(datasource.id)?.labels}\n />\n\n <Space v={0.5} />\n\n {queryWithDefaults.editorMode !== EditorMode.Code && (\n <VisualEditor\n db={db}\n query={queryWithDefaults}\n onChange={(q: SQLQuery) => onQueryChange(q, false)}\n queryRowFilter={queryRowFilter}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n\n {queryWithDefaults.editorMode === EditorMode.Code && (\n <RawEditor\n db={db}\n query={queryWithDefaults}\n queryToValidate={queryToValidate}\n onChange={onQueryChange}\n onRunQuery={onRunQuery}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n </>\n );\n}\n\nconst isQueryValid = (q: SQLQuery) => {\n return Boolean(q.rawSql);\n};\n","import React from 'react';\nimport { type InlineLabel as OriginalInlineLabel, InlineField, InlineSwitch } from '@grafana/ui';\nimport { config } from '@grafana/runtime';\nimport { type DataSourceSettings } from '@grafana/data';\n\ntype Props = Omit<React.ComponentProps<typeof OriginalInlineLabel>, 'children' | 'onChange'> & {\n dataSourceConfig: DataSourceSettings<any, any>;\n onChange: (config: DataSourceSettings<any, any>) => void;\n labelWidth: number;\n};\n\nexport const SecureSocksProxyToggle = ({ labelWidth = 10, ...props }: Props) => {\n const { dataSourceConfig, onChange } = props;\n const handleSwitchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange({\n ...dataSourceConfig,\n jsonData: {\n ...dataSourceConfig.jsonData,\n enableSecureSocksProxy: e.target.checked,\n },\n });\n };\n\n return (\n (config as any).secureSocksDSProxyEnabled && (\n <div>\n <div className=\"gf-form\">\n <div className=\"gf-form gf-form-inline\">\n <InlineField\n htmlFor=\"secureSocksProxyEnabled\"\n label=\"Secure Socks Proxy Enabled\"\n labelWidth={labelWidth}\n tooltip={\n <>\n Proxy the datasource connection through the secure socks proxy to a different network. To learn more\n about configuring the datasource connection proxy,{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/proxy/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n click here.\n </a>\n </>\n }\n >\n <InlineSwitch\n id=\"secureSocksProxyEnabled\"\n value={dataSourceConfig.jsonData.enableSecureSocksProxy}\n onChange={handleSwitchChange}\n />\n </InlineField>\n </div>\n </div>\n </div>\n )\n );\n};\n","import React from 'react';\nimport { cx, css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\n\ntype Props = {\n dataSourceName: string;\n docsLink: string;\n hasRequiredFields?: boolean;\n className?: string;\n};\n\nexport const DataSourceDescription = ({ dataSourceName, docsLink, hasRequiredFields = true, className }: Props) => {\n const theme = useTheme2();\n\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\n return (\n <div className={cx(styles.container, className)}>\n <p className={styles.text}>\n Before you can use the {dataSourceName} data source, you must configure it below or in the config file. For\n detailed instructions,{' '}\n <a href={docsLink} target=\"_blank\" rel=\"noreferrer\">\n view the documentation\n </a>\n .\n </p>\n {hasRequiredFields && (\n <p className={styles.text}>\n <i>Fields marked with * are required</i>\n </p>\n )}\n </div>\n );\n};\n","import React, { useState, type ReactNode } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, IconButton, type IconName } from '@grafana/ui';\n\nexport type Props = {\n title: string;\n description?: ReactNode;\n isCollapsible?: boolean;\n isInitiallyOpen?: boolean;\n kind?: 'section' | 'sub-section';\n className?: string;\n};\n\nexport const GenericConfigSection = ({\n children,\n title,\n description,\n isCollapsible = false,\n isInitiallyOpen = true,\n kind = 'section',\n className,\n}: React.PropsWithChildren<Props>) => {\n const { colors, typography, spacing } = useTheme2();\n const [isOpen, setIsOpen] = useState(isCollapsible ? isInitiallyOpen : true);\n const iconName: IconName = isOpen ? 'angle-up' : 'angle-down';\n const isSubSection = kind === 'sub-section';\n const collapsibleButtonAriaLabel = `${isOpen ? 'Collapse' : 'Expand'} section ${title}`;\n\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\n return (\n <div className={className}>\n <div className={styles.header}>\n {kind === 'section' ? <h3 className={styles.title}>{title}</h3> : <h6 className={styles.subtitle}>{title}</h6>}\n {isCollapsible && (\n <IconButton\n name={iconName}\n onClick={() => setIsOpen(!isOpen)}\n type=\"button\"\n size=\"xl\"\n aria-label={collapsibleButtonAriaLabel}\n />\n )}\n </div>\n {description && <p className={styles.descriptionText}>{description}</p>}\n {isOpen && <div className={styles.content}>{children}</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { GenericConfigSection, type Props as GenericConfigSectionProps } from './GenericConfigSection';\n\ntype Props = Omit<GenericConfigSectionProps, 'kind'>;\n\nexport const ConfigSection = ({ children, ...props }: React.PropsWithChildren<Props>) => {\n return (\n <GenericConfigSection {...props} kind=\"section\">\n {children}\n </GenericConfigSection>\n );\n};\n","import React from 'react';\nimport { GenericConfigSection, type Props as GenericConfigSectionProps } from './GenericConfigSection';\n\ntype Props = Omit<GenericConfigSectionProps, 'kind'>;\n\nexport const ConfigSubSection = ({ children, ...props }: React.PropsWithChildren<Props>) => {\n return (\n <GenericConfigSection {...props} kind=\"sub-section\">\n {children}\n </GenericConfigSection>\n );\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ntype Props = {\n description: string;\n suffix: string;\n feature: string;\n};\n\nexport function ConfigDescriptionLink(props: Props) {\n const { description, suffix, feature } = props;\n const text = `Learn more about ${feature}`;\n const styles = useStyles2(getStyles);\n\n return (\n <span className={styles.container}>\n {description}\n <a\n aria-label={text}\n href={`https://grafana.com/docs/grafana/next/datasources/${suffix}`}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n {text}\n </a>\n </span>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: 'underline',\n marginLeft: '5px',\n '&:hover': {\n textDecoration: 'none',\n },\n }),\n }),\n };\n};\n","import { type ReactElement } from 'react';\n\nexport enum AuthMethod {\n NoAuth = 'NoAuth',\n BasicAuth = 'BasicAuth',\n OAuthForward = 'OAuthForward',\n CrossSiteCredentials = 'CrossSiteCredentials',\n}\n\nexport interface AuthMethodSelectOption {\n label?: string;\n description?: string;\n}\n\nexport type CustomMethodId = `custom-${string}`;\n\nexport type CustomMethod = {\n id: CustomMethodId;\n label: string;\n description: string;\n component: ReactElement;\n};\n\nexport type Header = {\n name: string;\n configured: boolean;\n};\n\nexport type HeaderWithValue = Header & { value: string };\n\nexport type LocalHeader = HeaderWithValue & { id: string };\n","import { css } from '@emotion/css';\n\nexport const useCommonStyles = () => {\n return {\n inlineFieldNoMarginRight: css({\n marginRight: 0,\n }),\n // This is dirty hack to make configured secret input grow\n inlineFieldWithSecret: css({\n '[class$=\"layoutChildrenWrapper\"]:first-child': {\n flexGrow: 1,\n },\n }),\n };\n};\n","import React from 'react';\nimport { cx, css } from '@emotion/css';\nimport { InlineField, Input, type PopoverContent, SecretInput } from '@grafana/ui';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n user?: string;\n passwordConfigured: boolean;\n userLabel?: string;\n userTooltip?: PopoverContent;\n userPlaceholder?: string;\n passwordLabel?: string;\n passwordTooltip?: PopoverContent;\n passwordPlaceholder?: string;\n onUserChange: (user: string) => void;\n onPasswordChange: (password: string) => void;\n onPasswordReset: () => void;\n readOnly: boolean;\n};\n\nexport const BasicAuth = ({\n user,\n passwordConfigured,\n userLabel = 'User',\n userTooltip = 'The username of the data source account',\n userPlaceholder = 'User',\n passwordLabel = 'Password',\n passwordTooltip = 'The password of the data source account',\n passwordPlaceholder = 'Password',\n onUserChange,\n onPasswordChange,\n onPasswordReset,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n const styles = {\n lastInlineField: css({\n marginBottom: 0,\n }),\n };\n return (\n <>\n <InlineField\n className={commonStyles.inlineFieldNoMarginRight}\n label={userLabel}\n labelWidth={24}\n tooltip={userTooltip}\n required\n htmlFor=\"basic-auth-user-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <Input\n id=\"basic-auth-user-input\"\n placeholder={userPlaceholder}\n value={user}\n onChange={(e) => onUserChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n className={cx(\n commonStyles.inlineFieldNoMarginRight,\n commonStyles.inlineFieldWithSecret,\n styles.lastInlineField\n )}\n label={passwordLabel}\n labelWidth={24}\n tooltip={passwordTooltip}\n required\n htmlFor=\"basic-auth-password-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <SecretInput\n id=\"basic-auth-password-input\"\n isConfigured={passwordConfigured}\n onReset={readOnly ? () => {} : onPasswordReset}\n placeholder={passwordPlaceholder}\n onChange={(e) => onPasswordChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n </>\n );\n};\n","import React, { type ReactElement, useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Select, Field } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { BasicAuth, type Props as BasicAuthProps } from './BasicAuth';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport { AuthMethod, type CustomMethod, type CustomMethodId, type AuthMethodSelectOption } from '../types';\n\nconst defaultOptions: Record<AuthMethod, SelectableValue<AuthMethod>> = {\n [AuthMethod.BasicAuth]: {\n label: 'Basic authentication',\n value: AuthMethod.BasicAuth,\n description: 'Authenticate with your data source username and password',\n },\n [AuthMethod.CrossSiteCredentials]: {\n label: 'Enable cross-site access control requests',\n value: AuthMethod.CrossSiteCredentials,\n description:\n 'Allow cross-site Access-Control requests with your existing credentials and cookies. This enables the server to authenticate the user and perform authorized requests on their behalf on other domains.',\n },\n [AuthMethod.OAuthForward]: {\n label: 'Forward OAuth Identity',\n value: AuthMethod.OAuthForward,\n description:\n 'Forward the OAuth access token (and if available: the OIDC ID token) of the user querying to the data source',\n },\n [AuthMethod.NoAuth]: {\n label: 'No Authentication',\n value: AuthMethod.NoAuth,\n description: 'Data source is available without authentication',\n },\n};\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const AuthMethodSettings = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods: visibleMethodsFromProps,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n readOnly,\n}: Props) => {\n const [authMethodChanged, setAuthMethodChanged] = useState(false);\n const { colors, spacing } = useTheme2();\n const visibleMethods: Array<AuthMethod | CustomMethodId> = useMemo(\n () =>\n visibleMethodsFromProps ?? [\n AuthMethod.BasicAuth,\n AuthMethod.OAuthForward,\n AuthMethod.NoAuth,\n ...(customMethods?.map((m) => m.id) ?? []),\n ],\n [customMethods, visibleMethodsFromProps]\n );\n const hasSelect = visibleMethods.length > 1;\n\n const preparedOptions = useMemo(() => {\n const customOptions =\n customMethods?.reduce<Record<CustomMethodId, SelectableValue<CustomMethodId>>>((acc, method) => {\n acc[method.id] = {\n label: method.label,\n value: method.id,\n description: method.description,\n };\n return acc;\n }, {}) ?? {};\n\n const preparedDefaultOptions = {} as Record<AuthMethod, SelectableValue<AuthMethod>>;\n let k: keyof typeof AuthMethod;\n for (k in defaultOptions) {\n preparedDefaultOptions[k] = {\n ...defaultOptions[k],\n ...defaultOptionsOverrides?.[k],\n };\n }\n\n const allOptions: Record<AuthMethod | CustomMethodId, SelectableValue<AuthMethod | CustomMethodId>> = {\n ...customOptions,\n ...preparedDefaultOptions,\n };\n\n return visibleMethods\n .filter((method) => Boolean(allOptions[method]))\n .map((method) => {\n const option = allOptions[method];\n if (method === mostCommonMethod && hasSelect) {\n return {\n ...option,\n label: `${option.label} (most common)`,\n };\n }\n return option;\n });\n }, [visibleMethods, customMethods, defaultOptionsOverrides, mostCommonMethod, hasSelect]);\n\n let selected = selectedMethod;\n if (!hasSelect) {\n selected = visibleMethods[0];\n } else if (selectedMethod === AuthMethod.NoAuth && mostCommonMethod && !authMethodChanged) {\n selected = mostCommonMethod;\n }\n\n let AuthFieldsComponent: ReactElement | null = null;\n if (selected === AuthMethod.BasicAuth && basicAuth) {\n AuthFieldsComponent = <BasicAuth {...basicAuth} readOnly={readOnly} />;\n } else if (selected.startsWith('custom-')) {\n AuthFieldsComponent = customMethods?.find((m) => m.id === selected)?.component ?? null;\n }\n\n const title = hasSelect ? 'Authentication methods' : (preparedOptions[0].label ?? '');\n\n const description = hasSelect\n ? 'Choose an authentication method to access the data source'\n : (preparedOptions[0].description ?? '');\n\n const styles = {\n authMethods: css({\n marginTop: spacing(2.5),\n ...(hasSelect && {\n padding: spacing(2),\n border: `1px solid ${colors.border.weak}`,\n }),\n }),\n selectedMethodFields: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <ConfigSubSection title={title} description={description}>\n <div className={styles.authMethods}>\n {hasSelect && (\n <Field label=\"Authentication method\">\n <Select\n inputId=\"auth-method-select\"\n options={preparedOptions}\n value={selected}\n onChange={(option) => {\n setAuthMethodChanged(true);\n onAuthMethodSelect(option.value!);\n }}\n disabled={readOnly}\n />\n </Field>\n )}\n {AuthFieldsComponent && <div className={styles.selectedMethodFields}>{AuthFieldsComponent}</div>}\n </div>\n </ConfigSubSection>\n );\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { Checkbox, Tooltip, Icon, useTheme2 } from '@grafana/ui';\n\nexport type Props = {\n enabled: boolean;\n label: string;\n tooltipText: string;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const TLSSettingsSection = ({\n children,\n enabled,\n label,\n tooltipText,\n onToggle,\n readOnly,\n}: React.PropsWithChildren<Props>) => {\n const { colors, spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: 3,\n }),\n checkboxContainer: css({\n display: 'flex',\n alignItems: 'center',\n }),\n infoIcon: css({\n marginTop: -2,\n marginLeft: 5,\n color: colors.text.secondary,\n }),\n content: css({\n margin: spacing(1, 0, 2, 3),\n }),\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.checkboxContainer}>\n <Checkbox value={enabled} label={label} onChange={() => onToggle(!enabled)} disabled={readOnly} />\n <Tooltip placement=\"top\" content={tooltipText} interactive>\n <Icon name=\"info-circle\" className={styles.infoIcon} size=\"sm\" />\n </Tooltip>\n </div>\n {enabled && children && <div className={styles.content}>{children}</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n certificateConfigured: boolean;\n onCertificateChange: (certificate: string) => void;\n onCertificateReset: () => void;\n tooltips?: {\n certificateLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const SelfSignedCertificate = ({\n enabled,\n certificateConfigured,\n onToggle,\n onCertificateChange,\n onCertificateReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Add self-signed certificate\"\n tooltipText=\"Add your own Certificate Authority (CA) certificate on top of one generated by the certificate authorities for additional security measures\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"CA Certificate\"\n labelWidth={24}\n tooltip={tooltips?.certificateLabel ?? 'Your self-signed certificate'}\n required\n htmlFor=\"self-signed-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"self-signed-certificate-input\"\n isConfigured={certificateConfigured}\n onChange={(e) => onCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n","import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, Input, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n serverName: string;\n clientCertificateConfigured: boolean;\n clientKeyConfigured: boolean;\n onServerNameChange: (serverName: string) => void;\n onClientCertificateChange: (clientCertificate: string) => void;\n onClientKeyChange: (clientKey: string) => void;\n onClientCertificateReset: () => void;\n onClientKeyReset: () => void;\n tooltips?: {\n serverNameLabel?: string;\n certificateLabel?: string;\n keyLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const TLSClientAuth = ({\n enabled,\n serverName,\n clientCertificateConfigured,\n clientKeyConfigured,\n onToggle,\n onServerNameChange,\n onClientCertificateChange,\n onClientKeyChange,\n onClientCertificateReset,\n onClientKeyReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"TLS Client Authentication\"\n tooltipText=\"Validate using TLS client authentication, in which the server authenticates the client\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"ServerName\"\n labelWidth={24}\n tooltip={tooltips?.serverNameLabel ?? 'A Servername is used to verify the hostname on the returned certificate'}\n required\n htmlFor=\"client-auth-servername-input\"\n interactive\n grow\n className={commonStyles.inlineFieldNoMarginRight}\n disabled={readOnly}\n >\n <Input\n id=\"client-auth-servername-input\"\n placeholder=\"domain.example.com\"\n value={serverName}\n onChange={(e) => onServerNameChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Certificate\"\n labelWidth={24}\n tooltip={\n tooltips?.certificateLabel ??\n 'The client certificate can be generated from a Certificate Authority or be self-signed'\n }\n required\n htmlFor=\"client-auth-client-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-certificate-input\"\n isConfigured={clientCertificateConfigured}\n onChange={(e) => onClientCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Key\"\n labelWidth={24}\n tooltip={tooltips?.keyLabel ?? 'The client key can be generated from a Certificate Authority or be self-signed'}\n required\n htmlFor=\"client-auth-client-key-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-key-input\"\n isConfigured={clientKeyConfigured}\n onChange={(e) => onClientKeyChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientKeyReset}\n placeholder={`Begins with --- RSA PRIVATE KEY CERTIFICATE ---`}\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n","import React from 'react';\nimport { TLSSettingsSection } from './TLSSettingsSection';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const SkipTLSVerification = ({ enabled, onToggle, readOnly }: Props) => {\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Skip TLS certificate validation\"\n tooltipText=\"Skipping TLS certificate validation is not recommended unless absolutely necessary or for testing\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n />\n );\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { SelfSignedCertificate, type Props as SelfSignedCertificateProps } from './SelfSignedCertificate';\nimport { TLSClientAuth as TLSClientAuthComponent, type Props as TLSClientAuthProps } from './TLSClientAuth';\nimport { SkipTLSVerification, type Props as SkipTLSVerificationProps } from './SkipTLSVerification';\nimport { ConfigSubSection } from '../../ConfigSection';\n\nexport type Props = {\n selfSignedCertificate: Omit<SelfSignedCertificateProps, 'readOnly'>;\n TLSClientAuth: Omit<TLSClientAuthProps, 'readOnly'>;\n skipTLSVerification: Omit<SkipTLSVerificationProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const TLSSettings = ({ selfSignedCertificate, TLSClientAuth, skipTLSVerification, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n };\n\n return (\n <ConfigSubSection\n className={styles.container}\n title=\"TLS settings\"\n description=\"Additional security measures that can be applied on top of authentication\"\n >\n <SelfSignedCertificate {...selfSignedCertificate} readOnly={readOnly} />\n <TLSClientAuthComponent {...TLSClientAuth} readOnly={readOnly} />\n <SkipTLSVerification {...skipTLSVerification} readOnly={readOnly} />\n </ConfigSubSection>\n );\n};\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineFieldRow, InlineField, Input, IconButton, useTheme2, SecretInput } from '@grafana/ui';\nimport type { LocalHeader } from '../types';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n header: LocalHeader;\n onChange: (header: LocalHeader) => void;\n onBlur: () => void;\n onDelete: () => void;\n readOnly: boolean;\n};\n\nexport const CustomHeader = ({ header, onChange, onBlur, onDelete, readOnly }: Props) => {\n const { spacing } = useTheme2();\n const commonStyles = useCommonStyles();\n const styles = {\n container: css({\n alignItems: 'center',\n }),\n input: css({\n minWidth: '100%',\n }),\n headerNameField: css({\n width: '40%',\n marginRight: 0,\n paddingRight: spacing(1),\n }),\n headerValueField: css({\n width: '45%',\n marginRight: 0,\n }),\n removeHeaderBtn: css({\n margin: `0 0 3px 10px`,\n }),\n };\n\n return (\n <>\n <InlineFieldRow className={styles.container}>\n <InlineField\n label=\"Header\"\n labelWidth={9}\n grow\n className={styles.headerNameField}\n htmlFor={`custom-header-${header.id}-name-input`}\n disabled={readOnly}\n >\n <Input\n id={`custom-header-${header.id}-name-input`}\n placeholder=\"X-Custom-Header\"\n value={header.name}\n width={12}\n onChange={(e) => onChange({ ...header, name: e.currentTarget.value })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <InlineField\n label=\"Value\"\n labelWidth={9}\n grow\n className={cx(commonStyles.inlineFieldWithSecret, styles.headerValueField)}\n htmlFor={`custom-header-${header.id}-value-input`}\n disabled={readOnly}\n >\n <SecretInput\n id={`custom-header-${header.id}-value-input`}\n isConfigured={header.configured}\n placeholder=\"Header value\"\n value={header.value}\n width={12}\n onChange={(e) => onChange({ ...header, value: e.currentTarget.value })}\n onReset={readOnly ? () => {} : () => onChange({ ...header, configured: false, value: '' })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <IconButton\n name=\"trash-alt\"\n tooltip=\"Remove header\"\n tooltipPlacement=\"top\"\n className={styles.removeHeaderBtn}\n onClick={onDelete}\n type=\"button\"\n disabled={readOnly}\n />\n </InlineFieldRow>\n </>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { css } from '@emotion/css';\nimport { Button, useTheme2 } from '@grafana/ui';\nimport { CustomHeader } from './CustomHeader';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport type { Header, HeaderWithValue, LocalHeader } from '../types';\n\nexport type Props = {\n headers: Header[];\n onChange: (headers: HeaderWithValue[]) => void;\n readOnly: boolean;\n};\n\nexport const CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const [headers, setHeaders] = useState<LocalHeader[]>(\n headersFromProps.map((header) => ({\n ...header,\n id: uniqueId(),\n value: '',\n }))\n );\n\n useEffect(() => {\n setHeaders((headers) => {\n let changed = false;\n const newHeaders = headers.map<LocalHeader>((header) => {\n const configured = headersFromProps.find((h) => h.name === header.name)?.configured;\n if (typeof configured !== 'undefined' && header.configured !== configured) {\n changed = true;\n return { ...header, configured };\n }\n return header;\n });\n\n if (changed) {\n return newHeaders;\n }\n\n return headers;\n });\n }, [headersFromProps]);\n\n const onHeaderAdd = () => {\n setHeaders([...headers, { id: uniqueId(), name: '', value: '', configured: false }]);\n };\n\n const onHeaderChange = (id: string, header: LocalHeader) => {\n setHeaders(headers.map((h) => (h.id === id ? { ...header } : h)));\n };\n\n const onHeaderDelete = (id: string) => {\n const index = headers.findIndex((h) => h.id === id);\n if (index === -1) {\n return;\n }\n const newHeaders = [...headers];\n newHeaders.splice(index, 1);\n setHeaders(newHeaders);\n onChange(\n newHeaders.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const onBlur = () => {\n onChange(\n headers.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n addHeaderButton: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSubSection\n title=\"HTTP headers\"\n description=\"Pass along additional context and metadata about the request/response\"\n isCollapsible\n isInitiallyOpen={headers.length > 0}\n >\n <div>\n {headers.map((header) => (\n <CustomHeader\n key={header.id}\n header={header}\n onChange={(header) => onHeaderChange(header.id, header)}\n onDelete={() => onHeaderDelete(header.id)}\n onBlur={onBlur}\n readOnly={readOnly}\n />\n ))}\n </div>\n <div className={styles.addHeaderButton}>\n <Button icon=\"plus\" variant=\"secondary\" fill=\"outline\" onClick={onHeaderAdd} disabled={readOnly}>\n {headers.length === 0 ? 'Add header' : 'Add another header'}\n </Button>\n </div>\n </ConfigSubSection>\n </div>\n );\n};\n\nfunction uniqueId(): string {\n return Math.random().toString(16).slice(2);\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type AuthMethod, type AuthMethodSelectOption, type CustomMethod, type CustomMethodId } from './types';\nimport { AuthMethodSettings } from './auth-method/AuthMethodSettings';\nimport { TLSSettings, type Props as TLSSettingsProps } from './tls/TLSSettings';\nimport { type Props as BasicAuthProps } from './auth-method/BasicAuth';\nimport { CustomHeaders, type Props as CustomHeadersProps } from './custom-headers/CustomHeaders';\nimport { ConfigSection } from '../ConfigSection';\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n TLS?: Omit<TLSSettingsProps, 'readOnly'>;\n customHeaders?: Omit<CustomHeadersProps, 'readOnly'>;\n readOnly?: boolean;\n};\n\nexport const Auth = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n TLS,\n customHeaders,\n readOnly = false,\n}: Props) => {\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSection title=\"Authentication\">\n <AuthMethodSettings\n selectedMethod={selectedMethod}\n mostCommonMethod={mostCommonMethod}\n customMethods={customMethods}\n visibleMethods={visibleMethods}\n defaultOptionsOverrides={defaultOptionsOverrides}\n onAuthMethodSelect={onAuthMethodSelect}\n basicAuth={basicAuth}\n readOnly={readOnly}\n />\n {TLS && <TLSSettings {...TLS} readOnly={readOnly} />}\n {customHeaders && <CustomHeaders {...customHeaders} readOnly={readOnly} />}\n </ConfigSection>\n </div>\n );\n};\n","import { type Props as AuthProps } from './Auth';\nimport { AuthMethod, type Header, type CustomMethodId } from './types';\nimport { type Config, type OnChangeHandler } from '../types';\n\nconst headerNamePrefix = 'httpHeaderName';\nconst headerValuePrefix = 'httpHeaderValue';\n\nexport function convertLegacyAuthProps<C extends Config = Config>({\n config,\n onChange,\n}: {\n config: C;\n onChange: OnChangeHandler<C>;\n}): AuthProps {\n const props: AuthProps = {\n selectedMethod: getSelectedMethod<C>(config),\n onAuthMethodSelect: getOnAuthMethodSelectHandler<C>(config, onChange),\n basicAuth: getBasicAuthProps<C>(config, onChange),\n TLS: getTLSProps<C>(config, onChange),\n customHeaders: getCustomHeaders<C>(config, onChange),\n readOnly: config.readOnly,\n };\n\n return props;\n}\n\nexport function getSelectedMethod<C extends Config = Config>(config: C): AuthMethod {\n if (config.basicAuth) {\n return AuthMethod.BasicAuth;\n }\n if (config.withCredentials) {\n return AuthMethod.CrossSiteCredentials;\n }\n if (config.jsonData.oauthPassThru) {\n return AuthMethod.OAuthForward;\n }\n return AuthMethod.NoAuth;\n}\n\nexport function getOnAuthMethodSelectHandler<C extends Config = Config>(\n config: C,\n onChange: OnChangeHandler<C>\n): (method: AuthMethod | CustomMethodId) => void {\n return (method: AuthMethod | CustomMethodId) => {\n onChange({\n ...config,\n basicAuth: method === AuthMethod.BasicAuth,\n withCredentials: method === AuthMethod.CrossSiteCredentials,\n jsonData: {\n ...config.jsonData,\n oauthPassThru: method === AuthMethod.OAuthForward,\n },\n });\n };\n}\n\nexport function getBasicAuthProps<C extends Config = Config>(\n config: C,\n onChange: OnChangeHandler<C>\n): AuthProps['basicAuth'] {\n return {\n user: config.basicAuthUser,\n passwordConfigured: config.secureJsonFields.basicAuthPassword,\n onUserChange: (user: string) => onChange({ ...config, basicAuthUser: user }),\n onPasswordChange: (password: string) =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n basicAuthPassword: password,\n },\n }),\n onPasswordReset: () =>\n onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, basicAuthPassword: '' },\n secureJsonFields: {\n ...config.secureJsonFields,\n basicAuthPassword: false,\n },\n }),\n };\n}\n\nexport function getTLSProps<C extends Config = Config>(config: C, onChange: OnChangeHandler<C>): AuthProps['TLS'] {\n return {\n selfSignedCertificate: {\n enabled: Boolean(config.jsonData.tlsAuthWithCACert),\n certificateConfigured: !!config.secureJsonFields?.tlsCACert,\n onToggle: (enabled) =>\n enabled\n ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled },\n })\n : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled },\n secureJsonData: { ...config.secureJsonData, tlsCACert: '' },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false },\n }),\n onCertificateChange: (certificate) =>\n onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: certificate },\n }),\n onCertificateReset: () =>\n onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: '' },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false },\n }),\n },\n TLSClientAuth: {\n enabled: config.jsonData.tlsAuth,\n serverName: config.jsonData.serverName,\n clientCertificateConfigured: !!config.secureJsonFields?.tlsClientCert,\n clientKeyConfigured: !!config.secureJsonFields?.tlsClientKey,\n onToggle: (enabled) =>\n enabled\n ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled },\n })\n : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled, serverName: '' },\n secureJsonData: { ...config.secureJsonData, tlsClientCert: '', tlsClientKey: '' },\n secureJsonFields: { ...config.secureJsonFields, tlsClientCert: false, tlsClientKey: false },\n }),\n onServerNameChange: (serverName) =>\n onChange({\n ...config,\n jsonData: { ...config.jsonData, serverName },\n }),\n onClientCertificateChange: (clientCertificate) =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: clientCertificate,\n },\n }),\n onClientCertificateReset: () =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: '',\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientCert: false,\n },\n }),\n onClientKeyChange: (clientKey) =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: clientKey,\n },\n }),\n onClientKeyReset: () =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: '',\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientKey: false,\n },\n }),\n },\n skipTLSVerification: {\n enabled: config.jsonData.tlsSkipVerify,\n onToggle: (enabled) =>\n onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsSkipVerify: enabled },\n }),\n },\n };\n}\n\nexport function getCustomHeaders<C extends Config = Config>(\n config: C,\n onChange: OnChangeHandler<C>\n): AuthProps['customHeaders'] {\n const headers: Header[] = Object.keys(config.jsonData)\n .filter((key) => key.startsWith(headerNamePrefix))\n .sort()\n .map((key) => {\n const index = key.slice(headerNamePrefix.length);\n return {\n name: config.jsonData[key],\n configured: config.secureJsonFields[`${headerValuePrefix}${index}`] ?? false,\n };\n });\n\n return {\n headers,\n onChange: (headers) => {\n const newJsonData = Object.fromEntries(\n Object.entries(config.jsonData).filter(([key]) => !key.startsWith(headerNamePrefix))\n );\n const newSecureJsonData = Object.fromEntries(\n Object.entries(config.secureJsonData || {}).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n const newSecureJsonFields = Object.fromEntries(\n Object.entries(config.secureJsonFields).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n\n headers.forEach((header, index) => {\n newJsonData[`${headerNamePrefix}${index + 1}`] = header.name;\n if (header.configured) {\n newSecureJsonFields[`${headerValuePrefix}${index + 1}`] = true;\n } else {\n newSecureJsonData[`${headerValuePrefix}${index + 1}`] = header.value;\n }\n });\n\n onChange({\n ...config,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n secureJsonFields: newSecureJsonFields,\n });\n },\n };\n}\n","import React, { type ReactNode } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, type PopoverContent } from '@grafana/ui';\nimport { ConfigSection } from '../ConfigSection';\nimport { type Config, type OnChangeHandler } from '../types';\n\nexport type Props<C extends Config = Config> = {\n config: C;\n onChange: OnChangeHandler<C>;\n description?: ReactNode;\n urlPlaceholder?: string;\n urlTooltip?: PopoverContent;\n urlLabel?: string;\n className?: string;\n};\n\nexport const ConnectionSettings: <C extends Config = Config>(props: Props<C>) => JSX.Element = ({\n config,\n onChange,\n description,\n urlPlaceholder,\n urlTooltip,\n urlLabel,\n className,\n}) => {\n const isValidUrl =\n config.url !== undefined &&\n /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(config.url);\n\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <>\n <ConfigSection title=\"Connection\" description={description} className={cx(styles.container, className)}>\n <InlineField\n htmlFor=\"connection-url\"\n label={urlLabel || 'URL'}\n labelWidth={24}\n tooltip={\n urlTooltip || (\n <>\n Specify a complete HTTP URL\n <br />\n (for example https://example.com:8080)\n </>\n )\n }\n grow\n disabled={config.readOnly}\n required\n invalid={!isValidUrl && !config.readOnly}\n error={isValidUrl ? '' : 'Please enter a valid URL'}\n interactive\n >\n <Input\n id=\"connection-url\"\n aria-label=\"Data source connection URL\"\n onChange={(event) =>\n onChange({\n ...config,\n url: event.currentTarget.value,\n })\n }\n value={config.url || ''}\n placeholder={urlPlaceholder || 'URL'}\n />\n </InlineField>\n </ConfigSection>\n </>\n );\n};\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, TagsInput } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection';\nimport { type Config, type OnChangeHandler } from '../types';\n\nexport type Props<C extends Config = Config> = {\n config: C;\n onChange: OnChangeHandler<C>;\n className?: string;\n};\n\nexport const AdvancedHttpSettings: <C extends Config = Config>(props: Props<C>) => JSX.Element = ({\n config,\n onChange,\n className,\n}) => {\n const onCookiesChange = (cookies: string[]) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies,\n },\n });\n };\n\n const onTimeoutChange = (event: React.FormEvent<HTMLInputElement>) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10),\n },\n });\n };\n\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <ConfigSubSection title=\"Advanced HTTP settings\" className={cx(styles.container, className)}>\n <InlineField\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\n >\n <TagsInput\n id=\"advanced-http-cookies\"\n placeholder=\"New cookie (hit enter to add)\"\n tags={config.jsonData.keepCookies}\n onChange={onCookiesChange}\n />\n </InlineField>\n\n <InlineField\n htmlFor=\"advanced-http-timeout\"\n label=\"Timeout\"\n labelWidth={24}\n tooltip=\"HTTP request timeout in seconds\"\n disabled={config.readOnly}\n grow\n >\n <Input\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 </InlineField>\n </ConfigSubSection>\n );\n};\n","import React, { PureComponent } from 'react';\nimport { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { type DataSourceSettings } from '@grafana/data';\nimport { stylesFactory, LegacyForms, Button, Icon } from '@grafana/ui';\n\nexport interface CustomHeader {\n id: string;\n name: string;\n value: string;\n configured: boolean;\n}\n\nexport type CustomHeaders = CustomHeader[];\n\nexport interface Props {\n dataSourceConfig: DataSourceSettings<any, any>;\n onChange: (config: DataSourceSettings) => void;\n}\n\nexport interface State {\n headers: CustomHeaders;\n}\n\ninterface CustomHeaderRowProps {\n header: CustomHeader;\n onReset: (id: string) => void;\n onRemove: (id: string) => void;\n onChange: (value: CustomHeader) => void;\n onBlur: () => void;\n}\n\nconst getCustomHeaderRowStyles = stylesFactory(() => {\n return {\n layout: css`\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n > * {\n margin-left: 4px;\n margin-bottom: 0;\n height: 100%;\n &:first-child,\n &:last-child {\n margin-left: 0;\n }\n }\n `,\n };\n});\n\nconst CustomHeaderRow = ({ header, onBlur, onChange, onRemove, onReset }: CustomHeaderRowProps) => {\n const styles = getCustomHeaderRowStyles();\n return (\n <div className={styles.layout}>\n <LegacyForms.FormField\n label=\"Header\"\n name=\"name\"\n placeholder=\"X-Custom-Header\"\n labelWidth={5}\n value={header.name || ''}\n onChange={(e) => onChange({ ...header, name: e.target.value })}\n onBlur={onBlur}\n />\n <LegacyForms.SecretFormField\n label=\"Value\"\n aria-label=\"Value\"\n name=\"value\"\n isConfigured={header.configured}\n value={header.value}\n labelWidth={5}\n inputWidth={header.configured ? 11 : 12}\n placeholder=\"Header Value\"\n onReset={() => onReset(header.id)}\n onChange={(e) => onChange({ ...header, value: e.target.value })}\n onBlur={onBlur}\n />\n <Button\n type=\"button\"\n aria-label=\"Remove header\"\n variant=\"secondary\"\n size=\"xs\"\n onClick={(_e) => onRemove(header.id)}\n >\n <Icon name=\"trash-alt\" />\n </Button>\n </div>\n );\n};\n\nCustomHeaderRow.displayName = 'CustomHeaderRow';\n\nexport class CustomHeadersSettings extends PureComponent<Props, State> {\n state: State = {\n headers: [],\n };\n\n constructor(props: Props) {\n super(props);\n const { jsonData, secureJsonData, secureJsonFields } = this.props.dataSourceConfig;\n this.state = {\n headers: Object.keys(jsonData)\n .sort()\n .filter((key) => key.startsWith('httpHeaderName'))\n .map((key, index) => {\n return {\n id: uniqueId(),\n name: jsonData[key],\n value: secureJsonData !== undefined ? secureJsonData[key] : '',\n configured: (secureJsonFields && secureJsonFields[`httpHeaderValue${index + 1}`]) || false,\n };\n }),\n };\n }\n\n updateSettings = () => {\n const { headers } = this.state;\n\n // we remove every httpHeaderName* field\n const newJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.jsonData).filter(([key, val]) => !key.startsWith('httpHeaderName'))\n );\n\n // we remove every httpHeaderValue* field\n const newSecureJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.secureJsonData || {}).filter(\n ([key, val]) => !key.startsWith('httpHeaderValue')\n )\n );\n\n // then we add the current httpHeader-fields\n for (const [index, header] of headers.entries()) {\n newJsonData[`httpHeaderName${index + 1}`] = header.name;\n if (!header.configured) {\n newSecureJsonData[`httpHeaderValue${index + 1}`] = header.value;\n }\n }\n\n this.props.onChange({\n ...this.props.dataSourceConfig,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n });\n };\n\n onHeaderAdd = () => {\n this.setState((prevState) => {\n return {\n headers: [...prevState.headers, { id: uniqueId(), name: '', value: '', configured: false }],\n };\n });\n };\n\n onHeaderChange = (headerIndex: number, value: CustomHeader) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((item, index) => {\n if (headerIndex !== index) {\n return item;\n }\n return { ...value };\n }),\n };\n });\n };\n\n onHeaderReset = (headerId: string) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((h, i) => {\n if (h.id !== headerId) {\n return h;\n }\n return {\n ...h,\n value: '',\n configured: false,\n };\n }),\n };\n });\n };\n\n onHeaderRemove = (headerId: string) => {\n this.setState(\n ({ headers }) => ({\n headers: headers.filter((h) => h.id !== headerId),\n }),\n this.updateSettings\n );\n };\n\n render() {\n const { headers } = this.state;\n return (\n <div className={'gf-form-group'}>\n <div className=\"gf-form\">\n <h6>Custom HTTP Headers</h6>\n </div>\n <div>\n {headers.map((header, i) => (\n <CustomHeaderRow\n key={header.id}\n header={header}\n onChange={(h) => {\n this.onHeaderChange(i, h);\n }}\n onBlur={this.updateSettings}\n onRemove={this.onHeaderRemove}\n onReset={this.onHeaderReset}\n />\n ))}\n </div>\n <div className=\"gf-form\">\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n type=\"button\"\n onClick={(e) => {\n this.onHeaderAdd();\n }}\n >\n Add header\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomHeadersSettings;\n","import { type FunctionComponent } from 'react';\n\nimport { type DataSourceApi, type RegistryItem, type SelectableValue, type TimeRange } from '@grafana/data';\n\nexport interface QueryBuilderLabelFilter {\n label: string;\n op: string;\n value: string;\n}\n\nexport interface QueryBuilderOperation {\n id: string;\n params: QueryBuilderOperationParamValue[];\n disabled?: boolean;\n}\n\nexport interface QueryBuilderOperationDefinition<T = any> extends RegistryItem {\n documentation?: string;\n params: QueryBuilderOperationParamDef[];\n defaultParams: QueryBuilderOperationParamValue[];\n category: string;\n hideFromList?: boolean;\n alternativesKey?: string;\n /** Can be used to control operation placement when adding a new operations, lower are placed first */\n orderRank?: number;\n renderer: QueryBuilderOperationRenderer;\n addOperationHandler: QueryBuilderAddOperationHandler<T>;\n paramChangedHandler?: QueryBuilderOnParamChangedHandler;\n explainHandler?: QueryBuilderExplainOperationHandler;\n changeTypeHandler?: (op: QueryBuilderOperation, newDef: QueryBuilderOperationDefinition<T>) => QueryBuilderOperation;\n toggleable?: boolean;\n}\n\ntype QueryBuilderAddOperationHandler<T> = (\n def: QueryBuilderOperationDefinition,\n query: T,\n modeller: VisualQueryModeller\n) => T;\n\ntype QueryBuilderExplainOperationHandler = (op: QueryBuilderOperation, def?: QueryBuilderOperationDefinition) => string;\n\ntype QueryBuilderOnParamChangedHandler = (\n index: number,\n operation: QueryBuilderOperation,\n operationDef: QueryBuilderOperationDefinition\n) => QueryBuilderOperation;\n\ntype QueryBuilderOperationRenderer = (\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerQuery: string\n) => string;\n\nexport type QueryBuilderOperationParamValue = string | number | boolean;\n\nexport interface QueryBuilderOperationParamDef {\n name: string;\n type: 'string' | 'number' | 'boolean';\n options?: string[] | number[] | Array<SelectableValue<string>>;\n hideName?: boolean;\n restParam?: boolean;\n optional?: boolean;\n placeholder?: string;\n description?: string;\n minWidth?: number;\n editor?: FunctionComponent<QueryBuilderOperationParamEditorProps>;\n runQueryOnEnter?: boolean;\n}\n\nexport interface QueryBuilderOperationParamEditorProps {\n value?: QueryBuilderOperationParamValue;\n paramDef: QueryBuilderOperationParamDef;\n /** Parameter index */\n index: number;\n operation: QueryBuilderOperation;\n operationId: string;\n query: any;\n datasource: DataSourceApi;\n timeRange?: TimeRange;\n onChange: (index: number, value: QueryBuilderOperationParamValue) => void;\n onRunQuery: () => void;\n queryModeller: VisualQueryModeller;\n}\n\nexport enum QueryEditorMode {\n Code = 'code',\n Builder = 'builder',\n}\n\nexport type QueryStats = {\n bytes: number;\n // The error message displayed in the UI when we cant estimate the size of the query.\n message?: string;\n};\n\nexport interface VisualQueryModeller {\n getOperationsForCategory(category: string): QueryBuilderOperationDefinition[];\n getAlternativeOperations(key: string): QueryBuilderOperationDefinition[];\n getCategories(): string[];\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined;\n renderQuery(query: VisualQuery, nested?: boolean): string;\n renderLabels(labels: QueryBuilderLabelFilter[]): string;\n innerQueryPlaceholder: string;\n}\n\nexport interface VisualQueryBinary<T> {\n operator: string;\n vectorMatchesType?: 'on' | 'ignoring';\n vectorMatches?: string;\n query: T;\n}\n\nexport const BINARY_OPERATIONS_KEY = 'Binary operations';\n\nexport interface VisualQuery {\n metric?: string;\n labels: QueryBuilderLabelFilter[];\n operations: QueryBuilderOperation[];\n binaryQueries?: Array<VisualQueryBinary<VisualQuery>>;\n}\n","import { Registry } from '@grafana/data';\n\nimport {\n BINARY_OPERATIONS_KEY,\n type VisualQuery,\n type VisualQueryBinary,\n type QueryBuilderLabelFilter,\n type QueryBuilderOperation,\n type VisualQueryModeller,\n type QueryBuilderOperationDefinition,\n} from './types';\n\nexport abstract class QueryModellerBase implements VisualQueryModeller {\n protected operationsRegistry: Registry<QueryBuilderOperationDefinition>;\n private categories: string[] = [];\n innerQueryPlaceholder: string;\n\n constructor(operationDefinitions: QueryBuilderOperationDefinition[], innerQueryPlaceholder?: string) {\n this.operationsRegistry = new Registry<QueryBuilderOperationDefinition>(() => operationDefinitions);\n this.innerQueryPlaceholder = innerQueryPlaceholder || '<query>';\n }\n\n protected setOperationCategories(categories: string[]) {\n this.categories = categories;\n }\n\n abstract renderOperations(queryString: string, operations: QueryBuilderOperation[]): string;\n\n abstract renderBinaryQueries(queryString: string, binaryQueries?: Array<VisualQueryBinary<VisualQuery>>): string;\n\n abstract renderLabels(labels: QueryBuilderLabelFilter[]): string;\n\n abstract renderQuery(query: VisualQuery, nested?: boolean): string;\n\n getOperationsForCategory(category: string) {\n return this.operationsRegistry.list().filter((op) => op.category === category && !op.hideFromList);\n }\n\n getAlternativeOperations(key: string) {\n return this.operationsRegistry.list().filter((op) => op.alternativesKey && op.alternativesKey === key);\n }\n\n getCategories() {\n return this.categories;\n }\n\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined {\n return this.operationsRegistry.getIfExists(id);\n }\n\n hasBinaryOp(query: VisualQuery): boolean {\n return (\n query.operations.find((op) => {\n const def = this.getOperationDefinition(op.id);\n return def?.category === BINARY_OPERATIONS_KEY;\n }) !== undefined\n );\n }\n}\n","import { uniqBy } from 'lodash';\nimport React, { useRef, useState } from 'react';\nimport { v4 } from 'uuid';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { InlineField, Select } from '@grafana/ui';\nimport { type QueryBuilderLabelFilter } from '../types';\nimport { InputGroup } from '../../QueryEditor/InputGroup';\nimport { AccessoryButton } from '../../QueryEditor/AccessoryButton';\n\nconst CONFLICTING_LABEL_FILTER_ERROR_MESSAGE = 'You have conflicting label filters';\ninterface Props {\n defaultOp: string;\n item: Partial<QueryBuilderLabelFilter>;\n items: Array<Partial<QueryBuilderLabelFilter>>;\n onChange: (value: Partial<QueryBuilderLabelFilter>) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onDelete: () => void;\n invalidLabel?: boolean;\n invalidValue?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilterItem({\n item,\n items,\n defaultOp,\n onChange,\n onDelete,\n onGetLabelNames,\n onGetLabelValues,\n invalidLabel,\n invalidValue,\n multiValueSeparator = '|',\n}: Props) {\n const [state, setState] = useState<{\n labelNames?: Array<SelectableValue<string>>;\n labelValues?: Array<SelectableValue<string>>;\n isLoadingLabelNames?: boolean;\n isLoadingLabelValues?: boolean;\n }>({});\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n const [labelNamesMenuOpen, setLabelNamesMenuOpen] = useState(false);\n const [labelValuesMenuOpen, setLabelValuesMenuOpen] = useState(false);\n\n const isMultiSelect = (operator = item.op) => {\n return operators.find((op) => op.label === operator)?.isMultiValue;\n };\n\n const getSelectOptionsFromString = (item?: string): string[] => {\n if (item) {\n if (item.indexOf(multiValueSeparator) > 0) {\n return item.split(multiValueSeparator);\n }\n return [item];\n }\n return [];\n };\n\n const getOptions = (): Array<SelectableValue<string>> => {\n const labelValues = state.labelValues ? [...state.labelValues] : [];\n const selectedOptions = getSelectOptionsFromString(item?.value).map(toOption);\n\n // Remove possible duplicated values\n return uniqBy([...selectedOptions, ...labelValues], 'value');\n };\n\n const isConflicting = isConflictingLabelFilter(item, items);\n const { current: id } = useRef(v4());\n\n return (\n <div data-testid=\"visual-query-builder-dimensions-filter-item\">\n <InlineField error={CONFLICTING_LABEL_FILTER_ERROR_MESSAGE} invalid={isConflicting ? true : undefined}>\n <InputGroup>\n <Select<string>\n placeholder=\"Select label\"\n data-testid={selectors.components.QueryBuilder.labelSelect}\n inputId={`visual-query-builder-dimensions-filter-item-key-${id}`}\n width=\"auto\"\n value={item.label ? toOption(item.label) : null}\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelNames: true });\n const labelNames = await onGetLabelNames(item);\n setLabelNamesMenuOpen(true);\n setState({ labelNames, isLoadingLabelNames: undefined });\n }}\n onCloseMenu={() => {\n setLabelNamesMenuOpen(false);\n }}\n isOpen={labelNamesMenuOpen}\n isLoading={state.isLoadingLabelNames}\n options={state.labelNames}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: item.op ?? defaultOp,\n label: change.value,\n });\n }\n }}\n invalid={isConflicting || invalidLabel}\n />\n\n <Select<string>\n data-testid={selectors.components.QueryBuilder.matchOperatorSelect}\n value={toOption(item.op ?? defaultOp)}\n options={operators}\n width=\"auto\"\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: change.value,\n value: isMultiSelect(change.value) ? item.value : getSelectOptionsFromString(item?.value)[0],\n });\n }\n }}\n invalid={isConflicting}\n />\n\n <Select<string>\n placeholder=\"Select value\"\n data-testid={selectors.components.QueryBuilder.valueSelect}\n inputId={`visual-query-builder-dimensions-filter-item-value-${id}`}\n width=\"auto\"\n value={\n isMultiSelect()\n ? getSelectOptionsFromString(item?.value).map(toOption)\n : getSelectOptionsFromString(item?.value).map(toOption)[0]\n }\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelValues: true });\n const labelValues = await onGetLabelValues(item);\n setState({\n ...state,\n labelValues,\n isLoadingLabelValues: undefined,\n });\n setLabelValuesMenuOpen(true);\n }}\n onCloseMenu={() => {\n setLabelValuesMenuOpen(false);\n }}\n isOpen={labelValuesMenuOpen}\n isMulti={isMultiSelect()}\n isLoading={state.isLoadingLabelValues}\n options={getOptions()}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n value: change.value,\n op: item.op ?? defaultOp,\n });\n } else {\n // otherwise, we're dealing with a multi-value select which is array of options\n const changes = change\n .map((change: SelectableValue<string>) => {\n if (change.value) {\n return change.value;\n } else {\n return undefined;\n }\n })\n .filter((val: string | undefined) => val !== undefined)\n .join(multiValueSeparator);\n onChange({ ...item, value: changes, op: item.op ?? defaultOp });\n }\n }}\n invalid={isConflicting || invalidValue}\n />\n <AccessoryButton aria-label=\"remove\" icon=\"times\" variant=\"secondary\" onClick={onDelete} />\n </InputGroup>\n </InlineField>\n </div>\n );\n}\n\nconst operators = [\n { label: '=', value: '=', description: 'Equals', isMultiValue: false },\n { label: '!=', value: '!=', description: 'Does not equal', isMultiValue: false },\n { label: '=~', value: '=~', description: 'Matches regex', isMultiValue: true },\n { label: '!~', value: '!~', description: 'Does not match regex', isMultiValue: true },\n];\n\nexport function isConflictingLabelFilter(\n newLabel: Partial<QueryBuilderLabelFilter>,\n labels: Array<Partial<QueryBuilderLabelFilter>>\n): boolean {\n if (!newLabel.label || !newLabel.op || !newLabel.value) {\n return false;\n }\n\n if (labels.length < 2) {\n return false;\n }\n\n const operationIsNegative = newLabel.op.toString().startsWith('!');\n\n const candidates = labels.filter(\n (label) => label.label === newLabel.label && label.value === newLabel.value && label.op !== newLabel.op\n );\n\n const conflict = candidates.some((candidate) => {\n if (operationIsNegative && candidate?.op?.toString().startsWith('!') === false) {\n return true;\n }\n if (operationIsNegative === false && candidate?.op?.toString().startsWith('!')) {\n return true;\n }\n return false;\n });\n\n return conflict;\n}\n","import { isEqual } from 'lodash';\nimport React, { useEffect, useState } from 'react';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { type QueryBuilderLabelFilter } from '../types';\n\nimport { EditorField } from '../../QueryEditor/EditorField';\nimport { EditorFieldGroup } from '../../QueryEditor/EditorFieldGroup';\nimport { EditorList } from '../../QueryEditor/EditorList';\nimport { LabelFilterItem } from './LabelFilterItem';\n\nexport const MISSING_LABEL_FILTER_ERROR_MESSAGE = 'Select at least 1 label filter (label and value)';\n\nexport interface Props {\n labelsFilters: QueryBuilderLabelFilter[];\n onChange: (labelFilters: QueryBuilderLabelFilter[]) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n /** If set to true, component will show error message until at least 1 filter is selected */\n labelFilterRequired?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilters({\n labelsFilters,\n onChange,\n onGetLabelNames,\n onGetLabelValues,\n labelFilterRequired,\n multiValueSeparator,\n}: Props) {\n const defaultOp = '=';\n const [items, setItems] = useState<Array<Partial<QueryBuilderLabelFilter>>>([{ op: defaultOp }]);\n\n useEffect(() => {\n if (labelsFilters.length > 0) {\n setItems(labelsFilters);\n } else {\n setItems([{ op: defaultOp }]);\n }\n }, [labelsFilters]);\n\n const onLabelsChange = (newItems: Array<Partial<QueryBuilderLabelFilter>>) => {\n setItems(newItems);\n\n // Extract full label filters with both label & value\n const newLabels = newItems.filter(\n (item): item is QueryBuilderLabelFilter => item.label !== undefined && item.value !== undefined\n );\n if (!isEqual(newLabels, labelsFilters)) {\n onChange(newLabels);\n }\n };\n\n const hasLabelFilter = items.some((item) => item.label && item.value);\n\n return (\n <EditorFieldGroup>\n <EditorField\n label=\"Label filters\"\n error={MISSING_LABEL_FILTER_ERROR_MESSAGE}\n invalid={labelFilterRequired && !hasLabelFilter}\n >\n <EditorList\n items={items}\n onChange={onLabelsChange}\n renderItem={(item: Partial<QueryBuilderLabelFilter>, onChangeItem, onDelete) => (\n <LabelFilterItem\n item={item}\n items={items}\n defaultOp={defaultOp}\n onChange={onChangeItem}\n onDelete={onDelete}\n onGetLabelNames={onGetLabelNames}\n onGetLabelValues={onGetLabelValues}\n invalidLabel={labelFilterRequired && !item.label}\n invalidValue={labelFilterRequired && !item.value}\n multiValueSeparator={multiValueSeparator}\n />\n )}\n />\n </EditorField>\n </EditorFieldGroup>\n );\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2, renderMarkdown } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nexport interface Props {\n title?: React.ReactNode;\n markdown?: string;\n stepNumber?: number;\n}\n\nexport function OperationExplainedBox({ title, stepNumber, markdown, children }: React.PropsWithChildren<Props>) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.box}>\n {stepNumber !== undefined && <div className={styles.stepNumber}>{stepNumber}</div>}\n <div className={styles.boxInner}>\n {title && (\n <div className={styles.header}>\n <span>{title}</span>\n </div>\n )}\n <div className={styles.body}>\n {markdown && <div dangerouslySetInnerHTML={{ __html: renderMarkdown(markdown) }}></div>}\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n box: css({\n background: theme.colors.background.secondary,\n padding: theme.spacing(1),\n borderRadius: theme.shape.radius.default,\n position: 'relative',\n }),\n boxInner: css({\n marginLeft: theme.spacing(4),\n }),\n stepNumber: css({\n fontWeight: theme.typography.fontWeightMedium,\n background: theme.colors.secondary.main,\n width: '20px',\n height: '20px',\n borderRadius: theme.shape.radius.circle,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n top: '10px',\n left: '11px',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n header: css({\n paddingBottom: theme.spacing(0.5),\n display: 'flex',\n alignItems: 'center',\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n body: css({\n color: theme.colors.text.secondary,\n 'p:last-child': {\n margin: 0,\n },\n a: {\n color: theme.colors.text.link,\n textDecoration: 'underline',\n },\n }),\n };\n};\n","import React, { useState, memo } from 'react';\nimport { css } from '@emotion/css';\nimport { usePopperTooltip } from 'react-popper-tooltip';\n\nimport { type GrafanaTheme2, renderMarkdown } from '@grafana/data';\nimport { Button, Portal, useStyles2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperation, type QueryBuilderOperationDefinition } from '../types';\nimport { FlexItem } from '../../QueryEditor/FlexItem';\n\ninterface Props {\n operation: QueryBuilderOperation;\n definition: QueryBuilderOperationDefinition;\n innerQueryPlaceholder: string;\n}\n\nexport const OperationInfoButton = memo<Props>(({ definition, operation, innerQueryPlaceholder }) => {\n const styles = useStyles2(getStyles);\n const [show, setShow] = useState(false);\n const { getTooltipProps, setTooltipRef, setTriggerRef, visible } = usePopperTooltip({\n placement: 'top',\n visible: show,\n offset: [0, 16],\n onVisibleChange: setShow,\n interactive: true,\n trigger: ['click'],\n });\n\n return (\n <>\n <Button\n title=\"Click to show description\"\n ref={setTriggerRef}\n icon=\"info-circle\"\n size=\"sm\"\n variant=\"secondary\"\n fill=\"text\"\n />\n {visible && (\n <Portal>\n <div ref={setTooltipRef} {...getTooltipProps()} className={styles.docBox}>\n <div className={styles.docBoxHeader}>\n <span>{definition.renderer(operation, definition, innerQueryPlaceholder)}</span>\n <FlexItem grow={1} />\n <Button\n icon=\"times\"\n onClick={() => setShow(false)}\n fill=\"text\"\n variant=\"secondary\"\n title=\"Remove operation\"\n />\n </div>\n <div\n className={styles.docBoxBody}\n dangerouslySetInnerHTML={{ __html: getOperationDocs(definition, operation) }}\n ></div>\n </div>\n </Portal>\n )}\n </>\n );\n});\n\nOperationInfoButton.displayName = 'OperationDocs';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n docBox: css({\n overflow: 'hidden',\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.strong}`,\n boxShadow: theme.shadows.z3,\n maxWidth: '600px',\n padding: theme.spacing(1),\n borderRadius: theme.shape.radius.default,\n zIndex: theme.zIndex.tooltip,\n }),\n docBoxHeader: css({\n fontSize: theme.typography.h5.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n paddingBottom: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n }),\n docBoxBody: css({\n // The markdown paragraph has a marginBottom this removes it\n marginBottom: theme.spacing(-1),\n color: theme.colors.text.secondary,\n }),\n signature: css({\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n dropdown: css({\n opacity: 0,\n color: theme.colors.text.secondary,\n }),\n };\n};\nfunction getOperationDocs(def: QueryBuilderOperationDefinition, op: QueryBuilderOperation): string {\n return renderMarkdown(def.explainHandler ? def.explainHandler(op, def) : (def.documentation ?? 'no docs'));\n}\n","import { css } from '@emotion/css';\nimport React, { useState, memo } from 'react';\nimport { type DraggableProvided } from '@hello-pangea/dnd';\n\nimport { type GrafanaTheme2, type SelectableValue } from '@grafana/data';\nimport { Button, Select, useStyles2 } from '@grafana/ui';\n\nimport { OperationInfoButton } from './OperationInfoButton';\n\nimport { type VisualQueryModeller, type QueryBuilderOperation, type QueryBuilderOperationDefinition } from '../types';\nimport { FlexItem } from '../../QueryEditor/FlexItem';\n\ninterface Props {\n operation: QueryBuilderOperation;\n definition: QueryBuilderOperationDefinition;\n index: number;\n queryModeller: VisualQueryModeller;\n dragHandleProps?: DraggableProvided['dragHandleProps'];\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n}\n\ninterface State {\n isOpen?: boolean;\n disabled?: boolean;\n alternatives?: Array<SelectableValue<QueryBuilderOperationDefinition>>;\n}\n\nexport const OperationHeader = memo<Props>(\n ({ operation, definition, index, onChange, onRemove, onToggle, queryModeller, dragHandleProps }) => {\n const styles = useStyles2(getStyles);\n const [state, setState] = useState<State>({});\n\n const onToggleSwitcher = () => {\n if (state.isOpen) {\n setState({ ...state, isOpen: false });\n } else {\n const alternatives = queryModeller\n .getAlternativeOperations(definition.alternativesKey!)\n .map((alt) => ({ label: alt.name, value: alt }));\n setState({ isOpen: true, alternatives });\n }\n };\n\n return (\n <div className={styles.header}>\n {!state.isOpen && (\n <>\n <div {...dragHandleProps}>{definition.name ?? definition.id}</div>\n <FlexItem grow={1} />\n <div className={`${styles.operationHeaderButtons} operation-header-show-on-hover`}>\n <Button\n icon=\"angle-down\"\n size=\"sm\"\n onClick={onToggleSwitcher}\n fill=\"text\"\n variant=\"secondary\"\n title=\"Click to view alternative operations\"\n />\n <OperationInfoButton\n definition={definition}\n operation={operation}\n innerQueryPlaceholder={queryModeller.innerQueryPlaceholder}\n />\n {definition.toggleable && (\n <Button\n icon={operation.disabled ? 'eye-slash' : 'eye'}\n size=\"sm\"\n onClick={() => onToggle(index)}\n fill=\"text\"\n variant=\"secondary\"\n title={operation.disabled ? 'Enable operation' : 'Disable operation'}\n />\n )}\n <Button\n icon=\"times\"\n size=\"sm\"\n onClick={() => onRemove(index)}\n fill=\"text\"\n variant=\"secondary\"\n title=\"Remove operation\"\n />\n </div>\n </>\n )}\n {state.isOpen && (\n <div className={styles.selectWrapper}>\n <Select\n autoFocus\n openMenuOnFocus\n placeholder=\"Replace with\"\n options={state.alternatives}\n isOpen={true}\n onCloseMenu={onToggleSwitcher}\n onChange={(value) => {\n if (value.value) {\n // Operation should exist if it is selectable\n const newDef = queryModeller.getOperationDefinition(value.value.id)!;\n\n // copy default params, and override with all current params\n const newParams = [...newDef.defaultParams];\n for (let i = 0; i < Math.min(operation.params.length, newParams.length); i++) {\n if (newDef.params[i].type === definition.params[i].type) {\n newParams[i] = operation.params[i];\n }\n }\n\n const changedOp = { ...operation, params: newParams, id: value.value.id };\n onChange(\n index,\n definition.changeTypeHandler ? definition.changeTypeHandler(changedOp, newDef) : changedOp\n );\n }\n }}\n />\n </div>\n )}\n </div>\n );\n }\n);\n\nOperationHeader.displayName = 'OperationHeader';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n header: css({\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n padding: theme.spacing(0.5, 0.5, 0.5, 1),\n display: 'flex',\n alignItems: 'center',\n }),\n operationHeaderButtons: css({\n opacity: 1,\n }),\n selectWrapper: css({\n paddingRight: theme.spacing(2),\n }),\n };\n};\n","import React, { type FunctionComponent } from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2, type SelectableValue, toOption } from '@grafana/data';\nimport { AutoSizeInput, Button, Checkbox, Select, useStyles2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperationParamDef, type QueryBuilderOperationParamEditorProps } from '../types';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function getOperationParamEditor(\n paramDef: QueryBuilderOperationParamDef\n): FunctionComponent<QueryBuilderOperationParamEditorProps> {\n if (paramDef.editor) {\n return paramDef.editor;\n }\n\n if (paramDef.options) {\n return SelectInputParamEditor;\n }\n\n switch (paramDef.type) {\n case 'boolean':\n return BoolInputParamEditor;\n case 'number':\n case 'string':\n default:\n return SimpleInputParamEditor;\n }\n}\n\nfunction SimpleInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <AutoSizeInput\n id={getOperationParamId(props.operationId, props.index)}\n defaultValue={props.value?.toString()}\n minWidth={props.paramDef.minWidth}\n placeholder={props.paramDef.placeholder}\n title={props.paramDef.description}\n maxWidth={(props.paramDef.minWidth || 20) * 3}\n onCommitChange={(evt) => {\n props.onChange(props.index, evt.currentTarget.value);\n if (props.paramDef.runQueryOnEnter && evt.type === 'keydown') {\n props.onRunQuery();\n }\n }}\n />\n );\n}\n\nfunction BoolInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <Checkbox\n id={getOperationParamId(props.operationId, props.index)}\n value={Boolean(props.value)}\n onChange={(evt) => props.onChange(props.index, evt.currentTarget.checked)}\n />\n );\n}\n\nfunction SelectInputParamEditor({\n paramDef,\n value,\n index,\n operationId,\n onChange,\n}: QueryBuilderOperationParamEditorProps) {\n const styles = useStyles2(getStyles);\n let selectOptions = paramDef.options as SelectableValue[];\n\n if (!selectOptions[0]?.label) {\n selectOptions = paramDef.options!.map((option) => ({\n label: option.toString(),\n value: option,\n }));\n }\n\n let valueOption = selectOptions.find((x) => x.value === value) ?? toOption(value as string);\n\n // If we have optional options param and don't have value, we want to render button with which we add optional options.\n // This makes it easier to understand what needs to be selected and what is optional.\n if (!value && paramDef.optional) {\n return (\n <div className={styles.optionalParam}>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n title={`Add ${paramDef.name}`}\n icon=\"plus\"\n onClick={() => onChange(index, selectOptions[0].value)}\n >\n {paramDef.name}\n </Button>\n </div>\n );\n }\n\n return (\n <EditorStack gap={0.5} direction=\"row\" alignItems=\"center\">\n <Select\n id={getOperationParamId(operationId, index)}\n value={valueOption}\n options={selectOptions}\n placeholder={paramDef.placeholder}\n allowCustomValue={true}\n onChange={(value) => onChange(index, value.value!)}\n width={paramDef.minWidth || 'auto'}\n />\n {paramDef.optional && (\n <Button\n data-testid={`operations.${index}.remove-param`}\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n variant=\"secondary\"\n title={`Remove ${paramDef.name}`}\n onClick={() => onChange(index, '')}\n />\n )}\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n optionalParam: css({\n marginTop: theme.spacing(1),\n }),\n };\n};\n\nexport function getOperationParamId(operationId: string, paramIndex: number) {\n return `operations.${operationId}.param.${paramIndex}`;\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { type DraggableProvided } from '@hello-pangea/dnd';\nimport { Button, Icon, Tooltip, useTheme2 } from '@grafana/ui';\nimport { css, cx } from '@emotion/css';\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { OperationHeader } from './OperationHeader';\nimport {\n type QueryBuilderOperation,\n type QueryBuilderOperationDefinition,\n type QueryBuilderOperationParamDef,\n type QueryBuilderOperationParamValue,\n type VisualQuery,\n type VisualQueryModeller,\n} from '../types';\nimport { getOperationParamEditor, getOperationParamId } from './OperationParamEditor';\nimport { v4 } from 'uuid';\nimport { EditorStack } from '../../QueryEditor';\n\ntype Props = {\n provided: DraggableProvided;\n isConflicting: boolean;\n index: number;\n operation: QueryBuilderOperation;\n definition: QueryBuilderOperationDefinition;\n queryModeller: VisualQueryModeller;\n query: VisualQuery;\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n onRunQuery: () => void;\n datasource: DataSourceApi;\n flash?: boolean;\n highlight?: boolean;\n timeRange?: TimeRange;\n};\n\nexport function OperationEditorBody({\n provided,\n flash,\n isConflicting,\n highlight,\n index,\n queryModeller,\n onChange,\n onRemove,\n onToggle,\n operation,\n definition,\n query,\n timeRange,\n onRunQuery,\n datasource,\n}: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme, isConflicting);\n const shouldFlash = useFlash(flash);\n const { current: id } = useRef(v4());\n\n const onParamValueChanged = (paramIdx: number, value: QueryBuilderOperationParamValue) => {\n const update: QueryBuilderOperation = { ...operation, params: [...operation.params] };\n update.params[paramIdx] = value;\n callParamChangedThenOnChange(definition, update, index, paramIdx, onChange);\n };\n\n const onAddRestParam = () => {\n const update: QueryBuilderOperation = { ...operation, params: [...operation.params, ''] };\n callParamChangedThenOnChange(definition, update, index, operation.params.length, onChange);\n };\n\n const onRemoveRestParam = (paramIdx: number) => {\n const update: QueryBuilderOperation = {\n ...operation,\n params: [...operation.params.slice(0, paramIdx), ...operation.params.slice(paramIdx + 1)],\n };\n callParamChangedThenOnChange(definition, update, index, paramIdx, onChange);\n };\n\n // Handle adding button for rest params\n let restParam: React.ReactNode | undefined;\n if (definition.params.length > 0) {\n const lastParamDef = definition.params[definition.params.length - 1];\n if (lastParamDef.restParam) {\n restParam = renderAddRestParamButton(lastParamDef, onAddRestParam, index, operation.params.length, styles);\n }\n }\n\n return (\n <div\n className={cx(styles.card, {\n [styles.cardHighlight]: shouldFlash || highlight,\n [styles.cardError]: isConflicting,\n [styles.disabled]: operation.disabled,\n })}\n ref={provided.innerRef}\n {...provided.draggableProps}\n data-testid={`operations.${index}.wrapper`}\n >\n <OperationHeader\n operation={operation}\n dragHandleProps={provided.dragHandleProps}\n definition={definition}\n index={index}\n onChange={onChange}\n onRemove={onRemove}\n onToggle={onToggle}\n queryModeller={queryModeller}\n />\n <div className={styles.body}>\n {operation.params.map((param, paramIndex) => {\n const paramDef = definition.params[Math.min(definition.params.length - 1, paramIndex)];\n const Editor = getOperationParamEditor(paramDef);\n\n return (\n <div className={styles.paramRow} key={`${paramIndex}-1`}>\n {!paramDef.hideName && (\n <div className={styles.paramName}>\n <label htmlFor={getOperationParamId(id, paramIndex)}>{paramDef.name}</label>\n {paramDef.description && (\n <Tooltip placement=\"top\" content={paramDef.description} theme=\"info\">\n <Icon name=\"info-circle\" size=\"sm\" className={styles.infoIcon} />\n </Tooltip>\n )}\n </div>\n )}\n <div className={styles.paramValue}>\n <EditorStack gap={0.5} direction=\"row\" alignItems=\"center\" wrap={false}>\n <Editor\n index={paramIndex}\n paramDef={paramDef}\n value={operation.params[paramIndex]}\n operation={operation}\n operationId={id}\n onChange={onParamValueChanged}\n onRunQuery={onRunQuery}\n query={query}\n datasource={datasource}\n timeRange={timeRange}\n queryModeller={queryModeller}\n />\n {paramDef.restParam && (operation.params.length > definition.params.length || paramDef.optional) && (\n <Button\n data-testid={`operations.${index}.remove-rest-param`}\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n variant=\"secondary\"\n title={`Remove ${paramDef.name}`}\n onClick={() => onRemoveRestParam(paramIndex)}\n />\n )}\n </EditorStack>\n </div>\n </div>\n );\n })}\n </div>\n {restParam}\n {index < query.operations.length - 1 && (\n <div className={styles.arrow}>\n <div className={styles.arrowLine} />\n <div className={styles.arrowArrow} />\n </div>\n )}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, isConflicting: boolean) => {\n return {\n cardWrapper: css({\n alignItems: 'stretch',\n }),\n error: css({\n marginBottom: theme.spacing(1),\n }),\n card: css({\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.medium}`,\n cursor: 'grab',\n borderRadius: theme.shape.radius.default,\n position: 'relative',\n transition: 'all 0.5s ease-in 0s',\n height: isConflicting ? 'auto' : '100%',\n }),\n disabled: css({\n opacity: 0.5,\n transition: 'none',\n }),\n cardError: css({\n boxShadow: `0px 0px 4px 0px ${theme.colors.warning.main}`,\n border: `1px solid ${theme.colors.warning.main}`,\n }),\n cardHighlight: css({\n boxShadow: `0px 0px 4px 0px ${theme.colors.primary.border}`,\n border: `1px solid ${theme.colors.primary.border}`,\n }),\n infoIcon: css({\n marginLeft: theme.spacing(0.5),\n color: theme.colors.text.secondary,\n ':hover': {\n color: theme.colors.text.primary,\n },\n }),\n body: css({\n margin: theme.spacing(1, 1, 0.5, 1),\n display: 'table',\n }),\n paramRow: css({\n label: 'paramRow',\n display: 'table-row',\n verticalAlign: 'middle',\n }),\n paramName: css({\n display: 'table-cell',\n padding: theme.spacing(0, 1, 0, 0),\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n verticalAlign: 'middle',\n height: '32px',\n }),\n paramValue: css({\n label: 'paramValue',\n display: 'table-cell',\n verticalAlign: 'middle',\n }),\n restParam: css({\n padding: theme.spacing(0, 1, 1, 1),\n }),\n arrow: css({\n position: 'absolute',\n top: '0',\n right: '-18px',\n display: 'flex',\n }),\n arrowLine: css({\n height: '2px',\n width: '8px',\n backgroundColor: theme.colors.border.strong,\n position: 'relative',\n top: '14px',\n }),\n arrowArrow: css({\n width: 0,\n height: 0,\n borderTop: `5px solid transparent`,\n borderBottom: `5px solid transparent`,\n borderLeft: `7px solid ${theme.colors.border.strong}`,\n position: 'relative',\n top: '10px',\n }),\n };\n};\n\n/**\n * When flash is switched on makes sure it is switched of right away, so we just flash the highlight and then fade\n * out.\n * @param flash\n */\nfunction useFlash(flash?: boolean) {\n const [keepFlash, setKeepFlash] = useState(true);\n useEffect(() => {\n let t: ReturnType<typeof setTimeout>;\n if (flash) {\n t = setTimeout(() => {\n setKeepFlash(false);\n }, 1000);\n } else {\n setKeepFlash(true);\n }\n\n return () => clearTimeout(t);\n }, [flash]);\n\n return keepFlash && flash;\n}\n\nfunction callParamChangedThenOnChange(\n def: QueryBuilderOperationDefinition,\n operation: QueryBuilderOperation,\n operationIndex: number,\n paramIndex: number,\n onChange: (index: number, update: QueryBuilderOperation) => void\n) {\n if (def.paramChangedHandler) {\n onChange(operationIndex, def.paramChangedHandler(paramIndex, operation, def));\n } else {\n onChange(operationIndex, operation);\n }\n}\n\nfunction renderAddRestParamButton(\n paramDef: QueryBuilderOperationParamDef,\n onAddRestParam: () => void,\n operationIndex: number,\n paramIndex: number,\n styles: OperationEditorStyles\n) {\n return (\n <div className={styles.restParam} key={`${paramIndex}-2`}>\n <Button\n size=\"sm\"\n icon=\"plus\"\n title={`Add ${paramDef.name}`.trimEnd()}\n variant=\"secondary\"\n onClick={onAddRestParam}\n data-testid={`operations.${operationIndex}.add-rest-param`}\n >\n {paramDef.name}\n </Button>\n </div>\n );\n}\n\ntype OperationEditorStyles = ReturnType<typeof getStyles>;\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { Draggable } from '@hello-pangea/dnd';\n\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { InlineField, useTheme2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\nimport { OperationEditorBody } from './OperationEditorBody';\n\ninterface Props<T extends VisualQuery> {\n operation: QueryBuilderOperation;\n index: number;\n query: T;\n datasource: DataSourceApi;\n queryModeller: VisualQueryModeller;\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n onRunQuery: () => void;\n flash?: boolean;\n highlight?: boolean;\n timeRange?: TimeRange;\n isConflictingOperation?: (operation: QueryBuilderOperation, otherOperations: QueryBuilderOperation[]) => boolean;\n}\n\nexport function OperationEditor<T extends VisualQuery>({\n operation,\n index,\n onRemove,\n onToggle,\n onChange,\n onRunQuery,\n queryModeller,\n query,\n datasource,\n flash,\n highlight,\n timeRange,\n isConflictingOperation,\n}: Props<T>) {\n const def = queryModeller.getOperationDefinition(operation.id);\n\n const theme = useTheme2();\n const isConflicting = isConflictingOperation ? isConflictingOperation(operation, query.operations) : false;\n const styles = getStyles(theme, isConflicting);\n\n if (!def) {\n return <span>Operation {operation.id} not found</span>;\n }\n\n const isInvalid = (isDragging: boolean) => {\n if (isDragging) {\n return undefined;\n }\n\n return isConflicting ? true : undefined;\n };\n\n return (\n <Draggable draggableId={`operation-${index}`} index={index}>\n {(provided, snapshot) => (\n <InlineField\n error={'You have conflicting label filters'}\n invalid={isInvalid(snapshot.isDragging)}\n className={cx(styles.error, styles.cardWrapper)}\n >\n <OperationEditorBody\n provided={provided}\n flash={flash}\n highlight={highlight}\n isConflicting={isConflicting}\n index={index}\n operation={operation}\n definition={def}\n onChange={onChange}\n onRemove={onRemove}\n onToggle={onToggle}\n queryModeller={queryModeller}\n query={query}\n timeRange={timeRange}\n onRunQuery={onRunQuery}\n datasource={datasource}\n />\n </InlineField>\n )}\n </Draggable>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, isConflicting: boolean) => {\n return {\n cardWrapper: css({\n alignItems: 'stretch',\n }),\n error: css({\n marginBottom: theme.spacing(1),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\nimport { DragDropContext, Droppable, type DropResult } from '@hello-pangea/dnd';\nimport { useMountedState, usePrevious } from 'react-use';\n\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { Button, Cascader, type CascaderOption, useStyles2 } from '@grafana/ui';\n\nimport { OperationEditor } from './OperationEditor';\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\nexport interface Props<T extends VisualQuery> {\n query: T;\n datasource: DataSourceApi;\n onChange: (query: T) => void;\n onRunQuery: () => void;\n queryModeller: VisualQueryModeller;\n explainMode?: boolean;\n highlightedOp?: QueryBuilderOperation;\n timeRange?: TimeRange;\n isConflictingOperation?: (operation: QueryBuilderOperation, otherOperations: QueryBuilderOperation[]) => boolean;\n}\n\nexport function OperationList<T extends VisualQuery>({\n query,\n datasource,\n queryModeller,\n onChange,\n onRunQuery,\n highlightedOp,\n timeRange,\n isConflictingOperation,\n}: Props<T>) {\n const styles = useStyles2(getStyles);\n const { operations } = query;\n\n const opsToHighlight = useOperationsHighlight(operations);\n\n const [cascaderOpen, setCascaderOpen] = useState(false);\n\n const onOperationChange = (index: number, update: QueryBuilderOperation) => {\n const updatedList = [...operations];\n updatedList.splice(index, 1, update);\n onChange({ ...query, operations: updatedList });\n };\n\n const onRemove = (index: number) => {\n const updatedList = [...operations.slice(0, index), ...operations.slice(index + 1)];\n onChange({ ...query, operations: updatedList });\n };\n\n const onToggle = (index: number) => {\n onOperationChange(index, { ...operations[index], disabled: !operations[index].disabled });\n };\n\n const addOptions: CascaderOption[] = queryModeller.getCategories().map((category) => {\n return {\n value: category,\n label: category,\n items: queryModeller.getOperationsForCategory(category).map((operation) => ({\n value: operation.id,\n label: operation.name,\n isLeaf: true,\n })),\n };\n });\n\n const onAddOperation = (value: string) => {\n const operationDef = queryModeller.getOperationDefinition(value);\n if (!operationDef) {\n return;\n }\n onChange(operationDef.addOperationHandler(operationDef, query, queryModeller));\n setCascaderOpen(false);\n };\n\n const onDragEnd = (result: DropResult) => {\n if (!result.destination) {\n return;\n }\n\n const updatedList = [...operations];\n const element = updatedList[result.source.index];\n updatedList.splice(result.source.index, 1);\n updatedList.splice(result.destination.index, 0, element);\n onChange({ ...query, operations: updatedList });\n };\n\n const onCascaderBlur = () => {\n setCascaderOpen(false);\n };\n\n return (\n <EditorStack gap={1} direction=\"column\">\n <EditorStack gap={1}>\n {operations.length > 0 && (\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId=\"sortable-field-mappings\" direction=\"horizontal\">\n {(provided) => (\n <div className={styles.operationList} ref={provided.innerRef} {...provided.droppableProps}>\n {operations.map((op, index) => {\n return (\n <OperationEditor\n key={op.id + JSON.stringify(op.params) + index}\n queryModeller={queryModeller}\n index={index}\n operation={op}\n query={query}\n datasource={datasource}\n onChange={onOperationChange}\n onRemove={onRemove}\n onToggle={onToggle}\n onRunQuery={onRunQuery}\n flash={opsToHighlight[index]}\n highlight={highlightedOp === op}\n timeRange={timeRange}\n isConflictingOperation={isConflictingOperation}\n />\n );\n })}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n )}\n <div className={styles.addButton}>\n {cascaderOpen ? (\n <Cascader\n options={addOptions}\n onSelect={onAddOperation}\n onBlur={onCascaderBlur}\n autoFocus={true}\n alwaysOpen={true}\n hideActiveLevelLabel={true}\n placeholder={'Search'}\n />\n ) : (\n <Button icon={'plus'} variant={'secondary'} onClick={() => setCascaderOpen(true)} title={'Add operation'}>\n Operations\n </Button>\n )}\n </div>\n </EditorStack>\n </EditorStack>\n );\n}\n\n/**\n * Returns indexes of operations that should be highlighted. We check the diff of operations added but at the same time\n * we want to highlight operations only after the initial render, so we check for mounted state and calculate the diff\n * only after.\n * @param operations\n */\nfunction useOperationsHighlight(operations: QueryBuilderOperation[]) {\n const isMounted = useMountedState();\n const prevOperations = usePrevious(operations);\n\n if (!isMounted()) {\n return operations.map(() => false);\n }\n\n if (!prevOperations) {\n return operations.map(() => true);\n }\n\n let newOps: boolean[] = [];\n\n if (prevOperations.length - 1 === operations.length && operations.every((op) => prevOperations.includes(op))) {\n // In case we remove one op and does not change any ops then don't highlight anything.\n return operations.map(() => false);\n }\n if (prevOperations.length + 1 === operations.length && prevOperations.every((op) => operations.includes(op))) {\n // If we add a single op just find it and highlight just that.\n const newOp = operations.find((op) => !prevOperations.includes(op));\n newOps = operations.map((op) => {\n return op === newOp;\n });\n } else {\n // Default diff of all ops.\n newOps = operations.map((op, index) => {\n return !isSameOp(op.id, prevOperations[index]?.id);\n });\n }\n return newOps;\n}\n\nfunction isSameOp(op1?: string, op2?: string) {\n return op1 === op2 || `__${op1}_by` === op2 || op1 === `__${op2}_by`;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n heading: css({\n label: 'heading',\n fontSize: 12,\n fontWeight: theme.typography.fontWeightMedium,\n marginBottom: 0,\n }),\n operationList: css({\n label: 'operationList',\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n }),\n addButton: css({\n label: 'addButton',\n width: 126,\n paddingBottom: theme.spacing(1),\n }),\n };\n};\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport Prism, { type Grammar } from 'prismjs';\n\nimport { type GrafanaTheme2, textUtil } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\ninterface Props {\n query: string;\n language: {\n grammar: Grammar;\n name: string;\n };\n className?: string;\n}\nexport function RawQuery({ query, language, className }: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const highlighted = Prism.highlight(query, language.grammar, language.name);\n\n return (\n <div\n className={cx(styles.editorField, 'prism-syntax-highlight', className)}\n aria-label=\"selector\"\n dangerouslySetInnerHTML={{ __html: textUtil.sanitize(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 React from 'react';\nimport { type Grammar } from 'prismjs';\n\nimport { OperationExplainedBox } from './OperationExplainedBox';\nimport { RawQuery } from './RawQuery';\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\n\ninterface Props<T extends VisualQuery> {\n query: T;\n queryModeller: VisualQueryModeller;\n explainMode?: boolean;\n stepNumber: number;\n language: {\n grammar: Grammar;\n name: string;\n };\n onMouseEnter?: (op: QueryBuilderOperation, index: number) => void;\n onMouseLeave?: (op: QueryBuilderOperation, index: number) => void;\n}\n\nexport function OperationListExplained<T extends VisualQuery>({\n query,\n queryModeller,\n stepNumber,\n language,\n onMouseEnter,\n onMouseLeave,\n}: Props<T>) {\n return (\n <>\n {query.operations.map((op, index) => {\n const def = queryModeller.getOperationDefinition(op.id);\n if (!def) {\n return `Operation ${op.id} not found`;\n }\n const title = def.renderer(op, def, queryModeller.innerQueryPlaceholder);\n const body = def.explainHandler ? def.explainHandler(op, def) : (def.documentation ?? 'no docs');\n\n return (\n <div\n key={index}\n onMouseEnter={() => onMouseEnter?.(op, index)}\n onMouseLeave={() => onMouseLeave?.(op, index)}\n >\n <OperationExplainedBox\n stepNumber={index + stepNumber}\n title={<RawQuery query={title} language={language} />}\n markdown={body}\n />\n </div>\n );\n })}\n </>\n );\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function OperationsEditorRow({ children }: React.PropsWithChildren<{}>) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={1}>{children}</EditorStack>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1, 1, 0, 1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport React, { useMemo } from 'react';\n\nimport { type DataSourceApi, type GrafanaTheme2, type PanelData, type DataQuery } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type VisualQuery, type VisualQueryModeller } from '../types';\n\ninterface Props<TVisualQuery extends VisualQuery, TDataQuery extends DataQuery> {\n query: TVisualQuery;\n datasource: DataSourceApi<TDataQuery>;\n queryModeller: VisualQueryModeller;\n buildVisualQueryFromString: (queryString: string) => { query: TVisualQuery };\n buildDataQueryFromQueryString: (queryString: string) => TDataQuery;\n buildQueryStringFromDataQuery: (dataQuery: TDataQuery) => string;\n onChange: (update: TVisualQuery) => void;\n data?: PanelData;\n}\n\nexport const QueryBuilderHints = <TVisualQuery extends VisualQuery, TDataQuery extends DataQuery>({\n datasource,\n query: visualQuery,\n onChange,\n data,\n queryModeller,\n buildVisualQueryFromString,\n buildDataQueryFromQueryString,\n buildQueryStringFromDataQuery,\n}: Props<TVisualQuery, TDataQuery>) => {\n const styles = useStyles2(getStyles);\n\n const hints = useMemo(() => {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n // For now show only actionable hints\n const hints = datasource.getQueryHints?.(dataQuery, data?.series || []).filter((hint) => hint.fix?.action);\n return hints ?? [];\n }, [datasource, visualQuery, data, queryModeller, buildDataQueryFromQueryString]);\n\n return (\n <>\n {hints.length > 0 && (\n <div className={styles.container}>\n {hints.map((hint) => {\n return (\n <Tooltip content={`${hint.label} ${hint.fix?.label}`} key={hint.type}>\n <Button\n onClick={() => {\n reportInteraction('grafana_query_builder_hints_clicked', {\n hint: hint.type,\n datasourceType: datasource.type,\n });\n\n if (hint?.fix?.action) {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n const newQuery = datasource.modifyQuery?.(dataQuery, hint.fix.action);\n if (newQuery) {\n const newVisualQuery = buildVisualQueryFromString(\n buildQueryStringFromDataQuery(newQuery) ?? ''\n );\n return onChange(newVisualQuery.query);\n }\n }\n }}\n fill=\"outline\"\n size=\"sm\"\n className={styles.hint}\n >\n hint: {hint.fix?.title || hint.fix?.action?.type.toLowerCase().replace('_', ' ')}\n </Button>\n </Tooltip>\n );\n })}\n </div>\n )}\n </>\n );\n};\n\nQueryBuilderHints.displayName = 'QueryBuilderHints';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css`\n display: flex;\n align-items: start;\n `,\n hint: css`\n margin-right: ${theme.spacing(1)};\n `,\n };\n};\n","import React from 'react';\nimport { RadioButtonGroup } from '@grafana/ui';\nimport { QueryEditorMode } from '../types';\n\ninterface Props {\n mode: QueryEditorMode;\n onChange: (mode: QueryEditorMode) => void;\n}\n\nconst editorModes = [\n { label: 'Builder', value: QueryEditorMode.Builder },\n { label: 'Code', value: QueryEditorMode.Code },\n];\n\nexport function QueryEditorModeToggle({ mode, onChange }: Props) {\n return (\n <div data-testid={'QueryEditorModeToggle'}>\n <RadioButtonGroup options={editorModes} size=\"sm\" value={mode} onChange={onChange} />\n </div>\n );\n}\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { type HTMLProps, useRef } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Switch, useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props extends Omit<HTMLProps<HTMLInputElement>, 'value' | 'ref'> {\n value?: boolean;\n label: string;\n}\n\nexport function QueryHeaderSwitch({ label, ...inputProps }: Props) {\n const dashedLabel = label.replace(' ', '-');\n const switchIdRef = useRef(uniqueId(`switch-${dashedLabel}`));\n const styles = useStyles2(getStyles);\n\n return (\n <EditorStack gap={1}>\n <label htmlFor={switchIdRef.current} className={styles.switchLabel}>\n {label}\n </label>\n <Switch {...inputProps} id={switchIdRef.current} />\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n switchLabel: css({\n color: theme.colors.text.secondary,\n cursor: 'pointer',\n fontSize: theme.typography.bodySmall.fontSize,\n '&:hover': {\n color: theme.colors.text.primary,\n },\n }),\n };\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { useToggle } from 'react-use';\n\nimport { getValueFormat, type GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Collapse, Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type QueryStats } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props {\n title: string;\n collapsedInfo: string[];\n queryStats?: QueryStats | null;\n}\n\nexport function QueryOptionGroup({ title, children, collapsedInfo, queryStats }: React.PropsWithChildren<Props>) {\n const [isOpen, toggleOpen] = useToggle(false);\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <Collapse\n className={styles.collapse}\n collapsible\n isOpen={isOpen}\n onToggle={toggleOpen}\n label={\n <EditorStack gap={0}>\n <h6 className={styles.title}>{title}</h6>\n {!isOpen && (\n <div className={styles.description}>\n {collapsedInfo.map((x, i) => (\n <span key={i}>{x}</span>\n ))}\n </div>\n )}\n </EditorStack>\n }\n >\n <div className={styles.body}>{children}</div>\n </Collapse>\n <div className={styles.queryStatsWrap}>\n {/**TODO: This is Loki logic that should eventually be moved to Loki */}\n {queryStats && config.featureToggles.lokiQuerySplitting && (\n <Tooltip content=\"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.\">\n <Icon tabIndex={0} name=\"info-circle\" className={styles.tooltip} size=\"sm\" />\n </Tooltip>\n )}\n\n {queryStats && <p className={styles.stats}>{generateQueryStats(queryStats)}</p>}\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n collapse: css({\n backgroundColor: 'unset',\n border: 'unset',\n marginBottom: 0,\n\n ['> button']: {\n padding: theme.spacing(0, 1),\n },\n }),\n wrapper: css({\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n }),\n title: css({\n flexGrow: 1,\n overflow: 'hidden',\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n margin: 0,\n }),\n description: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n paddingLeft: theme.spacing(2),\n gap: theme.spacing(2),\n display: 'flex',\n }),\n body: css({\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }),\n queryStatsWrap: css({\n display: 'flex',\n alignItems: 'center',\n alignSelf: 'flex-start',\n label: 'query-stats-wrap',\n padding: theme.spacing(1),\n }),\n stats: css({\n margin: '0px',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n tooltip: css({\n marginRight: theme.spacing(0.25),\n }),\n };\n};\n\nconst generateQueryStats = (queryStats: QueryStats) => {\n if (queryStats.message) {\n return queryStats.message;\n }\n\n return `This query will process approximately ${convertUnits(queryStats)}.`;\n};\n\nconst convertUnits = (queryStats: QueryStats): string => {\n const { text, suffix } = getValueFormat('bytes')(queryStats.bytes, 1);\n return text + suffix;\n};\n"],"names":["React","useState","useEffect","Input","GrafanaSegment","getStyles","css","memo","useTheme2","ClickOutsideWrapper","Calendar","Icon","cx","Badge","PluginSignatureStatus","PureComponent","__publicField","getDataSourceSrv","selectors","Select","HorizontalGroup","LegacyForms","stylesFactory","Button","DataLinkInput","usePrevious","DataLinkBuiltInVars","VariableOrigin","QueryEditorPropertyType","QueryEditorExpressionType","isEmpty","OperatorType","MacroType","TokenType","StatementPosition","SuggestionKind","CompletionItemPriority","CompletionItemKind","CompletionItemInsertTextRule","SQLEditorMode","getTemplateSrv","m","attachDebugger","createLogger","useRef","useMemo","v4","id","useCallback","CodeEditor","Registry","_a","QueryFormat","EditorMode","toOptionFromData","Stack","forwardRef","EditorList","useStyles2","Children","isValidElement","cloneElement","toOption","EditorField","ReactUtils","Tooltip","Space","Field","EditorRow","EditorRows","Switch","BaseSelectContainer","Modal","useAsync","editorModes","useCopyToClipboard","useId","InlineSwitch","RadioButtonGroup","sqlFormatter","getValueFormat","useAsyncFn","useDebounce","Spinner","formattedValueToString","IconButton","useMeasure","AutoSizer","uniqueId","_b","Utils","BasicConfig","DateTimePicker","dateTime","customOperators","isString","config","Query","Builder","injectGlobal","DataSourceWithBackend","DataFrameView","lastValueFrom","getBackendSrv","map","toDataQueryResponse","catchError","of","InlineField","AuthMethod","SecretInput","Checkbox","SecretTextArea","TLSClientAuth","TLSClientAuthComponent","InlineFieldRow","headers","header","TagsInput","QueryEditorMode","item","uniqBy","change","isEqual","renderMarkdown","usePopperTooltip","Portal","AutoSizeInput","value","Draggable","DragDropContext","Droppable","Cascader","useMountedState","Prism","textUtil","hints","_c","reportInteraction","useToggle","Collapse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/components/QueryEditorRow/QueryEditorRow.tsx","../../src/hooks/useDebounce.ts","../../src/components/DebounceInput/DebounceInput.tsx","../../src/components/Segment/Segment.tsx","../../src/components/DatePicker/styles.ts","../../src/components/DatePicker/DatePicker.tsx","../../src/components/DatePickerWithInput/styles.ts","../../src/components/DatePickerWithInput/DatePickerWithInput.tsx","../../src/components/Plugins/PluginSignatureBadge.tsx","../../src/components/DataSourcePicker/DataSourcePicker.tsx","../../src/components/DataLinks/DataLink.tsx","../../src/components/DataLinks/DataLinks.tsx","../../src/components/QueryEditor/expressions.ts","../../src/components/SQLEditor/utils/tokenType.ts","../../src/components/SQLEditor/utils/LinkedToken.ts","../../src/components/SQLEditor/types.ts","../../src/components/SQLEditor/standardSql/getStatementPosition.ts","../../src/components/SQLEditor/utils/toCompletionItem.ts","../../src/components/SQLEditor/standardSql/getStandardSuggestions.ts","../../src/components/SQLEditor/standardSql/suggestionsKindRegistry.ts","../../src/components/SQLEditor/utils/getSuggestionKind.ts","../../src/components/SQLEditor/utils/linkedTokenBuilder.ts","../../src/components/SQLEditor/standardSql/language.ts","../../src/components/SQLEditor/utils/tokenUtils.ts","../../src/components/SQLEditor/utils/commands.ts","../../src/components/SQLEditor/standardSql/standardSuggestionsRegistry.ts","../../src/components/SQLEditor/standardSql/statementPositionResolversRegistry.ts","../../src/components/SQLEditor/utils/debugger.ts","../../src/components/SQLEditor/standardSql/macros.ts","../../src/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.ts","../../src/components/SQLEditor/standardSql/definition.ts","../../src/components/SQLEditor/hooks/useLatestCallback.ts","../../src/components/SQLEditor/components/SQLEditor.tsx","../../src/components/SQLEditor/mocks/queries/singleLineFullQuery.ts","../../src/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.ts","../../src/components/SQLEditor/mocks/queries/multiLineFullQuery.ts","../../src/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.ts","../../src/components/SQLEditor/mocks/queries/singleLineEmptyQuery.ts","../../src/components/SQLEditor/mocks/queries/singleLineTwoQueries.ts","../../src/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.ts","../../src/components/SQLEditor/mocks/queries/singleLineMultipleColumns.ts","../../src/components/SQLEditor/mocks/queries/multiLineMultipleColumns.ts","../../src/components/SQLEditor/mocks/Monaco.ts","../../src/components/SQLEditor/mocks/TextModel.ts","../../src/components/SQLEditor/test-utils/statementPosition.ts","../../src/components/SQLEditor/test-utils/index.ts","../../src/components/QueryEditor/types.ts","../../src/components/QueryEditor/utils/sql.utils.ts","../../src/components/QueryEditor/EditorStack.tsx","../../src/components/QueryEditor/EditorList.tsx","../../src/components/QueryEditor/AccessoryButton.tsx","../../src/components/QueryEditor/InputGroup.tsx","../../src/components/QueryEditor/visual-query-builder/GroupByRow.tsx","../../src/components/QueryEditor/EditorFieldGroup.tsx","../../src/components/QueryEditor/EditorHeader.tsx","../../src/components/QueryEditor/EditorField.tsx","../../src/components/QueryEditor/EditorRow.tsx","../../src/components/QueryEditor/EditorRows.tsx","../../src/components/QueryEditor/EditorSwitch.tsx","../../src/components/QueryEditor/FlexItem.tsx","../../src/components/QueryEditor/InlineSelect.tsx","../../src/components/QueryEditor/Space.tsx","../../src/components/QueryEditor/defaults.ts","../../src/components/QueryEditor/ConfirmModal.tsx","../../src/components/QueryEditor/DatasetSelector.tsx","../../src/components/QueryEditor/CatalogSelector.tsx","../../src/components/QueryEditor/TableSelector.tsx","../../src/components/QueryEditor/RunQueryButton.tsx","../../src/components/QueryEditor/QueryHeader.tsx","../../src/components/QueryEditor/utils/formatSQL.ts","../../src/components/QueryEditor/query-editor-raw/QueryEditorRaw.tsx","../../src/components/QueryEditor/query-editor-raw/QueryValidator.tsx","../../src/components/QueryEditor/query-editor-raw/QueryToolbox.tsx","../../src/components/QueryEditor/query-editor-raw/RawEditor.tsx","../../src/components/QueryEditor/visual-query-builder/Preview.tsx","../../src/components/QueryEditor/utils/useSqlChange.ts","../../src/components/QueryEditor/visual-query-builder/SQLGroupByRow.tsx","../../src/components/QueryEditor/visual-query-builder/OrderByRow.tsx","../../src/components/QueryEditor/visual-query-builder/SQLOrderByRow.tsx","../../src/components/QueryEditor/visual-query-builder/SelectRow.tsx","../../src/components/QueryEditor/visual-query-builder/SQLSelectRow.tsx","../../src/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.tsx","../../src/components/QueryEditor/visual-query-builder/WhereRow.tsx","../../src/components/QueryEditor/visual-query-builder/SQLWhereRow.tsx","../../src/components/QueryEditor/visual-query-builder/EditorRow.tsx","../../src/components/QueryEditor/visual-query-builder/EditorField.tsx","../../src/components/QueryEditor/visual-query-builder/EditorRows.tsx","../../src/components/QueryEditor/visual-query-builder/VisualEditor.tsx","../../src/datasource/constants.ts","../../src/datasource/SqlDatasource.ts","../../src/components/QueryEditor/QueryEditor.tsx","../../src/components/ConfigEditor/SecureSocksProxyToggle.tsx","../../src/components/ConfigEditor/DataSourceDescription.tsx","../../src/components/ConfigEditor/ConfigSection/GenericConfigSection.tsx","../../src/components/ConfigEditor/ConfigSection/ConfigSection.tsx","../../src/components/ConfigEditor/ConfigSection/ConfigSubSection.tsx","../../src/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.tsx","../../src/components/ConfigEditor/Auth/types.ts","../../src/components/ConfigEditor/Auth/styles.ts","../../src/components/ConfigEditor/Auth/auth-method/BasicAuth.tsx","../../src/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.tsx","../../src/components/ConfigEditor/Auth/tls/TLSSettingsSection.tsx","../../src/components/ConfigEditor/Auth/tls/SelfSignedCertificate.tsx","../../src/components/ConfigEditor/Auth/tls/TLSClientAuth.tsx","../../src/components/ConfigEditor/Auth/tls/SkipTLSVerification.tsx","../../src/components/ConfigEditor/Auth/tls/TLSSettings.tsx","../../src/components/ConfigEditor/Auth/custom-headers/CustomHeader.tsx","../../src/components/ConfigEditor/Auth/custom-headers/CustomHeaders.tsx","../../src/components/ConfigEditor/Auth/Auth.tsx","../../src/components/ConfigEditor/Auth/utils.ts","../../src/components/ConfigEditor/Connection/ConnectionSettings.tsx","../../src/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.tsx","../../src/components/CustomHeadersSettings/CustomHeadersSettings.tsx","../../src/components/VisualQueryBuilder/types.ts","../../src/components/VisualQueryBuilder/QueryModellerBase.ts","../../src/components/VisualQueryBuilder/components/LabelFilterItem.tsx","../../src/components/VisualQueryBuilder/components/LabelFilters.tsx","../../src/components/VisualQueryBuilder/components/OperationExplainedBox.tsx","../../src/components/VisualQueryBuilder/components/OperationInfoButton.tsx","../../src/components/VisualQueryBuilder/components/OperationHeader.tsx","../../src/components/VisualQueryBuilder/components/OperationParamEditor.tsx","../../src/components/VisualQueryBuilder/components/OperationEditorBody.tsx","../../src/components/VisualQueryBuilder/components/OperationEditor.tsx","../../src/components/VisualQueryBuilder/components/OperationList.tsx","../../src/components/VisualQueryBuilder/components/RawQuery.tsx","../../src/components/VisualQueryBuilder/components/OperationListExplained.tsx","../../src/components/VisualQueryBuilder/components/OperationsEditorRow.tsx","../../src/components/VisualQueryBuilder/components/QueryBuilderHints.tsx","../../src/components/VisualQueryBuilder/components/QueryEditorModeToggle.tsx","../../src/components/VisualQueryBuilder/components/QueryHeaderSwitch.tsx","../../src/components/VisualQueryBuilder/components/QueryOptionGroup.tsx","../../node_modules/semver/internal/constants.js","../../node_modules/semver/internal/debug.js","../../node_modules/semver/internal/re.js","../../node_modules/semver/internal/parse-options.js","../../node_modules/semver/internal/identifiers.js","../../node_modules/semver/classes/semver.js","../../node_modules/semver/functions/parse.js","../../node_modules/semver/functions/valid.js","../../node_modules/semver/functions/clean.js","../../node_modules/semver/functions/inc.js","../../node_modules/semver/functions/diff.js","../../node_modules/semver/functions/major.js","../../node_modules/semver/functions/minor.js","../../node_modules/semver/functions/patch.js","../../node_modules/semver/functions/prerelease.js","../../node_modules/semver/functions/compare.js","../../node_modules/semver/functions/rcompare.js","../../node_modules/semver/functions/compare-loose.js","../../node_modules/semver/functions/compare-build.js","../../node_modules/semver/functions/sort.js","../../node_modules/semver/functions/rsort.js","../../node_modules/semver/functions/gt.js","../../node_modules/semver/functions/lt.js","../../node_modules/semver/functions/eq.js","../../node_modules/semver/functions/neq.js","../../node_modules/semver/functions/gte.js","../../node_modules/semver/functions/lte.js","../../node_modules/semver/functions/cmp.js","../../node_modules/semver/functions/coerce.js","../../node_modules/semver/internal/lrucache.js","../../node_modules/semver/classes/range.js","../../node_modules/semver/classes/comparator.js","../../node_modules/semver/functions/satisfies.js","../../node_modules/semver/ranges/to-comparators.js","../../node_modules/semver/ranges/max-satisfying.js","../../node_modules/semver/ranges/min-satisfying.js","../../node_modules/semver/ranges/min-version.js","../../node_modules/semver/ranges/valid.js","../../node_modules/semver/ranges/outside.js","../../node_modules/semver/ranges/gtr.js","../../node_modules/semver/ranges/ltr.js","../../node_modules/semver/ranges/intersects.js","../../node_modules/semver/ranges/simplify.js","../../node_modules/semver/ranges/subset.js","../../node_modules/semver/index.js","../../src/async-query-data/requestLooper.ts","../../src/async-query-data/DatasourceWithAsyncBackend.ts","../../src/async-query-data/RunQueryButtons.tsx"],"sourcesContent":["import React from 'react';\nexport interface QueryEditorRowProps {\n label?: string;\n className?: string;\n noFillEnd?: boolean;\n children?: React.ReactNode;\n}\n\nexport const QueryEditorRow = (props: QueryEditorRowProps) => {\n const className: string = props.className ?? 'width-8';\n const noFillEnd: boolean = props.noFillEnd ?? false;\n\n return (\n <div className=\"gf-form\">\n {props.label && <label className={`gf-form-label query-keyword ${className}`}>{props.label}</label>}\n {props.children}\n\n <div className={'gf-form--grow'}>{noFillEnd || <div className={'gf-form-label gf-form-label--grow'}></div>}</div>\n </div>\n );\n};\n","import { useState, useEffect } from 'react';\n\nexport const DEFAULT_DELAY = 275;\n\nexport const useDebounce = <T>(value: T, delay: number = DEFAULT_DELAY) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n return debouncedValue;\n};\n","import React, { type ComponentProps, useState, useEffect } from 'react';\nimport { Input } from '@grafana/ui';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface DebounceInputProps extends Omit<ComponentProps<typeof Input>, 'ref'> {\n value: string;\n onDebounce: (debouncedInput?: string) => void;\n delay?: number;\n}\n\nexport const DebounceInput = (props: DebounceInputProps) => {\n const { delay, onDebounce, value, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedInput = useDebounce(input, delay);\n\n // TODO: We should fix this\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedInput), [debouncedInput]);\n useEffect(() => setInput(value), [value]);\n\n return <Input onChange={(ev) => setInput(ev.currentTarget.value)} value={input} {...rest} />;\n};\n","import React, { useEffect, type ComponentProps, useState } from 'react';\nimport { Segment as GrafanaSegment } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { useDebounce } from '../../hooks/useDebounce';\n\nexport interface SegmentProps<T> extends Omit<ComponentProps<typeof GrafanaSegment<T>>, 'onChange'> {\n value: T;\n onDebounce: (debouncedSegment?: T) => void;\n delay?: number;\n}\n\nexport function Segment<T>(props: SegmentProps<T>) {\n const { delay, onDebounce, value, options, ...rest } = props;\n const [input, setInput] = useState(value);\n\n const debouncedSegment = useDebounce(input, delay);\n\n // TODO: We should fix the exhaustive-deps rule\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onDebounce(debouncedSegment), [debouncedSegment]);\n useEffect(() => setInput(value), [value]);\n\n return (\n <GrafanaSegment\n options={options}\n onChange={(ev: SelectableValue<T>) => setInput(ev.value!)}\n value={input}\n {...rest}\n />\n );\n}\n","import { type GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport const getStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n container: css`\n top: -1px;\n position: absolute;\n right: 544px;\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n background-color: ${theme.v1.colors.bodyBg};\n z-index: -1;\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n &:after {\n display: block;\n background-color: ${theme.v1.colors.bodyBg};\n width: 19px;\n height: 100%;\n content: '';\n position: absolute;\n top: 0;\n right: -19px;\n border-left: 1px solid ${theme.v1.colors.border1};\n }\n `,\n modal: css`\n z-index: ${theme.v1.zIndex.modal};\n `,\n content: css`\n margin: 0 auto;\n width: 268px;\n `,\n backdrop: css`\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: #202226;\n opacity: 0.7;\n z-index: ${theme.v1.zIndex.modalBackdrop};\n text-align: center;\n `,\n };\n};\n\nexport const getBodyStyles = (theme: GrafanaTheme2) => {\n const containerBorder = theme.isDark ? theme.v1.palette.dark9 : theme.v1.palette.gray5;\n\n return {\n title: css`\n color: ${theme.colors.text};\n background-color: ${theme.v1.colors.bodyBg};\n font-size: ${theme.v1.typography.size.md};\n border: 1px solid transparent;\n\n &:hover {\n position: relative;\n }\n `,\n body: css`\n z-index: ${theme.zIndex.modal};\n position: fixed;\n background-color: ${theme.v1.colors.bodyBg};\n width: 268px;\n\n box-shadow: 0px 0px 20px ${theme.v1.colors.dropdownShadow};\n border: 1px solid ${containerBorder};\n border-radius: 2px 0 0 2px;\n\n .react-calendar__navigation__label,\n .react-calendar__navigation__arrow,\n .react-calendar__navigation {\n padding-top: 4px;\n background-color: inherit;\n color: ${theme.colors.text};\n border: 0;\n font-weight: ${theme.v1.typography.weight.semibold};\n }\n\n .react-calendar__month-view__weekdays {\n background-color: inherit;\n text-align: center;\n color: ${theme.v1.palette.blue77};\n\n abbr {\n border: 0;\n text-decoration: none;\n cursor: default;\n display: block;\n padding: 4px 0 4px 0;\n }\n }\n\n .react-calendar__month-view__days {\n background-color: inherit;\n }\n\n .react-calendar__tile,\n .react-calendar__tile--now {\n margin-bottom: 4px;\n background-color: inherit;\n height: 26px;\n }\n\n .react-calendar__navigation__label,\n .react-calendar__navigation > button:focus,\n .time-picker-calendar-tile:focus {\n outline: 0;\n }\n\n .react-calendar__tile--active,\n .react-calendar__tile--active:hover {\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n box-shadow: none;\n border: 0px;\n }\n\n .react-calendar__tile--rangeEnd,\n .react-calendar__tile--rangeStart {\n padding: 0;\n border: 0px;\n color: ${theme.v1.palette.white};\n font-weight: ${theme.v1.typography.weight.semibold};\n background: ${theme.v1.palette.blue95};\n\n abbr {\n background-color: ${theme.v1.palette.blue77};\n border-radius: 100px;\n display: block;\n padding-top: 2px;\n height: 26px;\n }\n }\n\n .react-calendar__tile--rangeStart {\n border-top-left-radius: 20px;\n border-bottom-left-radius: 20px;\n }\n\n .react-calendar__tile--rangeEnd {\n border-top-right-radius: 20px;\n border-bottom-right-radius: 20px;\n }\n `,\n };\n};\n","import React, { memo } from 'react';\nimport Calendar from 'react-calendar';\nimport { useTheme2, ClickOutsideWrapper, Icon } from '@grafana/ui';\nimport { getStyles, getBodyStyles } from './styles';\n\nexport interface DatePickerProps {\n isOpen?: boolean;\n onClose: () => void;\n onChange: (value: Date) => void;\n value?: Date;\n}\n\nexport const DatePicker = memo<DatePickerProps>((props) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const { isOpen, onClose } = props;\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <ClickOutsideWrapper useCapture={true} includeButtonPress={false} onClick={onClose}>\n <div className={styles.modal} data-testid=\"date-picker\">\n <Body {...props} />\n </div>\n </ClickOutsideWrapper>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\nconst Body = memo<DatePickerProps>(({ value, onChange }) => {\n const theme = useTheme2();\n const styles = getBodyStyles(theme);\n\n return (\n <Calendar\n className={styles.body}\n tileClassName={styles.title}\n value={value || new Date()}\n nextLabel={<Icon name=\"angle-right\" />}\n prevLabel={<Icon name=\"angle-left\" />}\n onChange={(ev: any) => {\n if (!Array.isArray(ev)) {\n onChange(ev);\n }\n }}\n locale=\"en\"\n />\n );\n});\n\nBody.displayName = 'Body';\n","import { css } from '@emotion/css';\n\nexport function getStyles() {\n return {\n input: css({\n /* hides the native Calendar picker icon given when using type=date */\n \"input[type='date']::-webkit-inner-spin-button, input[type='date']::-webkit-calendar-picker-indicator\": {\n display: 'none',\n WebkitAppearance: 'none',\n },\n }),\n };\n}\n","import React, { type ComponentProps, useState } from 'react';\nimport { Input } from '@grafana/ui';\nimport { DatePicker } from '../DatePicker/DatePicker';\nimport { getStyles } from './styles';\nimport { cx } from '@emotion/css';\n\nexport const formatDate = (date: Date) => date.toISOString().split('T')[0];\n\nexport interface DatePickerWithInputProps extends Omit<ComponentProps<typeof Input>, 'ref' | 'value' | 'onChange'> {\n value?: Date;\n onChange: (value: Date) => void;\n}\n\nexport const DatePickerWithInput = (props: DatePickerWithInputProps) => {\n const { value, onChange, className, ...rest } = props;\n const [open, setOpen] = useState(false);\n const styles = getStyles();\n\n return (\n <>\n <Input\n type=\"date\"\n placeholder=\"Date\"\n value={formatDate(value || new Date())}\n onClick={() => setOpen(true)}\n onChange={() => {}}\n className={cx(styles.input, className)}\n {...rest}\n />\n <DatePicker isOpen={open} value={value} onChange={(ev: any) => onChange(ev)} onClose={() => setOpen(false)} />\n </>\n );\n};\n","import React, { type HTMLAttributes } from 'react';\nimport { Badge, type BadgeProps } from '@grafana/ui';\nimport { PluginErrorCode, PluginSignatureStatus } from '@grafana/data';\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n status?: PluginSignatureStatus;\n}\n\nexport const PluginSignatureBadge = ({ status, ...otherProps }: Props) => {\n const display = getSignatureDisplayModel(status);\n return (\n <Badge\n text={display.text}\n color={display.color as any}\n icon={display.icon}\n tooltip={display.tooltip}\n {...otherProps}\n />\n );\n};\n\nexport function isUnsignedPluginSignature(signature?: PluginSignatureStatus) {\n return signature && signature !== PluginSignatureStatus.valid && signature !== PluginSignatureStatus.internal;\n}\n\nexport function mapPluginErrorCodeToSignatureStatus(code: PluginErrorCode) {\n switch (code) {\n case PluginErrorCode.invalidSignature:\n return PluginSignatureStatus.invalid;\n case PluginErrorCode.missingSignature:\n return PluginSignatureStatus.missing;\n case PluginErrorCode.modifiedSignature:\n return PluginSignatureStatus.modified;\n default:\n return PluginSignatureStatus.missing;\n }\n}\n\nfunction getSignatureDisplayModel(signature?: PluginSignatureStatus): BadgeProps {\n if (!signature) {\n signature = PluginSignatureStatus.invalid;\n }\n\n switch (signature) {\n case PluginSignatureStatus.internal:\n return { text: 'Core', icon: 'cube', color: 'blue', tooltip: 'Core plugin that is bundled with Grafana' };\n case PluginSignatureStatus.valid:\n return { text: 'Signed', icon: 'lock', color: 'green', tooltip: 'Signed and verified plugin' };\n case PluginSignatureStatus.invalid:\n return {\n text: 'Invalid signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Invalid plugin signature',\n };\n case PluginSignatureStatus.modified:\n return {\n text: 'Modified signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Valid signature but content has been modified',\n };\n case PluginSignatureStatus.missing:\n return {\n text: 'Missing signature',\n icon: 'exclamation-triangle',\n color: 'red',\n tooltip: 'Missing plugin signature',\n };\n }\n\n return { text: 'Unsigned', icon: 'exclamation-triangle', color: 'red', tooltip: 'Unsigned external plugin' };\n}\n\nPluginSignatureBadge.displayName = 'PluginSignatureBadge';\n","import React, { PureComponent } from 'react';\nimport { HorizontalGroup, Select } from '@grafana/ui';\nimport { type DataSourceInstanceSettings, type SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { isUnsignedPluginSignature, PluginSignatureBadge } from '../Plugins/PluginSignatureBadge';\nimport { getDataSourceSrv, type DataSourceSrv } from '@grafana/runtime';\n\nexport interface Props {\n onChange: (ds: DataSourceInstanceSettings) => void;\n current: string | null;\n hideTextValue?: boolean;\n onBlur?: () => void;\n autoFocus?: boolean;\n openMenuOnFocus?: boolean;\n placeholder?: string;\n tracing?: boolean;\n mixed?: boolean;\n dashboard?: boolean;\n metrics?: boolean;\n annotations?: boolean;\n variables?: boolean;\n pluginId?: string;\n noDefault?: boolean;\n}\n\nexport interface State {\n error?: string;\n}\n\nexport class DataSourcePicker extends PureComponent<Props, State> {\n dataSourceSrv: DataSourceSrv = getDataSourceSrv();\n\n static defaultProps: Partial<Props> = {\n autoFocus: false,\n openMenuOnFocus: false,\n placeholder: 'Select datasource',\n };\n\n state: State = {};\n\n constructor(props: Props) {\n super(props);\n }\n\n componentDidMount() {\n const { current } = this.props;\n const dsSettings = this.dataSourceSrv.getInstanceSettings(current!);\n if (!dsSettings) {\n this.setState({ error: 'Could not find data source ' + current });\n }\n }\n\n onChange = (item: SelectableValue<string>) => {\n const dsSettings = this.dataSourceSrv.getInstanceSettings(item.value!);\n\n if (dsSettings) {\n this.props.onChange(dsSettings);\n this.setState({ error: undefined });\n }\n };\n\n private getCurrentValue(): SelectableValue<string> {\n const { current, hideTextValue, noDefault } = this.props;\n\n if (!current && noDefault) {\n return {\n label: 'No datasources found',\n };\n }\n\n const ds = this.dataSourceSrv.getInstanceSettings(current!);\n\n if (ds) {\n return {\n label: ds.name.substr(0, 37),\n value: ds.name,\n imgUrl: ds.meta.info.logos.small,\n hideText: hideTextValue,\n meta: ds.meta,\n };\n }\n\n return {\n label: (current ?? 'no name') + ' - not found',\n value: (current ?? 'no name') + ' - not found',\n imgUrl: '',\n hideText: hideTextValue,\n };\n }\n\n getDataSourceOptions(): Array<SelectableValue<string>> {\n const options: Array<SelectableValue<string>> = this.dataSourceSrv.getList().map((ds) => ({\n value: ds.uid,\n label: ds.name,\n imgUrl: ds.meta.info.logos.small,\n meta: ds.meta,\n }));\n\n return options;\n }\n\n render() {\n const { autoFocus, onBlur, openMenuOnFocus, placeholder } = this.props;\n const { error } = this.state;\n const options = this.getDataSourceOptions();\n const value = this.getCurrentValue();\n\n return (\n <div aria-label={selectors.components.DataSourcePicker.container}>\n <Select\n className=\"ds-picker select-container\"\n isMulti={false}\n isClearable={false}\n backspaceRemovesValue={false}\n onChange={this.onChange}\n options={options}\n autoFocus={autoFocus}\n onBlur={onBlur}\n openMenuOnFocus={openMenuOnFocus}\n maxMenuHeight={500}\n placeholder={placeholder}\n noOptionsMessage=\"No datasources found\"\n value={value}\n invalid={!!error}\n getOptionLabel={(o) => {\n if (o.meta && isUnsignedPluginSignature(o.meta.signature) && o !== value) {\n return (\n <HorizontalGroup align=\"center\" justify=\"space-between\">\n <span>{o.label}</span> <PluginSignatureBadge status={o.meta.signature} />\n </HorizontalGroup>\n );\n }\n return o.label || '';\n }}\n />\n </div>\n );\n }\n}\n","import React, { type Dispatch, type SetStateAction, useEffect, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { type VariableSuggestion, type DataSourceInstanceSettings, type DataSourceJsonData } from '@grafana/data';\nimport { Button, LegacyForms, DataLinkInput, stylesFactory } from '@grafana/ui';\nconst { FormField, Switch } = LegacyForms;\nimport { type DataLinkConfig } from './types';\nimport { usePrevious } from 'react-use';\nimport { DataSourcePicker } from '../DataSourcePicker/DataSourcePicker';\n\nconst getStyles = stylesFactory(() => ({\n firstRow: css`\n display: flex;\n `,\n nameField: css`\n flex: 2;\n `,\n regexField: css`\n flex: 3;\n `,\n row: css`\n display: flex;\n align-items: baseline;\n `,\n}));\n\ntype Props = {\n value: DataLinkConfig;\n datasources?: Array<DataSourceInstanceSettings<DataSourceJsonData>>;\n onChange: (value: DataLinkConfig) => void;\n onDelete: () => void;\n suggestions: VariableSuggestion[];\n className?: string;\n};\nexport const DataLink = (props: Props) => {\n const { value, onChange, onDelete, suggestions, className } = props;\n const styles = getStyles();\n const [showInternalLink, setShowInternalLink] = useInternalLink(value.datasourceUid);\n\n const handleChange = (field: keyof typeof value) => (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange({\n ...value,\n [field]: event.currentTarget.value,\n });\n };\n\n return (\n <div className={className}>\n <div className={styles.firstRow + ' gf-form'}>\n <FormField\n className={styles.nameField}\n labelWidth={6}\n // A bit of a hack to prevent using default value for the width from FormField\n inputWidth={null}\n label=\"Field\"\n type=\"text\"\n value={value.field}\n tooltip={'Can be exact field name or a regex pattern that will match on the field name.'}\n onChange={handleChange('field')}\n />\n <Button\n variant={'destructive'}\n title=\"Remove field\"\n icon=\"times\"\n onClick={(event) => {\n event.preventDefault();\n onDelete();\n }}\n />\n </div>\n <div className=\"gf-form\">\n <FormField\n className={styles.nameField}\n inputWidth={null}\n label=\"Label\"\n type=\"text\"\n value={value.label}\n onChange={handleChange('label')}\n tooltip={'Use to provide a meaningful label to the data matched in the regex'}\n />\n <FormField\n className={styles.regexField}\n inputWidth={null}\n label=\"Regex\"\n type=\"text\"\n value={value.matcherRegex}\n onChange={handleChange('matcherRegex')}\n tooltip={\n 'Use to parse and capture some part of the log message. You can use the captured groups in the template.'\n }\n />\n </div>\n <div className=\"gf-form\">\n <FormField\n label={showInternalLink ? 'Query' : 'URL'}\n labelWidth={6}\n inputEl={\n <DataLinkInput\n placeholder={showInternalLink ? '${__value.raw}' : 'http://example.com/${__value.raw}'}\n value={value.url || ''}\n onChange={(newValue) =>\n onChange({\n ...value,\n url: newValue,\n })\n }\n suggestions={suggestions}\n />\n }\n className={css`\n width: 100%;\n `}\n />\n </div>\n\n <div className={styles.row}>\n <Switch\n labelClass={'width-6'}\n label=\"Internal link\"\n checked={showInternalLink}\n onChange={() => {\n if (showInternalLink) {\n onChange({\n ...value,\n datasourceUid: undefined,\n });\n }\n setShowInternalLink(!showInternalLink);\n }}\n />\n {showInternalLink && (\n <DataSourcePicker\n // Uid and value should be always set in the db and so in the items.\n onChange={(ds) => {\n onChange({\n ...value,\n datasourceUid: ds.uid,\n });\n }}\n current={value.datasourceUid}\n />\n )}\n </div>\n </div>\n );\n};\n\nfunction useInternalLink(datasourceUid?: string): [boolean, Dispatch<SetStateAction<boolean>>] {\n const [showInternalLink, setShowInternalLink] = useState<boolean>(!!datasourceUid);\n const previousUid = usePrevious(datasourceUid);\n\n // Force internal link visibility change if uid changed outside of this component.\n useEffect(() => {\n if (!previousUid && datasourceUid && !showInternalLink) {\n setShowInternalLink(true);\n }\n if (previousUid && !datasourceUid && showInternalLink) {\n setShowInternalLink(false);\n }\n }, [previousUid, datasourceUid, showInternalLink]);\n\n return [showInternalLink, setShowInternalLink];\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { Button, useTheme2 } from '@grafana/ui';\nimport { type GrafanaTheme2, VariableOrigin, DataLinkBuiltInVars } from '@grafana/data';\nimport { type DataLinkConfig } from './types';\nimport { DataLink } from './DataLink';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: css`\n padding-bottom: ${theme.v1.spacing.md};\n color: ${theme.v1.colors.textWeak};\n `,\n dataLink: css`\n margin-bottom: ${theme.v1.spacing.sm};\n `,\n});\n\ntype Props = {\n value?: DataLinkConfig[];\n onChange: (value: DataLinkConfig[]) => void;\n};\nexport const DataLinks = (props: Props) => {\n const { value, onChange } = props;\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n return (\n <>\n <h3 className=\"page-heading\">Data links</h3>\n\n <div className={styles.infoText}>\n Add links to existing fields. Links will be shown in log row details next to the field value.\n </div>\n\n <div className=\"gf-form-group\">\n {value &&\n value.map((field, index) => {\n return (\n <DataLink\n className={styles.dataLink}\n key={index}\n value={field}\n onChange={(newField) => {\n const newDataLinks = [...value];\n newDataLinks.splice(index, 1, newField);\n onChange(newDataLinks);\n }}\n onDelete={() => {\n const newDataLinks = [...value];\n newDataLinks.splice(index, 1);\n onChange(newDataLinks);\n }}\n suggestions={[\n {\n value: DataLinkBuiltInVars.valueRaw,\n label: 'Raw value',\n documentation: 'Raw value of the field',\n origin: VariableOrigin.Value,\n },\n ]}\n />\n );\n })}\n <div>\n <Button\n variant={'secondary'}\n className={css`\n margin-right: 10px;\n `}\n icon=\"plus\"\n onClick={(event) => {\n event.preventDefault();\n const newDataLinks = [...(value || []), { field: '', label: '', matcherRegex: '', url: '' }];\n onChange(newDataLinks);\n }}\n >\n Add\n </Button>\n </div>\n </div>\n </>\n );\n};\n","export enum QueryEditorPropertyType {\n String = 'string',\n}\n\nexport interface QueryEditorProperty {\n type: QueryEditorPropertyType;\n name?: string;\n}\n\nexport type QueryEditorOperatorType = string | boolean | number;\ntype QueryEditorOperatorValueType = QueryEditorOperatorType | QueryEditorOperatorType[];\n\nexport interface QueryEditorOperator<T extends QueryEditorOperatorValueType> {\n name?: string;\n value?: T;\n}\n\nexport interface QueryEditorOperatorExpression {\n type: QueryEditorExpressionType.Operator;\n property: QueryEditorProperty;\n operator: QueryEditorOperator<QueryEditorOperatorValueType>;\n}\n\nexport interface QueryEditorArrayExpression {\n type: QueryEditorExpressionType.And | QueryEditorExpressionType.Or;\n expressions: QueryEditorExpression[] | QueryEditorArrayExpression[];\n}\n\nexport interface QueryEditorPropertyExpression {\n type: QueryEditorExpressionType.Property;\n property: QueryEditorProperty;\n}\n\nexport enum QueryEditorExpressionType {\n Property = 'property',\n Operator = 'operator',\n Or = 'or',\n And = 'and',\n GroupBy = 'groupBy',\n Function = 'function',\n FunctionParameter = 'functionParameter',\n}\n\nexport type QueryEditorExpression =\n | QueryEditorArrayExpression\n | QueryEditorPropertyExpression\n | QueryEditorGroupByExpression\n | QueryEditorFunctionExpression\n | QueryEditorFunctionParameterExpression\n | QueryEditorOperatorExpression;\n\nexport interface QueryEditorGroupByExpression {\n type: QueryEditorExpressionType.GroupBy;\n property: QueryEditorProperty;\n}\n\nexport interface QueryEditorFunctionExpression {\n type: QueryEditorExpressionType.Function;\n name?: string;\n parameters?: QueryEditorFunctionParameterExpression[];\n}\n\nexport interface QueryEditorFunctionParameterExpression {\n type: QueryEditorExpressionType.FunctionParameter;\n name?: string;\n}\n","export enum TokenType {\n Parenthesis = 'delimiter.parenthesis.sql',\n Whitespace = 'white.sql',\n Keyword = 'keyword.sql',\n Delimiter = 'delimiter.sql',\n Operator = 'operator.sql',\n Identifier = 'identifier.sql',\n IdentifierQuote = 'identifier.quote.sql',\n Type = 'type.sql',\n Function = 'predefined.sql',\n Number = 'number.sql',\n String = 'string.sql',\n Variable = 'variable.sql',\n}\n","import { type monacoTypes } from '@grafana/ui';\nimport { TokenType } from './tokenType';\n\nexport class LinkedToken {\n constructor(\n public type: string,\n public value: string,\n public range: monacoTypes.IRange,\n public previous: LinkedToken | null,\n public next: LinkedToken | null\n ) {}\n\n isKeyword(): boolean {\n return this.type === TokenType.Keyword;\n }\n\n isWhiteSpace(): boolean {\n return this.type === TokenType.Whitespace;\n }\n\n isParenthesis(): boolean {\n return this.type === TokenType.Parenthesis;\n }\n\n isIdentifier(): boolean {\n return this.type === TokenType.Identifier;\n }\n\n isString(): boolean {\n return this.type === TokenType.String;\n }\n\n isNumber(): boolean {\n return this.type === TokenType.Number;\n }\n\n isDoubleQuotedString(): boolean {\n return this.type === TokenType.Type;\n }\n\n isVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n isFunction(): boolean {\n return this.type === TokenType.Function;\n }\n\n isOperator(): boolean {\n return this.type === TokenType.Operator;\n }\n\n isTemplateVariable(): boolean {\n return this.type === TokenType.Variable;\n }\n\n is(type: TokenType, value?: string | number | boolean): boolean {\n const isType = this.type === type;\n\n return value !== undefined ? isType && compareTokenWithValue(type, this, value) : isType;\n }\n\n getPreviousNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getPreviousUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.previous;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.previous;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.previous;\n }\n\n return tokens;\n }\n\n getNextUntil(type: TokenType, ignoreTypes: TokenType[], value?: string): LinkedToken[] | null {\n let tokens: LinkedToken[] = [];\n let curr = this.next;\n while (curr != null) {\n if (ignoreTypes.some((t) => t === curr?.type)) {\n curr = curr.next;\n continue;\n }\n\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return tokens;\n }\n if (!curr.isWhiteSpace()) {\n tokens.push(curr);\n }\n curr = curr.next;\n }\n\n return tokens;\n }\n\n getPreviousKeyword(): LinkedToken | null {\n let curr = this.previous;\n while (curr != null) {\n if (curr.isKeyword()) {\n return curr;\n }\n curr = curr.previous;\n }\n return null;\n }\n\n getNextNonWhiteSpaceToken(): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n if (!curr.isWhiteSpace()) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n\n getNextOfType(type: TokenType, value?: string): LinkedToken | null {\n let curr = this.next;\n while (curr != null) {\n const isType = curr.type === type;\n\n if (value !== undefined ? isType && compareTokenWithValue(type, curr, value) : isType) {\n return curr;\n }\n curr = curr.next;\n }\n return null;\n }\n}\n\nfunction compareTokenWithValue(type: TokenType, token: LinkedToken, value: string | number | boolean) {\n return type === TokenType.Keyword || type === TokenType.Operator\n ? token.value.toLowerCase() === value.toString().toLowerCase()\n : token.value === value;\n}\n","import { type Monaco, type monacoTypes } from '@grafana/ui';\nimport { type LinkedToken } from './utils/LinkedToken';\n\n/**\n * Provides a context for suggestions resolver\n * @alpha\n */\nexport interface PositionContext {\n position: monacoTypes.IPosition;\n kind: SuggestionKind[];\n statementPosition: StatementPosition[];\n currentToken: LinkedToken | null;\n range: monacoTypes.IRange;\n}\n\nexport type CustomSuggestion = Partial<monacoTypes.languages.CompletionItem> & { label: string };\n\nexport interface CustomSuggestionKind {\n id: string;\n suggestionsResolver: SuggestionsResolver;\n applyTo?: Array<StatementPosition | string>;\n overrideDefault?: boolean;\n}\n\nexport interface CustomStatementPlacement {\n id: string;\n name?: string;\n resolve: StatementPositionResolver;\n overrideDefault?: boolean;\n}\nexport type StatementPlacementProvider = () => CustomStatementPlacement[];\nexport type SuggestionKindProvider = () => CustomSuggestionKind[];\n\nexport interface ColumnDefinition {\n name: string;\n type?: string;\n description?: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface SchemaDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface TableDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface Operator {\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n}\n\nexport interface TableIdentifier {\n table?: string;\n schema?: string;\n catalog?: string;\n}\n\nexport interface SQLCompletionItemProvider\n extends Omit<monacoTypes.languages.CompletionItemProvider, 'provideCompletionItems'> {\n /**\n * Allows dialect specific functions to be added to the completion list.\n * @alpha\n */\n supportedFunctions?: () => Array<{\n id: string;\n name: string;\n description?: string;\n }>;\n\n /**\n * Allows dialect specific operators to be added to the completion list.\n * @alpha\n */\n supportedOperators?: () => Array<{\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n }>;\n\n supportedMacros?: () => Array<{\n id: string;\n text: string;\n type: MacroType;\n args: string[];\n description?: string;\n }>;\n\n /**\n * Allows custom suggestion kinds to be defined and correlate them with <Custom>StatementPosition.\n * @alpha\n */\n customSuggestionKinds?: SuggestionKindProvider;\n\n /**\n * Allows custom statement placement definition.\n * @alpha\n */\n customStatementPlacement?: StatementPlacementProvider;\n\n /**\n * Allows providing a custom function for resolving schemas.\n * It's up to the consumer to decide whether the schemas are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n schemas?: {\n resolve: () => Promise<SchemaDefinition[]>;\n };\n\n /**\n * Allows providing a custom function for resolving db tables.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n tables?: {\n resolve: (TableIdentifier: TableIdentifier | null) => Promise<TableDefinition[]>;\n // Allows providing a custom function for calculating the table name from the query. If not specified a default implementation is used.\n parseName?: (token: LinkedToken | null | undefined) => TableIdentifier;\n };\n /**\n * Allows providing a custom function for resolving table.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n columns?: {\n resolve: (identifier?: TableIdentifier) => Promise<ColumnDefinition[]>;\n };\n\n /**\n * TODO: Not sure whether or not we need this. Would like to avoid this kind of flexibility.\n * @alpha\n */\n provideCompletionItems?: (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n context: monacoTypes.languages.CompletionContext,\n token: monacoTypes.CancellationToken,\n positionContext: PositionContext // Decorates original provideCompletionItems function with our custom statement position context\n ) => monacoTypes.languages.CompletionList;\n}\n\nexport interface SQLMonarchLanguage extends monacoTypes.languages.IMonarchLanguage {\n keywords?: string[];\n builtinFunctions?: string[];\n\n /* Example: AND, OR, LIKE */\n logicalOperators?: string[];\n /* Example: >, <>, = */\n comparisonOperators?: string[];\n\n /** Used by basic languages in the monaco registry **/\n operators?: string[];\n}\n\nexport type StatementPositionResolver = (\n currentToken: LinkedToken | null,\n previousKeyword: LinkedToken | null,\n previousNonWhiteSpace: LinkedToken | null,\n previousIsSlash: Boolean\n) => Boolean;\n\nexport type SuggestionsResolver = <T extends PositionContext = PositionContext>(\n positionContext: T\n) => Promise<CustomSuggestion[]>;\n\nexport type LanguageCompletionProvider = (m: Monaco, l?: SQLMonarchLanguage) => SQLCompletionItemProvider;\n\nexport interface LanguageDefinition extends monacoTypes.languages.ILanguageExtensionPoint {\n loader?: (module: any) => Promise<{\n language: SQLMonarchLanguage;\n conf: monacoTypes.languages.LanguageConfiguration;\n }>;\n // Provides API for customizing the autocomplete\n completionProvider?: (m: Monaco, language: SQLMonarchLanguage) => SQLCompletionItemProvider;\n // Function that returns a formatted query\n formatter?: (q: string) => string;\n}\n\nexport enum OperatorType {\n Comparison,\n Logical,\n}\n\nexport enum MacroType {\n Value,\n Filter,\n Group,\n Column,\n Table,\n}\n\nexport { TokenType } from './utils/tokenType';\n\nexport enum StatementPosition {\n Unknown = 'unknown',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n AfterSelectKeyword = 'afterSelectKeyword',\n AfterSelectArguments = 'afterSelectArguments',\n AfterSelectFuncFirstArgument = 'afterSelectFuncFirstArgument',\n SelectAlias = 'selectAlias',\n AfterFromKeyword = 'afterFromKeyword',\n AfterTable = 'afterTable',\n SchemaFuncFirstArgument = 'schemaFuncFirstArgument',\n SchemaFuncExtraArgument = 'schemaFuncExtraArgument',\n FromKeyword = 'fromKeyword',\n AfterFrom = 'afterFrom',\n WhereKeyword = 'whereKeyword',\n WhereComparisonOperator = 'whereComparisonOperator',\n WhereValue = 'whereValue',\n AfterWhereFunctionArgument = 'afterWhereFunctionArgument',\n AfterGroupByFunctionArgument = 'afterGroupByFunctionArgument',\n AfterWhereValue = 'afterWhereValue',\n AfterGroupByKeywords = 'afterGroupByKeywords',\n AfterGroupBy = 'afterGroupBy',\n AfterOrderByKeywords = 'afterOrderByKeywords',\n AfterOrderByFunction = 'afterOrderByFunction',\n AfterOrderByDirection = 'afterOrderByDirection',\n AfterIsOperator = 'afterIsOperator',\n AfterIsNotOperator = 'afterIsNotOperator',\n AfterSchema = 'afterSchema',\n}\n\nexport enum SuggestionKind {\n Schemas = 'schemas',\n Tables = 'tables',\n Columns = 'columns',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n FunctionsWithArguments = 'functionsWithArguments',\n FromKeyword = 'fromKeyword',\n WhereKeyword = 'whereKeyword',\n GroupByKeywords = 'groupByKeywords',\n OrderByKeywords = 'orderByKeywords',\n FunctionsWithoutArguments = 'functionsWithoutArguments',\n LimitKeyword = 'limitKeyword',\n SortOrderDirectionKeyword = 'sortOrderDirectionKeyword',\n ComparisonOperators = 'comparisonOperators',\n LogicalOperators = 'logicalOperators',\n SelectMacro = 'selectMacro',\n TableMacro = 'tableMacro',\n FilterMacro = 'filterMacro',\n GroupMacro = 'groupMacro',\n BoolValues = 'boolValues',\n NullValue = 'nullValue',\n NotKeyword = 'notKeyword',\n TemplateVariables = 'templateVariables',\n StarWildCard = 'starWildCard',\n}\n\n// TODO: export from grafana/ui\nexport enum CompletionItemPriority {\n High = 'a',\n MediumHigh = 'd',\n Medium = 'g',\n MediumLow = 'k',\n Low = 'q',\n}\n\nexport enum CompletionItemKind {\n Method = 0,\n Function = 1,\n Constructor = 2,\n Field = 3,\n Variable = 4,\n Class = 5,\n Struct = 6,\n Interface = 7,\n Module = 8,\n Property = 9,\n Event = 10,\n Operator = 11,\n Unit = 12,\n Value = 13,\n Constant = 14,\n Enum = 15,\n EnumMember = 16,\n Keyword = 17,\n Text = 18,\n Color = 19,\n File = 20,\n Reference = 21,\n Customcolor = 22,\n Folder = 23,\n TypeParameter = 24,\n User = 25,\n Issue = 26,\n Snippet = 27,\n}\n\nexport enum CompletionItemInsertTextRule {\n KeepWhitespace = 1,\n InsertAsSnippet = 4,\n}\n\nexport enum SQLEditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n","import { StatementPosition, TokenType } from '../types';\nimport { type LinkedToken } from '../utils/LinkedToken';\nimport { type StatementPositionResolversRegistryItem } from './types';\nimport { type Registry } from '@grafana/data';\n\n// Given current cursor position in the SQL editor, returns the statement position.\nexport function getStatementPosition(\n currentToken: LinkedToken | null,\n statementPositionResolversRegistry: Registry<StatementPositionResolversRegistryItem>\n): StatementPosition[] {\n const previousNonWhiteSpace = currentToken?.getPreviousNonWhiteSpaceToken();\n const previousKeyword = currentToken?.getPreviousKeyword();\n const previousIsSlash = currentToken?.getPreviousNonWhiteSpaceToken()?.is(TokenType.Operator, '/');\n const resolvers = statementPositionResolversRegistry.list();\n const positions = [];\n\n for (const resolver of resolvers) {\n if (\n resolver.resolve(currentToken, previousKeyword ?? null, previousNonWhiteSpace ?? null, Boolean(previousIsSlash))\n ) {\n positions.push(resolver.id);\n }\n }\n\n if (positions.length === 0) {\n return [StatementPosition.Unknown];\n }\n return positions;\n}\n","import { type monacoTypes } from '@grafana/ui';\nimport { CompletionItemKind, CompletionItemPriority } from '../types';\n\nexport const toCompletionItem = (\n value: string,\n range: monacoTypes.IRange,\n rest: Partial<monacoTypes.languages.CompletionItem> = {}\n) => {\n const item: monacoTypes.languages.CompletionItem = {\n label: value,\n insertText: value,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.Medium,\n range,\n ...rest,\n };\n return item;\n};\n","import { type Registry } from '@grafana/data';\nimport { type Monaco, type monacoTypes } from '@grafana/ui';\nimport { type PositionContext, type SuggestionKind } from '../types';\nimport { type LinkedToken } from '../utils/LinkedToken';\nimport { toCompletionItem } from '../utils/toCompletionItem';\nimport { type SuggestionsRegistryItem } from './types';\n\n// Given standard and custom registered suggestions and kinds of suggestion expected, return a list of completion items\nexport const getStandardSuggestions = async (\n monaco: Monaco,\n currentToken: LinkedToken | null,\n suggestionKinds: SuggestionKind[],\n positionContext: PositionContext,\n suggestionsRegistry: Registry<SuggestionsRegistryItem>\n): Promise<monacoTypes.languages.CompletionItem[]> => {\n let suggestions: monacoTypes.languages.CompletionItem[] = [];\n const invalidRangeToken =\n currentToken?.isWhiteSpace() ||\n currentToken?.isParenthesis() ||\n (currentToken?.isIdentifier() && currentToken.value.endsWith('.'));\n const range =\n invalidRangeToken || !currentToken?.range\n ? monaco.Range.fromPositions(positionContext.position)\n : currentToken?.range;\n\n // iterating over Set to deduplicate\n for (const suggestion of [...new Set(suggestionKinds)]) {\n const registeredSuggestions = suggestionsRegistry.getIfExists(suggestion);\n if (registeredSuggestions) {\n const su = await registeredSuggestions.suggestions({ ...positionContext, range }, monaco);\n suggestions = [...suggestions, ...su.map((s) => toCompletionItem(s.label, range, { kind: s.kind, ...s }))];\n }\n }\n return Promise.resolve(suggestions);\n};\n","import { type RegistryItem } from '@grafana/data';\nimport { StatementPosition, SuggestionKind } from '../types';\n\nexport interface SuggestionKindRegistryItem extends RegistryItem {\n id: StatementPosition;\n kind: SuggestionKind[];\n}\n\n// Registry of possible suggestions for the given statement position\nexport const initSuggestionsKindRegistry = (): SuggestionKindRegistryItem[] => {\n return [\n {\n id: StatementPosition.SelectKeyword,\n name: StatementPosition.SelectKeyword,\n kind: [SuggestionKind.SelectKeyword],\n },\n {\n id: StatementPosition.WithKeyword,\n name: StatementPosition.WithKeyword,\n kind: [SuggestionKind.WithKeyword],\n },\n {\n id: StatementPosition.AfterSelectKeyword,\n name: StatementPosition.AfterSelectKeyword,\n kind: [\n SuggestionKind.StarWildCard,\n SuggestionKind.FunctionsWithArguments,\n SuggestionKind.Columns,\n SuggestionKind.SelectMacro,\n ],\n },\n {\n id: StatementPosition.AfterSelectFuncFirstArgument,\n name: StatementPosition.AfterSelectFuncFirstArgument,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterGroupByFunctionArgument,\n name: StatementPosition.AfterGroupByFunctionArgument,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterWhereFunctionArgument,\n name: StatementPosition.AfterWhereFunctionArgument,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterSelectArguments,\n name: StatementPosition.AfterSelectArguments,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterFromKeyword,\n name: StatementPosition.AfterFromKeyword,\n kind: [SuggestionKind.Schemas, SuggestionKind.Tables, SuggestionKind.TableMacro],\n },\n {\n id: StatementPosition.AfterSchema,\n name: StatementPosition.AfterSchema,\n kind: [SuggestionKind.Tables, SuggestionKind.TableMacro],\n },\n {\n id: StatementPosition.SelectAlias,\n name: StatementPosition.SelectAlias,\n kind: [SuggestionKind.Columns, SuggestionKind.FunctionsWithArguments],\n },\n {\n id: StatementPosition.FromKeyword,\n name: StatementPosition.FromKeyword,\n kind: [SuggestionKind.FromKeyword],\n },\n {\n id: StatementPosition.AfterFrom,\n name: StatementPosition.AfterFrom,\n kind: [\n SuggestionKind.WhereKeyword,\n SuggestionKind.GroupByKeywords,\n SuggestionKind.OrderByKeywords,\n SuggestionKind.LimitKeyword,\n ],\n },\n {\n id: StatementPosition.AfterTable,\n name: StatementPosition.AfterTable,\n kind: [\n SuggestionKind.WhereKeyword,\n SuggestionKind.GroupByKeywords,\n SuggestionKind.OrderByKeywords,\n SuggestionKind.LimitKeyword,\n ],\n },\n {\n id: StatementPosition.WhereKeyword,\n name: StatementPosition.WhereKeyword,\n kind: [SuggestionKind.Columns, SuggestionKind.FilterMacro, SuggestionKind.TemplateVariables],\n },\n {\n id: StatementPosition.WhereComparisonOperator,\n name: StatementPosition.WhereComparisonOperator,\n kind: [SuggestionKind.ComparisonOperators],\n },\n {\n id: StatementPosition.WhereValue,\n name: StatementPosition.WhereValue,\n kind: [SuggestionKind.FilterMacro, SuggestionKind.TemplateVariables],\n },\n {\n id: StatementPosition.AfterWhereValue,\n name: StatementPosition.AfterWhereValue,\n kind: [\n SuggestionKind.LogicalOperators,\n SuggestionKind.GroupByKeywords,\n SuggestionKind.OrderByKeywords,\n SuggestionKind.LimitKeyword,\n SuggestionKind.Columns,\n SuggestionKind.TemplateVariables,\n ],\n },\n {\n id: StatementPosition.AfterGroupByKeywords,\n name: StatementPosition.AfterGroupByKeywords,\n kind: [SuggestionKind.GroupMacro, SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterGroupBy,\n name: StatementPosition.AfterGroupBy,\n kind: [SuggestionKind.OrderByKeywords, SuggestionKind.LimitKeyword],\n },\n {\n id: StatementPosition.AfterOrderByKeywords,\n name: StatementPosition.AfterOrderByKeywords,\n kind: [SuggestionKind.Columns],\n },\n {\n id: StatementPosition.AfterOrderByFunction,\n name: StatementPosition.AfterOrderByFunction,\n kind: [SuggestionKind.SortOrderDirectionKeyword, SuggestionKind.LimitKeyword],\n },\n {\n id: StatementPosition.AfterOrderByDirection,\n name: StatementPosition.AfterOrderByDirection,\n kind: [SuggestionKind.LimitKeyword],\n },\n {\n id: StatementPosition.AfterIsOperator,\n name: StatementPosition.AfterOrderByDirection,\n kind: [SuggestionKind.NotKeyword, SuggestionKind.NullValue, SuggestionKind.BoolValues],\n },\n {\n id: StatementPosition.AfterIsNotOperator,\n name: StatementPosition.AfterOrderByDirection,\n kind: [SuggestionKind.NullValue, SuggestionKind.BoolValues],\n },\n ];\n};\n","import { type Registry } from '@grafana/data';\nimport { type SuggestionKindRegistryItem } from '../standardSql/suggestionsKindRegistry';\nimport { type StatementPosition, type SuggestionKind } from '../types';\n\n/**\n * Given statement positions, returns list of suggestion kinds that apply to those positions.\n */\nexport function getSuggestionKinds(\n statementPosition: StatementPosition[],\n suggestionsKindRegistry: Registry<SuggestionKindRegistryItem>\n): SuggestionKind[] {\n let result: SuggestionKind[] = [];\n for (let i = 0; i < statementPosition.length; i++) {\n const exists = suggestionsKindRegistry.getIfExists(statementPosition[i]);\n if (exists) {\n result = result.concat(exists.kind);\n }\n }\n\n return result;\n}\n","import type { monacoTypes } from '@grafana/ui';\nimport { TokenType } from '../types';\nimport { LinkedToken } from './LinkedToken';\nimport { type Monaco } from './types';\n\nexport function linkedTokenBuilder(\n monaco: Monaco,\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.IPosition,\n languageId = 'sql'\n) {\n let current: LinkedToken | null = null;\n let previous: LinkedToken | null = null;\n const tokensPerLine = monaco.editor.tokenize(model.getValue() ?? '', languageId);\n for (let lineIndex = 0; lineIndex < tokensPerLine.length; lineIndex++) {\n const tokens = tokensPerLine[lineIndex];\n // In case position is first column in new line, add empty whitespace token so that links are not broken\n if (!tokens.length && previous) {\n const token: monacoTypes.Token = {\n offset: 0,\n type: TokenType.Whitespace,\n language: languageId,\n _tokenBrand: undefined,\n };\n tokens.push(token);\n }\n\n for (let columnIndex = 0; columnIndex < tokens.length; columnIndex++) {\n const token = tokens[columnIndex];\n let endColumn =\n tokens.length > columnIndex + 1 ? tokens[columnIndex + 1].offset + 1 : model.getLineLength(lineIndex + 1) + 1;\n\n const range: monacoTypes.IRange = {\n startLineNumber: lineIndex + 1,\n startColumn: token.offset === 0 ? 0 : token.offset + 1,\n endLineNumber: lineIndex + 1,\n endColumn,\n };\n\n const value = model.getValueInRange(range);\n const sqlToken: LinkedToken = new LinkedToken(token.type, value, range, previous, null);\n\n if (monaco.Range.containsPosition(range, position)) {\n current = sqlToken;\n }\n\n if (previous) {\n previous.next = sqlToken;\n }\n previous = sqlToken;\n }\n }\n return current;\n}\n","import { type monacoTypes } from '@grafana/ui';\nimport { type SQLMonarchLanguage } from './types';\n\n// STD basic SQL\nexport const SELECT = 'select';\nexport const FROM = 'from';\nexport const WHERE = 'where';\nexport const GROUP = 'group';\nexport const ORDER = 'order';\nexport const BY = 'by';\nexport const DESC = 'desc';\nexport const ASC = 'asc';\nexport const LIMIT = 'limit';\nexport const WITH = 'with';\nexport const AS = 'as';\nexport const SCHEMA = 'schema';\n\nexport const AND = 'AND';\nexport const OR = 'OR';\nexport const LOGICAL_OPERATORS = [AND, OR];\n\nexport const EQUALS = '=';\nexport const NOT_EQUALS = '!=';\nexport const COMPARISON_OPERATORS = [EQUALS, NOT_EQUALS];\n\nexport const STD_OPERATORS = [...COMPARISON_OPERATORS];\n\nexport const conf: monacoTypes.languages.LanguageConfiguration = {\n comments: {\n lineComment: '--',\n blockComment: ['/*', '*/'],\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n};\n\n// based on https://github.com/microsoft/monaco-editor/blob/main/src/basic-languages/sql/sql.ts\nexport const language: SQLMonarchLanguage = {\n defaultToken: '',\n tokenPostfix: '.sql',\n ignoreCase: true,\n\n brackets: [\n { open: '[', close: ']', token: 'delimiter.square' },\n { open: '(', close: ')', token: 'delimiter.parenthesis' },\n ],\n\n keywords: [\n 'ABORT',\n 'ABSOLUTE',\n 'ACTION',\n 'ADA',\n 'ADD',\n 'AFTER',\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'ALWAYS',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARE',\n 'AS',\n 'ASC',\n 'ASSERTION',\n 'AT',\n 'ATTACH',\n 'AUTHORIZATION',\n 'AUTOINCREMENT',\n 'AVG',\n 'BACKUP',\n 'BEFORE',\n 'BEGIN',\n 'BETWEEN',\n 'BIT',\n 'BIT_LENGTH',\n 'BOTH',\n 'BREAK',\n 'BROWSE',\n 'BULK',\n 'BY',\n 'CASCADE',\n 'CASCADED',\n 'CASE',\n 'CAST',\n 'CATALOG',\n 'CHAR',\n 'CHARACTER',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'CHECK',\n 'CHECKPOINT',\n 'CLOSE',\n 'CLUSTERED',\n 'COALESCE',\n 'COLLATE',\n 'COLLATION',\n 'COLUMN',\n 'COMMIT',\n 'COMPUTE',\n 'CONFLICT',\n 'CONNECT',\n 'CONNECTION',\n 'CONSTRAINT',\n 'CONSTRAINTS',\n 'CONTAINS',\n 'CONTAINSTABLE',\n 'CONTINUE',\n 'CONVERT',\n 'CORRESPONDING',\n 'COUNT',\n 'CREATE',\n 'CROSS',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_TIME',\n 'CURRENT_TIMESTAMP',\n 'CURRENT_USER',\n 'CURSOR',\n 'DATABASE',\n 'DATE',\n 'DAY',\n 'DBCC',\n 'DEALLOCATE',\n 'DEC',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DEFERRABLE',\n 'DEFERRED',\n 'DELETE',\n 'DENY',\n 'DESC',\n 'DESCRIBE',\n 'DESCRIPTOR',\n 'DETACH',\n 'DIAGNOSTICS',\n 'DISCONNECT',\n 'DISK',\n 'DISTINCT',\n 'DISTRIBUTED',\n 'DO',\n 'DOMAIN',\n 'DOUBLE',\n 'DROP',\n 'DUMP',\n 'EACH',\n 'ELSE',\n 'END',\n 'END-EXEC',\n 'ERRLVL',\n 'ESCAPE',\n 'EXCEPT',\n 'EXCEPTION',\n 'EXCLUDE',\n 'EXCLUSIVE',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXIT',\n 'EXPLAIN',\n 'EXTERNAL',\n 'EXTRACT',\n 'FAIL',\n 'FALSE',\n 'FETCH',\n 'FILE',\n 'FILLFACTOR',\n 'FILTER',\n 'FIRST',\n 'FLOAT',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FORTRAN',\n 'FOUND',\n 'FREETEXT',\n 'FREETEXTTABLE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GENERATED',\n 'GET',\n 'GLOB',\n 'GLOBAL',\n 'GO',\n 'GOTO',\n 'GRANT',\n 'GROUP',\n 'GROUPS',\n 'HAVING',\n 'HOLDLOCK',\n 'HOUR',\n 'IDENTITY',\n 'IDENTITYCOL',\n 'IDENTITY_INSERT',\n 'IF',\n 'IGNORE',\n 'IMMEDIATE',\n 'IN',\n 'INCLUDE',\n 'INDEX',\n 'INDEXED',\n 'INDICATOR',\n 'INITIALLY',\n 'INNER',\n 'INPUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INSTEAD',\n 'INT',\n 'INTEGER',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'ISNULL',\n 'ISOLATION',\n 'JOIN',\n 'KEY',\n 'KILL',\n 'LANGUAGE',\n 'LAST',\n 'LEADING',\n 'LEFT',\n 'LEVEL',\n 'LIKE',\n 'LIMIT',\n 'LINENO',\n 'LOAD',\n 'LOCAL',\n 'LOWER',\n 'MATCH',\n 'MATERIALIZED',\n 'MAX',\n 'MERGE',\n 'MIN',\n 'MINUTE',\n 'MODULE',\n 'MONTH',\n 'NAMES',\n 'NATIONAL',\n 'NATURAL',\n 'NCHAR',\n 'NEXT',\n 'NO',\n 'NOCHECK',\n 'NONCLUSTERED',\n 'NONE',\n 'NOT',\n 'NOTHING',\n 'NOTNULL',\n 'NULL',\n 'NULLIF',\n 'NULLS',\n 'NUMERIC',\n 'OCTET_LENGTH',\n 'OF',\n 'OFF',\n 'OFFSET',\n 'OFFSETS',\n 'ON',\n 'ONLY',\n 'OPEN',\n 'OPENDATASOURCE',\n 'OPENQUERY',\n 'OPENROWSET',\n 'OPENXML',\n 'OPTION',\n 'OR',\n 'ORDER',\n 'OTHERS',\n 'OUTER',\n 'OUTPUT',\n 'OVER',\n 'OVERLAPS',\n 'PAD',\n 'PARTIAL',\n 'PARTITION',\n 'PASCAL',\n 'PERCENT',\n 'PIVOT',\n 'PLAN',\n 'POSITION',\n 'PRAGMA',\n 'PRECEDING',\n 'PRECISION',\n 'PREPARE',\n 'PRESERVE',\n 'PRIMARY',\n 'PRINT',\n 'PRIOR',\n 'PRIVILEGES',\n 'PROC',\n 'PROCEDURE',\n 'PUBLIC',\n 'QUERY',\n 'RAISE',\n 'RAISERROR',\n 'RANGE',\n 'READ',\n 'READTEXT',\n 'REAL',\n 'RECONFIGURE',\n 'RECURSIVE',\n 'REFERENCES',\n 'REGEXP',\n 'REINDEX',\n 'RELATIVE',\n 'RELEASE',\n 'RENAME',\n 'REPLACE',\n 'REPLICATION',\n 'RESTORE',\n 'RESTRICT',\n 'RETURN',\n 'RETURNING',\n 'REVERT',\n 'REVOKE',\n 'RIGHT',\n 'ROLLBACK',\n 'ROW',\n 'ROWCOUNT',\n 'ROWGUIDCOL',\n 'ROWS',\n 'RULE',\n 'SAVE',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCROLL',\n 'SECOND',\n 'SECTION',\n 'SECURITYAUDIT',\n 'SELECT',\n 'SEMANTICKEYPHRASETABLE',\n 'SEMANTICSIMILARITYDETAILSTABLE',\n 'SEMANTICSIMILARITYTABLE',\n 'SESSION',\n 'SESSION_USER',\n 'SET',\n 'SETUSER',\n 'SHUTDOWN',\n 'SIZE',\n 'SMALLINT',\n 'SOME',\n 'SPACE',\n 'SQL',\n 'SQLCA',\n 'SQLCODE',\n 'SQLERROR',\n 'SQLSTATE',\n 'SQLWARNING',\n 'STATISTICS',\n 'SUBSTRING',\n 'SUM',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLESAMPLE',\n 'TEMP',\n 'TEMPORARY',\n 'TEXTSIZE',\n 'THEN',\n 'TIES',\n 'TIME',\n 'TIMESTAMP',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO',\n 'TOP',\n 'TRAILING',\n 'TRAN',\n 'TRANSACTION',\n 'TRANSLATE',\n 'TRANSLATION',\n 'TRIGGER',\n 'TRIM',\n 'TRUE',\n 'TRUNCATE',\n 'TRY_CONVERT',\n 'TSEQUAL',\n 'UNBOUNDED',\n 'UNION',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNPIVOT',\n 'UPDATE',\n 'UPDATETEXT',\n 'UPPER',\n 'USAGE',\n 'USE',\n 'USER',\n 'USING',\n 'VACUUM',\n 'VALUE',\n 'VALUES',\n 'VARCHAR',\n 'VARYING',\n 'VIEW',\n 'VIRTUAL',\n 'WAITFOR',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WHILE',\n 'WINDOW',\n 'WITH',\n 'WITHIN GROUP',\n 'WITHOUT',\n 'WORK',\n 'WRITE',\n 'WRITETEXT',\n 'YEAR',\n 'ZONE',\n ],\n operators: [\n // Set\n 'EXCEPT',\n 'INTERSECT',\n 'UNION',\n // Join\n 'APPLY',\n 'CROSS',\n 'FULL',\n 'INNER',\n 'JOIN',\n 'LEFT',\n 'OUTER',\n 'RIGHT',\n // Predicates\n 'CONTAINS',\n 'FREETEXT',\n 'IS',\n 'NULL',\n // Pivoting\n 'PIVOT',\n 'UNPIVOT',\n // Merging\n 'MATCHED',\n ],\n logicalOperators: ['ALL', 'AND', 'ANY', 'BETWEEN', 'EXISTS', 'IN', 'LIKE', 'NOT', 'OR', 'SOME'],\n comparisonOperators: ['<>', '>', '<', '>=', '<=', '=', '!=', '&', '~', '^', '%'],\n\n builtinFunctions: [\n // Aggregate\n 'AVG',\n 'CHECKSUM_AGG',\n 'COUNT',\n 'COUNT_BIG',\n 'GROUPING',\n 'GROUPING_ID',\n 'MAX',\n 'MIN',\n 'SUM',\n 'STDEV',\n 'STDEVP',\n 'VAR',\n 'VARP',\n // Analytic\n 'CUME_DIST',\n 'FIRST_VALUE',\n 'LAG',\n 'LAST_VALUE',\n 'LEAD',\n 'PERCENTILE_CONT',\n 'PERCENTILE_DISC',\n 'PERCENT_RANK',\n // Collation\n 'COLLATE',\n 'COLLATIONPROPERTY',\n 'TERTIARY_WEIGHTS',\n // Azure\n 'FEDERATION_FILTERING_VALUE',\n // Conversion\n 'CAST',\n 'CONVERT',\n 'PARSE',\n 'TRY_CAST',\n 'TRY_CONVERT',\n 'TRY_PARSE',\n // Cryptographic\n 'ASYMKEY_ID',\n 'ASYMKEYPROPERTY',\n 'CERTPROPERTY',\n 'CERT_ID',\n 'CRYPT_GEN_RANDOM',\n 'DECRYPTBYASYMKEY',\n 'DECRYPTBYCERT',\n 'DECRYPTBYKEY',\n 'DECRYPTBYKEYAUTOASYMKEY',\n 'DECRYPTBYKEYAUTOCERT',\n 'DECRYPTBYPASSPHRASE',\n 'ENCRYPTBYASYMKEY',\n 'ENCRYPTBYCERT',\n 'ENCRYPTBYKEY',\n 'ENCRYPTBYPASSPHRASE',\n 'HASHBYTES',\n 'IS_OBJECTSIGNED',\n 'KEY_GUID',\n 'KEY_ID',\n 'KEY_NAME',\n 'SIGNBYASYMKEY',\n 'SIGNBYCERT',\n 'SYMKEYPROPERTY',\n 'VERIFYSIGNEDBYCERT',\n 'VERIFYSIGNEDBYASYMKEY',\n // Cursor\n 'CURSOR_STATUS',\n // Datatype\n 'DATALENGTH',\n 'IDENT_CURRENT',\n 'IDENT_INCR',\n 'IDENT_SEED',\n 'IDENTITY',\n 'SQL_VARIANT_PROPERTY',\n // Datetime\n 'CURRENT_TIMESTAMP',\n 'DATEADD',\n 'DATEDIFF',\n 'DATEFROMPARTS',\n 'DATENAME',\n 'DATEPART',\n 'DATETIME2FROMPARTS',\n 'DATETIMEFROMPARTS',\n 'DATETIMEOFFSETFROMPARTS',\n 'DAY',\n 'EOMONTH',\n 'GETDATE',\n 'GETUTCDATE',\n 'ISDATE',\n 'MONTH',\n 'SMALLDATETIMEFROMPARTS',\n 'SWITCHOFFSET',\n 'SYSDATETIME',\n 'SYSDATETIMEOFFSET',\n 'SYSUTCDATETIME',\n 'TIMEFROMPARTS',\n 'TODATETIMEOFFSET',\n 'YEAR',\n // Logical\n 'CHOOSE',\n 'COALESCE',\n 'IIF',\n 'NULLIF',\n // Mathematical\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'ATN2',\n 'CEILING',\n 'COS',\n 'COT',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LOG',\n 'LOG10',\n 'PI',\n 'POWER',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SIGN',\n 'SIN',\n 'SQRT',\n 'SQUARE',\n 'TAN',\n // Metadata\n 'APP_NAME',\n 'APPLOCK_MODE',\n 'APPLOCK_TEST',\n 'ASSEMBLYPROPERTY',\n 'COL_LENGTH',\n 'COL_NAME',\n 'COLUMNPROPERTY',\n 'DATABASE_PRINCIPAL_ID',\n 'DATABASEPROPERTYEX',\n 'DB_ID',\n 'DB_NAME',\n 'FILE_ID',\n 'FILE_IDEX',\n 'FILE_NAME',\n 'FILEGROUP_ID',\n 'FILEGROUP_NAME',\n 'FILEGROUPPROPERTY',\n 'FILEPROPERTY',\n 'FULLTEXTCATALOGPROPERTY',\n 'FULLTEXTSERVICEPROPERTY',\n 'INDEX_COL',\n 'INDEXKEY_PROPERTY',\n 'INDEXPROPERTY',\n 'OBJECT_DEFINITION',\n 'OBJECT_ID',\n 'OBJECT_NAME',\n 'OBJECT_SCHEMA_NAME',\n 'OBJECTPROPERTY',\n 'OBJECTPROPERTYEX',\n 'ORIGINAL_DB_NAME',\n 'PARSENAME',\n 'SCHEMA_ID',\n 'SCHEMA_NAME',\n 'SCOPE_IDENTITY',\n 'SERVERPROPERTY',\n 'STATS_DATE',\n 'TYPE_ID',\n 'TYPE_NAME',\n 'TYPEPROPERTY',\n // Ranking\n 'DENSE_RANK',\n 'NTILE',\n 'RANK',\n 'ROW_NUMBER',\n // Replication\n 'PUBLISHINGSERVERNAME',\n // Rowset\n 'OPENDATASOURCE',\n 'OPENQUERY',\n 'OPENROWSET',\n 'OPENXML',\n // Security\n 'CERTENCODED',\n 'CERTPRIVATEKEY',\n 'CURRENT_USER',\n 'HAS_DBACCESS',\n 'HAS_PERMS_BY_NAME',\n 'IS_MEMBER',\n 'IS_ROLEMEMBER',\n 'IS_SRVROLEMEMBER',\n 'LOGINPROPERTY',\n 'ORIGINAL_LOGIN',\n 'PERMISSIONS',\n 'PWDENCRYPT',\n 'PWDCOMPARE',\n 'SESSION_USER',\n 'SESSIONPROPERTY',\n 'SUSER_ID',\n 'SUSER_NAME',\n 'SUSER_SID',\n 'SUSER_SNAME',\n 'SYSTEM_USER',\n 'USER',\n 'USER_ID',\n 'USER_NAME',\n // String\n 'ASCII',\n 'CHAR',\n 'CHARINDEX',\n 'CONCAT',\n 'DIFFERENCE',\n 'FORMAT',\n 'LEFT',\n 'LEN',\n 'LOWER',\n 'LTRIM',\n 'NCHAR',\n 'PATINDEX',\n 'QUOTENAME',\n 'REPLACE',\n 'REPLICATE',\n 'REVERSE',\n 'RIGHT',\n 'RTRIM',\n 'SOUNDEX',\n 'SPACE',\n 'STR',\n 'STUFF',\n 'SUBSTRING',\n 'UNICODE',\n 'UPPER',\n // System\n 'BINARY_CHECKSUM',\n 'CHECKSUM',\n 'CONNECTIONPROPERTY',\n 'CONTEXT_INFO',\n 'CURRENT_REQUEST_ID',\n 'ERROR_LINE',\n 'ERROR_NUMBER',\n 'ERROR_MESSAGE',\n 'ERROR_PROCEDURE',\n 'ERROR_SEVERITY',\n 'ERROR_STATE',\n 'FORMATMESSAGE',\n 'GETANSINULL',\n 'GET_FILESTREAM_TRANSACTION_CONTEXT',\n 'HOST_ID',\n 'HOST_NAME',\n 'ISNULL',\n 'ISNUMERIC',\n 'MIN_ACTIVE_ROWVERSION',\n 'NEWID',\n 'NEWSEQUENTIALID',\n 'ROWCOUNT_BIG',\n 'XACT_STATE',\n // TextImage\n 'TEXTPTR',\n 'TEXTVALID',\n // Trigger\n 'COLUMNS_UPDATED',\n 'EVENTDATA',\n 'TRIGGER_NESTLEVEL',\n 'UPDATE',\n // ChangeTracking\n 'CHANGETABLE',\n 'CHANGE_TRACKING_CONTEXT',\n 'CHANGE_TRACKING_CURRENT_VERSION',\n 'CHANGE_TRACKING_IS_COLUMN_IN_MASK',\n 'CHANGE_TRACKING_MIN_VALID_VERSION',\n // FullTextSearch\n 'CONTAINSTABLE',\n 'FREETEXTTABLE',\n // SemanticTextSearch\n 'SEMANTICKEYPHRASETABLE',\n 'SEMANTICSIMILARITYDETAILSTABLE',\n 'SEMANTICSIMILARITYTABLE',\n // FileStream\n 'FILETABLEROOTPATH',\n 'GETFILENAMESPACEPATH',\n 'GETPATHLOCATOR',\n 'PATHNAME',\n // ServiceBroker\n 'GET_TRANSMISSION_STATUS',\n ],\n builtinVariables: [\n // Configuration\n '@@DATEFIRST',\n '@@DBTS',\n '@@LANGID',\n '@@LANGUAGE',\n '@@LOCK_TIMEOUT',\n '@@MAX_CONNECTIONS',\n '@@MAX_PRECISION',\n '@@NESTLEVEL',\n '@@OPTIONS',\n '@@REMSERVER',\n '@@SERVERNAME',\n '@@SERVICENAME',\n '@@SPID',\n '@@TEXTSIZE',\n '@@VERSION',\n // Cursor\n '@@CURSOR_ROWS',\n '@@FETCH_STATUS',\n // Datetime\n '@@DATEFIRST',\n // Metadata\n '@@PROCID',\n // System\n '@@ERROR',\n '@@IDENTITY',\n '@@ROWCOUNT',\n '@@TRANCOUNT',\n // Stats\n '@@CONNECTIONS',\n '@@CPU_BUSY',\n '@@IDLE',\n '@@IO_BUSY',\n '@@PACKET_ERRORS',\n '@@PACK_RECEIVED',\n '@@PACK_SENT',\n '@@TIMETICKS',\n '@@TOTAL_ERRORS',\n '@@TOTAL_READ',\n '@@TOTAL_WRITE',\n ],\n pseudoColumns: ['$ACTION', '$IDENTITY', '$ROWGUID', '$PARTITION'],\n tokenizer: {\n root: [\n { include: '@templateVariables' },\n { include: '@macros' },\n { include: '@comments' },\n { include: '@whitespace' },\n { include: '@pseudoColumns' },\n { include: '@numbers' },\n { include: '@strings' },\n { include: '@complexIdentifiers' },\n { include: '@scopes' },\n { include: '@schemaTable' },\n [/[;,.]/, 'delimiter'],\n [/[()]/, '@brackets'],\n [\n /[\\w@#$|<|>|=|!|%|&|+|\\|-|*|/|~|^]+/,\n {\n cases: {\n '@operators': 'operator',\n '@comparisonOperators': 'operator',\n '@logicalOperators': 'operator',\n '@builtinVariables': 'predefined',\n '@builtinFunctions': 'predefined',\n '@keywords': 'keyword',\n '@default': 'identifier',\n },\n },\n ],\n ],\n templateVariables: [[/\\$[a-zA-Z0-9]+/, 'variable']],\n macros: [[/\\$__[a-zA-Z0-9-_]+/, 'type']],\n schemaTable: [\n [/(\\w+)\\./, 'identifier'],\n [/(\\w+\\.\\w+)/, 'identifier'],\n ],\n whitespace: [[/\\s+/, 'white']],\n comments: [\n [/--+.*/, 'comment'],\n [/\\/\\*/, { token: 'comment.quote', next: '@comment' }],\n ],\n comment: [\n [/[^*/]+/, 'comment'],\n // Not supporting nested comments, as nested comments seem to not be standard?\n // i.e. http://stackoverflow.com/questions/728172/are-there-multiline-comment-delimiters-in-sql-that-are-vendor-agnostic\n // [/\\/\\*/, { token: 'comment.quote', next: '@push' }], // nested comment not allowed :-(\n [/\\*\\//, { token: 'comment.quote', next: '@pop' }],\n [/./, 'comment'],\n ],\n pseudoColumns: [\n [\n /[$][A-Za-z_][\\w@#$]*/,\n {\n cases: {\n '@pseudoColumns': 'predefined',\n '@default': 'identifier',\n },\n },\n ],\n ],\n numbers: [\n [/0[xX][0-9a-fA-F]*/, 'number'],\n [/[$][+-]*\\d*(\\.\\d*)?/, 'number'],\n [/((\\d+(\\.\\d*)?)|(\\.\\d+))([eE][\\-+]?\\d+)?/, 'number'],\n ],\n strings: [\n [/N'/, { token: 'string', next: '@string' }],\n [/'/, { token: 'string', next: '@string' }],\n ],\n string: [\n [/[^']+/, 'string'],\n [/''/, 'string'],\n [/'/, { token: 'string', next: '@pop' }],\n ],\n complexIdentifiers: [\n [/\\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],\n [/\"/, { token: 'identifier.quote', next: '@quotedIdentifier' }],\n ],\n bracketedIdentifier: [\n [/[^\\]]+/, 'identifier'],\n [/]]/, 'identifier'],\n [/]/, { token: 'identifier.quote', next: '@pop' }],\n ],\n quotedIdentifier: [\n [/[^\"]+/, 'identifier'],\n [/\"\"/, 'identifier'],\n [/\"/, { token: 'identifier.quote', next: '@pop' }],\n ],\n scopes: [\n [/BEGIN\\s+(DISTRIBUTED\\s+)?TRAN(SACTION)?\\b/i, 'keyword'],\n [/BEGIN\\s+TRY\\b/i, { token: 'keyword.try' }],\n [/END\\s+TRY\\b/i, { token: 'keyword.try' }],\n [/BEGIN\\s+CATCH\\b/i, { token: 'keyword.catch' }],\n [/END\\s+CATCH\\b/i, { token: 'keyword.catch' }],\n [/(BEGIN|CASE)\\b/i, { token: 'keyword.block' }],\n [/END\\b/i, { token: 'keyword.block' }],\n [/WHEN\\b/i, { token: 'keyword.choice' }],\n [/THEN\\b/i, { token: 'keyword.choice' }],\n ],\n },\n};\n","import { FROM, SCHEMA, SELECT } from '../standardSql/language';\nimport { TokenType } from '../types';\nimport { type LinkedToken } from './LinkedToken';\n\nexport const getSelectToken = (currentToken: LinkedToken | null) =>\n currentToken?.getPreviousOfType(TokenType.Keyword, SELECT) ?? null;\n\nexport const getSelectStatisticToken = (currentToken: LinkedToken | null) => {\n const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken();\n return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null;\n};\n\nexport const getMetricNameToken = (currentToken: LinkedToken | null) => {\n // statistic function is followed by `(` and then an argument\n const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next;\n return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null;\n};\n\nexport const getFromKeywordToken = (currentToken: LinkedToken | null) => {\n const selectToken = getSelectToken(currentToken);\n return selectToken?.getNextOfType(TokenType.Keyword, FROM);\n};\n\nexport const getNamespaceToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n\n if (\n nextNonWhiteSpace?.isDoubleQuotedString() ||\n (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA)\n ) {\n // schema is not used\n return nextNonWhiteSpace;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n // schema is specified\n const assumedNamespaceToken = nextNonWhiteSpace.next?.next;\n if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) {\n return assumedNamespaceToken;\n }\n }\n return null;\n};\nexport const getTableToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n if (nextNonWhiteSpace?.isVariable()) {\n // TODO: resolve column from variable?\n return null;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n return null;\n } else {\n return nextNonWhiteSpace;\n }\n};\n\nexport const defaultTableNameParser = (token: LinkedToken | null | undefined) => {\n const parts = token?.value.split('.');\n\n if (parts?.length === 1) {\n return { table: parts[0] };\n } else if (parts?.length === 2) {\n return { schema: parts[0], table: parts[1] };\n } else if (parts?.length === 3) {\n return { catalog: parts[0], schema: parts[1], table: parts[2] };\n }\n\n return null;\n};\n","export const TRIGGER_SUGGEST = {\n id: 'editor.action.triggerSuggest',\n title: '',\n};\n","import { type Registry } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { TRIGGER_SUGGEST } from '../utils/commands';\nimport {\n CompletionItemInsertTextRule,\n CompletionItemKind,\n CompletionItemPriority,\n MacroType,\n OperatorType,\n SuggestionKind,\n} from '../types';\nimport { ASC, DESC } from './language';\nimport {\n type FunctionsRegistryItem,\n type MacrosRegistryItem,\n type OperatorsRegistryItem,\n type SuggestionsRegistryItem,\n} from './types';\n\n/**\n * This registry glues particular SuggestionKind with an async function that provides completion items for it.\n * To add a new suggestion kind, SQLEditor should be configured with a provider that implements customSuggestionKinds.\n */\n\nexport const initStandardSuggestions =\n (\n functions: Registry<FunctionsRegistryItem>,\n operators: Registry<OperatorsRegistryItem>,\n macros: Registry<MacrosRegistryItem>\n ) =>\n (): SuggestionsRegistryItem[] => [\n {\n id: SuggestionKind.SelectKeyword,\n name: SuggestionKind.SelectKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: `SELECT <column>`,\n insertText: `SELECT $0`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n },\n {\n label: `SELECT <column> FROM <table>`,\n insertText: `SELECT $2 FROM $1`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n },\n ]),\n },\n {\n id: SuggestionKind.TemplateVariables,\n name: SuggestionKind.TemplateVariables,\n suggestions: (_, m) => {\n const templateSrv = getTemplateSrv();\n if (!templateSrv) {\n return Promise.resolve([]);\n }\n\n return Promise.resolve(\n templateSrv.getVariables().map((variable) => {\n const label = `\\$${variable.name}`;\n const val = templateSrv.replace(label);\n return {\n label,\n detail: `(Template Variable) ${val}`,\n kind: CompletionItemKind.Snippet,\n documentation: `(Template Variable) ${val}`,\n insertText: `\\\\$${variable.name} `,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Low,\n };\n })\n );\n },\n },\n {\n id: SuggestionKind.SelectMacro,\n name: SuggestionKind.SelectMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Value || m.type === MacroType.Column)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.TableMacro,\n name: SuggestionKind.TableMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Table)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.GroupMacro,\n name: SuggestionKind.GroupMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Group)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.FilterMacro,\n name: SuggestionKind.FilterMacro,\n suggestions: (_, m) =>\n Promise.resolve([\n ...macros\n .list()\n .filter((m) => m.type === MacroType.Filter)\n .map(createMacroSuggestionItem),\n ]),\n },\n {\n id: SuggestionKind.WithKeyword,\n name: SuggestionKind.WithKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: `WITH <alias> AS ( ... )`,\n insertText: `WITH $1 AS ( $2 )`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n },\n ]),\n },\n {\n id: SuggestionKind.StarWildCard,\n name: SuggestionKind.StarWildCard,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: '*',\n insertText: `* $0`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Field,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.High,\n },\n ]),\n },\n {\n id: SuggestionKind.FunctionsWithArguments,\n name: SuggestionKind.FunctionsWithArguments,\n suggestions: (_, m) =>\n Promise.resolve([\n ...functions.list().map((f) => ({\n label: f.name,\n insertText: `${f.name}($0)`,\n documentation: f.description,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Function,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n })),\n ]),\n },\n {\n id: SuggestionKind.FunctionsWithoutArguments,\n name: SuggestionKind.FunctionsWithoutArguments,\n suggestions: (_, m) =>\n Promise.resolve([\n ...functions.list().map((f) => ({\n label: f.name,\n insertText: `${f.name}()`,\n documentation: f.description,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Function,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n })),\n ]),\n },\n {\n id: SuggestionKind.FromKeyword,\n name: SuggestionKind.FromKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'FROM',\n insertText: `FROM $0`,\n command: TRIGGER_SUGGEST,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.Schemas,\n name: SuggestionKind.Schemas,\n suggestions: (_, m) => Promise.resolve([]),\n },\n {\n id: SuggestionKind.Tables,\n name: SuggestionKind.Tables,\n suggestions: (_, m) => Promise.resolve([]),\n },\n {\n id: SuggestionKind.Columns,\n name: SuggestionKind.Columns,\n suggestions: (_, m) => Promise.resolve([]),\n },\n {\n id: SuggestionKind.LogicalOperators,\n name: SuggestionKind.LogicalOperators,\n suggestions: (_, m) =>\n Promise.resolve(\n operators\n .list()\n .filter((o) => o.type === OperatorType.Logical)\n .map((o) => ({\n label: o.operator,\n insertText: `${o.operator} `,\n documentation: o.description,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Operator,\n }))\n ),\n },\n {\n id: SuggestionKind.WhereKeyword,\n name: SuggestionKind.WhereKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'WHERE',\n insertText: `WHERE `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.ComparisonOperators,\n name: SuggestionKind.ComparisonOperators,\n suggestions: (_, m) =>\n Promise.resolve([\n ...operators\n .list()\n .filter((o) => o.type === OperatorType.Comparison)\n .map((o) => ({\n label: o.operator,\n insertText: `${o.operator} `,\n documentation: o.description,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Operator,\n })),\n {\n label: 'IN (...)',\n insertText: `IN ( $0 )`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n {\n label: 'NOT IN (...)',\n insertText: `NOT IN ( $0 )`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n {\n label: 'IS',\n insertText: `IS`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n },\n {\n label: 'IS NOT',\n insertText: `IS NOT`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Operator,\n },\n ]),\n },\n {\n id: SuggestionKind.GroupByKeywords,\n name: SuggestionKind.GroupByKeywords,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'GROUP BY',\n insertText: `GROUP BY `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumHigh,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.OrderByKeywords,\n name: SuggestionKind.OrderByKeywords,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'ORDER BY',\n insertText: `ORDER BY `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.Medium,\n kind: CompletionItemKind.Keyword,\n },\n {\n label: 'ORDER BY(ascending)',\n insertText: `ORDER BY $1 ASC `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n kind: CompletionItemKind.Snippet,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n {\n label: 'ORDER BY(descending)',\n insertText: `ORDER BY $1 DESC`,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n kind: CompletionItemKind.Snippet,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n },\n ]),\n },\n {\n id: SuggestionKind.LimitKeyword,\n name: SuggestionKind.LimitKeyword,\n suggestions: (_, m) =>\n Promise.resolve([\n {\n label: 'LIMIT',\n insertText: `LIMIT `,\n command: TRIGGER_SUGGEST,\n sortText: CompletionItemPriority.MediumLow,\n kind: CompletionItemKind.Keyword,\n },\n ]),\n },\n {\n id: SuggestionKind.SortOrderDirectionKeyword,\n name: SuggestionKind.SortOrderDirectionKeyword,\n suggestions: (_, m) =>\n Promise.resolve(\n [ASC, DESC].map((o) => ({\n label: o,\n insertText: `${o} `,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n }))\n ),\n },\n {\n id: SuggestionKind.NotKeyword,\n name: SuggestionKind.NotKeyword,\n suggestions: () =>\n Promise.resolve([\n {\n label: 'NOT',\n insertText: 'NOT',\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n sortText: CompletionItemPriority.High,\n },\n ]),\n },\n {\n id: SuggestionKind.BoolValues,\n name: SuggestionKind.BoolValues,\n suggestions: () =>\n Promise.resolve(\n ['TRUE', 'FALSE'].map((o) => ({\n label: o,\n insertText: `${o}`,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n sortText: CompletionItemPriority.Medium,\n }))\n ),\n },\n {\n id: SuggestionKind.NullValue,\n name: SuggestionKind.NullValue,\n suggestions: () =>\n Promise.resolve(\n ['NULL'].map((o) => ({\n label: o,\n insertText: `${o}`,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Keyword,\n sortText: CompletionItemPriority.Low,\n }))\n ),\n },\n ];\n\nfunction createMacroSuggestionItem(m: MacrosRegistryItem) {\n return {\n label: m.name,\n insertText: `${'\\\\' + m.text}${argsString(m.args)} `,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n kind: CompletionItemKind.Snippet,\n documentation: m.description,\n command: TRIGGER_SUGGEST,\n };\n}\n\nfunction argsString(args?: string[]): string {\n if (!args) {\n return '()';\n }\n return '('.concat(args.map((t, i) => `\\${${i}:${t}}`).join(', ')).concat(')');\n}\n","import { StatementPosition, TokenType } from '../types';\nimport { AND, AS, ASC, BY, DESC, FROM, GROUP, ORDER, SELECT, WHERE, WITH } from './language';\nimport { type StatementPositionResolversRegistryItem } from './types';\n\nexport function initStatementPositionResolvers(): StatementPositionResolversRegistryItem[] {\n return [\n {\n id: StatementPosition.SelectKeyword,\n name: StatementPosition.SelectKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n currentToken === null ||\n (currentToken.isWhiteSpace() && currentToken.previous === null) ||\n currentToken.is(TokenType.Keyword, SELECT) ||\n (currentToken.is(TokenType.Keyword, SELECT) && currentToken.previous === null) ||\n previousIsSlash ||\n (currentToken.isIdentifier() && (previousIsSlash || currentToken?.previous === null)) ||\n (currentToken.isIdentifier() && SELECT.startsWith(currentToken.value.toLowerCase()))\n ),\n },\n {\n id: StatementPosition.WithKeyword,\n name: StatementPosition.WithKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n currentToken === null ||\n (currentToken.isWhiteSpace() && currentToken.previous === null) ||\n (currentToken.is(TokenType.Keyword, WITH) && currentToken.previous === null) ||\n (currentToken.isIdentifier() && WITH.toLowerCase().startsWith(currentToken.value.toLowerCase()))\n ),\n },\n {\n id: StatementPosition.AfterSelectKeyword,\n name: StatementPosition.AfterSelectKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(previousNonWhiteSpace?.value.toLowerCase() === SELECT),\n },\n {\n id: StatementPosition.AfterSelectArguments,\n name: StatementPosition.AfterSelectArguments,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(previousKeyword?.value.toLowerCase() === SELECT && previousNonWhiteSpace?.value === ',');\n },\n },\n {\n id: StatementPosition.AfterSelectFuncFirstArgument,\n name: StatementPosition.AfterSelectFuncFirstArgument,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n (previousKeyword?.value.toLowerCase() === SELECT || previousKeyword?.value.toLowerCase() === AS) &&\n (previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') || currentToken?.is(TokenType.Parenthesis, '()'))\n );\n },\n },\n {\n id: StatementPosition.AfterWhereFunctionArgument,\n name: StatementPosition.AfterWhereFunctionArgument,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.is(TokenType.Keyword, WHERE) &&\n (previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') || currentToken?.is(TokenType.Parenthesis, '()'))\n );\n },\n },\n {\n id: StatementPosition.AfterGroupBy,\n name: StatementPosition.AfterGroupBy,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, GROUP) &&\n (previousNonWhiteSpace?.isIdentifier() ||\n previousNonWhiteSpace?.isDoubleQuotedString() ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, ')') ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, '()'))\n ),\n },\n {\n id: StatementPosition.SelectAlias,\n name: StatementPosition.SelectAlias,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n if (previousNonWhiteSpace?.value === ',' && previousKeyword?.value.toLowerCase() === AS) {\n return true;\n }\n\n return false;\n },\n },\n\n {\n id: StatementPosition.FromKeyword,\n name: StatementPosition.FromKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n // cloudwatch specific commented out\n // Boolean(previousKeyword?.value === SELECT && previousNonWhiteSpace?.isParenthesis()),\n return Boolean(\n (previousKeyword?.value.toLowerCase() === SELECT && previousNonWhiteSpace?.value !== ',') ||\n ((currentToken?.isKeyword() || currentToken?.isIdentifier()) &&\n FROM.toLowerCase().startsWith(currentToken.value.toLowerCase()))\n );\n },\n },\n {\n id: StatementPosition.AfterFromKeyword,\n name: StatementPosition.AfterFromKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(!currentToken?.value.includes('.') && previousNonWhiteSpace?.value.toLowerCase() === FROM),\n },\n {\n id: StatementPosition.AfterSchema,\n name: StatementPosition.AfterSchema,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n // depending on whether the schema was the last token in the query or not, current token might be whitespace or dot. if whitespace, just use the previous token\n if (currentToken?.isWhiteSpace() && currentToken?.next) {\n currentToken = currentToken?.previous;\n previousNonWhiteSpace = currentToken!.getPreviousNonWhiteSpaceToken();\n }\n return Boolean(\n currentToken?.isIdentifier() &&\n currentToken?.value.endsWith('.') &&\n previousNonWhiteSpace?.value.toLowerCase() === FROM\n );\n },\n },\n {\n id: StatementPosition.AfterFrom,\n name: StatementPosition.AfterFrom,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n (previousKeyword?.value.toLowerCase() === FROM && previousNonWhiteSpace?.isDoubleQuotedString()) ||\n (previousKeyword?.value.toLowerCase() === FROM && previousNonWhiteSpace?.isIdentifier()) ||\n (previousKeyword?.value.toLowerCase() === FROM && previousNonWhiteSpace?.isVariable())\n // cloudwatch specific\n // (previousKeyword?.value === SCHEMA && previousNonWhiteSpace?.is(TokenType.Parenthesis, ')'))\n ),\n },\n {\n id: StatementPosition.AfterTable,\n name: StatementPosition.AfterTable,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.value.toLowerCase() === FROM &&\n (previousNonWhiteSpace?.isVariable() ||\n (previousNonWhiteSpace?.value !== '' && previousNonWhiteSpace?.value.toLowerCase() !== FROM))\n );\n },\n },\n {\n id: StatementPosition.WhereKeyword,\n name: StatementPosition.WhereKeyword,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.value.toLowerCase() === WHERE &&\n (previousNonWhiteSpace?.isKeyword() ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') ||\n previousNonWhiteSpace?.is(TokenType.Operator, AND))\n ),\n },\n {\n id: StatementPosition.WhereComparisonOperator,\n name: StatementPosition.WhereComparisonOperator,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.value.toLowerCase() === WHERE &&\n !previousNonWhiteSpace?.getPreviousNonWhiteSpaceToken()?.isOperator() &&\n !currentToken?.is(TokenType.Delimiter, '.') &&\n !currentToken?.isParenthesis() &&\n (previousNonWhiteSpace?.isIdentifier() || previousNonWhiteSpace?.isDoubleQuotedString())\n ),\n },\n {\n id: StatementPosition.WhereValue,\n name: StatementPosition.WhereValue,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(previousKeyword?.value.toLowerCase() === WHERE && previousNonWhiteSpace?.isOperator()),\n },\n {\n id: StatementPosition.AfterWhereValue,\n name: StatementPosition.AfterWhereValue,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.value.toLowerCase() === WHERE &&\n (previousNonWhiteSpace?.is(TokenType.Operator, 'and') ||\n previousNonWhiteSpace?.is(TokenType.Operator, 'or') ||\n previousNonWhiteSpace?.isString() ||\n previousNonWhiteSpace?.isNumber() ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, ')') ||\n previousNonWhiteSpace?.is(TokenType.Parenthesis, '()') ||\n previousNonWhiteSpace?.isTemplateVariable() ||\n (previousNonWhiteSpace?.is(TokenType.IdentifierQuote) &&\n previousNonWhiteSpace.getPreviousNonWhiteSpaceToken()?.is(TokenType.Identifier) &&\n previousNonWhiteSpace\n ?.getPreviousNonWhiteSpaceToken()\n ?.getPreviousNonWhiteSpaceToken()\n ?.is(TokenType.IdentifierQuote)))\n );\n },\n },\n {\n id: StatementPosition.AfterGroupByKeywords,\n name: StatementPosition.AfterGroupByKeywords,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, GROUP) &&\n (previousNonWhiteSpace?.is(TokenType.Keyword, BY) || previousNonWhiteSpace?.is(TokenType.Delimiter, ','))\n ),\n },\n {\n id: StatementPosition.AfterGroupByFunctionArgument,\n name: StatementPosition.AfterGroupByFunctionArgument,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, GROUP) &&\n (previousNonWhiteSpace?.is(TokenType.Parenthesis, '(') || currentToken?.is(TokenType.Parenthesis, '()'))\n );\n },\n },\n {\n id: StatementPosition.AfterOrderByKeywords,\n name: StatementPosition.AfterOrderByKeywords,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousNonWhiteSpace?.is(TokenType.Keyword, BY) &&\n previousNonWhiteSpace?.getPreviousKeyword()?.is(TokenType.Keyword, ORDER)\n ),\n },\n {\n id: StatementPosition.AfterOrderByFunction,\n name: StatementPosition.AfterOrderByFunction,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(\n previousKeyword?.is(TokenType.Keyword, BY) &&\n previousKeyword?.getPreviousKeyword()?.is(TokenType.Keyword, ORDER) &&\n previousNonWhiteSpace?.is(TokenType.Parenthesis) &&\n previousNonWhiteSpace?.getPreviousNonWhiteSpaceToken()?.is(TokenType.Function)\n ),\n },\n {\n id: StatementPosition.AfterOrderByDirection,\n name: StatementPosition.AfterOrderByDirection,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) =>\n Boolean(previousKeyword?.is(TokenType.Keyword, DESC) || previousKeyword?.is(TokenType.Keyword, ASC)),\n },\n {\n id: StatementPosition.AfterIsOperator,\n name: StatementPosition.AfterIsOperator,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(previousNonWhiteSpace?.is(TokenType.Operator, 'IS'));\n },\n },\n {\n id: StatementPosition.AfterIsNotOperator,\n name: StatementPosition.AfterIsNotOperator,\n resolve: (currentToken, previousKeyword, previousNonWhiteSpace, previousIsSlash) => {\n return Boolean(\n previousNonWhiteSpace?.is(TokenType.Operator, 'NOT') &&\n previousNonWhiteSpace.getPreviousNonWhiteSpaceToken()?.is(TokenType.Operator, 'IS')\n );\n },\n },\n ];\n}\n","import { attachDebugger, createLogger } from '@grafana/ui';\n\nlet sqlEditorLogger = { logger: () => {} };\nlet sqlEditorLog: (...t: any[]) => void = () => {};\n\nif (attachDebugger && createLogger) {\n sqlEditorLogger = createLogger('SQLEditor');\n sqlEditorLog = sqlEditorLogger.logger;\n attachDebugger('sqleditor', undefined, sqlEditorLogger as any);\n}\n\nexport { sqlEditorLog, sqlEditorLogger };\n","import { MacroType } from '../types';\nimport { type MacrosRegistryItem } from './types';\n\nconst COLUMN = 'column',\n RELATIVE_TIME_STRING = \"'5m'\";\n\nexport const MACROS: MacrosRegistryItem[] = [\n {\n id: '$__timeFilter(dateColumn)',\n name: '$__timeFilter(dateColumn)',\n text: '$__timeFilter',\n args: [COLUMN],\n type: MacroType.Filter,\n description:\n 'Will be replaced by a time range filter using the specified column name. For example, dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)',\n },\n {\n id: '$__timeFrom()',\n name: '$__timeFrom()',\n text: '$__timeFrom',\n args: [],\n type: MacroType.Filter,\n description:\n 'Will be replaced by the start of the currently active time selection. For example, FROM_UNIXTIME(1494410783)',\n },\n {\n id: '$__timeTo()',\n name: '$__timeTo()',\n text: '$__timeTo',\n args: [],\n type: MacroType.Filter,\n description:\n 'Will be replaced by the end of the currently active time selection. For example, FROM_UNIXTIME(1494410983)',\n },\n {\n id: \"$__timeGroup(dateColumn, '5m')\",\n name: \"$__timeGroup(dateColumn, '5m')\",\n text: '$__timeGroup',\n args: [COLUMN, RELATIVE_TIME_STRING],\n type: MacroType.Value,\n description:\n 'Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),*',\n },\n {\n id: '$__table',\n name: '$__table',\n text: '$__table',\n args: [],\n type: MacroType.Table,\n description: 'Will be replaced by the query table.',\n },\n {\n id: '$__column',\n name: '$__column',\n text: '$__column',\n args: [],\n type: MacroType.Column,\n description: 'Will be replaced by the query column.',\n },\n];\n\n/*\n {\n id: \"$__timeGroupAlias(dateColumn, '5m', fill)\",\n name: \"$__timeGroupAlias(dateColumn, '5m', fill)\",\n text: \"$__timeGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING , FILL_TYPE],\n type: MacroType.Group,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),* with an added column alias\",\n },\n {\n id: \"$__unixEpochFilter(dateColumn)\",\n name: \"$__unixEpochFilter(dateColumn)\",\n text: \"$__unixEpochFilter\",\n args: [COLUMN],\n type: MacroType.Filter,\n description:\n \"Will be replaced by a time range filter using the specified column name with times represented as Unix timestamp. For example, dateColumn > 1494410783 AND dateColumn < 1494497183\",\n },\n {\n id: \"$__unixEpochFrom()\",\n name: \"$__unixEpochFrom()\",\n text: \"$__unixEpochFrom\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the start of the currently active time selection as Unix timestamp. For example, 1494410783\",\n },\n {\n id: \"$__unixEpochTo()\",\n name: \"$__unixEpochTo()\",\n text: \"$__unixEpochTo\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the end of the currently active time selection as Unix timestamp. For example, 1494410783\",\n },\n {\n id: \"$__unixEpochNanoFilter(dateColumn)\",\n name: \"$__unixEpochNanoFilter(dateColumn)\",\n text: \"$__unixEpochNanoFilter\",\n args: [COLUMN],\n type: MacroType.Filter,\n description:\n \"Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamp. For example, dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872\",\n },\n {\n id: \"$__unixEpochNanoFrom()\",\n name: \"$__unixEpochNanoFrom()\",\n text: \"$__unixEpochNanoFrom\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, 1494410783152415214\",\n },\n {\n id: \"$__unixEpochNanoTo()\",\n name: \"$__unixEpochNanoTo()\",\n text: \"$__unixEpochNanoTo\",\n args: [],\n type: MacroType.Value,\n description:\n \"Will be replaced by the end of the currently active time selection as nanosecond timestamp. For example, 1494410783152415214\",\n },\n {\n id: \"$__unixEpochGroup(dateColumn, '5m')\",\n name: \"$__unixEpochGroup(dateColumn, '5m')\",\n text: \"$__unixEpochGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING],\n type: MacroType.Group,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For values stored as unix timestamp.\",\n },\n {\n id: \"$__unixEpochGroup(dateColumn, '5m', fill)\",\n name: \"$__unixEpochGroup(dateColumn, '5m', fill)\",\n text: \"$__unixEpochGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING, FILL_TYPE],\n type: MacroType.Group,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For values stored as unix timestamp. Missing values can be filled with 0, NULL or previous\",\n },\n {\n id: \"$__timeEpoch(dateColumn, )\",\n name: \"$__timeEpoch(dateColumn)\",\n text: \"$__timeEpoch\",\n args: [COLUMN],\n type: MacroType.Value,\n description:\n \"Will be replaced by an expression to convert to a UNIX timestamp and rename the column to time_sec. For example, UNIX_TIMESTAMP(dateColumn) as time_sec\",\n },\n {\n id: \"$__time(dateColumn)\",\n name: \"$__time(dateColumn)\",\n text: \"$__time\",\n args: [COLUMN],\n type: MacroType.Value,\n description:\n \"Will be replaced by an expression to convert to a UNIX timestamp and rename the column to time_sec. For example, UNIX_TIMESTAMP(dateColumn) as time_sec\",\n },\n {\n id: \"$__timeGroup(dateColumn, '5m', fill)\",\n name: \"$__timeGroup(dateColumn, '5m', fill)\",\n text: \"$__timeGroup\",\n args: [COLUMN, RELATIVE_TIME_STRING, FILL_TYPE],\n type: MacroType.Value,\n description:\n \"Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),* missing values can be filled with 0, NULL or previous\",\n },\n */\n","import { type Monaco } from '@grafana/ui';\nimport { type Operator, OperatorType, type SQLCompletionItemProvider } from '../types';\nimport { MACROS } from './macros';\nimport { type SQLMonarchLanguage } from './types';\n\nexport function getStandardSQLCompletionProvider(\n monaco: Monaco,\n language: SQLMonarchLanguage\n): SQLCompletionItemProvider {\n const provider: SQLCompletionItemProvider = { triggerCharacters: ['.', ' ', '$', ',', '(', \"'\"] };\n if (language && Array.isArray(language.builtinFunctions)) {\n provider.supportedFunctions = () => language.builtinFunctions!.map((f) => ({ id: f, name: f }));\n }\n\n const operators: Operator[] = [];\n if (language?.comparisonOperators?.length) {\n operators.push(\n ...language.comparisonOperators.map((f) => ({\n id: f.toLocaleLowerCase(),\n operator: f,\n type: OperatorType.Comparison,\n }))\n );\n }\n\n // some languages in the monaco language registry don't specify logical operators, only operators. if so, suggest them instead\n language.logicalOperators = language.logicalOperators ?? language.operators;\n if (language?.logicalOperators?.length) {\n operators.push(\n ...language.logicalOperators.map((f) => ({ id: f.toLocaleLowerCase(), operator: f, type: OperatorType.Logical }))\n );\n }\n\n provider.supportedOperators = () => operators;\n\n provider.supportedMacros = () => MACROS;\n\n return provider;\n}\n","import { type LanguageDefinition } from '../types';\nimport { getStandardSQLCompletionProvider } from './standardSQLCompletionItemProvider';\n\nconst standardSQLLanguageDefinition: LanguageDefinition = {\n id: 'standardSql',\n extensions: ['.sql'],\n aliases: ['sql'],\n mimetypes: [],\n loader: () => import('./language'),\n\n completionProvider: getStandardSQLCompletionProvider,\n};\n\nexport default standardSQLLanguageDefinition;\n","import { useRef, useEffect, useMemo } from 'react';\n\n/**\n * Returns a stable callback that always calls the latest version of the provided callback.\n * Useful for avoiding stale closures in imperative APIs like Monaco editor callbacks.\n *\n * @param callback The callback function that may change between renders (can be undefined)\n * @returns A stable callback reference that always calls the latest version, or undefined if no callback provided\n */\nexport function useLatestCallback<T extends (...args: any[]) => unknown>(callback: T | undefined): T | undefined {\n const ref = useRef(callback);\n\n useEffect(() => {\n ref.current = callback;\n });\n\n const hasCallback = Boolean(callback);\n\n return useMemo(\n () => (hasCallback ? (((...args: Parameters<T>) => ref.current!(...args)) as T) : undefined),\n [hasCallback]\n );\n}\n","import { CodeEditor, type Monaco, type monacoTypes } from '@grafana/ui';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { getStatementPosition } from '../standardSql/getStatementPosition';\nimport { getStandardSuggestions } from '../standardSql/getStandardSuggestions';\nimport { initSuggestionsKindRegistry, type SuggestionKindRegistryItem } from '../standardSql/suggestionsKindRegistry';\nimport {\n CompletionItemInsertTextRule,\n CompletionItemKind,\n CompletionItemPriority,\n type CustomSuggestion,\n type LanguageDefinition,\n type PositionContext,\n type SQLCompletionItemProvider,\n type StatementPosition,\n SuggestionKind,\n} from '../types';\nimport { getSuggestionKinds } from '../utils/getSuggestionKind';\nimport { linkedTokenBuilder } from '../utils/linkedTokenBuilder';\nimport { defaultTableNameParser, getTableToken } from '../utils/tokenUtils';\nimport { TRIGGER_SUGGEST } from '../utils/commands';\nimport { v4 } from 'uuid';\nimport { Registry } from '@grafana/data';\nimport {\n type FunctionsRegistryItem,\n type MacrosRegistryItem,\n type OperatorsRegistryItem,\n type StatementPositionResolversRegistryItem,\n type SuggestionsRegistryItem,\n} from '../standardSql/types';\nimport { initStandardSuggestions } from '../standardSql/standardSuggestionsRegistry';\nimport { initStatementPositionResolvers } from '../standardSql/statementPositionResolversRegistry';\nimport { sqlEditorLog } from '../utils/debugger';\nimport standardSQLLanguageDefinition from '../standardSql/definition';\nimport { getStandardSQLCompletionProvider } from '../standardSql/standardSQLCompletionItemProvider';\nimport { useLatestCallback } from '../hooks/useLatestCallback';\n\nconst STANDARD_SQL_LANGUAGE = 'sql';\n\ninterface SQLEditorProps {\n query: string;\n /**\n * Use for inspecting the query as it changes. I.e. for validation.\n */\n onChange?: (q: string, processQuery: boolean) => void;\n onBlur?: (text: string) => void;\n language?: LanguageDefinition;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n}\n\ninterface LanguageRegistries {\n functions: Registry<FunctionsRegistryItem>;\n operators: Registry<OperatorsRegistryItem>;\n suggestionKinds: Registry<SuggestionKindRegistryItem>;\n positionResolvers: Registry<StatementPositionResolversRegistryItem>;\n macros: Registry<MacrosRegistryItem>;\n}\n\nconst LANGUAGES_CACHE = new Map<string, LanguageRegistries>();\nconst INSTANCE_CACHE = new Map<string, Registry<SuggestionsRegistryItem>>();\n\nexport const SQLEditor = ({\n children,\n onBlur,\n onChange,\n query,\n language = { id: STANDARD_SQL_LANGUAGE },\n width,\n height,\n}: SQLEditorProps) => {\n const monacoRef = useRef<monacoTypes.editor.IStandaloneCodeEditor | null>(null);\n const langUid = useRef<string>();\n const stableOnChange = useLatestCallback(onChange);\n\n // create unique language id for each SQLEditor instance\n const id = useMemo(() => {\n const uid = v4();\n const id = `${language.id}-${uid}`;\n langUid.current = id;\n return id;\n }, [language.id]);\n\n useEffect(() => {\n return () => {\n if (langUid.current) {\n INSTANCE_CACHE.delete(langUid.current);\n }\n sqlEditorLog(`Removing instance cache ${langUid.current}`, false, INSTANCE_CACHE);\n };\n }, []);\n\n const formatQuery = useCallback(() => {\n if (monacoRef.current) {\n monacoRef.current.getAction('editor.action.formatDocument').run();\n }\n }, []);\n\n const onSqlBlur = (text: string) => {\n stableOnChange && stableOnChange(text, false);\n onBlur && onBlur(text);\n };\n\n return (\n <div style={{ width }}>\n <CodeEditor\n height={height || '240px'}\n // -2px to compensate for borders width\n width={width ? `${width - 2}px` : undefined}\n language={id}\n value={query}\n onBlur={onSqlBlur}\n showMiniMap={false}\n showLineNumbers={true}\n // Using onEditorDidMount instead of onBeforeEditorMount to support Grafana < 8.2.x\n onEditorDidMount={(editor, m) => {\n monacoRef.current = editor;\n editor.onDidChangeModelContent((e) => {\n const text = editor.getValue();\n // Use ref to get the latest onChange callback, avoiding stale closures\n if (stableOnChange) {\n stableOnChange(text, false);\n }\n });\n\n editor.addCommand(m.KeyMod.CtrlCmd | m.KeyCode.Enter, () => {\n const text = editor.getValue();\n // Use ref to get the latest onChange callback, avoiding stale closures\n if (stableOnChange) {\n stableOnChange(text, true);\n }\n });\n\n editor.onKeyUp((e) => {\n // keyCode 84 is . (DOT)\n if (e.keyCode === 84) {\n editor.trigger(TRIGGER_SUGGEST.id, TRIGGER_SUGGEST.id, {});\n }\n });\n registerLanguageAndSuggestions(m, language, id);\n }}\n />\n {children && children({ formatQuery })}\n </div>\n );\n};\n\n// There's three ways to define Monaco language:\n// 1. Leave language.id empty or set it to 'sql'. This will load a standard sql language definition, including syntax highlighting and tokenization for\n// common Grafana entities such as macros and template variables\n// 2. Provide a custom language and load it via the async LanguageDefinition.loader callback\n// 3. Specify a language.id that exists in the Monaco language registry. A custom completion item provider can still be provided.\n// If not, the standard SQL completion item provider will be used. See available languages here: https://github.com/microsoft/monaco-editor/tree/main/src/basic-languages\n// If a custom language is specified, its LanguageDefinition will be merged with the LanguageDefinition for standard SQL. This allows the consumer to only\n// override parts of the LanguageDefinition, such as for example the completion item provider.\nconst resolveLanguage = (monaco: Monaco, languageDefinitionProp: LanguageDefinition): LanguageDefinition => {\n if (languageDefinitionProp?.id !== STANDARD_SQL_LANGUAGE && !languageDefinitionProp.loader) {\n sqlEditorLog(`Loading language '${languageDefinitionProp?.id}' from Monaco registry`, false);\n const allLangs = monaco.languages.getLanguages();\n const custom = allLangs.find(({ id }) => id === languageDefinitionProp?.id);\n if (!custom) {\n throw Error(`Unknown Monaco language ${languageDefinitionProp?.id}`);\n }\n\n return { completionProvider: getStandardSQLCompletionProvider, ...custom, ...languageDefinitionProp };\n }\n\n return {\n ...standardSQLLanguageDefinition,\n ...languageDefinitionProp,\n };\n};\n\nexport const registerLanguageAndSuggestions = async (monaco: Monaco, l: LanguageDefinition, lid: string) => {\n const languageDefinition = resolveLanguage(monaco, l);\n if (!languageDefinition.loader) {\n return;\n }\n const { language, conf } = await languageDefinition.loader(monaco);\n monaco.languages.register({ id: lid });\n monaco.languages.setMonarchTokensProvider(lid, { ...language });\n monaco.languages.setLanguageConfiguration(lid, { ...conf });\n\n if (languageDefinition.formatter) {\n monaco.languages.registerDocumentFormattingEditProvider(lid, {\n provideDocumentFormattingEdits: (model) => {\n const formatted = l.formatter?.(model.getValue());\n return [\n {\n range: model.getFullModelRange(),\n text: formatted || '',\n },\n ];\n },\n });\n }\n\n if (languageDefinition.completionProvider) {\n const customProvider = languageDefinition.completionProvider(monaco, language);\n extendStandardRegistries(l.id, lid, customProvider);\n const languageSuggestionsRegistries = LANGUAGES_CACHE.get(l.id)!;\n const instanceSuggestionsRegistry = INSTANCE_CACHE.get(lid)!;\n\n const completionProvider: monacoTypes.languages.CompletionItemProvider['provideCompletionItems'] = async (\n model,\n position,\n context,\n token\n ) => {\n const currentToken = linkedTokenBuilder(monaco, model, position, lid);\n const statementPosition = getStatementPosition(currentToken, languageSuggestionsRegistries.positionResolvers);\n const kind = getSuggestionKinds(statementPosition, languageSuggestionsRegistries.suggestionKinds);\n\n sqlEditorLog('Statement position', false, statementPosition);\n sqlEditorLog('Suggestion kinds', false, kind);\n\n const ctx: PositionContext = {\n position,\n currentToken,\n statementPosition,\n kind,\n range: monaco.Range.fromPositions(position),\n };\n\n const stdSuggestions = await getStandardSuggestions(monaco, currentToken, kind, ctx, instanceSuggestionsRegistry);\n\n return {\n suggestions: stdSuggestions,\n };\n };\n\n monaco.languages.registerCompletionItemProvider(lid, {\n ...customProvider,\n provideCompletionItems: completionProvider,\n });\n }\n};\n\nfunction extendStandardRegistries(id: string, lid: string, customProvider: SQLCompletionItemProvider) {\n if (!LANGUAGES_CACHE.has(id)) {\n initializeLanguageRegistries(id);\n }\n\n const languageRegistries = LANGUAGES_CACHE.get(id)!;\n\n if (!INSTANCE_CACHE.has(lid)) {\n INSTANCE_CACHE.set(\n lid,\n new Registry(\n initStandardSuggestions(languageRegistries.functions, languageRegistries.operators, languageRegistries.macros)\n )\n );\n }\n\n const instanceSuggestionsRegistry = INSTANCE_CACHE.get(lid)!;\n\n if (customProvider.supportedFunctions) {\n for (const func of customProvider.supportedFunctions()) {\n const exists = languageRegistries.functions.getIfExists(func.id);\n if (!exists) {\n languageRegistries.functions.register(func);\n }\n }\n }\n\n if (customProvider.supportedOperators) {\n for (const op of customProvider.supportedOperators()) {\n const exists = languageRegistries.operators.getIfExists(op.id);\n if (!exists) {\n languageRegistries.operators.register({ ...op, name: op.id });\n }\n }\n }\n\n if (customProvider.supportedMacros) {\n for (const macro of customProvider.supportedMacros()) {\n const exists = languageRegistries.macros.getIfExists(macro.id);\n if (!exists) {\n languageRegistries.macros.register({ ...macro, name: macro.id });\n }\n }\n }\n\n if (customProvider.customStatementPlacement) {\n for (const placement of customProvider.customStatementPlacement()) {\n const exists = languageRegistries.positionResolvers.getIfExists(placement.id);\n if (!exists) {\n languageRegistries.positionResolvers.register({\n ...placement,\n id: placement.id as StatementPosition,\n name: placement.id,\n });\n languageRegistries.suggestionKinds.register({\n id: placement.id as StatementPosition,\n name: placement.id,\n kind: [],\n });\n } else {\n // Allow extension to the built-in placement resolvers\n const origResolve = exists.resolve;\n exists.resolve = (...args) => {\n const ext = placement.resolve(...args);\n if (placement.overrideDefault) {\n return ext;\n }\n const orig = origResolve(...args);\n return orig || ext;\n };\n }\n }\n }\n\n if (customProvider.customSuggestionKinds) {\n for (const kind of customProvider.customSuggestionKinds()) {\n kind.applyTo?.forEach((applyTo) => {\n const exists = languageRegistries.suggestionKinds.getIfExists(applyTo);\n if (exists) {\n // avoid duplicates\n if (exists.kind.indexOf(kind.id as SuggestionKind) === -1) {\n exists.kind.push(kind.id as SuggestionKind);\n }\n }\n });\n\n if (kind.overrideDefault) {\n const stbBehavior = instanceSuggestionsRegistry.get(kind.id);\n if (stbBehavior !== undefined) {\n stbBehavior.suggestions = kind.suggestionsResolver;\n continue;\n }\n }\n\n instanceSuggestionsRegistry.register({\n id: kind.id as SuggestionKind,\n name: kind.id,\n suggestions: kind.suggestionsResolver,\n });\n }\n }\n\n if (customProvider.schemas) {\n const stbBehavior = instanceSuggestionsRegistry.get(SuggestionKind.Schemas);\n const s = stbBehavior.suggestions;\n stbBehavior.suggestions = async (ctx, m) => {\n const standardSchemas = await s(ctx, m);\n if (!customProvider.schemas) {\n return [...standardSchemas];\n }\n const customSchemas = await customProvider.schemas.resolve();\n const customSchemaCompletionItems = customSchemas.map((x) => ({\n label: x.name,\n insertText: `${x.completion ?? x.name}.`,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Module, // it's nice to differentiate schemas from tables\n sortText: CompletionItemPriority.High,\n }));\n return [...standardSchemas, ...customSchemaCompletionItems];\n };\n }\n\n if (customProvider.tables) {\n const stbBehavior = instanceSuggestionsRegistry.get(SuggestionKind.Tables);\n const s = stbBehavior.suggestions;\n stbBehavior.suggestions = async (ctx, m) => {\n const o = await s(ctx, m);\n const tableToken = getTableToken(ctx.currentToken);\n const tableNameParser = customProvider.tables?.parseName ?? defaultTableNameParser;\n\n const tableIdentifier = tableNameParser(tableToken);\n\n const oo = ((await customProvider.tables?.resolve?.(tableIdentifier)) ?? []).map((x) => ({\n label: x.name,\n // if no custom completion is provided it's safe to move cursor further in the statement\n insertText: `${x.completion ?? x.name}${x.completion === x.name ? ' $0' : ''}`,\n insertTextRules: CompletionItemInsertTextRule.InsertAsSnippet,\n command: TRIGGER_SUGGEST,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.MediumHigh,\n }));\n return [...o, ...oo];\n };\n }\n\n if (customProvider.columns) {\n const stbBehavior = instanceSuggestionsRegistry.get(SuggestionKind.Columns);\n const s = stbBehavior.suggestions;\n stbBehavior.suggestions = async (ctx, m) => {\n const o = await s(ctx, m);\n const tableToken = getTableToken(ctx.currentToken);\n let tableIdentifier;\n const tableNameParser = customProvider.tables?.parseName ?? defaultTableNameParser;\n\n if (tableToken && tableToken.value) {\n tableIdentifier = tableNameParser(tableToken);\n }\n\n let oo: CustomSuggestion[] = [];\n if (tableIdentifier) {\n const columns = await customProvider.columns?.resolve!(tableIdentifier);\n oo = columns\n ? columns.map<CustomSuggestion>((x) => ({\n label: x.name,\n insertText: x.completion ?? x.name,\n kind: CompletionItemKind.Field,\n sortText: CompletionItemPriority.High,\n detail: x.type,\n documentation: x.description,\n }))\n : [];\n }\n return [...o, ...oo];\n };\n }\n}\n\n/**\n * Initializes language specific registries that are treated as singletons\n */\nfunction initializeLanguageRegistries(id: string) {\n if (!LANGUAGES_CACHE.has(id)) {\n LANGUAGES_CACHE.set(id, {\n functions: new Registry(),\n operators: new Registry(),\n suggestionKinds: new Registry(initSuggestionsKindRegistry),\n positionResolvers: new Registry(initStatementPositionResolvers),\n macros: new Registry(),\n });\n }\n\n return LANGUAGES_CACHE.get(id)!;\n}\n","import { type monacoTypes } from '@grafana/ui';\nimport { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineFullQuery: TestQueryModel = {\n query: `SELECT column1, FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 42,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 43,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 44,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 45,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 53,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 61,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 62,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 70,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 75,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 78,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 79,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 87,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 91,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 92,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 97,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 100,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ] as monacoTypes.Token[][],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineFullQueryWithAggregation: TestQueryModel = {\n query: 'SELECT count(column1), FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 40,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 49,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 50,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 60,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 65,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 66,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 68,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 77,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 82,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 83,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 85,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 93,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 94,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 99,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 104,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 105,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 107,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const multiLineFullQuery: TestQueryModel = {\n query: `SELECT column1,\n FROM table1\n\n WHERE column1 = \"value1\"\n GROUP BY column1 ORDER BY column1 DESC\n LIMIT 10;`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 4,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 11,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 24,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 9,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 25,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 26,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 38,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const multiLineFullQueryWithAggregation: TestQueryModel = {\n query: `SELECT count(column1),\n FROM table1\n\n WHERE column1 = \"value1\"\n GROUP BY column1 ORDER BY column1 DESC\n LIMIT 10;`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 4,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 11,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 24,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 9,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 25,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 26,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 38,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineEmptyQuery: TestQueryModel = {\n query: '',\n tokens: [],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineTwoQueries: TestQueryModel = {\n query:\n 'SELECT column1, FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10; SELECT column2, FROM table2 WHERE column2 = \"value2\" GROUP BY column1 ORDER BY column2 DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 42,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 43,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 44,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 45,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 53,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 61,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 62,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 70,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 75,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 78,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 79,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 87,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 91,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 92,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 97,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 100,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 101,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 102,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 108,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 109,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 116,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 117,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 118,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 122,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 123,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 129,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 130,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 135,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 136,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 143,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 144,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 145,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 146,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 147,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 153,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 154,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 155,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 160,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 161,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 163,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 164,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 171,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 172,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 177,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 178,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 180,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 181,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 188,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 189,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 193,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 194,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 199,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 200,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 202,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineTwoQueriesWithAggregation: TestQueryModel = {\n query:\n 'SELECT count(column1), FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1 DESC LIMIT 10; SELECT count(column2), FROM table2 WHERE column2 = \"value2\" GROUP BY column1 ORDER BY column2 DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 27,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 28,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 40,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 41,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 49,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 50,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 51,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 60,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 65,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 66,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 68,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 69,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 77,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 82,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 83,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 85,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 86,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 93,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 94,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 98,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 99,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 104,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 105,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 107,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 108,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 109,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 115,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 116,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 121,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 122,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 129,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 130,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 131,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 132,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 136,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 137,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 143,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 144,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 149,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 150,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 157,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 158,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 159,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 160,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 161,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 167,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 168,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 169,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 174,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 175,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 177,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 178,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 185,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 186,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 191,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 192,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 194,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 195,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 202,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 203,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 207,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 208,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 213,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 214,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 216,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const singleLineMultipleColumns: TestQueryModel = {\n query:\n 'SELECT count(column1), column2 FROM table1 WHERE column1 = \"value1\" GROUP BY column1 ORDER BY column1, avg(column2) DESC LIMIT 10;',\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 30,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 31,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 36,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 42,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 43,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 49,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 56,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 57,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 58,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 59,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 60,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 66,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 67,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 68,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 73,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 74,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 76,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 77,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 84,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 85,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 90,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 91,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 93,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 94,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 101,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 102,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 103,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 106,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 107,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 114,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 115,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 116,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 120,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 121,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 126,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 127,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 129,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type TestQueryModel } from '../../test-utils/types';\n\nexport const multiLineMultipleColumns: TestQueryModel = {\n query: `SELECT count(column1), column2\n FROM table1\n\n WHERE column1 = \"value1\"\n GROUP BY column1 ORDER BY column1, avg(column2) DESC\n LIMIT 10;`,\n tokens: [\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 7,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 12,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 20,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 21,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 30,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 4,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 11,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 13,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 14,\n type: 'operator.sql',\n language: 'sql',\n },\n {\n offset: 15,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'identifier.quote.sql',\n language: 'sql',\n },\n {\n offset: 24,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 9,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 16,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 17,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 22,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 23,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 25,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 26,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 33,\n type: 'delimiter.sql',\n language: 'sql',\n },\n {\n offset: 34,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 35,\n type: 'predefined.sql',\n language: 'sql',\n },\n {\n offset: 38,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 39,\n type: 'identifier.sql',\n language: 'sql',\n },\n {\n offset: 46,\n type: 'delimiter.parenthesis.sql',\n language: 'sql',\n },\n {\n offset: 47,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 48,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 52,\n type: 'white.sql',\n language: 'sql',\n },\n ],\n [\n {\n offset: 0,\n type: 'keyword.sql',\n language: 'sql',\n },\n {\n offset: 5,\n type: 'white.sql',\n language: 'sql',\n },\n {\n offset: 6,\n type: 'number.sql',\n language: 'sql',\n },\n {\n offset: 8,\n type: 'delimiter.sql',\n language: 'sql',\n },\n ],\n ],\n};\n","import { type monacoTypes } from '@grafana/ui';\n\n// Stub for the Monaco instance. Only implements the parts that are used in cloudwatch sql\nconst getMonacoMock: (\n testData: Map<string, Array<Array<Pick<monacoTypes.Token, 'language' | 'offset' | 'type'>>>>\n) => any = (testData) => ({\n editor: {\n tokenize: (value: string, languageId: string) => testData.get(value),\n },\n Range: {\n containsPosition: (range: monacoTypes.IRange, position: monacoTypes.IPosition) => {\n return (\n position.lineNumber >= range.startLineNumber &&\n position.lineNumber <= range.endLineNumber &&\n position.column >= range.startColumn &&\n position.column <= range.endColumn\n );\n },\n },\n languages: {\n CompletionItemKind: { Snippet: 2, Function: 1, Keyword: 3 },\n CompletionItemInsertTextRule: { InsertAsSnippet: 2 },\n },\n});\n\nexport { getMonacoMock };\n","import { type monacoTypes } from '@grafana/ui';\n\n// Stub for monacoTypes.editor.ITextModel\nfunction TextModel(value: string) {\n return {\n getValue: function (eol?: monacoTypes.editor.EndOfLinePreference, preserveBOM?: boolean): string {\n return value;\n },\n getValueInRange: function (range: monacoTypes.IRange, eol?: monacoTypes.editor.EndOfLinePreference): string {\n const lines = value.split('\\n');\n const line = lines[range.startLineNumber - 1];\n return line.trim().slice(range.startColumn === 0 ? 0 : range.startColumn - 1, range.endColumn - 1);\n },\n getLineLength: function (lineNumber: number): number {\n const lines = value.split('\\n');\n return lines[lineNumber - 1].trim().length;\n },\n };\n}\n\nexport { TextModel };\n","import { Registry } from '@grafana/data';\nimport { type monacoTypes } from '@grafana/ui';\nimport { getMonacoMock } from '../mocks/Monaco';\nimport { TextModel } from '../mocks/TextModel';\nimport { getStatementPosition } from '../standardSql/getStatementPosition';\nimport { type StatementPositionResolversRegistryItem } from '../standardSql/types';\nimport { type CustomStatementPlacement, type StatementPosition } from '../types';\nimport { linkedTokenBuilder } from '../utils/linkedTokenBuilder';\nimport { type StatementPositionResolverTestCase } from './types';\n\nfunction assertPosition(\n query: string,\n position: monacoTypes.IPosition,\n expected: StatementPosition | string,\n monacoMock: any,\n resolversRegistry: Registry<StatementPositionResolversRegistryItem>\n) {\n const testModel = TextModel(query);\n const current = linkedTokenBuilder(monacoMock, testModel as monacoTypes.editor.ITextModel, position);\n const statementPosition = getStatementPosition(current, resolversRegistry);\n\n expect(statementPosition).toContain(expected);\n}\n\nexport const testStatementPosition = (\n expected: StatementPosition | string,\n cases: StatementPositionResolverTestCase[],\n resolvers: () => CustomStatementPlacement[]\n) => {\n describe(`${expected}`, () => {\n let MonacoMock: any;\n let statementPositionResolversRegistry: Registry<StatementPositionResolversRegistryItem>;\n\n beforeEach(() => {\n const mockQueries = new Map<string, Array<Array<Pick<monacoTypes.Token, 'language' | 'offset' | 'type'>>>>();\n cases.forEach((c) => mockQueries.set(c.query.query, c.query.tokens));\n\n MonacoMock = getMonacoMock(mockQueries);\n statementPositionResolversRegistry = new Registry(() => {\n return resolvers().map((r) => ({\n id: r.id as StatementPosition,\n name: r.name || r.id,\n resolve: r.resolve,\n }));\n });\n });\n\n // using forEach here rather than test.each as been struggling to get the arguments interpolated in test name string\n cases.forEach((c) => {\n test(`${c.query.query}`, () => {\n assertPosition(\n c.query.query,\n { lineNumber: c.position.line, column: c.position.column },\n expected,\n MonacoMock,\n statementPositionResolversRegistry\n );\n });\n });\n });\n};\n","import * as testData from '../mocks/testData';\nimport { testStatementPosition } from './statementPosition';\nimport { type TestQueryModel } from './types';\n\nexport const SQLEditorTestUtils = {\n testData,\n testStatementPosition,\n};\n\nexport type { TestQueryModel };\n","import { type JsonTree } from '@react-awesome-query-builder/ui';\n\nimport {\n type DataFrame,\n type DataSourceJsonData,\n type MetricFindValue,\n type SelectableValue,\n type TimeRange,\n toOption as toOptionFromData,\n} from '@grafana/data';\n\nimport { type DataQuery } from '@grafana/schema';\n\nimport {\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n} from './expressions';\nimport { type CompletionItemKind, type LanguageCompletionProvider } from '../SQLEditor';\n\nexport interface SqlQueryForInterpolation {\n dataset?: string;\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n refId: string;\n hide?: boolean;\n}\n\nexport interface SQLConnectionLimits {\n maxOpenConns: number;\n maxIdleConns: number;\n connMaxLifetime: number;\n}\n\nexport interface SQLOptions extends SQLConnectionLimits, DataSourceJsonData {\n tlsAuth: boolean;\n tlsAuthWithCACert: boolean;\n timezone: string;\n tlsSkipVerify: boolean;\n user: string;\n database: string;\n url: string;\n timeInterval: string;\n}\n\n// Match the Enums Expected in SqlUtil and SqlDS\n// https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/sqlutil/query.go#L18-L29\nexport enum QueryFormat {\n Timeseries,\n Table,\n Logs,\n Trace,\n OptionMulti,\n}\n\nexport enum EditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n\nexport interface SQLQuery extends DataQuery {\n alias?: string;\n format?: QueryFormat;\n rawSql?: string;\n dataset?: string; // When catalog is present, dataset represents the schema. Otherwise, it's the dataset.\n catalog?: string;\n table?: string;\n sql?: SQLExpression;\n editorMode?: EditorMode;\n rawQuery?: boolean;\n}\n\nexport interface NameValue {\n name: string;\n value: string;\n}\n\nexport type SQLFilters = NameValue[];\n\nexport interface SQLExpression {\n columns?: QueryEditorFunctionExpression[];\n whereJsonTree?: JsonTree;\n whereString?: string;\n filters?: SQLFilters;\n groupBy?: QueryEditorGroupByExpression[];\n orderBy?: QueryEditorPropertyExpression;\n orderByDirection?: 'ASC' | 'DESC';\n limit?: number;\n offset?: number;\n}\n\nexport interface TableSchema {\n name?: string;\n schema?: TableFieldSchema[];\n}\n\nexport interface TableFieldSchema {\n name: string;\n description?: string;\n type: string;\n repeated: boolean;\n schema: TableFieldSchema[];\n}\n\nexport interface QueryRowFilter {\n filter: boolean;\n group: boolean;\n order: boolean;\n preview: boolean;\n}\n\nexport const QUERY_FORMAT_OPTIONS = [\n { label: 'Time series', value: QueryFormat.Timeseries },\n { label: 'Table', value: QueryFormat.Table },\n];\n\nconst backWardToOption = (value: string) => ({ label: value, value });\n\nexport const toOption = toOptionFromData ?? backWardToOption;\n\nexport interface ResourceSelectorProps {\n disabled?: boolean;\n className?: string;\n applyDefault?: boolean;\n}\n// React Awesome Query builder field types.\n// These are responsible for rendering the correct UI for the field.\nexport type RAQBFieldTypes = 'text' | 'number' | 'boolean' | 'datetime' | 'date' | 'time';\n\nexport interface SQLSelectableValue extends SelectableValue {\n type?: string;\n raqbFieldType?: RAQBFieldTypes;\n}\n\nexport interface Aggregate {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface DB {\n init?: (datasourceId?: string) => Promise<boolean>;\n datasets: (catalog?: string) => Promise<string[]>; // When catalog is provided, returns schemas for that catalog\n catalogs?: () => Promise<string[]>;\n tables: (dataset?: string, catalog?: string, schema?: string) => Promise<string[]>;\n fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;\n validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;\n dsID: () => number;\n dispose?: (dsID?: string) => void;\n lookup: (path?: string) => Promise<Array<{ name: string; completion: string }>>;\n getSqlCompletionProvider: () => LanguageCompletionProvider;\n toRawSql?: (query: SQLQuery) => string;\n functions: () => Promise<Aggregate[]>;\n labels?: Map<'dataset', string>;\n disableDatasets?: boolean;\n disableCatalogs?: boolean;\n}\n\nexport interface QueryEditorProps {\n db: DB;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n range?: TimeRange;\n}\n\nexport interface ValidationResults {\n query: SQLQuery;\n rawSql?: string;\n error: string;\n isError: boolean;\n isValid: boolean;\n statistics?: {\n TotalBytesProcessed: number;\n } | null;\n}\n\nexport interface SqlQueryModel {\n interpolate: () => string;\n quoteLiteral: (v: string) => string;\n}\n\nexport interface ResponseParser {\n transformMetricFindResponse: (frame: DataFrame) => MetricFindValue[];\n}\n\nexport interface MetaDefinition {\n name: string;\n completion?: string;\n kind: CompletionItemKind;\n}\n\n/**\n * Represents a query with all default values applied.\n * This is equivalent to SQLQuery since applyQueryDefaults returns SQLQuery.\n */\nexport type QueryWithDefaults = SQLQuery;\n","import { isEmpty } from 'lodash';\n\nimport {\n QueryEditorExpressionType,\n type QueryEditorFunctionExpression,\n type QueryEditorGroupByExpression,\n type QueryEditorPropertyExpression,\n QueryEditorPropertyType,\n} from '../expressions';\nimport { type SQLQuery, type SQLExpression, type DB } from '../types';\n\nexport function getRawSqlFn(db: DB) {\n return db.toRawSql ? db.toRawSql : (query: SQLQuery) => toRawSql(query, Boolean(db.disableDatasets));\n}\n\n/**\n * Converts a SQLQuery object into a raw SQL string.\n *\n * Table reference naming:\n * - When catalog is present: catalog.dataset.table (dataset acts as schema)\n * - When catalog is absent: dataset.table (dataset acts as dataset/schema)\n * - When both are disabled: just table\n *\n * Note: Semantically, the dataset field has dual meaning:\n * - With catalog: dataset = schema (Unity Catalog: catalog.schema.table)\n * - Without catalog: dataset = dataset (Legacy: dataset.table)\n */\nexport function toRawSql({ sql, dataset, catalog, table }: SQLQuery, disableDatasets: boolean): string {\n let rawQuery = '';\n\n if (!sql || !haveColumns(sql.columns)) {\n return rawQuery;\n }\n\n rawQuery += createSelectClause(sql.columns);\n\n // Three-part naming: catalog.dataset.table (dataset acts as schema when catalog is present)\n if (catalog && dataset && table) {\n rawQuery += `FROM ${catalog}.${dataset}.${table} `;\n }\n // Two-part naming: dataset.table (legacy style, only if catalogs not used)\n else if (!disableDatasets && dataset && table) {\n rawQuery += `FROM ${dataset}.${table} `;\n }\n // Just table name (when datasets are disabled or neither catalog nor dataset is present)\n else if (table) {\n rawQuery += `FROM ${table} `;\n }\n\n if (sql.whereString) {\n rawQuery += `WHERE ${sql.whereString} `;\n }\n\n if (sql.groupBy?.[0]?.property.name) {\n const groupBy = sql.groupBy.map((g) => g.property.name).filter((g) => !isEmpty(g));\n rawQuery += `GROUP BY ${groupBy.join(', ')} `;\n }\n\n if (sql.orderBy?.property.name) {\n rawQuery += `ORDER BY ${sql.orderBy.property.name} `;\n }\n\n if (sql.orderBy?.property.name && sql.orderByDirection) {\n rawQuery += `${sql.orderByDirection} `;\n }\n\n if (sql.limit !== undefined && sql.limit >= 0) {\n rawQuery += `LIMIT ${sql.limit} `;\n }\n\n return rawQuery;\n}\n\nfunction createSelectClause(sqlColumns: NonNullable<SQLExpression['columns']>): string {\n const columns = sqlColumns.map((c) => {\n let rawColumn = '';\n if (c.name) {\n rawColumn += `${c.name}(${c.parameters?.map((p) => `${p.name}`)})`;\n } else {\n rawColumn += `${c.parameters?.map((p) => `${p.name}`)}`;\n }\n return rawColumn;\n });\n return `SELECT ${columns.join(', ')} `;\n}\n\nexport function haveColumns(columns: SQLExpression['columns']): columns is NonNullable<SQLExpression['columns']> {\n if (!columns) {\n return false;\n }\n\n const haveColumn = columns.some((c) => c.parameters?.length || c.parameters?.some((p) => p.name));\n const haveFunction = columns.some((c) => c.name);\n return haveColumn || haveFunction;\n}\n\n/**\n * Creates a GroupByExpression for a specified field\n */\nexport function setGroupByField(field?: string): QueryEditorGroupByExpression {\n return {\n type: QueryEditorExpressionType.GroupBy,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\n/**\n * Creates a PropertyExpression for a specified field\n */\nexport function setPropertyField(field?: string): QueryEditorPropertyExpression {\n return {\n type: QueryEditorExpressionType.Property,\n property: {\n type: QueryEditorPropertyType.String,\n name: field,\n },\n };\n}\n\nexport function createFunctionField(functionName?: string): QueryEditorFunctionExpression {\n return {\n type: QueryEditorExpressionType.Function,\n name: functionName,\n parameters: [],\n };\n}\n","import React from 'react';\nimport { Stack } from '@grafana/ui';\nimport { type ThemeSpacingTokens } from '@grafana/data';\n\nexport type Direction = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type AlignItems =\n | 'stretch'\n | 'flex-start'\n | 'flex-end'\n | 'center'\n | 'baseline'\n | 'start'\n | 'end'\n | 'self-start'\n | 'self-end';\n\ninterface StackProps {\n children?: React.ReactNode;\n direction?: Direction;\n alignItems?: AlignItems;\n wrap?: boolean;\n gap?: ThemeSpacingTokens;\n}\n\nexport const EditorStack = ({ children, wrap: wrapItems = true, ...props }: StackProps) => {\n return (\n <Stack wrap={wrapItems ? 'wrap' : undefined} direction={props.direction ?? 'row'} gap={props.gap ?? 2} {...props}>\n {children}\n </Stack>\n );\n};\n","import React, { type ReactElement, type Ref, forwardRef } from 'react';\nimport { Button } from '@grafana/ui';\n\nimport { EditorStack } from './EditorStack';\n\ninterface EditorListProps<T> {\n items: Array<Partial<T>>;\n renderItem: (item: Partial<T>, onChangeItem: (item: Partial<T>) => void, onDeleteItem: () => void) => ReactElement;\n onChange: (items: Array<Partial<T>>) => void;\n}\n\nexport const EditorList = forwardRef(function EditorList<T>(\n { items, renderItem, onChange }: EditorListProps<T>,\n ref: Ref<HTMLButtonElement>\n) {\n const onAddItem = () => {\n const newItems = [...items, {}];\n\n onChange(newItems);\n };\n\n const onChangeItem = (itemIndex: number, newItem: Partial<T>) => {\n const newItems = [...items];\n newItems[itemIndex] = newItem;\n onChange(newItems);\n };\n\n const onDeleteItem = (itemIndex: number) => {\n const newItems = [...items];\n newItems.splice(itemIndex, 1);\n onChange(newItems);\n };\n return (\n <EditorStack>\n {items.map((item, index) => (\n <div key={index}>\n {renderItem(\n item,\n (newItem) => onChangeItem(index, newItem),\n () => onDeleteItem(index)\n )}\n </div>\n ))}\n <Button ref={ref} onClick={onAddItem} variant=\"secondary\" size=\"md\" icon=\"plus\" aria-label=\"Add\" type=\"button\" />\n </EditorStack>\n );\n});\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Button, type ButtonProps, useStyles2 } from '@grafana/ui';\n\ntype AccessoryButtonProps = ButtonProps & {};\n\nexport const AccessoryButton = ({ className, ...props }: AccessoryButtonProps) => {\n const styles = useStyles2(getButtonStyles);\n\n return <Button {...props} className={cx(className, styles.button)} />;\n};\n\nconst getButtonStyles = (theme: GrafanaTheme2) => ({\n button: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2),\n }),\n});\n","import React, { Children, cloneElement, isValidElement, type ReactElement } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { useStyles2 } from '@grafana/ui';\n\ntype Child = string | undefined | ReactElement<{ className?: string; invalid?: unknown }>;\ninterface InputGroupProps {\n // we type the children props so we can test them later on\n children: Child | Child[];\n}\n\nexport const InputGroup = ({ children }: InputGroupProps) => {\n const styles = useStyles2(getStyles);\n\n // Find children with an invalid prop, and set a class name to raise their z-index so all\n // of the invalid border is visible\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\n return child;\n });\n\n return <div className={styles.root}>{modifiedChildren}</div>;\n};\n\n// The later in the array the higher the priority for showing that element's border\nconst borderPriority = [\n '' as const, // lowest priority\n 'base' as const,\n 'hovered' as const,\n 'invalid' as const,\n 'focused' as const, // highest priority\n];\n\nconst getStyles = () => ({\n root: css({\n display: 'flex',\n\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\n '&:first-child': {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n },\n\n '&:last-child': {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0,\n },\n\n //\n position: 'relative',\n zIndex: borderPriority.indexOf('base'),\n\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\n invalidChild: css({\n zIndex: borderPriority.indexOf('invalid'),\n }),\n});\n","import React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { type SQLExpression } from '../types';\nimport { type QueryEditorGroupByExpression } from '../expressions';\nimport { setGroupByField } from '../utils/sql.utils';\nimport { EditorList } from '../EditorList';\nimport { Select } from '@grafana/ui';\nimport { AccessoryButton } from '../AccessoryButton';\nimport { InputGroup } from '../InputGroup';\n\ninterface GroupByRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n}\n\nexport function GroupByRow({ sql, columns, onSqlChange }: GroupByRowProps) {\n const onGroupByChange = useCallback(\n (item: Array<Partial<QueryEditorGroupByExpression>>) => {\n // As new (empty object) items come in, we need to make sure they have the correct type\n const cleaned = item.map((v) => setGroupByField(v.property?.name));\n const newSql = { ...sql, groupBy: cleaned };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <EditorList\n items={sql.groupBy!}\n onChange={onGroupByChange}\n renderItem={makeRenderColumn({\n options: columns,\n })}\n />\n );\n}\n\nfunction makeRenderColumn({ options }: { options?: Array<SelectableValue<string>> }) {\n const renderColumn = function (\n item: Partial<QueryEditorGroupByExpression>,\n onChangeItem: (item: QueryEditorGroupByExpression) => void,\n onDeleteItem: () => void\n ) {\n return (\n <InputGroup>\n <Select\n value={item.property?.name ? toOption(item.property.name) : null}\n aria-label=\"Group by\"\n options={options}\n menuShouldPortal\n onChange={({ value }) => value && onChangeItem(setGroupByField(value))}\n />\n <AccessoryButton aria-label=\"Remove group by column\" icon=\"times\" variant=\"secondary\" onClick={onDeleteItem} />\n </InputGroup>\n );\n };\n return renderColumn;\n}\n","import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorFieldGroupProps {\n children?: React.ReactNode;\n}\n\nexport const EditorFieldGroup = ({ children }: EditorFieldGroupProps) => {\n return <EditorStack gap={1}>{children}</EditorStack>;\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ninterface EditorHeaderProps {\n children?: React.ReactNode;\n}\n\nexport const EditorHeader = ({ children }: EditorHeaderProps) => {\n const styles = useStyles2(getStyles);\n\n return <div className={styles.root}>{children}</div>;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\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","import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Field, Icon, type PopoverContent, ReactUtils, Space, Tooltip, useStyles2 } from '@grafana/ui';\n\ninterface EditorFieldProps extends ComponentProps<typeof Field> {\n label: string;\n children: React.ReactElement;\n width?: number | string;\n optional?: boolean;\n tooltip?: PopoverContent;\n tooltipInteractive?: boolean;\n}\nexport const EditorField = (props: EditorFieldProps) => {\n const { label, optional, tooltip, tooltipInteractive, children, width, ...fieldProps } = props;\n\n const styles = useStyles2(getStyles, width);\n\n // Null check for backward compatibility\n const childInputId = fieldProps?.htmlFor || ReactUtils?.getChildId(children);\n\n const labelEl = (\n <>\n <label className={styles.label} htmlFor={childInputId}>\n {label}\n {optional && <span className={styles.optional}> - optional</span>}\n {tooltip && (\n <Tooltip placement=\"top\" content={tooltip} theme=\"info\" interactive={tooltipInteractive}>\n <Icon tabIndex={0} name=\"info-circle\" size=\"sm\" className={styles.icon} />\n </Tooltip>\n )}\n </label>\n <Space v={0.5} />\n </>\n );\n\n return (\n <div className={styles.root}>\n <Field className={styles.field} label={labelEl} {...fieldProps}>\n {children}\n </Field>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, width?: number | string) => {\n return {\n root: css({\n minWidth: theme.spacing(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, // 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","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRow = ({ children }: EditorRowProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={2}>{children}</EditorStack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\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","import React from 'react';\nimport { EditorStack } from './EditorStack';\n\ninterface EditorRowsProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRows = ({ children }: EditorRowsProps) => {\n return (\n <EditorStack gap={0.5} direction=\"column\">\n {children}\n </EditorStack>\n );\n};\n","import React, { type ComponentProps } from 'react';\nimport { css } from '@emotion/css';\nimport { Switch } from '@grafana/ui';\n\n// Wrapper component around <Switch /> that properly aligns it in <EditorField />\nexport const EditorSwitch = (props: ComponentProps<typeof Switch>) => {\n const styles = getStyles();\n\n return (\n <div className={styles.switch}>\n <Switch {...props} />\n </div>\n );\n};\n\nconst getStyles = () => {\n return {\n switch: css({\n display: 'flex',\n alignItems: 'center',\n minHeight: 30,\n }),\n };\n};\n","import React from 'react';\ninterface FlexItemProps {\n grow?: number;\n shrink?: number;\n}\n\nexport const FlexItem = ({ grow, shrink }: FlexItemProps) => {\n return <div style={{ display: 'block', flexGrow: grow, flexShrink: shrink }} />;\n};\n","import React, { useState } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GroupBase } from 'react-select';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport {\n Select,\n type SelectCommonProps,\n type SelectContainerProps,\n SelectContainer as BaseSelectContainer,\n useStyles2,\n} from '@grafana/ui';\n\ninterface InlineSelectProps<T> extends SelectCommonProps<T> {\n label?: string;\n}\n\nexport function InlineSelect<T>({ label: labelProp, ...props }: InlineSelectProps<T>) {\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\n return (\n <div className={styles.root}>\n {labelProp && (\n <label className={styles.label} htmlFor={id}>\n {labelProp}\n {':'} \n </label>\n )}\n <Select inputId={id} {...props} components={components} />\n </div>\n );\n}\n\nconst SelectContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { children } = props;\n\n const styles = useStyles2(getSelectStyles);\n\n return (\n <BaseSelectContainer {...props} className={cx(props.className, styles.container)}>\n {children}\n </BaseSelectContainer>\n );\n};\n\nconst ValueContainer = <Option, isMulti extends boolean, Group extends GroupBase<Option>>(\n props: SelectContainerProps<Option, isMulti, Group>\n) => {\n const { className, children } = props;\n const styles = useStyles2(getSelectStyles);\n\n return <div className={cx(className, styles.valueContainer)}>{children}</div>;\n};\n\nconst getSelectStyles = (theme: GrafanaTheme2) => ({\n root: css({\n display: 'flex',\n fontSize: 12,\n alignItems: 'center',\n }),\n\n label: css({\n color: theme.colors.text.secondary,\n whiteSpace: 'nowrap',\n }),\n\n container: css({\n background: 'none',\n borderColor: 'transparent',\n }),\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","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nexport interface SpaceProps {\n v?: number;\n h?: number;\n layout?: 'block' | 'inline';\n}\n\nexport const Space = ({ v = 0, h = 0, layout = 'block' }: SpaceProps) => {\n const styles = useStyles2(getStyles, v, h, layout);\n\n return <span className={cx(styles.wrapper)} />;\n};\n\nconst getStyles = (theme: GrafanaTheme2, v: number, h: number, layout: 'block' | 'inline') => ({\n wrapper: css([\n {\n paddingRight: theme.spacing(h ?? 0),\n paddingBottom: theme.spacing(v ?? 0),\n },\n layout === 'inline' && {\n display: 'inline-block',\n },\n layout === 'block' && {\n display: 'block',\n },\n ]),\n});\n","import { EditorMode, QueryFormat, type SQLQuery } from './types';\nimport { createFunctionField, setGroupByField } from './utils/sql.utils';\n\nexport function applyQueryDefaults(q?: SQLQuery): SQLQuery {\n let editorMode = q?.editorMode || EditorMode.Builder;\n\n // Switching to code editor if the query was created before visual query builder was introduced.\n if (q?.editorMode === undefined && q?.rawSql !== undefined) {\n editorMode = EditorMode.Code;\n }\n\n const result: SQLQuery = {\n ...q,\n refId: q?.refId || 'A',\n format: q?.format !== undefined ? q.format : QueryFormat.Table,\n rawSql: q?.rawSql || '',\n editorMode,\n sql: q?.sql || {\n columns: [createFunctionField()],\n groupBy: [setGroupByField()],\n limit: 50,\n },\n };\n\n return result;\n}\n","import React, { useRef, useEffect } from 'react';\n\nimport { Button, Icon, Modal } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className=\"modal-header-title\">\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className=\"p-l-1\">Warning</span>\n </div>\n }\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n Builder mode does not display changes made in code. The query builder will display the last changes you made in\n builder mode.\n </p>\n <p>Do you want to copy your code to the clipboard?</p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n Cancel\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n Discard code and switch\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n Copy code and switch\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n","import React, { useEffect } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps, toOption } from './types';\n\ninterface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset?: string;\n catalog?: string; // When provided, fetch schemas instead of datasets\n value: string | null;\n applyDefault?: boolean;\n disabled?: boolean;\n onChange: (v: SelectableValue) => void;\n inputId?: string;\n enableCatalogs?: boolean;\n 'data-testid'?: string;\n}\n\nexport const DatasetSelector = ({\n db,\n dataset,\n catalog,\n value,\n onChange,\n disabled,\n className,\n applyDefault,\n inputId,\n enableCatalogs,\n 'data-testid': dataTestId,\n}: DatasetSelectorProps) => {\n const state = useAsync(async () => {\n // If a default dataset is provided, use it\n if (dataset) {\n onChange(toOption(dataset));\n return [toOption(dataset)];\n }\n\n // Fetch datasets - when catalog is provided, db.datasets(catalog) returns schemas for that catalog\n const datasets = await db.datasets(catalog);\n return datasets.map(toOption);\n }, [catalog]);\n\n useEffect(() => {\n if (!applyDefault) {\n return;\n }\n // Set default dataset when values are fetched\n if (!value) {\n if (state.value && state.value[0]) {\n onChange(state.value[0]);\n }\n } else {\n if (state.value && state.value.find((v) => v.value === value) === undefined) {\n // if value is set and newly fetched values does not contain selected value\n if (state.value.length > 0) {\n onChange(state.value[0]);\n }\n }\n }\n }, [state.value, value, applyDefault, onChange]);\n\n return (\n <Select\n inputId={inputId}\n className={className}\n aria-label=\"Dataset selector\"\n value={value}\n options={state.value}\n onChange={onChange}\n disabled={disabled}\n isLoading={state.loading}\n menuShouldPortal={true}\n data-testid={dataTestId}\n placeholder={enableCatalogs ? 'Select schema' : 'Select dataset'}\n />\n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Select } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { type DB } from './types';\n\nexport interface CatalogSelectorProps {\n db: DB;\n inputId?: string;\n value: string | null;\n onChange: (catalog: string | null) => void;\n}\n\nexport const CatalogSelector = ({ db, inputId, value, onChange }: CatalogSelectorProps) => {\n const [catalogs, setCatalogs] = useState<Array<SelectableValue<string>>>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const loadCatalogs = useCallback(async () => {\n if (!db.catalogs) {\n return;\n }\n\n setIsLoading(true);\n try {\n const catalogList = await db.catalogs();\n const catalogOptions = catalogList.map((catalog) => ({\n label: catalog,\n value: catalog,\n }));\n setCatalogs(catalogOptions);\n } catch (error) {\n console.error('Error loading catalogs:', error);\n setCatalogs([]);\n } finally {\n setIsLoading(false);\n }\n }, [db]);\n\n useEffect(() => {\n loadCatalogs();\n }, [db, loadCatalogs]);\n\n const handleChange = (selectable: SelectableValue<string>) => {\n onChange(selectable?.value || null);\n };\n\n const selectedValue = catalogs.find((catalog) => catalog.value === value) || null;\n\n return (\n <Select\n inputId={inputId}\n options={catalogs}\n value={selectedValue}\n onChange={handleChange}\n isLoading={isLoading}\n placeholder=\"Select catalog\"\n isClearable\n allowCustomValue\n menuShouldPortal={true}\n />\n );\n};\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Select } from '@grafana/ui';\nimport { type DB, type ResourceSelectorProps, type QueryWithDefaults } from './types';\n\ninterface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset?: string; // When catalog is present, this represents the schema. Otherwise, it's the dataset.\n catalog?: string;\n value: string | null;\n query: QueryWithDefaults;\n onChange: (v: SelectableValue) => void;\n inputId?: string;\n enableCatalogs?: boolean;\n}\n\nexport const TableSelector = ({\n db,\n dataset,\n catalog,\n value,\n className,\n onChange,\n inputId,\n enableCatalogs,\n}: TableSelectorProps) => {\n const state = useAsync(async () => {\n if (!dataset && !catalog) {\n return [];\n }\n\n // When catalogs are enabled, we need both catalog and dataset (acting as schema) to load tables\n if (enableCatalogs && (!catalog || !dataset)) {\n return [];\n }\n\n // db.tables(dataset, catalog)\n // dataset acts as schema when catalog is present, otherwise it's the dataset\n const tables = await db.tables(dataset, catalog);\n return tables.map(toOption);\n }, [dataset, catalog, enableCatalogs]);\n\n return (\n <Select\n inputId={inputId}\n className={className}\n aria-label=\"Table selector\"\n value={value}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={state.loading ? 'Loading tables' : 'Select table'}\n />\n );\n};\n","import React from 'react';\nimport { Button, type IconName, type PopoverContent, Tooltip } from '@grafana/ui';\n\ntype RunQueryButtonProps = {\n ariaLabel?: string;\n queryInvalid?: boolean;\n invalidQueryTooltip?: PopoverContent;\n disabled?: boolean;\n queryRunning?: boolean;\n onClick: () => void;\n dataTestId?: string;\n};\n\nexport const RunQueryButton = ({\n ariaLabel = 'Query editor Run button',\n queryRunning = false,\n queryInvalid = false,\n invalidQueryTooltip,\n disabled = false,\n onClick,\n dataTestId,\n}: RunQueryButtonProps) => {\n let icon: IconName | undefined = queryInvalid ? 'exclamation-triangle' : undefined;\n if (queryRunning) {\n icon = 'fa fa-spinner';\n }\n\n const RunButton = (\n <Button\n aria-label={ariaLabel}\n size=\"sm\"\n variant=\"secondary\"\n icon={icon}\n disabled={disabled || queryRunning}\n onClick={onClick}\n data-testid={dataTestId}\n >\n Run query\n </Button>\n );\n\n return queryInvalid ? (\n <Tooltip\n theme=\"error\"\n placement=\"top\"\n content={\n invalidQueryTooltip ?? (\n <>\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </>\n )\n }\n >\n {RunButton}\n </Tooltip>\n ) : (\n RunButton\n );\n};\n","import React, { useCallback, useState, useId } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { CatalogSelector } from './CatalogSelector';\nimport { TableSelector } from './TableSelector';\nimport { InlineSwitch, RadioButtonGroup } from '@grafana/ui';\nimport { EditorField } from './EditorField';\nimport { EditorHeader } from './EditorHeader';\nimport { EditorRow } from './EditorRow';\nimport { FlexItem } from './FlexItem';\nimport { InlineSelect } from './InlineSelect';\nimport { Space } from './Space';\nimport { RunQueryButton } from './RunQueryButton';\nimport {\n type DB,\n type SQLQuery,\n type QueryRowFilter,\n type QueryWithDefaults,\n EditorMode,\n QueryFormat,\n QUERY_FORMAT_OPTIONS,\n} from './types';\nimport { getRawSqlFn } from './utils/sql.utils';\n\ninterface QueryHeaderProps {\n db: DB;\n defaultDataset: string;\n enableDatasets: boolean;\n enableCatalogs?: boolean;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n onRunQuery: () => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n queryRowFilter: QueryRowFilter;\n isQueryRunnable: boolean;\n labels?: Map<string, string>;\n}\n\nconst editorModes = [\n { label: 'Builder', value: EditorMode.Builder },\n { label: 'Code', value: EditorMode.Code },\n];\n\nexport function QueryHeader({\n db,\n defaultDataset,\n enableDatasets,\n enableCatalogs,\n query,\n queryRowFilter,\n onChange,\n onRunQuery,\n onQueryRowChange,\n isQueryRunnable,\n labels = new Map([['dataset', 'Dataset']]),\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = getRawSqlFn(db);\n const htmlId = useId();\n\n // Derive enableCatalogs from db.disableCatalogs when not explicitly provided\n // Catalogs are disabled by default (when disableCatalogs is undefined or true)\n const catalogsEnabled = enableCatalogs ?? db.disableCatalogs === false;\n\n // When catalogs are enabled, datasets MUST be enabled (they act as schema selector)\n // This ensures the dataset selector is shown to select schemas\n const effectiveEnableDatasets = catalogsEnabled ? true : enableDatasets;\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n // dataset field has dual meaning:\n // - When catalogs enabled: dataset = schema\n // - When catalogs disabled: dataset = dataset\n const datasetValue = e.value || undefined;\n if (datasetValue === query.dataset) {\n return;\n }\n const next: SQLQuery = {\n ...query,\n dataset: datasetValue,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n const onCatalogChange = (catalog: string | null) => {\n const catalogValue = catalog || undefined;\n if (catalogValue === query.catalog) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n catalog: catalogValue,\n dataset: undefined, // Reset dataset (which acts as schema when catalog is present)\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n return (\n <>\n <EditorHeader>\n <InlineSelect\n label=\"Format\"\n value={query.format}\n placeholder=\"Select format\"\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label=\"Filter\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label=\"Group\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label=\"Order\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label=\"Preview\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked })\n }\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n <RunQueryButton queryInvalid={!isQueryRunnable} onClick={() => onRunQuery()} />\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => setShowConfirm(false)}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n\n <EditorRow>\n {/* Catalog selector: only when catalogs are not disabled */}\n {catalogsEnabled && (\n <EditorField label={labels.get('catalog') || 'Catalog'} width={25}>\n <CatalogSelector\n db={db}\n inputId={`sql-catalog-${htmlId}`}\n value={query.catalog === undefined ? null : query.catalog}\n onChange={onCatalogChange}\n />\n </EditorField>\n )}\n\n {/* Schema selector when catalogs enabled, dataset selector otherwise */}\n {effectiveEnableDatasets && (\n <EditorField\n label={catalogsEnabled ? labels.get('schema') || 'Schema' : labels.get('dataset') || 'Dataset'}\n width={25}\n >\n <DatasetSelector\n db={db}\n inputId={catalogsEnabled ? `sql-schema-${htmlId}` : `sql-dataset-${htmlId}`}\n data-testid={catalogsEnabled ? 'schema-selector' : 'dataset-selector'}\n dataset={catalogsEnabled ? undefined : defaultDataset}\n value={query.dataset === undefined ? null : query.dataset}\n onChange={onDatasetChange}\n catalog={catalogsEnabled ? query.catalog : undefined}\n />\n </EditorField>\n )}\n\n {/* Table selector: always shown */}\n <EditorField label={labels.get('table') || 'Table'} width={25}>\n <TableSelector\n db={db}\n inputId={`sql-table-${htmlId}`}\n dataset={query.dataset || (catalogsEnabled ? undefined : defaultDataset)}\n catalog={catalogsEnabled ? query.catalog : undefined}\n query={query}\n value={query.table === undefined ? null : query.table}\n onChange={onTableChange}\n enableCatalogs={catalogsEnabled}\n applyDefault\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n","import { format, type SqlLanguage } from 'sql-formatter';\n\n/**\n * Format SQL while preserving Grafana template variable tokens.\n * Treats `${...}`, `$__...`, and `$var` as parameters so the\n * formatter does not split or reflow them, then normalizes any\n * whitespace inside those tokens.\n */\nexport function formatSQL(q: string, language: SqlLanguage = 'sql') {\n const formatted = format(q, {\n language,\n paramTypes: {\n custom: [\n {\n regex: '\\\\$\\\\s*\\\\{[^}]*\\\\}|\\\\$\\\\s*__\\\\w+(?:\\\\([^)]*\\\\))?|\\\\$\\\\s*\\\\w+',\n },\n ],\n },\n });\n return formatted.replace(/(\\$\\s*\\{[^}]*\\})|(\\$\\s*__\\w+(?:\\([^)]*\\))?)|(\\$\\s*\\w+)/g, (m: string) =>\n m.replace(/\\s/g, '')\n );\n}\n","import React, { useCallback, useEffect, useRef } from 'react';\n\nimport { type SQLQuery } from '../types';\n\nimport { formatSQL } from '../utils/formatSQL';\nimport { type LanguageCompletionProvider, SQLEditor } from '../../SQLEditor';\nimport type { SqlLanguage } from 'sql-formatter';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n completionProvider: LanguageCompletionProvider;\n language?: SqlLanguage;\n};\n\nexport function QueryEditorRaw({\n children,\n onChange,\n query,\n width,\n height,\n completionProvider,\n language = 'sql',\n}: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={{ id: 'sql', completionProvider, formatter: (q) => formatSQL(q, language) }}\n >\n {children}\n </SQLEditor>\n );\n}\n","import { css } from '@emotion/css';\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { useAsyncFn, useDebounce } from 'react-use';\nimport { formattedValueToString, getValueFormat, type TimeRange } from '@grafana/data';\nimport { Icon, Spinner, useTheme2 } from '@grafana/ui';\nimport { type DB, type SQLQuery, type ValidationResults } from '../types';\n\nexport interface QueryValidatorProps {\n db: DB;\n query: SQLQuery;\n range?: TimeRange;\n onValidate: (isValid: boolean) => void;\n}\n\nexport function QueryValidator({ db, query, onValidate, range }: QueryValidatorProps) {\n const [validationResult, setValidationResult] = useState<ValidationResults | null>();\n const theme = useTheme2();\n const valueFormatter = useMemo(() => getValueFormat('bytes'), []);\n\n const styles = useMemo(() => {\n return {\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n };\n }, [theme]);\n\n const [state, validateQuery] = useAsyncFn(\n async (q: SQLQuery) => {\n if (q.rawSql?.trim() === '') {\n return null;\n }\n\n return await db.validateQuery(q, range);\n },\n [db]\n );\n\n const [,] = useDebounce(\n async () => {\n const result = await validateQuery(query);\n if (result) {\n setValidationResult(result);\n }\n\n return null;\n },\n 1000,\n [query, validateQuery]\n );\n\n useEffect(() => {\n if (validationResult?.isError) {\n onValidate(false);\n }\n if (validationResult?.isValid) {\n onValidate(true);\n }\n }, [validationResult, onValidate]);\n\n if (!state.value && !state.loading) {\n return null;\n }\n\n const error = state.value?.error ? processErrorMessage(state.value.error) : '';\n\n return (\n <>\n {state.loading && (\n <div className={styles.info}>\n <Spinner inline={true} size={12} /> Validating query...\n </div>\n )}\n {!state.loading && state.value && (\n <>\n <>\n {state.value.isValid && state.value.statistics && (\n <div className={styles.valid}>\n <Icon name=\"check\" /> This query will process{' '}\n <strong>{formattedValueToString(valueFormatter(state.value.statistics.TotalBytesProcessed))}</strong>{' '}\n when run.\n </div>\n )}\n </>\n\n <>{state.value.isError && <div className={styles.error}>{error}</div>}</>\n </>\n )}\n </>\n );\n}\n\nfunction processErrorMessage(error: string) {\n const splat = error.split(':');\n if (splat.length > 2) {\n return splat.slice(2).join(':');\n }\n return error;\n}\n","import { css } from '@emotion/css';\nimport React, { useMemo, useState } from 'react';\n\nimport { HorizontalGroup, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, type QueryValidatorProps } from './QueryValidator';\nimport { reportInteraction } from '@grafana/runtime';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css`\n border: 1px solid ${theme.colors.border.medium};\n border-top: none;\n padding: ${theme.spacing(0.5, 0.5, 0.5, 0.5)};\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n font-size: ${theme.typography.bodySmall.fontSize};\n `,\n error: css`\n color: ${theme.colors.error.text};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-family: ${theme.typography.fontFamilyMonospace};\n `,\n valid: css`\n color: ${theme.colors.success.text};\n `,\n info: css`\n color: ${theme.colors.text.secondary};\n `,\n hint: css`\n color: ${theme.colors.text.disabled};\n white-space: nowrap;\n cursor: help;\n `,\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n const onFormatClick = () => {\n reportInteraction('grafana_sql_query_editor_format_click');\n onFormatCode?.();\n };\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <HorizontalGroup spacing=\"sm\">\n {onFormatCode && (\n <IconButton onClick={onFormatClick} name=\"brackets-curly\" size=\"xs\" tooltip=\"Format query\" />\n )}\n {onExpand && (\n <IconButton\n onClick={() => onExpand(!isExpanded)}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={isExpanded ? 'Collapse editor' : 'Expand editor'}\n />\n )}\n <Tooltip content=\"Hit CTRL/CMD+Return to run query\">\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </HorizontalGroup>\n </div>\n )}\n </div>\n );\n}\n","import React, { useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useMeasure } from 'react-use';\n// @ts-ignore\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Modal, useStyles2, useTheme2 } from '@grafana/ui';\nimport { QueryEditorRaw } from './QueryEditorRaw';\nimport { QueryToolbox } from './QueryToolbox';\nimport { type QueryEditorProps, type SQLQuery } from '../types';\nimport type { SqlLanguage } from 'sql-formatter';\n\ninterface RawEditorProps extends Omit<QueryEditorProps, 'onChange'> {\n onRunQuery: () => void;\n onChange: (q: SQLQuery, processQuery: boolean) => void;\n onValidate: (isValid: boolean) => void;\n queryToValidate: SQLQuery;\n language?: SqlLanguage;\n}\n\nexport function RawEditor({\n db,\n query,\n onChange,\n onRunQuery,\n onValidate,\n queryToValidate,\n range,\n language = 'sql',\n}: RawEditorProps) {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const [isExpanded, setIsExpanded] = useState(false);\n const [toolboxRef, toolboxMeasure] = useMeasure<HTMLDivElement>();\n const [editorRef, editorMeasure] = useMeasure<HTMLDivElement>();\n\n const completionProvider = useMemo(() => db.getSqlCompletionProvider(), [db]);\n\n const renderQueryEditor = (width?: number, height?: number) => {\n return (\n <QueryEditorRaw\n completionProvider={completionProvider}\n query={query}\n width={width}\n language={language}\n height={height ? height - toolboxMeasure.height : undefined}\n onChange={onChange}\n >\n {({ formatQuery }) => {\n return (\n <div ref={toolboxRef}>\n <QueryToolbox\n db={db}\n query={queryToValidate}\n onValidate={onValidate}\n onFormatCode={formatQuery}\n showTools\n range={range}\n onExpand={setIsExpanded}\n isExpanded={isExpanded}\n />\n </div>\n );\n }}\n </QueryEditorRaw>\n );\n };\n\n interface AutoSizerProps {\n width: number;\n height: number;\n }\n\n const renderEditor = (standalone = false) => {\n return standalone ? (\n <AutoSizer>\n {({ width, height }: AutoSizerProps) => {\n return renderQueryEditor(width, height);\n }}\n </AutoSizer>\n ) : (\n <div ref={editorRef}>{renderQueryEditor()}</div>\n );\n };\n\n const renderPlaceholder = () => {\n return (\n <div\n style={{\n width: editorMeasure.width,\n height: editorMeasure.height,\n background: theme.colors.background.primary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n Editing in expanded code editor\n </div>\n );\n };\n\n return (\n <>\n {isExpanded ? renderPlaceholder() : renderEditor()}\n {isExpanded && (\n <Modal\n title={`Query ${query.refId}`}\n closeOnBackdropClick={false}\n closeOnEscape={false}\n className={styles.modal}\n contentClassName={styles.modalContent}\n isOpen={isExpanded}\n onDismiss={() => {\n setIsExpanded(false);\n }}\n >\n {renderEditor(true)}\n </Modal>\n )}\n </>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n modal: css`\n width: 95vw;\n height: 95vh;\n `,\n modalContent: css`\n height: 100%;\n padding-top: 0;\n `,\n };\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui';\n\nimport { formatSQL } from '../utils/formatSQL';\nimport type { SqlLanguage } from 'sql-formatter';\n\ntype PreviewProps = {\n rawSql: string;\n language?: SqlLanguage;\n};\n\nexport function Preview({ rawSql, language = 'sql' }: PreviewProps) {\n // TODO: use zero index to give feedback about copy success\n const [_, copyToClipboard] = useCopyToClipboard();\n const styles = useStyles2(getStyles);\n\n const labelElement = (\n <div className={styles.labelWrapper}>\n <label className={styles.label}>Preview</label>\n <IconButton tooltip=\"Copy to clipboard\" onClick={() => copyToClipboard(rawSql)} name=\"copy\" />\n </div>\n );\n\n return (\n <Field label={labelElement} className={styles.grow}>\n <CodeEditor\n language=\"sql\"\n height={80}\n value={formatSQL(rawSql, language)}\n monacoOptions={{ scrollbar: { vertical: 'hidden' }, scrollBeyondLastLine: false }}\n readOnly={true}\n showMiniMap={false}\n />\n </Field>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grow: css({ flexGrow: 1 }),\n label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),\n labelWrapper: css({ display: 'flex', justifyContent: 'space-between', paddingBottom: theme.spacing(0.5) }),\n };\n}\n","import { useCallback } from 'react';\n\nimport { type DB, type SQLExpression, type SQLQuery } from '../types';\n\nimport { getRawSqlFn } from './sql.utils';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = getRawSqlFn(db);\n const rawSql = toRawSql({\n sql,\n catalog: query.catalog,\n dataset: query.dataset,\n table: query.table,\n refId: query.refId,\n });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n","import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\n\nimport { GroupByRow } from './GroupByRow';\nimport { type SQLQuery, type DB, type QueryWithDefaults } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLGroupByRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLGroupByRow({ fields, query, onQueryChange, db }: SQLGroupByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return <GroupByRow columns={fields} sql={query.sql!} onSqlChange={onSqlChange} />;\n}\n","import { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Input, RadioButtonGroup, Select } from '@grafana/ui';\nimport { type SQLExpression } from '../types';\nimport { setPropertyField } from '../utils/sql.utils';\nimport { Space } from '../Space';\nimport { EditorField } from '../EditorField';\nimport { InputGroup } from '../InputGroup';\n\ntype OrderByRowProps = {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n showOffset?: boolean;\n};\n\nconst sortOrderOptions = [\n { description: 'Sort by ascending', value: 'ASC', icon: 'sort-amount-up' } as const,\n { description: 'Sort by descending', value: 'DESC', icon: 'sort-amount-down' } as const,\n];\n\nexport function OrderByRow({ sql, onSqlChange, columns, showOffset }: OrderByRowProps) {\n const onSortOrderChange = useCallback(\n (item: 'ASC' | 'DESC') => {\n const newSql: SQLExpression = { ...sql, orderByDirection: item };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onLimitChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, limit: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOffsetChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, offset: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOrderByChange = useCallback(\n (item: SelectableValue<string>) => {\n const newSql: SQLExpression = { ...sql, orderBy: setPropertyField(item?.value) };\n if (item === null) {\n newSql.orderByDirection = undefined;\n }\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <>\n <EditorField label=\"Order by\" width={25}>\n <InputGroup>\n <Select\n aria-label=\"Order by\"\n options={columns}\n value={sql.orderBy?.property.name ? toOption(sql.orderBy.property.name) : null}\n isClearable\n menuShouldPortal\n onChange={onOrderByChange}\n />\n\n <Space h={1.5} />\n\n <RadioButtonGroup\n options={sortOrderOptions}\n disabled={!sql?.orderBy?.property.name}\n value={sql.orderByDirection}\n onChange={onSortOrderChange}\n />\n </InputGroup>\n </EditorField>\n <EditorField label=\"Limit\" optional width={25}>\n <Input type=\"number\" min={0} id={uniqueId('limit-')} value={sql.limit || ''} onChange={onLimitChange} />\n </EditorField>\n {showOffset && (\n <EditorField label=\"Offset\" optional width={25}>\n <Input type=\"number\" id={uniqueId('offset-')} value={sql.offset || ''} onChange={onOffsetChange} />\n </EditorField>\n )}\n </>\n );\n}\n","import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\nimport { OrderByRow } from './OrderByRow';\nimport { type SQLQuery, type DB, type QueryWithDefaults } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ntype SQLOrderByRowProps = {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n};\n\nexport function SQLOrderByRow({ fields, query, onQueryChange, db }: SQLOrderByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = [];\n\n if (fields) {\n const options = query.sql?.columns?.map((c, i) => {\n const value = c.name ? `${c.name}(${c.parameters?.map((p) => p.name)})` : c.parameters?.map((p) => p.name);\n return {\n value,\n label: `${i + 1} - ${value}`,\n };\n });\n columnsWithIndices = [\n {\n value: '',\n label: 'Selected columns',\n options,\n expanded: true,\n },\n ...fields,\n ];\n }\n\n return <OrderByRow sql={query.sql!} onSqlChange={onSqlChange} columns={columnsWithIndices} />;\n}\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Button, Select, useStyles2 } from '@grafana/ui';\nimport { EditorField } from '../EditorField';\nimport { type QueryEditorFunctionExpression, QueryEditorExpressionType } from '../expressions';\nimport { type SQLExpression } from '../types';\nimport { createFunctionField } from '../utils/sql.utils';\nimport { EditorStack } from '../EditorStack';\n\ninterface SelectRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n functions?: Array<SelectableValue<string>>;\n}\n\nconst asteriskValue = { label: '*', value: '*' };\n\nexport function SelectRow({ sql, columns, onSqlChange, functions }: SelectRowProps) {\n const styles = useStyles2(getStyles);\n const columnsWithAsterisk = [asteriskValue, ...(columns || [])];\n\n const onColumnChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (column: SelectableValue<string>) => {\n let modifiedItem = { ...item };\n if (!item.parameters?.length) {\n modifiedItem.parameters = [{ type: QueryEditorExpressionType.FunctionParameter, name: column.value } as const];\n } else {\n modifiedItem.parameters = item.parameters.map((p) =>\n p.type === QueryEditorExpressionType.FunctionParameter ? { ...p, name: column.value } : p\n );\n }\n\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? modifiedItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onAggregationChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (aggregation: SelectableValue<string>) => {\n const newItem = {\n ...item,\n name: aggregation?.value,\n };\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? newItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const removeColumn = useCallback(\n (index: number) => () => {\n const clone = [...sql.columns!];\n clone.splice(index, 1);\n const newSql: SQLExpression = {\n ...sql,\n columns: clone,\n };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const addColumn = useCallback(() => {\n const newSql: SQLExpression = { ...sql, columns: [...sql.columns!, createFunctionField()] };\n onSqlChange(newSql);\n }, [onSqlChange, sql]);\n\n return (\n <EditorStack gap={2} alignItems=\"end\" direction=\"column\">\n {sql.columns?.map((item, index) => (\n <div key={index}>\n <EditorStack gap={2} alignItems=\"end\">\n <EditorField label=\"Column\" width={25}>\n <Select\n value={getColumnValue(item)}\n options={columnsWithAsterisk}\n inputId={`select-column-${index}-${uniqueId()}`}\n menuShouldPortal\n allowCustomValue\n onChange={onColumnChange(item, index)}\n />\n </EditorField>\n\n <EditorField label=\"Aggregation\" optional width={25}>\n <Select\n value={item.name ? toOption(item.name) : null}\n inputId={`select-aggregation-${index}-${uniqueId()}`}\n isClearable\n menuShouldPortal\n allowCustomValue\n options={functions}\n onChange={onAggregationChange(item, index)}\n />\n </EditorField>\n <Button\n aria-label=\"Remove\"\n type=\"button\"\n icon=\"trash-alt\"\n variant=\"secondary\"\n size=\"md\"\n onClick={removeColumn(index)}\n />\n </EditorStack>\n </div>\n ))}\n <Button\n type=\"button\"\n onClick={addColumn}\n variant=\"secondary\"\n size=\"md\"\n icon=\"plus\"\n aria-label=\"Add\"\n className={styles.addButton}\n />\n </EditorStack>\n );\n}\n\nconst getStyles = () => {\n return { addButton: css({ alignSelf: 'flex-start' }) };\n};\n\nfunction getColumnValue({ parameters }: QueryEditorFunctionExpression): SelectableValue<string> | null {\n const column = parameters?.find((p) => p.type === QueryEditorExpressionType.FunctionParameter);\n if (column?.name) {\n return toOption(column.name);\n }\n return null;\n}\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { SelectRow } from './SelectRow';\nimport { type SQLQuery, type DB, type QueryWithDefaults } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLSelectRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLSelectRow({ fields, query, onQueryChange, db }: SQLSelectRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n const state = useAsync(async () => {\n const functions = await db.functions();\n return functions.map((f) => toOption(f.name));\n }, [db]);\n\n return <SelectRow columns={fields} sql={query.sql!} functions={state.value} onSqlChange={onSqlChange} />;\n}\n","import React from 'react';\nimport { type List } from 'immutable';\nimport { isString } from 'lodash';\nimport {\n BasicConfig,\n Utils,\n type Config,\n type JsonItem,\n type JsonTree,\n type Operator,\n type Settings,\n type Field,\n type ValueSource,\n type WidgetProps,\n type Widgets,\n type OperatorOptionsI,\n} from '@react-awesome-query-builder/ui';\nimport { dateTime, toOption } from '@grafana/data';\nimport { Button, DateTimePicker, Input, Select } from '@grafana/ui';\n\nconst buttonLabels = {\n add: 'Add',\n remove: 'Remove',\n};\n\nexport const emptyInitValue: JsonItem = {\n id: Utils.uuid(),\n type: 'group' as const,\n children1: [\n {\n id: Utils.uuid(),\n type: 'rule',\n properties: {\n field: null,\n operator: null,\n value: [],\n valueSrc: [],\n },\n },\n ],\n};\n\nexport const emptyInitTree: JsonTree = {\n id: Utils.uuid(),\n type: 'group' as const,\n children1: [\n {\n id: Utils.uuid(),\n type: 'rule',\n properties: {\n field: null,\n operator: null,\n value: [],\n valueSrc: [],\n },\n },\n ],\n};\n\nexport const widgets: Widgets = {\n ...BasicConfig.widgets,\n text: {\n ...BasicConfig.widgets.text,\n factory: function TextInput(props: WidgetProps) {\n return (\n <Input\n value={props?.value || ''}\n placeholder={props?.placeholder}\n onChange={(e) => props?.setValue(e.currentTarget.value)}\n />\n );\n },\n },\n number: {\n ...BasicConfig.widgets.number,\n factory: function NumberInput(props: WidgetProps) {\n return (\n <Input\n value={props?.value}\n placeholder={props?.placeholder}\n type=\"number\"\n onChange={(e) => props?.setValue(Number.parseInt(e.currentTarget.value, 10))}\n />\n );\n },\n },\n datetime: {\n ...BasicConfig.widgets.datetime,\n factory: function DateTimeInput(props: WidgetProps) {\n return (\n <DateTimePicker\n onChange={(e) => {\n props?.setValue(e?.format(BasicConfig.widgets.datetime.valueFormat));\n }}\n date={dateTime(props?.value).utc()}\n />\n );\n },\n },\n};\n\nexport const settings: Settings = {\n ...BasicConfig.settings,\n canRegroup: false,\n maxNesting: 1,\n canReorder: false,\n showNot: false,\n addRuleLabel: buttonLabels.add,\n deleteLabel: buttonLabels.remove,\n renderConjs: function Conjunctions(conjProps) {\n return (\n <Select\n id={conjProps?.id}\n aria-label=\"Conjunction\"\n menuShouldPortal\n options={conjProps?.conjunctionOptions ? Object.keys(conjProps?.conjunctionOptions).map(toOption) : undefined}\n value={conjProps?.selectedConjunction}\n onChange={(val) => conjProps?.setConjunction(val.value!)}\n />\n );\n },\n renderField: function Field(fieldProps) {\n const fields = fieldProps?.config?.fields || {};\n return (\n <Select\n id={fieldProps?.id}\n width={25}\n aria-label=\"Field\"\n menuShouldPortal\n options={fieldProps?.items.map((f) => {\n // @ts-ignore\n const icon = fields[f.key].mainWidgetProps?.customProps?.icon;\n return {\n label: f.label,\n value: f.key,\n icon,\n };\n })}\n value={fieldProps?.selectedKey}\n onChange={(val) => {\n fieldProps?.setField(val.label!);\n }}\n />\n );\n },\n renderButton: function RAQBButton(buttonProps) {\n return (\n <Button\n type=\"button\"\n title={`${buttonProps?.label} filter`}\n onClick={buttonProps?.onClick}\n variant=\"secondary\"\n size=\"md\"\n icon={buttonProps?.label === buttonLabels.add ? 'plus' : 'times'}\n />\n );\n },\n renderOperator: function Operator(operatorProps) {\n return (\n <Select\n options={operatorProps?.items.map((op) => ({ label: op.label, value: op.key }))}\n aria-label=\"Operator\"\n menuShouldPortal\n value={operatorProps?.selectedKey}\n onChange={(val) => {\n operatorProps?.setField(val.value || '');\n }}\n />\n );\n },\n};\n\n// add IN / NOT IN operators to text to support multi-value variables\nconst enum Op {\n IN = 'select_any_in',\n NOT_IN = 'select_not_any_in',\n}\n\nconst customOperators = getCustomOperators(BasicConfig);\nconst textWidget = BasicConfig.types.text.widgets.text;\nconst opers = [...(textWidget.operators || []), Op.IN, Op.NOT_IN];\nconst customTextWidget = {\n ...textWidget,\n operators: opers,\n};\n\nconst customTypes = {\n ...BasicConfig.types,\n text: {\n ...BasicConfig.types.text,\n widgets: {\n ...BasicConfig.types.text.widgets,\n text: customTextWidget,\n },\n },\n};\n\nexport const raqbConfig: Config = {\n ...BasicConfig,\n widgets,\n settings,\n operators: customOperators as typeof BasicConfig.operators,\n types: customTypes,\n};\n\nexport type { Config };\n\nfunction getCustomOperators(config: BasicConfig) {\n const { ...supportedOperators } = config.operators;\n const noop = () => '';\n // IN operator expects array, override IN formatter for multi-value variables\n\n const sqlFormatInOp = supportedOperators[Op.IN].sqlFormatOp || noop;\n const customSqlInFormatter = (\n field: string,\n op: string,\n value: string | List<string>,\n valueSrc: ValueSource,\n valueType: string,\n opDef: Operator,\n operatorOptions: OperatorOptionsI,\n fieldDef: Field\n ) =>\n sqlFormatInOp.call(\n config.ctx,\n field,\n op,\n splitIfString(value),\n valueSrc,\n valueType,\n opDef,\n operatorOptions,\n fieldDef\n );\n // NOT IN operator expects array, override NOT IN formatter for multi-value variables\n const sqlFormatNotInOp = supportedOperators[Op.NOT_IN].sqlFormatOp || noop;\n const customSqlNotInFormatter = (\n field: string,\n op: string,\n value: string | List<string>,\n valueSrc: ValueSource,\n valueType: string,\n opDef: Operator,\n operatorOptions: OperatorOptionsI,\n fieldDef: Field\n ) =>\n sqlFormatNotInOp.call(\n config.ctx,\n field,\n op,\n splitIfString(value),\n valueSrc,\n valueType,\n opDef,\n operatorOptions,\n fieldDef\n );\n\n const customOperators = {\n ...supportedOperators,\n [Op.IN]: {\n ...supportedOperators[Op.IN],\n sqlFormatOp: customSqlInFormatter,\n },\n [Op.NOT_IN]: {\n ...supportedOperators[Op.NOT_IN],\n sqlFormatOp: customSqlNotInFormatter,\n },\n };\n\n return customOperators;\n}\n\n// value: string | List<string> but AQB uses a different version of Immutable\n// eslint-ignore\nfunction splitIfString(value: any) {\n if (isString(value)) {\n return value.split(',');\n }\n return value;\n}\n","import { injectGlobal } from '@emotion/css';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Builder, type Config, type ImmutableTree, Query, Utils } from '@react-awesome-query-builder/ui';\nimport { type SQLExpression } from '../types';\nimport { emptyInitTree, raqbConfig } from './AwesomeQueryBuilder';\n\ninterface SQLBuilderWhereRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n config?: Partial<Config>;\n}\n\nexport function WhereRow({ sql, config, onSqlChange }: SQLBuilderWhereRowProps) {\n const [tree, setTree] = useState<ImmutableTree>();\n const configWithDefaults = useMemo(() => ({ ...raqbConfig, ...config }), [config]);\n\n useEffect(() => {\n // Set the initial tree\n if (!tree) {\n const initTree = Utils.checkTree(Utils.loadTree(sql.whereJsonTree ?? emptyInitTree), configWithDefaults);\n setTree(initTree);\n }\n }, [configWithDefaults, sql.whereJsonTree, tree]);\n\n useEffect(() => {\n if (!sql.whereJsonTree) {\n setTree(Utils.checkTree(Utils.loadTree(emptyInitTree), configWithDefaults));\n }\n }, [configWithDefaults, sql.whereJsonTree]);\n\n const onTreeChange = useCallback(\n (changedTree: ImmutableTree, config: Config) => {\n setTree(changedTree);\n const newSql = {\n ...sql,\n whereJsonTree: Utils.getTree(changedTree),\n whereString: Utils.sqlFormat(changedTree, config),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n if (!tree) {\n return null;\n }\n\n return (\n <Query\n {...configWithDefaults}\n value={tree}\n onChange={onTreeChange}\n renderBuilder={(props) => <Builder {...props} />}\n />\n );\n}\n\nfunction flex(direction: string) {\n return `\n display: flex;\n gap: 8px;\n flex-direction: ${direction};`;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\ninjectGlobal`\n .group--header {\n ${flex('row')}\n }\n\n .group-or-rule {\n ${flex('column')}\n .rule {\n flex-direction: row;\n }\n }\n\n .rule--body {\n ${flex('row')}\n }\n\n .group--children {\n ${flex('column')}\n }\n\n .group--conjunctions:empty {\n display: none;\n }\n`;\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue } from '@grafana/data';\nimport { type Config } from './AwesomeQueryBuilder';\nimport { WhereRow } from './WhereRow';\nimport { type SQLQuery, type DB, type SQLExpression, type SQLSelectableValue, type QueryWithDefaults } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface WhereRowProps {\n query: QueryWithDefaults;\n fields: SelectableValue[];\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLWhereRow({ query, fields, onQueryChange, db }: WhereRowProps) {\n const state = useAsync(async () => {\n return mapFieldsToTypes(fields);\n }, [fields]);\n\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return (\n <WhereRow\n // TODO: fix key that's used to force clean render or SQLWhereRow - otherwise it doesn't render operators correctly\n key={JSON.stringify(state.value)}\n config={{ fields: state.value || {} }}\n sql={query.sql!}\n onSqlChange={(val: SQLExpression) => {\n onSqlChange(val);\n }}\n />\n );\n}\n\n// needed for awesome query builder\nfunction mapFieldsToTypes(columns: SQLSelectableValue[]) {\n const fields: Config['fields'] = {};\n for (const col of columns) {\n fields[col.value] = {\n type: col.raqbFieldType || 'text',\n valueSources: ['value'],\n mainWidgetProps: { customProps: { icon: col.icon } },\n };\n }\n return fields;\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { EditorStack } from '../EditorStack';\n\ninterface EditorRowProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRow = ({ children }: EditorRowProps) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={2}>{children}</EditorStack>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.borderRadius(1),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport React, { type ComponentProps } from 'react';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Field, type PopoverContent, useTheme2, ReactUtils, Tooltip, Icon, stylesFactory } from '@grafana/ui';\nimport { Space } from '../Space';\n\ninterface EditorFieldProps extends ComponentProps<typeof Field> {\n label: string;\n children: React.ReactElement;\n width?: number | string;\n optional?: boolean;\n tooltip?: PopoverContent;\n}\n\nexport const EditorField = (props: EditorFieldProps) => {\n const { label, optional, tooltip, children, width, ...fieldProps } = props;\n\n const theme = useTheme2();\n const styles = getStyles(theme, width);\n\n // Null check for backward compatibility\n const childInputId = fieldProps?.htmlFor || ReactUtils?.getChildId(children);\n\n const labelEl = (\n <>\n <label className={styles.label} htmlFor={childInputId}>\n {label}\n {optional && <span className={styles.optional}> - optional</span>}\n {tooltip && (\n <Tooltip placement=\"top\" content={tooltip} theme=\"info\">\n <Icon name=\"info-circle\" size=\"sm\" className={styles.icon} />\n </Tooltip>\n )}\n </label>\n <Space v={0.5} />\n </>\n );\n\n return (\n <div className={styles.root}>\n <Field className={styles.field} label={labelEl} {...fieldProps}>\n {children}\n </Field>\n </div>\n );\n};\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2, width?: number | string) => {\n return {\n root: css({\n minWidth: theme.spacing(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, // 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","import React from 'react';\nimport { EditorStack } from '../EditorStack';\n\ninterface EditorRowsProps {\n children?: React.ReactNode;\n}\n\nexport const EditorRows = ({ children }: EditorRowsProps) => {\n return (\n <EditorStack gap={0.5} direction=\"column\">\n {children}\n </EditorStack>\n );\n};\n","import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type DB, type QueryEditorProps, type QueryRowFilter, type SQLQuery } from '../types';\nimport { QueryToolbox } from '../query-editor-raw/QueryToolbox';\nimport { Preview } from './Preview';\nimport { SQLGroupByRow } from './SQLGroupByRow';\nimport { SQLOrderByRow } from './SQLOrderByRow';\nimport { SQLSelectRow } from './SQLSelectRow';\nimport { SQLWhereRow } from './SQLWhereRow';\nimport { type TimeRange } from '@grafana/data';\nimport { EditorRow } from './EditorRow';\nimport { EditorField } from './EditorField';\nimport { EditorRows } from './EditorRows';\nimport type { SqlLanguage } from 'sql-formatter';\n\ninterface VisualEditorProps extends QueryEditorProps {\n query: SQLQuery;\n db: DB;\n queryRowFilter: QueryRowFilter;\n onChange: (q: SQLQuery) => void;\n onValidate: (isValid: boolean) => void;\n language?: SqlLanguage;\n range?: TimeRange;\n}\n\nexport const VisualEditor = ({\n query,\n db,\n queryRowFilter,\n onChange,\n onValidate,\n language = 'sql',\n range,\n}: VisualEditorProps) => {\n const state = useAsync(async () => {\n const fields = await db.fields(query);\n return fields;\n }, [db, query.dataset, query.table]);\n\n return (\n <>\n <EditorRows>\n <EditorRow>\n <SQLSelectRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n {queryRowFilter.filter && (\n <EditorRow>\n <EditorField label=\"Filter by column value\" optional>\n <SQLWhereRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.group && (\n <EditorRow>\n <EditorField label=\"Group by column\">\n <SQLGroupByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.order && (\n <EditorRow>\n <SQLOrderByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n )}\n {queryRowFilter.preview && query.rawSql && (\n <EditorRow>\n <Preview rawSql={query.rawSql} language={language} />\n </EditorRow>\n )}\n </EditorRows>\n <QueryToolbox db={db} query={query} onValidate={onValidate} range={range} />\n </>\n );\n};\n","export const MACRO_NAMES = [\n '$__time',\n '$__timeEpoch',\n '$__timeFilter',\n '$__timeFrom',\n '$__timeTo',\n '$__timeGroup',\n '$__timeGroupAlias',\n '$__unixEpochFilter',\n '$__unixEpochNanoFilter',\n '$__unixEpochNanoFrom',\n '$__unixEpochNanoTo',\n '$__unixEpochGroup',\n '$__unixEpochGroupAlias',\n];\n","import { lastValueFrom, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n type DataFrame,\n DataFrameView,\n type DataSourceInstanceSettings,\n type MetricFindValue,\n type ScopedVars,\n type TimeRange,\n type VariableModel,\n} from '@grafana/data';\nimport {\n type BackendDataSourceResponse,\n DataSourceWithBackend,\n type FetchResponse,\n getBackendSrv,\n getTemplateSrv,\n type TemplateSrv,\n toDataQueryResponse,\n} from '@grafana/runtime';\nimport { type DataQuery } from '@grafana/schema';\n\nimport { MACRO_NAMES } from './constants';\n// import { toTestingStatus } from '@grafana/runtime/utils/queryResponse';\nimport {\n type SQLQuery,\n type SQLOptions,\n type DB,\n type SqlQueryModel,\n type ResponseParser,\n QueryFormat,\n} from '../components/QueryEditor/types';\n\nexport interface SearchFilterOptions {\n searchFilter?: string;\n}\n\nexport interface VariableWithMultiSupport extends VariableWithOptions {\n multi: boolean;\n includeAll: boolean;\n allValue?: string | null;\n}\n\nexport interface VariableWithOptions extends VariableModel {\n current: VariableOption;\n options: VariableOption[];\n query: string;\n}\n\nexport interface VariableOption {\n selected: boolean;\n text: string | string[];\n value: string | string[];\n isNone?: boolean;\n}\n\nexport abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {\n id: number;\n name: string;\n interval: string;\n db: DB;\n dataset?: string;\n annotations = {};\n\n constructor(\n instanceSettings: DataSourceInstanceSettings<SQLOptions>,\n protected readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.id = instanceSettings.id;\n const settingsData = instanceSettings.jsonData || {};\n this.interval = settingsData.timeInterval || '1m';\n this.db = this.getDB();\n }\n\n abstract getDB(dsID?: number): DB;\n\n abstract getQueryModel(target?: SQLQuery, templateSrv?: TemplateSrv, scopedVars?: ScopedVars): SqlQueryModel;\n\n abstract getResponseParser(): ResponseParser;\n\n interpolateVariable = (value: string | string[] | number, variable: VariableWithMultiSupport) => {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n const result = this.getQueryModel().quoteLiteral(value);\n return result;\n } else {\n return value;\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value)) {\n const quotedValues = value.map((v) => this.getQueryModel().quoteLiteral(v));\n return quotedValues.join(',');\n }\n\n return value;\n };\n\n interpolateVariablesInQueries(queries: SQLQuery[], scopedVars: ScopedVars): SQLQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n filterQuery(query: SQLQuery): boolean {\n return !query.hide;\n }\n\n applyTemplateVariables(target: SQLQuery, scopedVars: ScopedVars): SQLQuery {\n const queryModel = this.getQueryModel(target, this.templateSrv, scopedVars);\n const rawSql = this.clean(queryModel.interpolate());\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql,\n format: target.format,\n };\n }\n\n clean(value: string) {\n return value.replace(/''/g, \"'\");\n }\n\n async metricFindQuery(query: string, optionalOptions?: MetricFindQueryOptions): Promise<MetricFindValue[]> {\n const rawSql = this.templateSrv.replace(\n query,\n getSearchFilterScopedVar({ query, wildcardChar: '%', options: optionalOptions }),\n this.interpolateVariable\n );\n\n const interpolatedQuery: SQLQuery = {\n refId: 'tempvar',\n datasource: this.getRef(),\n rawSql,\n format: QueryFormat.Table,\n };\n\n const response = await this.runMetaQuery(interpolatedQuery, optionalOptions);\n return this.getResponseParser().transformMetricFindResponse(response);\n }\n\n async runSql<T extends object>(query: string, options?: RunSQLOptions) {\n const frame = await this.runMetaQuery({ rawSql: query, format: QueryFormat.Table, refId: options?.refId }, options);\n return new DataFrameView<T>(frame);\n }\n\n private runMetaQuery(request: Partial<SQLQuery>, options?: MetricFindQueryOptions): Promise<DataFrame> {\n const refId = request.refId || 'meta';\n const queries: DataQuery[] = [{ ...request, datasource: request.datasource || this.getRef(), refId }];\n\n return lastValueFrom(\n getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: options?.range?.from.valueOf().toString(),\n to: options?.range?.to.valueOf().toString(),\n queries,\n },\n requestId: refId,\n })\n .pipe(\n map((res: FetchResponse<BackendDataSourceResponse>) => {\n const rsp = toDataQueryResponse(res, queries);\n return rsp.data[0];\n })\n )\n );\n }\n\n testDatasource(): Promise<{ status: string; message: string }> {\n return lastValueFrom(\n getBackendSrv()\n .fetch({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: '5m',\n to: 'now',\n queries: [\n {\n refId: 'A',\n intervalMs: 1,\n maxDataPoints: 1,\n datasource: this.getRef(),\n datasourceId: this.id,\n rawSql: 'SELECT 1',\n format: 'table',\n },\n ],\n },\n })\n .pipe(\n map(() => ({ status: 'success', message: 'Database Connection OK' })),\n catchError((err) => {\n // return of(toTestingStatus(err));\n return of(err);\n })\n )\n );\n }\n\n targetContainsTemplate(target: SQLQuery) {\n let queryWithoutMacros = target.rawSql;\n MACRO_NAMES.forEach((value) => {\n queryWithoutMacros = queryWithoutMacros?.replace(value, '') || '';\n });\n return this.templateSrv.containsTemplate(queryWithoutMacros);\n }\n}\n\ninterface RunSQLOptions extends MetricFindQueryOptions {\n refId?: string;\n}\n\ninterface MetricFindQueryOptions extends SearchFilterOptions {\n range?: TimeRange;\n}\n\nexport const SEARCH_FILTER_VARIABLE = '__searchFilter';\n\nexport const containsSearchFilter = (query: string | unknown): boolean =>\n query && typeof query === 'string' ? query.indexOf(SEARCH_FILTER_VARIABLE) !== -1 : false;\n\nexport const getSearchFilterScopedVar = (args: {\n query: string;\n wildcardChar: string;\n options?: SearchFilterOptions;\n}): ScopedVars => {\n const { query, wildcardChar } = args;\n if (!containsSearchFilter(query)) {\n return {};\n }\n\n let { options } = args;\n\n options = options || { searchFilter: '' };\n const value = options.searchFilter ? `${options.searchFilter}${wildcardChar}` : `${wildcardChar}`;\n\n return {\n __searchFilter: {\n value,\n text: '',\n },\n };\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type QueryEditorProps } from '@grafana/data';\n\nimport { applyQueryDefaults } from './defaults';\nimport { type SQLQuery, type QueryRowFilter, type SQLOptions, EditorMode } from './types';\nimport { haveColumns } from './utils/sql.utils';\n\nimport { QueryHeader } from './QueryHeader';\nimport { RawEditor } from './query-editor-raw/RawEditor';\nimport { VisualEditor } from './visual-query-builder/VisualEditor';\n\nimport { type SqlDatasource } from '../../datasource/SqlDatasource';\nimport { Space } from './Space';\nimport type { SqlLanguage } from 'sql-formatter';\n\ninterface Props extends QueryEditorProps<SqlDatasource, SQLQuery, SQLOptions> {\n language?: SqlLanguage;\n}\n\nexport function SqlQueryEditor({ datasource, query, onChange, onRunQuery, range, language = 'sql' }: Props) {\n const [isQueryRunnable, setIsQueryRunnable] = useState(true);\n const db = datasource.getDB();\n const defaultDataset = datasource.dataset;\n\n const { loading, error } = useAsync(async () => {\n return () => {\n if (datasource.getDB(datasource.id).init !== undefined) {\n datasource.getDB(datasource.id).init!();\n }\n };\n }, [datasource]);\n\n const queryWithDefaults = applyQueryDefaults(query);\n const [queryRowFilter, setQueryRowFilter] = useState<QueryRowFilter>({\n filter: !!queryWithDefaults.sql?.whereString,\n group: !!queryWithDefaults.sql?.groupBy?.[0]?.property.name,\n order: !!queryWithDefaults.sql?.orderBy?.property.name,\n preview: true,\n });\n const [queryToValidate, setQueryToValidate] = useState(queryWithDefaults);\n\n useEffect(() => {\n return () => {\n if (datasource.getDB(datasource.id).dispose !== undefined) {\n datasource.getDB(datasource.id).dispose!();\n }\n };\n }, [datasource]);\n\n const processQuery = useCallback(\n (q: SQLQuery) => {\n if (isQueryValid(q) && onRunQuery) {\n onRunQuery();\n }\n },\n [onRunQuery]\n );\n\n const onQueryChange = (q: SQLQuery, process = true) => {\n setQueryToValidate(q);\n onChange(q);\n\n if (haveColumns(q.sql?.columns) && q.sql?.columns.some((c) => c.name) && !queryRowFilter.group) {\n setQueryRowFilter({ ...queryRowFilter, group: true });\n }\n\n if (process) {\n processQuery(q);\n }\n };\n\n const onQueryHeaderChange = (q: SQLQuery) => {\n setQueryToValidate(q);\n onChange(q);\n };\n\n if (loading || error) {\n return null;\n }\n\n const catalogsEnabled = db.disableCatalogs === false;\n const datasetsEnabled = !db.disableDatasets;\n\n // When catalogs are enabled, datasets MUST be enabled (they act as schema selector)\n const effectiveEnableDatasets = catalogsEnabled ? true : datasetsEnabled;\n\n return (\n <>\n <QueryHeader\n db={db}\n defaultDataset={defaultDataset || ''}\n enableDatasets={effectiveEnableDatasets}\n enableCatalogs={catalogsEnabled}\n onChange={onQueryHeaderChange}\n onRunQuery={onRunQuery}\n onQueryRowChange={setQueryRowFilter}\n queryRowFilter={queryRowFilter}\n query={queryWithDefaults}\n isQueryRunnable={isQueryRunnable}\n labels={datasource.getDB(datasource.id)?.labels}\n />\n\n <Space v={0.5} />\n\n {queryWithDefaults.editorMode !== EditorMode.Code && (\n <VisualEditor\n db={db}\n query={queryWithDefaults}\n language={language}\n onChange={(q: SQLQuery) => onQueryChange(q, false)}\n queryRowFilter={queryRowFilter}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n\n {queryWithDefaults.editorMode === EditorMode.Code && (\n <RawEditor\n db={db}\n language={language}\n query={queryWithDefaults}\n queryToValidate={queryToValidate}\n onChange={onQueryChange}\n onRunQuery={onRunQuery}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n </>\n );\n}\n\nconst isQueryValid = (q: SQLQuery) => {\n return Boolean(q.rawSql);\n};\n","import React from 'react';\nimport { type InlineLabel as OriginalInlineLabel, InlineField, InlineSwitch } from '@grafana/ui';\nimport { config } from '@grafana/runtime';\nimport { type DataSourceSettings } from '@grafana/data';\n\ntype Props = Omit<React.ComponentProps<typeof OriginalInlineLabel>, 'children' | 'onChange'> & {\n dataSourceConfig: DataSourceSettings<any, any>;\n onChange: (config: DataSourceSettings<any, any>) => void;\n labelWidth: number;\n};\n\nexport const SecureSocksProxyToggle = ({ labelWidth = 10, ...props }: Props) => {\n const { dataSourceConfig, onChange } = props;\n const handleSwitchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange({\n ...dataSourceConfig,\n jsonData: {\n ...dataSourceConfig.jsonData,\n enableSecureSocksProxy: e.target.checked,\n },\n });\n };\n\n return (\n (config as any).secureSocksDSProxyEnabled && (\n <div>\n <div className=\"gf-form\">\n <div className=\"gf-form gf-form-inline\">\n <InlineField\n htmlFor=\"secureSocksProxyEnabled\"\n label=\"Secure Socks Proxy Enabled\"\n labelWidth={labelWidth}\n tooltip={\n <>\n Proxy the datasource connection through the secure socks proxy to a different network. To learn more\n about configuring the datasource connection proxy,{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/proxy/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n click here.\n </a>\n </>\n }\n >\n <InlineSwitch\n id=\"secureSocksProxyEnabled\"\n value={dataSourceConfig.jsonData.enableSecureSocksProxy}\n onChange={handleSwitchChange}\n />\n </InlineField>\n </div>\n </div>\n </div>\n )\n );\n};\n","import React from 'react';\nimport { cx, css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\n\ntype Props = {\n dataSourceName: string;\n docsLink: string;\n hasRequiredFields?: boolean;\n className?: string;\n};\n\nexport const DataSourceDescription = ({ dataSourceName, docsLink, hasRequiredFields = true, className }: Props) => {\n const theme = useTheme2();\n\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\n return (\n <div className={cx(styles.container, className)}>\n <p className={styles.text}>\n Before you can use the {dataSourceName} data source, you must configure it below or in the config file. For\n detailed instructions,{' '}\n <a href={docsLink} target=\"_blank\" rel=\"noreferrer\">\n view the documentation\n </a>\n .\n </p>\n {hasRequiredFields && (\n <p className={styles.text}>\n <i>Fields marked with * are required</i>\n </p>\n )}\n </div>\n );\n};\n","import React, { useState, type ReactNode } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, IconButton, type IconName } from '@grafana/ui';\n\nexport type Props = {\n title: string;\n description?: ReactNode;\n isCollapsible?: boolean;\n isInitiallyOpen?: boolean;\n kind?: 'section' | 'sub-section';\n className?: string;\n};\n\nexport const GenericConfigSection = ({\n children,\n title,\n description,\n isCollapsible = false,\n isInitiallyOpen = true,\n kind = 'section',\n className,\n}: React.PropsWithChildren<Props>) => {\n const { colors, typography, spacing } = useTheme2();\n const [isOpen, setIsOpen] = useState(isCollapsible ? isInitiallyOpen : true);\n const iconName: IconName = isOpen ? 'angle-up' : 'angle-down';\n const isSubSection = kind === 'sub-section';\n const collapsibleButtonAriaLabel = `${isOpen ? 'Collapse' : 'Expand'} section ${title}`;\n\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\n return (\n <div className={className}>\n <div className={styles.header}>\n {kind === 'section' ? <h3 className={styles.title}>{title}</h3> : <h6 className={styles.subtitle}>{title}</h6>}\n {isCollapsible && (\n <IconButton\n name={iconName}\n onClick={() => setIsOpen(!isOpen)}\n type=\"button\"\n size=\"xl\"\n aria-label={collapsibleButtonAriaLabel}\n />\n )}\n </div>\n {description && <p className={styles.descriptionText}>{description}</p>}\n {isOpen && <div className={styles.content}>{children}</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { GenericConfigSection, type Props as GenericConfigSectionProps } from './GenericConfigSection';\n\ntype Props = Omit<GenericConfigSectionProps, 'kind'>;\n\nexport const ConfigSection = ({ children, ...props }: React.PropsWithChildren<Props>) => {\n return (\n <GenericConfigSection {...props} kind=\"section\">\n {children}\n </GenericConfigSection>\n );\n};\n","import React from 'react';\nimport { GenericConfigSection, type Props as GenericConfigSectionProps } from './GenericConfigSection';\n\ntype Props = Omit<GenericConfigSectionProps, 'kind'>;\n\nexport const ConfigSubSection = ({ children, ...props }: React.PropsWithChildren<Props>) => {\n return (\n <GenericConfigSection {...props} kind=\"sub-section\">\n {children}\n </GenericConfigSection>\n );\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\ntype Props = {\n description: string;\n suffix: string;\n feature: string;\n};\n\nexport function ConfigDescriptionLink(props: Props) {\n const { description, suffix, feature } = props;\n const text = `Learn more about ${feature}`;\n const styles = useStyles2(getStyles);\n\n return (\n <span className={styles.container}>\n {description}\n <a\n aria-label={text}\n href={`https://grafana.com/docs/grafana/next/datasources/${suffix}`}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n {text}\n </a>\n </span>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: 'underline',\n marginLeft: '5px',\n '&:hover': {\n textDecoration: 'none',\n },\n }),\n }),\n };\n};\n","import { type ReactElement } from 'react';\n\nexport enum AuthMethod {\n NoAuth = 'NoAuth',\n BasicAuth = 'BasicAuth',\n OAuthForward = 'OAuthForward',\n CrossSiteCredentials = 'CrossSiteCredentials',\n}\n\nexport interface AuthMethodSelectOption {\n label?: string;\n description?: string;\n}\n\nexport type CustomMethodId = `custom-${string}`;\n\nexport type CustomMethod = {\n id: CustomMethodId;\n label: string;\n description: string;\n component: ReactElement;\n};\n\nexport type Header = {\n name: string;\n configured: boolean;\n};\n\nexport type HeaderWithValue = Header & { value: string };\n\nexport type LocalHeader = HeaderWithValue & { id: string };\n","import { css } from '@emotion/css';\n\nexport const useCommonStyles = () => {\n return {\n inlineFieldNoMarginRight: css({\n marginRight: 0,\n }),\n // This is dirty hack to make configured secret input grow\n inlineFieldWithSecret: css({\n '[class$=\"layoutChildrenWrapper\"]:first-child': {\n flexGrow: 1,\n },\n }),\n };\n};\n","import React from 'react';\nimport { cx, css } from '@emotion/css';\nimport { InlineField, Input, type PopoverContent, SecretInput } from '@grafana/ui';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n user?: string;\n passwordConfigured: boolean;\n userLabel?: string;\n userTooltip?: PopoverContent;\n userPlaceholder?: string;\n passwordLabel?: string;\n passwordTooltip?: PopoverContent;\n passwordPlaceholder?: string;\n onUserChange: (user: string) => void;\n onPasswordChange: (password: string) => void;\n onPasswordReset: () => void;\n readOnly: boolean;\n};\n\nexport const BasicAuth = ({\n user,\n passwordConfigured,\n userLabel = 'User',\n userTooltip = 'The username of the data source account',\n userPlaceholder = 'User',\n passwordLabel = 'Password',\n passwordTooltip = 'The password of the data source account',\n passwordPlaceholder = 'Password',\n onUserChange,\n onPasswordChange,\n onPasswordReset,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n const styles = {\n lastInlineField: css({\n marginBottom: 0,\n }),\n };\n return (\n <>\n <InlineField\n className={commonStyles.inlineFieldNoMarginRight}\n label={userLabel}\n labelWidth={24}\n tooltip={userTooltip}\n required\n htmlFor=\"basic-auth-user-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <Input\n id=\"basic-auth-user-input\"\n placeholder={userPlaceholder}\n value={user}\n onChange={(e) => onUserChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n className={cx(\n commonStyles.inlineFieldNoMarginRight,\n commonStyles.inlineFieldWithSecret,\n styles.lastInlineField\n )}\n label={passwordLabel}\n labelWidth={24}\n tooltip={passwordTooltip}\n required\n htmlFor=\"basic-auth-password-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <SecretInput\n id=\"basic-auth-password-input\"\n isConfigured={passwordConfigured}\n onReset={readOnly ? () => {} : onPasswordReset}\n placeholder={passwordPlaceholder}\n onChange={(e) => onPasswordChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n </>\n );\n};\n","import React, { type ReactElement, useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Select, Field } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { BasicAuth, type Props as BasicAuthProps } from './BasicAuth';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport { AuthMethod, type CustomMethod, type CustomMethodId, type AuthMethodSelectOption } from '../types';\n\nconst defaultOptions: Record<AuthMethod, SelectableValue<AuthMethod>> = {\n [AuthMethod.BasicAuth]: {\n label: 'Basic authentication',\n value: AuthMethod.BasicAuth,\n description: 'Authenticate with your data source username and password',\n },\n [AuthMethod.CrossSiteCredentials]: {\n label: 'Enable cross-site access control requests',\n value: AuthMethod.CrossSiteCredentials,\n description:\n 'Allow cross-site Access-Control requests with your existing credentials and cookies. This enables the server to authenticate the user and perform authorized requests on their behalf on other domains.',\n },\n [AuthMethod.OAuthForward]: {\n label: 'Forward OAuth Identity',\n value: AuthMethod.OAuthForward,\n description:\n 'Forward the OAuth access token (and if available: the OIDC ID token) of the user querying to the data source',\n },\n [AuthMethod.NoAuth]: {\n label: 'No Authentication',\n value: AuthMethod.NoAuth,\n description: 'Data source is available without authentication',\n },\n};\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const AuthMethodSettings = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods: visibleMethodsFromProps,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n readOnly,\n}: Props) => {\n const [authMethodChanged, setAuthMethodChanged] = useState(false);\n const { colors, spacing } = useTheme2();\n const visibleMethods: Array<AuthMethod | CustomMethodId> = useMemo(\n () =>\n visibleMethodsFromProps ?? [\n AuthMethod.BasicAuth,\n AuthMethod.OAuthForward,\n AuthMethod.NoAuth,\n ...(customMethods?.map((m) => m.id) ?? []),\n ],\n [customMethods, visibleMethodsFromProps]\n );\n const hasSelect = visibleMethods.length > 1;\n\n const preparedOptions = useMemo(() => {\n const customOptions =\n customMethods?.reduce<Record<CustomMethodId, SelectableValue<CustomMethodId>>>((acc, method) => {\n acc[method.id] = {\n label: method.label,\n value: method.id,\n description: method.description,\n };\n return acc;\n }, {}) ?? {};\n\n const preparedDefaultOptions = {} as Record<AuthMethod, SelectableValue<AuthMethod>>;\n let k: keyof typeof AuthMethod;\n for (k in defaultOptions) {\n preparedDefaultOptions[k] = {\n ...defaultOptions[k],\n ...defaultOptionsOverrides?.[k],\n };\n }\n\n const allOptions: Record<AuthMethod | CustomMethodId, SelectableValue<AuthMethod | CustomMethodId>> = {\n ...customOptions,\n ...preparedDefaultOptions,\n };\n\n return visibleMethods\n .filter((method) => Boolean(allOptions[method]))\n .map((method) => {\n const option = allOptions[method];\n if (method === mostCommonMethod && hasSelect) {\n return {\n ...option,\n label: `${option.label} (most common)`,\n };\n }\n return option;\n });\n }, [visibleMethods, customMethods, defaultOptionsOverrides, mostCommonMethod, hasSelect]);\n\n let selected = selectedMethod;\n if (!hasSelect) {\n selected = visibleMethods[0];\n } else if (selectedMethod === AuthMethod.NoAuth && mostCommonMethod && !authMethodChanged) {\n selected = mostCommonMethod;\n }\n\n let AuthFieldsComponent: ReactElement | null = null;\n if (selected === AuthMethod.BasicAuth && basicAuth) {\n AuthFieldsComponent = <BasicAuth {...basicAuth} readOnly={readOnly} />;\n } else if (selected.startsWith('custom-')) {\n AuthFieldsComponent = customMethods?.find((m) => m.id === selected)?.component ?? null;\n }\n\n const title = hasSelect ? 'Authentication methods' : (preparedOptions[0].label ?? '');\n\n const description = hasSelect\n ? 'Choose an authentication method to access the data source'\n : (preparedOptions[0].description ?? '');\n\n const styles = {\n authMethods: css({\n marginTop: spacing(2.5),\n ...(hasSelect && {\n padding: spacing(2),\n border: `1px solid ${colors.border.weak}`,\n }),\n }),\n selectedMethodFields: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <ConfigSubSection title={title} description={description}>\n <div className={styles.authMethods}>\n {hasSelect && (\n <Field label=\"Authentication method\">\n <Select\n inputId=\"auth-method-select\"\n options={preparedOptions}\n value={selected}\n onChange={(option) => {\n setAuthMethodChanged(true);\n onAuthMethodSelect(option.value!);\n }}\n disabled={readOnly}\n />\n </Field>\n )}\n {AuthFieldsComponent && <div className={styles.selectedMethodFields}>{AuthFieldsComponent}</div>}\n </div>\n </ConfigSubSection>\n );\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { Checkbox, Tooltip, Icon, useTheme2 } from '@grafana/ui';\n\nexport type Props = {\n enabled: boolean;\n label: string;\n tooltipText: string;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const TLSSettingsSection = ({\n children,\n enabled,\n label,\n tooltipText,\n onToggle,\n readOnly,\n}: React.PropsWithChildren<Props>) => {\n const { colors, spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: 3,\n }),\n checkboxContainer: css({\n display: 'flex',\n alignItems: 'center',\n }),\n infoIcon: css({\n marginTop: -2,\n marginLeft: 5,\n color: colors.text.secondary,\n }),\n content: css({\n margin: spacing(1, 0, 2, 3),\n }),\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.checkboxContainer}>\n <Checkbox value={enabled} label={label} onChange={() => onToggle(!enabled)} disabled={readOnly} />\n <Tooltip placement=\"top\" content={tooltipText} interactive>\n <Icon name=\"info-circle\" className={styles.infoIcon} size=\"sm\" />\n </Tooltip>\n </div>\n {enabled && children && <div className={styles.content}>{children}</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n certificateConfigured: boolean;\n onCertificateChange: (certificate: string) => void;\n onCertificateReset: () => void;\n tooltips?: {\n certificateLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const SelfSignedCertificate = ({\n enabled,\n certificateConfigured,\n onToggle,\n onCertificateChange,\n onCertificateReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Add self-signed certificate\"\n tooltipText=\"Add your own Certificate Authority (CA) certificate on top of one generated by the certificate authorities for additional security measures\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"CA Certificate\"\n labelWidth={24}\n tooltip={tooltips?.certificateLabel ?? 'Your self-signed certificate'}\n required\n htmlFor=\"self-signed-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"self-signed-certificate-input\"\n isConfigured={certificateConfigured}\n onChange={(e) => onCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n","import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, Input, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n serverName: string;\n clientCertificateConfigured: boolean;\n clientKeyConfigured: boolean;\n onServerNameChange: (serverName: string) => void;\n onClientCertificateChange: (clientCertificate: string) => void;\n onClientKeyChange: (clientKey: string) => void;\n onClientCertificateReset: () => void;\n onClientKeyReset: () => void;\n tooltips?: {\n serverNameLabel?: string;\n certificateLabel?: string;\n keyLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const TLSClientAuth = ({\n enabled,\n serverName,\n clientCertificateConfigured,\n clientKeyConfigured,\n onToggle,\n onServerNameChange,\n onClientCertificateChange,\n onClientKeyChange,\n onClientCertificateReset,\n onClientKeyReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"TLS Client Authentication\"\n tooltipText=\"Validate using TLS client authentication, in which the server authenticates the client\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"ServerName\"\n labelWidth={24}\n tooltip={tooltips?.serverNameLabel ?? 'A Servername is used to verify the hostname on the returned certificate'}\n required\n htmlFor=\"client-auth-servername-input\"\n interactive\n grow\n className={commonStyles.inlineFieldNoMarginRight}\n disabled={readOnly}\n >\n <Input\n id=\"client-auth-servername-input\"\n placeholder=\"domain.example.com\"\n value={serverName}\n onChange={(e) => onServerNameChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Certificate\"\n labelWidth={24}\n tooltip={\n tooltips?.certificateLabel ??\n 'The client certificate can be generated from a Certificate Authority or be self-signed'\n }\n required\n htmlFor=\"client-auth-client-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-certificate-input\"\n isConfigured={clientCertificateConfigured}\n onChange={(e) => onClientCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Key\"\n labelWidth={24}\n tooltip={tooltips?.keyLabel ?? 'The client key can be generated from a Certificate Authority or be self-signed'}\n required\n htmlFor=\"client-auth-client-key-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-key-input\"\n isConfigured={clientKeyConfigured}\n onChange={(e) => onClientKeyChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientKeyReset}\n placeholder={`Begins with --- RSA PRIVATE KEY CERTIFICATE ---`}\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n","import React from 'react';\nimport { TLSSettingsSection } from './TLSSettingsSection';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const SkipTLSVerification = ({ enabled, onToggle, readOnly }: Props) => {\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Skip TLS certificate validation\"\n tooltipText=\"Skipping TLS certificate validation is not recommended unless absolutely necessary or for testing\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n />\n );\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { SelfSignedCertificate, type Props as SelfSignedCertificateProps } from './SelfSignedCertificate';\nimport { TLSClientAuth as TLSClientAuthComponent, type Props as TLSClientAuthProps } from './TLSClientAuth';\nimport { SkipTLSVerification, type Props as SkipTLSVerificationProps } from './SkipTLSVerification';\nimport { ConfigSubSection } from '../../ConfigSection';\n\nexport type Props = {\n selfSignedCertificate: Omit<SelfSignedCertificateProps, 'readOnly'>;\n TLSClientAuth: Omit<TLSClientAuthProps, 'readOnly'>;\n skipTLSVerification: Omit<SkipTLSVerificationProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const TLSSettings = ({ selfSignedCertificate, TLSClientAuth, skipTLSVerification, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n };\n\n return (\n <ConfigSubSection\n className={styles.container}\n title=\"TLS settings\"\n description=\"Additional security measures that can be applied on top of authentication\"\n >\n <SelfSignedCertificate {...selfSignedCertificate} readOnly={readOnly} />\n <TLSClientAuthComponent {...TLSClientAuth} readOnly={readOnly} />\n <SkipTLSVerification {...skipTLSVerification} readOnly={readOnly} />\n </ConfigSubSection>\n );\n};\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineFieldRow, InlineField, Input, IconButton, useTheme2, SecretInput } from '@grafana/ui';\nimport type { LocalHeader } from '../types';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n header: LocalHeader;\n onChange: (header: LocalHeader) => void;\n onBlur: () => void;\n onDelete: () => void;\n readOnly: boolean;\n};\n\nexport const CustomHeader = ({ header, onChange, onBlur, onDelete, readOnly }: Props) => {\n const { spacing } = useTheme2();\n const commonStyles = useCommonStyles();\n const styles = {\n container: css({\n alignItems: 'center',\n }),\n input: css({\n minWidth: '100%',\n }),\n headerNameField: css({\n width: '40%',\n marginRight: 0,\n paddingRight: spacing(1),\n }),\n headerValueField: css({\n width: '45%',\n marginRight: 0,\n }),\n removeHeaderBtn: css({\n margin: `0 0 3px 10px`,\n }),\n };\n\n return (\n <>\n <InlineFieldRow className={styles.container}>\n <InlineField\n label=\"Header\"\n labelWidth={9}\n grow\n className={styles.headerNameField}\n htmlFor={`custom-header-${header.id}-name-input`}\n disabled={readOnly}\n >\n <Input\n id={`custom-header-${header.id}-name-input`}\n placeholder=\"X-Custom-Header\"\n value={header.name}\n width={12}\n onChange={(e) => onChange({ ...header, name: e.currentTarget.value })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <InlineField\n label=\"Value\"\n labelWidth={9}\n grow\n className={cx(commonStyles.inlineFieldWithSecret, styles.headerValueField)}\n htmlFor={`custom-header-${header.id}-value-input`}\n disabled={readOnly}\n >\n <SecretInput\n id={`custom-header-${header.id}-value-input`}\n isConfigured={header.configured}\n placeholder=\"Header value\"\n value={header.value}\n width={12}\n onChange={(e) => onChange({ ...header, value: e.currentTarget.value })}\n onReset={readOnly ? () => {} : () => onChange({ ...header, configured: false, value: '' })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <IconButton\n name=\"trash-alt\"\n tooltip=\"Remove header\"\n tooltipPlacement=\"top\"\n className={styles.removeHeaderBtn}\n onClick={onDelete}\n type=\"button\"\n disabled={readOnly}\n />\n </InlineFieldRow>\n </>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { css } from '@emotion/css';\nimport { Button, useTheme2 } from '@grafana/ui';\nimport { CustomHeader } from './CustomHeader';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport type { Header, HeaderWithValue, LocalHeader } from '../types';\n\nexport type Props = {\n headers: Header[];\n onChange: (headers: HeaderWithValue[]) => void;\n readOnly: boolean;\n};\n\nexport const CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const [headers, setHeaders] = useState<LocalHeader[]>(\n headersFromProps.map((header) => ({\n ...header,\n id: uniqueId(),\n value: '',\n }))\n );\n\n useEffect(() => {\n setHeaders((headers) => {\n let changed = false;\n const newHeaders = headers.map<LocalHeader>((header) => {\n const configured = headersFromProps.find((h) => h.name === header.name)?.configured;\n if (typeof configured !== 'undefined' && header.configured !== configured) {\n changed = true;\n return { ...header, configured };\n }\n return header;\n });\n\n if (changed) {\n return newHeaders;\n }\n\n return headers;\n });\n }, [headersFromProps]);\n\n const onHeaderAdd = () => {\n setHeaders([...headers, { id: uniqueId(), name: '', value: '', configured: false }]);\n };\n\n const onHeaderChange = (id: string, header: LocalHeader) => {\n setHeaders(headers.map((h) => (h.id === id ? { ...header } : h)));\n };\n\n const onHeaderDelete = (id: string) => {\n const index = headers.findIndex((h) => h.id === id);\n if (index === -1) {\n return;\n }\n const newHeaders = [...headers];\n newHeaders.splice(index, 1);\n setHeaders(newHeaders);\n onChange(\n newHeaders.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const onBlur = () => {\n onChange(\n headers.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n addHeaderButton: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSubSection\n title=\"HTTP headers\"\n description=\"Pass along additional context and metadata about the request/response\"\n isCollapsible\n isInitiallyOpen={headers.length > 0}\n >\n <div>\n {headers.map((header) => (\n <CustomHeader\n key={header.id}\n header={header}\n onChange={(header) => onHeaderChange(header.id, header)}\n onDelete={() => onHeaderDelete(header.id)}\n onBlur={onBlur}\n readOnly={readOnly}\n />\n ))}\n </div>\n <div className={styles.addHeaderButton}>\n <Button icon=\"plus\" variant=\"secondary\" fill=\"outline\" onClick={onHeaderAdd} disabled={readOnly}>\n {headers.length === 0 ? 'Add header' : 'Add another header'}\n </Button>\n </div>\n </ConfigSubSection>\n </div>\n );\n};\n\nfunction uniqueId(): string {\n return Math.random().toString(16).slice(2);\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { type AuthMethod, type AuthMethodSelectOption, type CustomMethod, type CustomMethodId } from './types';\nimport { AuthMethodSettings } from './auth-method/AuthMethodSettings';\nimport { TLSSettings, type Props as TLSSettingsProps } from './tls/TLSSettings';\nimport { type Props as BasicAuthProps } from './auth-method/BasicAuth';\nimport { CustomHeaders, type Props as CustomHeadersProps } from './custom-headers/CustomHeaders';\nimport { ConfigSection } from '../ConfigSection';\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n TLS?: Omit<TLSSettingsProps, 'readOnly'>;\n customHeaders?: Omit<CustomHeadersProps, 'readOnly'>;\n readOnly?: boolean;\n};\n\nexport const Auth = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n TLS,\n customHeaders,\n readOnly = false,\n}: Props) => {\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSection title=\"Authentication\">\n <AuthMethodSettings\n selectedMethod={selectedMethod}\n mostCommonMethod={mostCommonMethod}\n customMethods={customMethods}\n visibleMethods={visibleMethods}\n defaultOptionsOverrides={defaultOptionsOverrides}\n onAuthMethodSelect={onAuthMethodSelect}\n basicAuth={basicAuth}\n readOnly={readOnly}\n />\n {TLS && <TLSSettings {...TLS} readOnly={readOnly} />}\n {customHeaders && <CustomHeaders {...customHeaders} readOnly={readOnly} />}\n </ConfigSection>\n </div>\n );\n};\n","import { type Props as AuthProps } from './Auth';\nimport { AuthMethod, type Header, type CustomMethodId } from './types';\nimport { type Config, type OnChangeHandler } from '../types';\n\nconst headerNamePrefix = 'httpHeaderName';\nconst headerValuePrefix = 'httpHeaderValue';\n\nexport function convertLegacyAuthProps<C extends Config = Config>({\n config,\n onChange,\n}: {\n config: C;\n onChange: OnChangeHandler<C>;\n}): AuthProps {\n const props: AuthProps = {\n selectedMethod: getSelectedMethod<C>(config),\n onAuthMethodSelect: getOnAuthMethodSelectHandler<C>(config, onChange),\n basicAuth: getBasicAuthProps<C>(config, onChange),\n TLS: getTLSProps<C>(config, onChange),\n customHeaders: getCustomHeaders<C>(config, onChange),\n readOnly: config.readOnly,\n };\n\n return props;\n}\n\nexport function getSelectedMethod<C extends Config = Config>(config: C): AuthMethod {\n if (config.basicAuth) {\n return AuthMethod.BasicAuth;\n }\n if (config.withCredentials) {\n return AuthMethod.CrossSiteCredentials;\n }\n if (config.jsonData.oauthPassThru) {\n return AuthMethod.OAuthForward;\n }\n return AuthMethod.NoAuth;\n}\n\nexport function getOnAuthMethodSelectHandler<C extends Config = Config>(\n config: C,\n onChange: OnChangeHandler<C>\n): (method: AuthMethod | CustomMethodId) => void {\n return (method: AuthMethod | CustomMethodId) => {\n onChange({\n ...config,\n basicAuth: method === AuthMethod.BasicAuth,\n withCredentials: method === AuthMethod.CrossSiteCredentials,\n jsonData: {\n ...config.jsonData,\n oauthPassThru: method === AuthMethod.OAuthForward,\n },\n });\n };\n}\n\nexport function getBasicAuthProps<C extends Config = Config>(\n config: C,\n onChange: OnChangeHandler<C>\n): AuthProps['basicAuth'] {\n return {\n user: config.basicAuthUser,\n passwordConfigured: config.secureJsonFields.basicAuthPassword,\n onUserChange: (user: string) => onChange({ ...config, basicAuthUser: user }),\n onPasswordChange: (password: string) =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n basicAuthPassword: password,\n },\n }),\n onPasswordReset: () =>\n onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, basicAuthPassword: '' },\n secureJsonFields: {\n ...config.secureJsonFields,\n basicAuthPassword: false,\n },\n }),\n };\n}\n\nexport function getTLSProps<C extends Config = Config>(config: C, onChange: OnChangeHandler<C>): AuthProps['TLS'] {\n return {\n selfSignedCertificate: {\n enabled: Boolean(config.jsonData.tlsAuthWithCACert),\n certificateConfigured: !!config.secureJsonFields?.tlsCACert,\n onToggle: (enabled) =>\n enabled\n ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled },\n })\n : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuthWithCACert: enabled },\n secureJsonData: { ...config.secureJsonData, tlsCACert: '' },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false },\n }),\n onCertificateChange: (certificate) =>\n onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: certificate },\n }),\n onCertificateReset: () =>\n onChange({\n ...config,\n secureJsonData: { ...config.secureJsonData, tlsCACert: '' },\n secureJsonFields: { ...config.secureJsonFields, tlsCACert: false },\n }),\n },\n TLSClientAuth: {\n enabled: config.jsonData.tlsAuth,\n serverName: config.jsonData.serverName,\n clientCertificateConfigured: !!config.secureJsonFields?.tlsClientCert,\n clientKeyConfigured: !!config.secureJsonFields?.tlsClientKey,\n onToggle: (enabled) =>\n enabled\n ? onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled },\n })\n : onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsAuth: enabled, serverName: '' },\n secureJsonData: { ...config.secureJsonData, tlsClientCert: '', tlsClientKey: '' },\n secureJsonFields: { ...config.secureJsonFields, tlsClientCert: false, tlsClientKey: false },\n }),\n onServerNameChange: (serverName) =>\n onChange({\n ...config,\n jsonData: { ...config.jsonData, serverName },\n }),\n onClientCertificateChange: (clientCertificate) =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: clientCertificate,\n },\n }),\n onClientCertificateReset: () =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientCert: '',\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientCert: false,\n },\n }),\n onClientKeyChange: (clientKey) =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: clientKey,\n },\n }),\n onClientKeyReset: () =>\n onChange({\n ...config,\n secureJsonData: {\n ...config.secureJsonData,\n tlsClientKey: '',\n },\n secureJsonFields: {\n ...config.secureJsonFields,\n tlsClientKey: false,\n },\n }),\n },\n skipTLSVerification: {\n enabled: config.jsonData.tlsSkipVerify,\n onToggle: (enabled) =>\n onChange({\n ...config,\n jsonData: { ...config.jsonData, tlsSkipVerify: enabled },\n }),\n },\n };\n}\n\nexport function getCustomHeaders<C extends Config = Config>(\n config: C,\n onChange: OnChangeHandler<C>\n): AuthProps['customHeaders'] {\n const headers: Header[] = Object.keys(config.jsonData)\n .filter((key) => key.startsWith(headerNamePrefix))\n .sort()\n .map((key) => {\n const index = key.slice(headerNamePrefix.length);\n return {\n name: config.jsonData[key],\n configured: config.secureJsonFields[`${headerValuePrefix}${index}`] ?? false,\n };\n });\n\n return {\n headers,\n onChange: (headers) => {\n const newJsonData = Object.fromEntries(\n Object.entries(config.jsonData).filter(([key]) => !key.startsWith(headerNamePrefix))\n );\n const newSecureJsonData = Object.fromEntries(\n Object.entries(config.secureJsonData || {}).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n const newSecureJsonFields = Object.fromEntries(\n Object.entries(config.secureJsonFields).filter(([key]) => !key.startsWith(headerValuePrefix))\n );\n\n headers.forEach((header, index) => {\n newJsonData[`${headerNamePrefix}${index + 1}`] = header.name;\n if (header.configured) {\n newSecureJsonFields[`${headerValuePrefix}${index + 1}`] = true;\n } else {\n newSecureJsonData[`${headerValuePrefix}${index + 1}`] = header.value;\n }\n });\n\n onChange({\n ...config,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n secureJsonFields: newSecureJsonFields,\n });\n },\n };\n}\n","import React, { type ReactNode } from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, type PopoverContent } from '@grafana/ui';\nimport { ConfigSection } from '../ConfigSection';\nimport { type Config, type OnChangeHandler } from '../types';\n\nexport type Props<C extends Config = Config> = {\n config: C;\n onChange: OnChangeHandler<C>;\n description?: ReactNode;\n urlPlaceholder?: string;\n urlTooltip?: PopoverContent;\n urlLabel?: string;\n className?: string;\n};\n\nexport const ConnectionSettings: <C extends Config = Config>(props: Props<C>) => JSX.Element = ({\n config,\n onChange,\n description,\n urlPlaceholder,\n urlTooltip,\n urlLabel,\n className,\n}) => {\n const isValidUrl =\n config.url !== undefined &&\n /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(config.url);\n\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <>\n <ConfigSection title=\"Connection\" description={description} className={cx(styles.container, className)}>\n <InlineField\n htmlFor=\"connection-url\"\n label={urlLabel || 'URL'}\n labelWidth={24}\n tooltip={\n urlTooltip || (\n <>\n Specify a complete HTTP URL\n <br />\n (for example https://example.com:8080)\n </>\n )\n }\n grow\n disabled={config.readOnly}\n required\n invalid={!isValidUrl && !config.readOnly}\n error={isValidUrl ? '' : 'Please enter a valid URL'}\n interactive\n >\n <Input\n id=\"connection-url\"\n aria-label=\"Data source connection URL\"\n onChange={(event) =>\n onChange({\n ...config,\n url: event.currentTarget.value,\n })\n }\n value={config.url || ''}\n placeholder={urlPlaceholder || 'URL'}\n />\n </InlineField>\n </ConfigSection>\n </>\n );\n};\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, TagsInput } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection';\nimport { type Config, type OnChangeHandler } from '../types';\n\nexport type Props<C extends Config = Config> = {\n config: C;\n onChange: OnChangeHandler<C>;\n className?: string;\n};\n\nexport const AdvancedHttpSettings: <C extends Config = Config>(props: Props<C>) => JSX.Element = ({\n config,\n onChange,\n className,\n}) => {\n const onCookiesChange = (cookies: string[]) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies,\n },\n });\n };\n\n const onTimeoutChange = (event: React.FormEvent<HTMLInputElement>) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10),\n },\n });\n };\n\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <ConfigSubSection title=\"Advanced HTTP settings\" className={cx(styles.container, className)}>\n <InlineField\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\n >\n <TagsInput\n id=\"advanced-http-cookies\"\n placeholder=\"New cookie (hit enter to add)\"\n tags={config.jsonData.keepCookies}\n onChange={onCookiesChange}\n />\n </InlineField>\n\n <InlineField\n htmlFor=\"advanced-http-timeout\"\n label=\"Timeout\"\n labelWidth={24}\n tooltip=\"HTTP request timeout in seconds\"\n disabled={config.readOnly}\n grow\n >\n <Input\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 </InlineField>\n </ConfigSubSection>\n );\n};\n","import React, { PureComponent } from 'react';\nimport { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { type DataSourceSettings } from '@grafana/data';\nimport { stylesFactory, LegacyForms, Button, Icon } from '@grafana/ui';\n\nexport interface CustomHeader {\n id: string;\n name: string;\n value: string;\n configured: boolean;\n}\n\nexport type CustomHeaders = CustomHeader[];\n\nexport interface Props {\n dataSourceConfig: DataSourceSettings<any, any>;\n onChange: (config: DataSourceSettings) => void;\n}\n\nexport interface State {\n headers: CustomHeaders;\n}\n\ninterface CustomHeaderRowProps {\n header: CustomHeader;\n onReset: (id: string) => void;\n onRemove: (id: string) => void;\n onChange: (value: CustomHeader) => void;\n onBlur: () => void;\n}\n\nconst getCustomHeaderRowStyles = stylesFactory(() => {\n return {\n layout: css`\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n > * {\n margin-left: 4px;\n margin-bottom: 0;\n height: 100%;\n &:first-child,\n &:last-child {\n margin-left: 0;\n }\n }\n `,\n };\n});\n\nconst CustomHeaderRow = ({ header, onBlur, onChange, onRemove, onReset }: CustomHeaderRowProps) => {\n const styles = getCustomHeaderRowStyles();\n return (\n <div className={styles.layout}>\n <LegacyForms.FormField\n label=\"Header\"\n name=\"name\"\n placeholder=\"X-Custom-Header\"\n labelWidth={5}\n value={header.name || ''}\n onChange={(e) => onChange({ ...header, name: e.target.value })}\n onBlur={onBlur}\n />\n <LegacyForms.SecretFormField\n label=\"Value\"\n aria-label=\"Value\"\n name=\"value\"\n isConfigured={header.configured}\n value={header.value}\n labelWidth={5}\n inputWidth={header.configured ? 11 : 12}\n placeholder=\"Header Value\"\n onReset={() => onReset(header.id)}\n onChange={(e) => onChange({ ...header, value: e.target.value })}\n onBlur={onBlur}\n />\n <Button\n type=\"button\"\n aria-label=\"Remove header\"\n variant=\"secondary\"\n size=\"xs\"\n onClick={(_e) => onRemove(header.id)}\n >\n <Icon name=\"trash-alt\" />\n </Button>\n </div>\n );\n};\n\nCustomHeaderRow.displayName = 'CustomHeaderRow';\n\nexport class CustomHeadersSettings extends PureComponent<Props, State> {\n state: State = {\n headers: [],\n };\n\n constructor(props: Props) {\n super(props);\n const { jsonData, secureJsonData, secureJsonFields } = this.props.dataSourceConfig;\n this.state = {\n headers: Object.keys(jsonData)\n .sort()\n .filter((key) => key.startsWith('httpHeaderName'))\n .map((key, index) => {\n return {\n id: uniqueId(),\n name: jsonData[key],\n value: secureJsonData !== undefined ? secureJsonData[key] : '',\n configured: (secureJsonFields && secureJsonFields[`httpHeaderValue${index + 1}`]) || false,\n };\n }),\n };\n }\n\n updateSettings = () => {\n const { headers } = this.state;\n\n // we remove every httpHeaderName* field\n const newJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.jsonData).filter(([key, val]) => !key.startsWith('httpHeaderName'))\n );\n\n // we remove every httpHeaderValue* field\n const newSecureJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.secureJsonData || {}).filter(\n ([key, val]) => !key.startsWith('httpHeaderValue')\n )\n );\n\n // then we add the current httpHeader-fields\n for (const [index, header] of headers.entries()) {\n newJsonData[`httpHeaderName${index + 1}`] = header.name;\n if (!header.configured) {\n newSecureJsonData[`httpHeaderValue${index + 1}`] = header.value;\n }\n }\n\n this.props.onChange({\n ...this.props.dataSourceConfig,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n });\n };\n\n onHeaderAdd = () => {\n this.setState((prevState) => {\n return {\n headers: [...prevState.headers, { id: uniqueId(), name: '', value: '', configured: false }],\n };\n });\n };\n\n onHeaderChange = (headerIndex: number, value: CustomHeader) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((item, index) => {\n if (headerIndex !== index) {\n return item;\n }\n return { ...value };\n }),\n };\n });\n };\n\n onHeaderReset = (headerId: string) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((h, i) => {\n if (h.id !== headerId) {\n return h;\n }\n return {\n ...h,\n value: '',\n configured: false,\n };\n }),\n };\n });\n };\n\n onHeaderRemove = (headerId: string) => {\n this.setState(\n ({ headers }) => ({\n headers: headers.filter((h) => h.id !== headerId),\n }),\n this.updateSettings\n );\n };\n\n render() {\n const { headers } = this.state;\n return (\n <div className={'gf-form-group'}>\n <div className=\"gf-form\">\n <h6>Custom HTTP Headers</h6>\n </div>\n <div>\n {headers.map((header, i) => (\n <CustomHeaderRow\n key={header.id}\n header={header}\n onChange={(h) => {\n this.onHeaderChange(i, h);\n }}\n onBlur={this.updateSettings}\n onRemove={this.onHeaderRemove}\n onReset={this.onHeaderReset}\n />\n ))}\n </div>\n <div className=\"gf-form\">\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n type=\"button\"\n onClick={(e) => {\n this.onHeaderAdd();\n }}\n >\n Add header\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomHeadersSettings;\n","import { type FunctionComponent } from 'react';\n\nimport { type DataSourceApi, type RegistryItem, type SelectableValue, type TimeRange } from '@grafana/data';\n\nexport interface QueryBuilderLabelFilter {\n label: string;\n op: string;\n value: string;\n}\n\nexport interface QueryBuilderOperation {\n id: string;\n params: QueryBuilderOperationParamValue[];\n disabled?: boolean;\n}\n\nexport interface QueryBuilderOperationDefinition<T = any> extends RegistryItem {\n documentation?: string;\n params: QueryBuilderOperationParamDef[];\n defaultParams: QueryBuilderOperationParamValue[];\n category: string;\n hideFromList?: boolean;\n alternativesKey?: string;\n /** Can be used to control operation placement when adding a new operations, lower are placed first */\n orderRank?: number;\n renderer: QueryBuilderOperationRenderer;\n addOperationHandler: QueryBuilderAddOperationHandler<T>;\n paramChangedHandler?: QueryBuilderOnParamChangedHandler;\n explainHandler?: QueryBuilderExplainOperationHandler;\n changeTypeHandler?: (op: QueryBuilderOperation, newDef: QueryBuilderOperationDefinition<T>) => QueryBuilderOperation;\n toggleable?: boolean;\n}\n\ntype QueryBuilderAddOperationHandler<T> = (\n def: QueryBuilderOperationDefinition,\n query: T,\n modeller: VisualQueryModeller\n) => T;\n\ntype QueryBuilderExplainOperationHandler = (op: QueryBuilderOperation, def?: QueryBuilderOperationDefinition) => string;\n\ntype QueryBuilderOnParamChangedHandler = (\n index: number,\n operation: QueryBuilderOperation,\n operationDef: QueryBuilderOperationDefinition\n) => QueryBuilderOperation;\n\ntype QueryBuilderOperationRenderer = (\n model: QueryBuilderOperation,\n def: QueryBuilderOperationDefinition,\n innerQuery: string\n) => string;\n\nexport type QueryBuilderOperationParamValue = string | number | boolean;\n\nexport interface QueryBuilderOperationParamDef {\n name: string;\n type: 'string' | 'number' | 'boolean';\n options?: string[] | number[] | Array<SelectableValue<string>>;\n hideName?: boolean;\n restParam?: boolean;\n optional?: boolean;\n placeholder?: string;\n description?: string;\n minWidth?: number;\n editor?: FunctionComponent<QueryBuilderOperationParamEditorProps>;\n runQueryOnEnter?: boolean;\n}\n\nexport interface QueryBuilderOperationParamEditorProps {\n value?: QueryBuilderOperationParamValue;\n paramDef: QueryBuilderOperationParamDef;\n /** Parameter index */\n index: number;\n operation: QueryBuilderOperation;\n operationId: string;\n query: any;\n datasource: DataSourceApi;\n timeRange?: TimeRange;\n onChange: (index: number, value: QueryBuilderOperationParamValue) => void;\n onRunQuery: () => void;\n queryModeller: VisualQueryModeller;\n}\n\nexport enum QueryEditorMode {\n Code = 'code',\n Builder = 'builder',\n}\n\nexport type QueryStats = {\n bytes: number;\n // The error message displayed in the UI when we cant estimate the size of the query.\n message?: string;\n};\n\nexport interface VisualQueryModeller {\n getOperationsForCategory(category: string): QueryBuilderOperationDefinition[];\n getAlternativeOperations(key: string): QueryBuilderOperationDefinition[];\n getCategories(): string[];\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined;\n renderQuery(query: VisualQuery, nested?: boolean): string;\n renderLabels(labels: QueryBuilderLabelFilter[]): string;\n innerQueryPlaceholder: string;\n}\n\nexport interface VisualQueryBinary<T> {\n operator: string;\n vectorMatchesType?: 'on' | 'ignoring';\n vectorMatches?: string;\n query: T;\n}\n\nexport const BINARY_OPERATIONS_KEY = 'Binary operations';\n\nexport interface VisualQuery {\n metric?: string;\n labels: QueryBuilderLabelFilter[];\n operations: QueryBuilderOperation[];\n binaryQueries?: Array<VisualQueryBinary<VisualQuery>>;\n}\n","import { Registry } from '@grafana/data';\n\nimport {\n BINARY_OPERATIONS_KEY,\n type VisualQuery,\n type VisualQueryBinary,\n type QueryBuilderLabelFilter,\n type QueryBuilderOperation,\n type VisualQueryModeller,\n type QueryBuilderOperationDefinition,\n} from './types';\n\nexport abstract class QueryModellerBase implements VisualQueryModeller {\n protected operationsRegistry: Registry<QueryBuilderOperationDefinition>;\n private categories: string[] = [];\n innerQueryPlaceholder: string;\n\n constructor(operationDefinitions: QueryBuilderOperationDefinition[], innerQueryPlaceholder?: string) {\n this.operationsRegistry = new Registry<QueryBuilderOperationDefinition>(() => operationDefinitions);\n this.innerQueryPlaceholder = innerQueryPlaceholder || '<query>';\n }\n\n protected setOperationCategories(categories: string[]) {\n this.categories = categories;\n }\n\n abstract renderOperations(queryString: string, operations: QueryBuilderOperation[]): string;\n\n abstract renderBinaryQueries(queryString: string, binaryQueries?: Array<VisualQueryBinary<VisualQuery>>): string;\n\n abstract renderLabels(labels: QueryBuilderLabelFilter[]): string;\n\n abstract renderQuery(query: VisualQuery, nested?: boolean): string;\n\n getOperationsForCategory(category: string) {\n return this.operationsRegistry.list().filter((op) => op.category === category && !op.hideFromList);\n }\n\n getAlternativeOperations(key: string) {\n return this.operationsRegistry.list().filter((op) => op.alternativesKey && op.alternativesKey === key);\n }\n\n getCategories() {\n return this.categories;\n }\n\n getOperationDefinition(id: string): QueryBuilderOperationDefinition | undefined {\n return this.operationsRegistry.getIfExists(id);\n }\n\n hasBinaryOp(query: VisualQuery): boolean {\n return (\n query.operations.find((op) => {\n const def = this.getOperationDefinition(op.id);\n return def?.category === BINARY_OPERATIONS_KEY;\n }) !== undefined\n );\n }\n}\n","import { uniqBy } from 'lodash';\nimport React, { useRef, useState } from 'react';\nimport { v4 } from 'uuid';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { InlineField, Select } from '@grafana/ui';\nimport { type QueryBuilderLabelFilter } from '../types';\nimport { InputGroup } from '../../QueryEditor/InputGroup';\nimport { AccessoryButton } from '../../QueryEditor/AccessoryButton';\n\nconst CONFLICTING_LABEL_FILTER_ERROR_MESSAGE = 'You have conflicting label filters';\ninterface Props {\n defaultOp: string;\n item: Partial<QueryBuilderLabelFilter>;\n items: Array<Partial<QueryBuilderLabelFilter>>;\n onChange: (value: Partial<QueryBuilderLabelFilter>) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<Array<SelectableValue<string>>>;\n onDelete: () => void;\n invalidLabel?: boolean;\n invalidValue?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilterItem({\n item,\n items,\n defaultOp,\n onChange,\n onDelete,\n onGetLabelNames,\n onGetLabelValues,\n invalidLabel,\n invalidValue,\n multiValueSeparator = '|',\n}: Props) {\n const [state, setState] = useState<{\n labelNames?: Array<SelectableValue<string>>;\n labelValues?: Array<SelectableValue<string>>;\n isLoadingLabelNames?: boolean;\n isLoadingLabelValues?: boolean;\n }>({});\n // there's a bug in react-select where the menu doesn't recalculate its position when the options are loaded asynchronously\n // see https://github.com/grafana/grafana/issues/63558\n // instead, we explicitly control the menu visibility and prevent showing it until the options have fully loaded\n const [labelNamesMenuOpen, setLabelNamesMenuOpen] = useState(false);\n const [labelValuesMenuOpen, setLabelValuesMenuOpen] = useState(false);\n\n const isMultiSelect = (operator = item.op) => {\n return operators.find((op) => op.label === operator)?.isMultiValue;\n };\n\n const getSelectOptionsFromString = (item?: string): string[] => {\n if (item) {\n if (item.indexOf(multiValueSeparator) > 0) {\n return item.split(multiValueSeparator);\n }\n return [item];\n }\n return [];\n };\n\n const getOptions = (): Array<SelectableValue<string>> => {\n const labelValues = state.labelValues ? [...state.labelValues] : [];\n const selectedOptions = getSelectOptionsFromString(item?.value).map(toOption);\n\n // Remove possible duplicated values\n return uniqBy([...selectedOptions, ...labelValues], 'value');\n };\n\n const isConflicting = isConflictingLabelFilter(item, items);\n const { current: id } = useRef(v4());\n\n return (\n <div data-testid=\"visual-query-builder-dimensions-filter-item\">\n <InlineField error={CONFLICTING_LABEL_FILTER_ERROR_MESSAGE} invalid={isConflicting ? true : undefined}>\n <InputGroup>\n <Select<string>\n placeholder=\"Select label\"\n data-testid={selectors.components.QueryBuilder.labelSelect}\n inputId={`visual-query-builder-dimensions-filter-item-key-${id}`}\n width=\"auto\"\n value={item.label ? toOption(item.label) : null}\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelNames: true });\n const labelNames = await onGetLabelNames(item);\n setLabelNamesMenuOpen(true);\n setState({ labelNames, isLoadingLabelNames: undefined });\n }}\n onCloseMenu={() => {\n setLabelNamesMenuOpen(false);\n }}\n isOpen={labelNamesMenuOpen}\n isLoading={state.isLoadingLabelNames}\n options={state.labelNames}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: item.op ?? defaultOp,\n label: change.value,\n });\n }\n }}\n invalid={isConflicting || invalidLabel}\n />\n\n <Select<string>\n data-testid={selectors.components.QueryBuilder.matchOperatorSelect}\n value={toOption(item.op ?? defaultOp)}\n options={operators}\n width=\"auto\"\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n op: change.value,\n value: isMultiSelect(change.value) ? item.value : getSelectOptionsFromString(item?.value)[0],\n });\n }\n }}\n invalid={isConflicting}\n />\n\n <Select<string>\n placeholder=\"Select value\"\n data-testid={selectors.components.QueryBuilder.valueSelect}\n inputId={`visual-query-builder-dimensions-filter-item-value-${id}`}\n width=\"auto\"\n value={\n isMultiSelect()\n ? getSelectOptionsFromString(item?.value).map(toOption)\n : getSelectOptionsFromString(item?.value).map(toOption)[0]\n }\n allowCustomValue\n onOpenMenu={async () => {\n setState({ isLoadingLabelValues: true });\n const labelValues = await onGetLabelValues(item);\n setState({\n ...state,\n labelValues,\n isLoadingLabelValues: undefined,\n });\n setLabelValuesMenuOpen(true);\n }}\n onCloseMenu={() => {\n setLabelValuesMenuOpen(false);\n }}\n isOpen={labelValuesMenuOpen}\n isMulti={isMultiSelect()}\n isLoading={state.isLoadingLabelValues}\n options={getOptions()}\n onChange={(change) => {\n if (change.value) {\n onChange({\n ...item,\n value: change.value,\n op: item.op ?? defaultOp,\n });\n } else {\n // otherwise, we're dealing with a multi-value select which is array of options\n const changes = change\n .map((change: SelectableValue<string>) => {\n if (change.value) {\n return change.value;\n } else {\n return undefined;\n }\n })\n .filter((val: string | undefined) => val !== undefined)\n .join(multiValueSeparator);\n onChange({ ...item, value: changes, op: item.op ?? defaultOp });\n }\n }}\n invalid={isConflicting || invalidValue}\n />\n <AccessoryButton aria-label=\"remove\" icon=\"times\" variant=\"secondary\" onClick={onDelete} />\n </InputGroup>\n </InlineField>\n </div>\n );\n}\n\nconst operators = [\n { label: '=', value: '=', description: 'Equals', isMultiValue: false },\n { label: '!=', value: '!=', description: 'Does not equal', isMultiValue: false },\n { label: '=~', value: '=~', description: 'Matches regex', isMultiValue: true },\n { label: '!~', value: '!~', description: 'Does not match regex', isMultiValue: true },\n];\n\nexport function isConflictingLabelFilter(\n newLabel: Partial<QueryBuilderLabelFilter>,\n labels: Array<Partial<QueryBuilderLabelFilter>>\n): boolean {\n if (!newLabel.label || !newLabel.op || !newLabel.value) {\n return false;\n }\n\n if (labels.length < 2) {\n return false;\n }\n\n const operationIsNegative = newLabel.op.toString().startsWith('!');\n\n const candidates = labels.filter(\n (label) => label.label === newLabel.label && label.value === newLabel.value && label.op !== newLabel.op\n );\n\n const conflict = candidates.some((candidate) => {\n if (operationIsNegative && candidate?.op?.toString().startsWith('!') === false) {\n return true;\n }\n if (operationIsNegative === false && candidate?.op?.toString().startsWith('!')) {\n return true;\n }\n return false;\n });\n\n return conflict;\n}\n","import { isEqual } from 'lodash';\nimport React, { useEffect, useState } from 'react';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { type QueryBuilderLabelFilter } from '../types';\n\nimport { EditorField } from '../../QueryEditor/EditorField';\nimport { EditorFieldGroup } from '../../QueryEditor/EditorFieldGroup';\nimport { EditorList } from '../../QueryEditor/EditorList';\nimport { LabelFilterItem } from './LabelFilterItem';\n\nexport const MISSING_LABEL_FILTER_ERROR_MESSAGE = 'Select at least 1 label filter (label and value)';\n\nexport interface Props {\n labelsFilters: QueryBuilderLabelFilter[];\n onChange: (labelFilters: QueryBuilderLabelFilter[]) => void;\n onGetLabelNames: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n onGetLabelValues: (forLabel: Partial<QueryBuilderLabelFilter>) => Promise<SelectableValue[]>;\n /** If set to true, component will show error message until at least 1 filter is selected */\n labelFilterRequired?: boolean;\n multiValueSeparator?: string;\n}\n\nexport function LabelFilters({\n labelsFilters,\n onChange,\n onGetLabelNames,\n onGetLabelValues,\n labelFilterRequired,\n multiValueSeparator,\n}: Props) {\n const defaultOp = '=';\n const [items, setItems] = useState<Array<Partial<QueryBuilderLabelFilter>>>([{ op: defaultOp }]);\n\n useEffect(() => {\n if (labelsFilters.length > 0) {\n setItems(labelsFilters);\n } else {\n setItems([{ op: defaultOp }]);\n }\n }, [labelsFilters]);\n\n const onLabelsChange = (newItems: Array<Partial<QueryBuilderLabelFilter>>) => {\n setItems(newItems);\n\n // Extract full label filters with both label & value\n const newLabels = newItems.filter(\n (item): item is QueryBuilderLabelFilter => item.label !== undefined && item.value !== undefined\n );\n if (!isEqual(newLabels, labelsFilters)) {\n onChange(newLabels);\n }\n };\n\n const hasLabelFilter = items.some((item) => item.label && item.value);\n\n return (\n <EditorFieldGroup>\n <EditorField\n label=\"Label filters\"\n error={MISSING_LABEL_FILTER_ERROR_MESSAGE}\n invalid={labelFilterRequired && !hasLabelFilter}\n >\n <EditorList\n items={items}\n onChange={onLabelsChange}\n renderItem={(item: Partial<QueryBuilderLabelFilter>, onChangeItem, onDelete) => (\n <LabelFilterItem\n item={item}\n items={items}\n defaultOp={defaultOp}\n onChange={onChangeItem}\n onDelete={onDelete}\n onGetLabelNames={onGetLabelNames}\n onGetLabelValues={onGetLabelValues}\n invalidLabel={labelFilterRequired && !item.label}\n invalidValue={labelFilterRequired && !item.value}\n multiValueSeparator={multiValueSeparator}\n />\n )}\n />\n </EditorField>\n </EditorFieldGroup>\n );\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2, renderMarkdown } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nexport interface Props {\n title?: React.ReactNode;\n markdown?: string;\n stepNumber?: number;\n}\n\nexport function OperationExplainedBox({ title, stepNumber, markdown, children }: React.PropsWithChildren<Props>) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.box}>\n {stepNumber !== undefined && <div className={styles.stepNumber}>{stepNumber}</div>}\n <div className={styles.boxInner}>\n {title && (\n <div className={styles.header}>\n <span>{title}</span>\n </div>\n )}\n <div className={styles.body}>\n {markdown && <div dangerouslySetInnerHTML={{ __html: renderMarkdown(markdown) }}></div>}\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n box: css({\n background: theme.colors.background.secondary,\n padding: theme.spacing(1),\n borderRadius: theme.shape.radius.default,\n position: 'relative',\n }),\n boxInner: css({\n marginLeft: theme.spacing(4),\n }),\n stepNumber: css({\n fontWeight: theme.typography.fontWeightMedium,\n background: theme.colors.secondary.main,\n width: '20px',\n height: '20px',\n borderRadius: theme.shape.radius.circle,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n top: '10px',\n left: '11px',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n header: css({\n paddingBottom: theme.spacing(0.5),\n display: 'flex',\n alignItems: 'center',\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n body: css({\n color: theme.colors.text.secondary,\n 'p:last-child': {\n margin: 0,\n },\n a: {\n color: theme.colors.text.link,\n textDecoration: 'underline',\n },\n }),\n };\n};\n","import React, { useState, memo } from 'react';\nimport { css } from '@emotion/css';\nimport { usePopperTooltip } from 'react-popper-tooltip';\n\nimport { type GrafanaTheme2, renderMarkdown } from '@grafana/data';\nimport { Button, Portal, useStyles2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperation, type QueryBuilderOperationDefinition } from '../types';\nimport { FlexItem } from '../../QueryEditor/FlexItem';\n\ninterface Props {\n operation: QueryBuilderOperation;\n definition: QueryBuilderOperationDefinition;\n innerQueryPlaceholder: string;\n}\n\nexport const OperationInfoButton = memo<Props>(({ definition, operation, innerQueryPlaceholder }) => {\n const styles = useStyles2(getStyles);\n const [show, setShow] = useState(false);\n const { getTooltipProps, setTooltipRef, setTriggerRef, visible } = usePopperTooltip({\n placement: 'top',\n visible: show,\n offset: [0, 16],\n onVisibleChange: setShow,\n interactive: true,\n trigger: ['click'],\n });\n\n return (\n <>\n <Button\n title=\"Click to show description\"\n ref={setTriggerRef}\n icon=\"info-circle\"\n size=\"sm\"\n variant=\"secondary\"\n fill=\"text\"\n />\n {visible && (\n <Portal>\n <div ref={setTooltipRef} {...getTooltipProps()} className={styles.docBox}>\n <div className={styles.docBoxHeader}>\n <span>{definition.renderer(operation, definition, innerQueryPlaceholder)}</span>\n <FlexItem grow={1} />\n <Button\n icon=\"times\"\n onClick={() => setShow(false)}\n fill=\"text\"\n variant=\"secondary\"\n title=\"Remove operation\"\n />\n </div>\n <div\n className={styles.docBoxBody}\n dangerouslySetInnerHTML={{ __html: getOperationDocs(definition, operation) }}\n ></div>\n </div>\n </Portal>\n )}\n </>\n );\n});\n\nOperationInfoButton.displayName = 'OperationDocs';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n docBox: css({\n overflow: 'hidden',\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.strong}`,\n boxShadow: theme.shadows.z3,\n maxWidth: '600px',\n padding: theme.spacing(1),\n borderRadius: theme.shape.radius.default,\n zIndex: theme.zIndex.tooltip,\n }),\n docBoxHeader: css({\n fontSize: theme.typography.h5.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n paddingBottom: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n }),\n docBoxBody: css({\n // The markdown paragraph has a marginBottom this removes it\n marginBottom: theme.spacing(-1),\n color: theme.colors.text.secondary,\n }),\n signature: css({\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n dropdown: css({\n opacity: 0,\n color: theme.colors.text.secondary,\n }),\n };\n};\nfunction getOperationDocs(def: QueryBuilderOperationDefinition, op: QueryBuilderOperation): string {\n return renderMarkdown(def.explainHandler ? def.explainHandler(op, def) : (def.documentation ?? 'no docs'));\n}\n","import { css } from '@emotion/css';\nimport React, { useState, memo } from 'react';\nimport { type DraggableProvided } from '@hello-pangea/dnd';\n\nimport { type GrafanaTheme2, type SelectableValue } from '@grafana/data';\nimport { Button, Select, useStyles2 } from '@grafana/ui';\n\nimport { OperationInfoButton } from './OperationInfoButton';\n\nimport { type VisualQueryModeller, type QueryBuilderOperation, type QueryBuilderOperationDefinition } from '../types';\nimport { FlexItem } from '../../QueryEditor/FlexItem';\n\ninterface Props {\n operation: QueryBuilderOperation;\n definition: QueryBuilderOperationDefinition;\n index: number;\n queryModeller: VisualQueryModeller;\n dragHandleProps?: DraggableProvided['dragHandleProps'];\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n}\n\ninterface State {\n isOpen?: boolean;\n disabled?: boolean;\n alternatives?: Array<SelectableValue<QueryBuilderOperationDefinition>>;\n}\n\nexport const OperationHeader = memo<Props>(\n ({ operation, definition, index, onChange, onRemove, onToggle, queryModeller, dragHandleProps }) => {\n const styles = useStyles2(getStyles);\n const [state, setState] = useState<State>({});\n\n const onToggleSwitcher = () => {\n if (state.isOpen) {\n setState({ ...state, isOpen: false });\n } else {\n const alternatives = queryModeller\n .getAlternativeOperations(definition.alternativesKey!)\n .map((alt) => ({ label: alt.name, value: alt }));\n setState({ isOpen: true, alternatives });\n }\n };\n\n return (\n <div className={styles.header}>\n {!state.isOpen && (\n <>\n <div {...dragHandleProps}>{definition.name ?? definition.id}</div>\n <FlexItem grow={1} />\n <div className={`${styles.operationHeaderButtons} operation-header-show-on-hover`}>\n <Button\n icon=\"angle-down\"\n size=\"sm\"\n onClick={onToggleSwitcher}\n fill=\"text\"\n variant=\"secondary\"\n title=\"Click to view alternative operations\"\n />\n <OperationInfoButton\n definition={definition}\n operation={operation}\n innerQueryPlaceholder={queryModeller.innerQueryPlaceholder}\n />\n {definition.toggleable && (\n <Button\n icon={operation.disabled ? 'eye-slash' : 'eye'}\n size=\"sm\"\n onClick={() => onToggle(index)}\n fill=\"text\"\n variant=\"secondary\"\n title={operation.disabled ? 'Enable operation' : 'Disable operation'}\n />\n )}\n <Button\n icon=\"times\"\n size=\"sm\"\n onClick={() => onRemove(index)}\n fill=\"text\"\n variant=\"secondary\"\n title=\"Remove operation\"\n />\n </div>\n </>\n )}\n {state.isOpen && (\n <div className={styles.selectWrapper}>\n <Select\n autoFocus\n openMenuOnFocus\n placeholder=\"Replace with\"\n options={state.alternatives}\n isOpen={true}\n onCloseMenu={onToggleSwitcher}\n onChange={(value) => {\n if (value.value) {\n // Operation should exist if it is selectable\n const newDef = queryModeller.getOperationDefinition(value.value.id)!;\n\n // copy default params, and override with all current params\n const newParams = [...newDef.defaultParams];\n for (let i = 0; i < Math.min(operation.params.length, newParams.length); i++) {\n if (newDef.params[i].type === definition.params[i].type) {\n newParams[i] = operation.params[i];\n }\n }\n\n const changedOp = { ...operation, params: newParams, id: value.value.id };\n onChange(\n index,\n definition.changeTypeHandler ? definition.changeTypeHandler(changedOp, newDef) : changedOp\n );\n }\n }}\n />\n </div>\n )}\n </div>\n );\n }\n);\n\nOperationHeader.displayName = 'OperationHeader';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n header: css({\n borderBottom: `1px solid ${theme.colors.border.medium}`,\n padding: theme.spacing(0.5, 0.5, 0.5, 1),\n display: 'flex',\n alignItems: 'center',\n }),\n operationHeaderButtons: css({\n opacity: 1,\n }),\n selectWrapper: css({\n paddingRight: theme.spacing(2),\n }),\n };\n};\n","import React, { type FunctionComponent } from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2, type SelectableValue, toOption } from '@grafana/data';\nimport { AutoSizeInput, Button, Checkbox, Select, useStyles2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperationParamDef, type QueryBuilderOperationParamEditorProps } from '../types';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function getOperationParamEditor(\n paramDef: QueryBuilderOperationParamDef\n): FunctionComponent<QueryBuilderOperationParamEditorProps> {\n if (paramDef.editor) {\n return paramDef.editor;\n }\n\n if (paramDef.options) {\n return SelectInputParamEditor;\n }\n\n switch (paramDef.type) {\n case 'boolean':\n return BoolInputParamEditor;\n case 'number':\n case 'string':\n default:\n return SimpleInputParamEditor;\n }\n}\n\nfunction SimpleInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <AutoSizeInput\n id={getOperationParamId(props.operationId, props.index)}\n defaultValue={props.value?.toString()}\n minWidth={props.paramDef.minWidth}\n placeholder={props.paramDef.placeholder}\n title={props.paramDef.description}\n maxWidth={(props.paramDef.minWidth || 20) * 3}\n onCommitChange={(evt) => {\n props.onChange(props.index, evt.currentTarget.value);\n if (props.paramDef.runQueryOnEnter && evt.type === 'keydown') {\n props.onRunQuery();\n }\n }}\n />\n );\n}\n\nfunction BoolInputParamEditor(props: QueryBuilderOperationParamEditorProps) {\n return (\n <Checkbox\n id={getOperationParamId(props.operationId, props.index)}\n value={Boolean(props.value)}\n onChange={(evt) => props.onChange(props.index, evt.currentTarget.checked)}\n />\n );\n}\n\nfunction SelectInputParamEditor({\n paramDef,\n value,\n index,\n operationId,\n onChange,\n}: QueryBuilderOperationParamEditorProps) {\n const styles = useStyles2(getStyles);\n let selectOptions = paramDef.options as SelectableValue[];\n\n if (!selectOptions[0]?.label) {\n selectOptions = paramDef.options!.map((option) => ({\n label: option.toString(),\n value: option,\n }));\n }\n\n let valueOption = selectOptions.find((x) => x.value === value) ?? toOption(value as string);\n\n // If we have optional options param and don't have value, we want to render button with which we add optional options.\n // This makes it easier to understand what needs to be selected and what is optional.\n if (!value && paramDef.optional) {\n return (\n <div className={styles.optionalParam}>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n title={`Add ${paramDef.name}`}\n icon=\"plus\"\n onClick={() => onChange(index, selectOptions[0].value)}\n >\n {paramDef.name}\n </Button>\n </div>\n );\n }\n\n return (\n <EditorStack gap={0.5} direction=\"row\" alignItems=\"center\">\n <Select\n id={getOperationParamId(operationId, index)}\n value={valueOption}\n options={selectOptions}\n placeholder={paramDef.placeholder}\n allowCustomValue={true}\n onChange={(value) => onChange(index, value.value!)}\n width={paramDef.minWidth || 'auto'}\n />\n {paramDef.optional && (\n <Button\n data-testid={`operations.${index}.remove-param`}\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n variant=\"secondary\"\n title={`Remove ${paramDef.name}`}\n onClick={() => onChange(index, '')}\n />\n )}\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n optionalParam: css({\n marginTop: theme.spacing(1),\n }),\n };\n};\n\nexport function getOperationParamId(operationId: string, paramIndex: number) {\n return `operations.${operationId}.param.${paramIndex}`;\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { type DraggableProvided } from '@hello-pangea/dnd';\nimport { Button, Icon, Tooltip, useTheme2 } from '@grafana/ui';\nimport { css, cx } from '@emotion/css';\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { OperationHeader } from './OperationHeader';\nimport {\n type QueryBuilderOperation,\n type QueryBuilderOperationDefinition,\n type QueryBuilderOperationParamDef,\n type QueryBuilderOperationParamValue,\n type VisualQuery,\n type VisualQueryModeller,\n} from '../types';\nimport { getOperationParamEditor, getOperationParamId } from './OperationParamEditor';\nimport { v4 } from 'uuid';\nimport { EditorStack } from '../../QueryEditor';\n\ntype Props = {\n provided: DraggableProvided;\n isConflicting: boolean;\n index: number;\n operation: QueryBuilderOperation;\n definition: QueryBuilderOperationDefinition;\n queryModeller: VisualQueryModeller;\n query: VisualQuery;\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n onRunQuery: () => void;\n datasource: DataSourceApi;\n flash?: boolean;\n highlight?: boolean;\n timeRange?: TimeRange;\n};\n\nexport function OperationEditorBody({\n provided,\n flash,\n isConflicting,\n highlight,\n index,\n queryModeller,\n onChange,\n onRemove,\n onToggle,\n operation,\n definition,\n query,\n timeRange,\n onRunQuery,\n datasource,\n}: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme, isConflicting);\n const shouldFlash = useFlash(flash);\n const { current: id } = useRef(v4());\n\n const onParamValueChanged = (paramIdx: number, value: QueryBuilderOperationParamValue) => {\n const update: QueryBuilderOperation = { ...operation, params: [...operation.params] };\n update.params[paramIdx] = value;\n callParamChangedThenOnChange(definition, update, index, paramIdx, onChange);\n };\n\n const onAddRestParam = () => {\n const update: QueryBuilderOperation = { ...operation, params: [...operation.params, ''] };\n callParamChangedThenOnChange(definition, update, index, operation.params.length, onChange);\n };\n\n const onRemoveRestParam = (paramIdx: number) => {\n const update: QueryBuilderOperation = {\n ...operation,\n params: [...operation.params.slice(0, paramIdx), ...operation.params.slice(paramIdx + 1)],\n };\n callParamChangedThenOnChange(definition, update, index, paramIdx, onChange);\n };\n\n // Handle adding button for rest params\n let restParam: React.ReactNode | undefined;\n if (definition.params.length > 0) {\n const lastParamDef = definition.params[definition.params.length - 1];\n if (lastParamDef.restParam) {\n restParam = renderAddRestParamButton(lastParamDef, onAddRestParam, index, operation.params.length, styles);\n }\n }\n\n return (\n <div\n className={cx(styles.card, {\n [styles.cardHighlight]: shouldFlash || highlight,\n [styles.cardError]: isConflicting,\n [styles.disabled]: operation.disabled,\n })}\n ref={provided.innerRef}\n {...provided.draggableProps}\n data-testid={`operations.${index}.wrapper`}\n >\n <OperationHeader\n operation={operation}\n dragHandleProps={provided.dragHandleProps}\n definition={definition}\n index={index}\n onChange={onChange}\n onRemove={onRemove}\n onToggle={onToggle}\n queryModeller={queryModeller}\n />\n <div className={styles.body}>\n {operation.params.map((param, paramIndex) => {\n const paramDef = definition.params[Math.min(definition.params.length - 1, paramIndex)];\n const Editor = getOperationParamEditor(paramDef);\n\n return (\n <div className={styles.paramRow} key={`${paramIndex}-1`}>\n {!paramDef.hideName && (\n <div className={styles.paramName}>\n <label htmlFor={getOperationParamId(id, paramIndex)}>{paramDef.name}</label>\n {paramDef.description && (\n <Tooltip placement=\"top\" content={paramDef.description} theme=\"info\">\n <Icon name=\"info-circle\" size=\"sm\" className={styles.infoIcon} />\n </Tooltip>\n )}\n </div>\n )}\n <div className={styles.paramValue}>\n <EditorStack gap={0.5} direction=\"row\" alignItems=\"center\" wrap={false}>\n <Editor\n index={paramIndex}\n paramDef={paramDef}\n value={operation.params[paramIndex]}\n operation={operation}\n operationId={id}\n onChange={onParamValueChanged}\n onRunQuery={onRunQuery}\n query={query}\n datasource={datasource}\n timeRange={timeRange}\n queryModeller={queryModeller}\n />\n {paramDef.restParam && (operation.params.length > definition.params.length || paramDef.optional) && (\n <Button\n data-testid={`operations.${index}.remove-rest-param`}\n size=\"sm\"\n fill=\"text\"\n icon=\"times\"\n variant=\"secondary\"\n title={`Remove ${paramDef.name}`}\n onClick={() => onRemoveRestParam(paramIndex)}\n />\n )}\n </EditorStack>\n </div>\n </div>\n );\n })}\n </div>\n {restParam}\n {index < query.operations.length - 1 && (\n <div className={styles.arrow}>\n <div className={styles.arrowLine} />\n <div className={styles.arrowArrow} />\n </div>\n )}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, isConflicting: boolean) => {\n return {\n cardWrapper: css({\n alignItems: 'stretch',\n }),\n error: css({\n marginBottom: theme.spacing(1),\n }),\n card: css({\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.medium}`,\n cursor: 'grab',\n borderRadius: theme.shape.radius.default,\n position: 'relative',\n transition: 'all 0.5s ease-in 0s',\n height: isConflicting ? 'auto' : '100%',\n }),\n disabled: css({\n opacity: 0.5,\n transition: 'none',\n }),\n cardError: css({\n boxShadow: `0px 0px 4px 0px ${theme.colors.warning.main}`,\n border: `1px solid ${theme.colors.warning.main}`,\n }),\n cardHighlight: css({\n boxShadow: `0px 0px 4px 0px ${theme.colors.primary.border}`,\n border: `1px solid ${theme.colors.primary.border}`,\n }),\n infoIcon: css({\n marginLeft: theme.spacing(0.5),\n color: theme.colors.text.secondary,\n ':hover': {\n color: theme.colors.text.primary,\n },\n }),\n body: css({\n margin: theme.spacing(1, 1, 0.5, 1),\n display: 'table',\n }),\n paramRow: css({\n label: 'paramRow',\n display: 'table-row',\n verticalAlign: 'middle',\n }),\n paramName: css({\n display: 'table-cell',\n padding: theme.spacing(0, 1, 0, 0),\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n verticalAlign: 'middle',\n height: '32px',\n }),\n paramValue: css({\n label: 'paramValue',\n display: 'table-cell',\n verticalAlign: 'middle',\n }),\n restParam: css({\n padding: theme.spacing(0, 1, 1, 1),\n }),\n arrow: css({\n position: 'absolute',\n top: '0',\n right: '-18px',\n display: 'flex',\n }),\n arrowLine: css({\n height: '2px',\n width: '8px',\n backgroundColor: theme.colors.border.strong,\n position: 'relative',\n top: '14px',\n }),\n arrowArrow: css({\n width: 0,\n height: 0,\n borderTop: `5px solid transparent`,\n borderBottom: `5px solid transparent`,\n borderLeft: `7px solid ${theme.colors.border.strong}`,\n position: 'relative',\n top: '10px',\n }),\n };\n};\n\n/**\n * When flash is switched on makes sure it is switched of right away, so we just flash the highlight and then fade\n * out.\n * @param flash\n */\nfunction useFlash(flash?: boolean) {\n const [keepFlash, setKeepFlash] = useState(true);\n useEffect(() => {\n let t: ReturnType<typeof setTimeout>;\n if (flash) {\n t = setTimeout(() => {\n setKeepFlash(false);\n }, 1000);\n } else {\n setKeepFlash(true);\n }\n\n return () => clearTimeout(t);\n }, [flash]);\n\n return keepFlash && flash;\n}\n\nfunction callParamChangedThenOnChange(\n def: QueryBuilderOperationDefinition,\n operation: QueryBuilderOperation,\n operationIndex: number,\n paramIndex: number,\n onChange: (index: number, update: QueryBuilderOperation) => void\n) {\n if (def.paramChangedHandler) {\n onChange(operationIndex, def.paramChangedHandler(paramIndex, operation, def));\n } else {\n onChange(operationIndex, operation);\n }\n}\n\nfunction renderAddRestParamButton(\n paramDef: QueryBuilderOperationParamDef,\n onAddRestParam: () => void,\n operationIndex: number,\n paramIndex: number,\n styles: OperationEditorStyles\n) {\n return (\n <div className={styles.restParam} key={`${paramIndex}-2`}>\n <Button\n size=\"sm\"\n icon=\"plus\"\n title={`Add ${paramDef.name}`.trimEnd()}\n variant=\"secondary\"\n onClick={onAddRestParam}\n data-testid={`operations.${operationIndex}.add-rest-param`}\n >\n {paramDef.name}\n </Button>\n </div>\n );\n}\n\ntype OperationEditorStyles = ReturnType<typeof getStyles>;\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { Draggable } from '@hello-pangea/dnd';\n\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { InlineField, useTheme2 } from '@grafana/ui';\n\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\nimport { OperationEditorBody } from './OperationEditorBody';\n\ninterface Props<T extends VisualQuery> {\n operation: QueryBuilderOperation;\n index: number;\n query: T;\n datasource: DataSourceApi;\n queryModeller: VisualQueryModeller;\n onChange: (index: number, update: QueryBuilderOperation) => void;\n onRemove: (index: number) => void;\n onToggle: (index: number) => void;\n onRunQuery: () => void;\n flash?: boolean;\n highlight?: boolean;\n timeRange?: TimeRange;\n isConflictingOperation?: (operation: QueryBuilderOperation, otherOperations: QueryBuilderOperation[]) => boolean;\n}\n\nexport function OperationEditor<T extends VisualQuery>({\n operation,\n index,\n onRemove,\n onToggle,\n onChange,\n onRunQuery,\n queryModeller,\n query,\n datasource,\n flash,\n highlight,\n timeRange,\n isConflictingOperation,\n}: Props<T>) {\n const def = queryModeller.getOperationDefinition(operation.id);\n\n const theme = useTheme2();\n const isConflicting = isConflictingOperation ? isConflictingOperation(operation, query.operations) : false;\n const styles = getStyles(theme, isConflicting);\n\n if (!def) {\n return <span>Operation {operation.id} not found</span>;\n }\n\n const isInvalid = (isDragging: boolean) => {\n if (isDragging) {\n return undefined;\n }\n\n return isConflicting ? true : undefined;\n };\n\n return (\n <Draggable draggableId={`operation-${index}`} index={index}>\n {(provided, snapshot) => (\n <InlineField\n error={'You have conflicting label filters'}\n invalid={isInvalid(snapshot.isDragging)}\n className={cx(styles.error, styles.cardWrapper)}\n >\n <OperationEditorBody\n provided={provided}\n flash={flash}\n highlight={highlight}\n isConflicting={isConflicting}\n index={index}\n operation={operation}\n definition={def}\n onChange={onChange}\n onRemove={onRemove}\n onToggle={onToggle}\n queryModeller={queryModeller}\n query={query}\n timeRange={timeRange}\n onRunQuery={onRunQuery}\n datasource={datasource}\n />\n </InlineField>\n )}\n </Draggable>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, isConflicting: boolean) => {\n return {\n cardWrapper: css({\n alignItems: 'stretch',\n }),\n error: css({\n marginBottom: theme.spacing(1),\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\nimport { DragDropContext, Droppable, type DropResult } from '@hello-pangea/dnd';\nimport { useMountedState, usePrevious } from 'react-use';\n\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { Button, Cascader, type CascaderOption, useStyles2 } from '@grafana/ui';\n\nimport { OperationEditor } from './OperationEditor';\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\nexport interface Props<T extends VisualQuery> {\n query: T;\n datasource: DataSourceApi;\n onChange: (query: T) => void;\n onRunQuery: () => void;\n queryModeller: VisualQueryModeller;\n explainMode?: boolean;\n highlightedOp?: QueryBuilderOperation;\n timeRange?: TimeRange;\n isConflictingOperation?: (operation: QueryBuilderOperation, otherOperations: QueryBuilderOperation[]) => boolean;\n}\n\nexport function OperationList<T extends VisualQuery>({\n query,\n datasource,\n queryModeller,\n onChange,\n onRunQuery,\n highlightedOp,\n timeRange,\n isConflictingOperation,\n}: Props<T>) {\n const styles = useStyles2(getStyles);\n const { operations } = query;\n\n const opsToHighlight = useOperationsHighlight(operations);\n\n const [cascaderOpen, setCascaderOpen] = useState(false);\n\n const onOperationChange = (index: number, update: QueryBuilderOperation) => {\n const updatedList = [...operations];\n updatedList.splice(index, 1, update);\n onChange({ ...query, operations: updatedList });\n };\n\n const onRemove = (index: number) => {\n const updatedList = [...operations.slice(0, index), ...operations.slice(index + 1)];\n onChange({ ...query, operations: updatedList });\n };\n\n const onToggle = (index: number) => {\n onOperationChange(index, { ...operations[index], disabled: !operations[index].disabled });\n };\n\n const addOptions: CascaderOption[] = queryModeller.getCategories().map((category) => {\n return {\n value: category,\n label: category,\n items: queryModeller.getOperationsForCategory(category).map((operation) => ({\n value: operation.id,\n label: operation.name,\n isLeaf: true,\n })),\n };\n });\n\n const onAddOperation = (value: string) => {\n const operationDef = queryModeller.getOperationDefinition(value);\n if (!operationDef) {\n return;\n }\n onChange(operationDef.addOperationHandler(operationDef, query, queryModeller));\n setCascaderOpen(false);\n };\n\n const onDragEnd = (result: DropResult) => {\n if (!result.destination) {\n return;\n }\n\n const updatedList = [...operations];\n const element = updatedList[result.source.index];\n updatedList.splice(result.source.index, 1);\n updatedList.splice(result.destination.index, 0, element);\n onChange({ ...query, operations: updatedList });\n };\n\n const onCascaderBlur = () => {\n setCascaderOpen(false);\n };\n\n return (\n <EditorStack gap={1} direction=\"column\">\n <EditorStack gap={1}>\n {operations.length > 0 && (\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId=\"sortable-field-mappings\" direction=\"horizontal\">\n {(provided) => (\n <div className={styles.operationList} ref={provided.innerRef} {...provided.droppableProps}>\n {operations.map((op, index) => {\n return (\n <OperationEditor\n key={op.id + JSON.stringify(op.params) + index}\n queryModeller={queryModeller}\n index={index}\n operation={op}\n query={query}\n datasource={datasource}\n onChange={onOperationChange}\n onRemove={onRemove}\n onToggle={onToggle}\n onRunQuery={onRunQuery}\n flash={opsToHighlight[index]}\n highlight={highlightedOp === op}\n timeRange={timeRange}\n isConflictingOperation={isConflictingOperation}\n />\n );\n })}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n )}\n <div className={styles.addButton}>\n {cascaderOpen ? (\n <Cascader\n options={addOptions}\n onSelect={onAddOperation}\n onBlur={onCascaderBlur}\n autoFocus={true}\n alwaysOpen={true}\n hideActiveLevelLabel={true}\n placeholder={'Search'}\n />\n ) : (\n <Button icon={'plus'} variant={'secondary'} onClick={() => setCascaderOpen(true)} title={'Add operation'}>\n Operations\n </Button>\n )}\n </div>\n </EditorStack>\n </EditorStack>\n );\n}\n\n/**\n * Returns indexes of operations that should be highlighted. We check the diff of operations added but at the same time\n * we want to highlight operations only after the initial render, so we check for mounted state and calculate the diff\n * only after.\n * @param operations\n */\nfunction useOperationsHighlight(operations: QueryBuilderOperation[]) {\n const isMounted = useMountedState();\n const prevOperations = usePrevious(operations);\n\n if (!isMounted()) {\n return operations.map(() => false);\n }\n\n if (!prevOperations) {\n return operations.map(() => true);\n }\n\n let newOps: boolean[] = [];\n\n if (prevOperations.length - 1 === operations.length && operations.every((op) => prevOperations.includes(op))) {\n // In case we remove one op and does not change any ops then don't highlight anything.\n return operations.map(() => false);\n }\n if (prevOperations.length + 1 === operations.length && prevOperations.every((op) => operations.includes(op))) {\n // If we add a single op just find it and highlight just that.\n const newOp = operations.find((op) => !prevOperations.includes(op));\n newOps = operations.map((op) => {\n return op === newOp;\n });\n } else {\n // Default diff of all ops.\n newOps = operations.map((op, index) => {\n return !isSameOp(op.id, prevOperations[index]?.id);\n });\n }\n return newOps;\n}\n\nfunction isSameOp(op1?: string, op2?: string) {\n return op1 === op2 || `__${op1}_by` === op2 || op1 === `__${op2}_by`;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n heading: css({\n label: 'heading',\n fontSize: 12,\n fontWeight: theme.typography.fontWeightMedium,\n marginBottom: 0,\n }),\n operationList: css({\n label: 'operationList',\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n }),\n addButton: css({\n label: 'addButton',\n width: 126,\n paddingBottom: theme.spacing(1),\n }),\n };\n};\n","import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport Prism, { type Grammar } from 'prismjs';\n\nimport { type GrafanaTheme2, textUtil } from '@grafana/data';\nimport { useTheme2 } from '@grafana/ui';\n\ninterface Props {\n query: string;\n language: {\n grammar: Grammar;\n name: string;\n };\n className?: string;\n}\nexport function RawQuery({ query, language, className }: Props) {\n const theme = useTheme2();\n const styles = getStyles(theme);\n const highlighted = Prism.highlight(query, language.grammar, language.name);\n\n return (\n <div\n className={cx(styles.editorField, 'prism-syntax-highlight', className)}\n aria-label=\"selector\"\n dangerouslySetInnerHTML={{ __html: textUtil.sanitize(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 React from 'react';\nimport { type Grammar } from 'prismjs';\n\nimport { OperationExplainedBox } from './OperationExplainedBox';\nimport { RawQuery } from './RawQuery';\nimport { type QueryBuilderOperation, type VisualQuery, type VisualQueryModeller } from '../types';\n\ninterface Props<T extends VisualQuery> {\n query: T;\n queryModeller: VisualQueryModeller;\n explainMode?: boolean;\n stepNumber: number;\n language: {\n grammar: Grammar;\n name: string;\n };\n onMouseEnter?: (op: QueryBuilderOperation, index: number) => void;\n onMouseLeave?: (op: QueryBuilderOperation, index: number) => void;\n}\n\nexport function OperationListExplained<T extends VisualQuery>({\n query,\n queryModeller,\n stepNumber,\n language,\n onMouseEnter,\n onMouseLeave,\n}: Props<T>) {\n return (\n <>\n {query.operations.map((op, index) => {\n const def = queryModeller.getOperationDefinition(op.id);\n if (!def) {\n return `Operation ${op.id} not found`;\n }\n const title = def.renderer(op, def, queryModeller.innerQueryPlaceholder);\n const body = def.explainHandler ? def.explainHandler(op, def) : (def.documentation ?? 'no docs');\n\n return (\n <div\n key={index}\n onMouseEnter={() => onMouseEnter?.(op, index)}\n onMouseLeave={() => onMouseLeave?.(op, index)}\n >\n <OperationExplainedBox\n stepNumber={index + stepNumber}\n title={<RawQuery query={title} language={language} />}\n markdown={body}\n />\n </div>\n );\n })}\n </>\n );\n}\n","import React from 'react';\nimport { css } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\nexport function OperationsEditorRow({ children }: React.PropsWithChildren<{}>) {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.root}>\n <EditorStack gap={1}>{children}</EditorStack>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n root: css({\n padding: theme.spacing(1, 1, 0, 1),\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.radius.default,\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport React, { useMemo } from 'react';\n\nimport { type DataSourceApi, type GrafanaTheme2, type PanelData, type DataQuery } from '@grafana/data';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type VisualQuery, type VisualQueryModeller } from '../types';\n\ninterface Props<TVisualQuery extends VisualQuery, TDataQuery extends DataQuery> {\n query: TVisualQuery;\n datasource: DataSourceApi<TDataQuery>;\n queryModeller: VisualQueryModeller;\n buildVisualQueryFromString: (queryString: string) => { query: TVisualQuery };\n buildDataQueryFromQueryString: (queryString: string) => TDataQuery;\n buildQueryStringFromDataQuery: (dataQuery: TDataQuery) => string;\n onChange: (update: TVisualQuery) => void;\n data?: PanelData;\n}\n\nexport const QueryBuilderHints = <TVisualQuery extends VisualQuery, TDataQuery extends DataQuery>({\n datasource,\n query: visualQuery,\n onChange,\n data,\n queryModeller,\n buildVisualQueryFromString,\n buildDataQueryFromQueryString,\n buildQueryStringFromDataQuery,\n}: Props<TVisualQuery, TDataQuery>) => {\n const styles = useStyles2(getStyles);\n\n const hints = useMemo(() => {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n // For now show only actionable hints\n const hints = datasource.getQueryHints?.(dataQuery, data?.series || []).filter((hint) => hint.fix?.action);\n return hints ?? [];\n }, [datasource, visualQuery, data, queryModeller, buildDataQueryFromQueryString]);\n\n return (\n <>\n {hints.length > 0 && (\n <div className={styles.container}>\n {hints.map((hint) => {\n return (\n <Tooltip content={`${hint.label} ${hint.fix?.label}`} key={hint.type}>\n <Button\n onClick={() => {\n reportInteraction('grafana_query_builder_hints_clicked', {\n hint: hint.type,\n datasourceType: datasource.type,\n });\n\n if (hint?.fix?.action) {\n const dataQuery = buildDataQueryFromQueryString(queryModeller.renderQuery(visualQuery));\n const newQuery = datasource.modifyQuery?.(dataQuery, hint.fix.action);\n if (newQuery) {\n const newVisualQuery = buildVisualQueryFromString(\n buildQueryStringFromDataQuery(newQuery) ?? ''\n );\n return onChange(newVisualQuery.query);\n }\n }\n }}\n fill=\"outline\"\n size=\"sm\"\n className={styles.hint}\n >\n hint: {hint.fix?.title || hint.fix?.action?.type.toLowerCase().replace('_', ' ')}\n </Button>\n </Tooltip>\n );\n })}\n </div>\n )}\n </>\n );\n};\n\nQueryBuilderHints.displayName = 'QueryBuilderHints';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css`\n display: flex;\n align-items: start;\n `,\n hint: css`\n margin-right: ${theme.spacing(1)};\n `,\n };\n};\n","import React from 'react';\nimport { RadioButtonGroup } from '@grafana/ui';\nimport { QueryEditorMode } from '../types';\n\ninterface Props {\n mode: QueryEditorMode;\n onChange: (mode: QueryEditorMode) => void;\n}\n\nconst editorModes = [\n { label: 'Builder', value: QueryEditorMode.Builder },\n { label: 'Code', value: QueryEditorMode.Code },\n];\n\nexport function QueryEditorModeToggle({ mode, onChange }: Props) {\n return (\n <div data-testid={'QueryEditorModeToggle'}>\n <RadioButtonGroup options={editorModes} size=\"sm\" value={mode} onChange={onChange} />\n </div>\n );\n}\n","import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { type HTMLProps, useRef } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Switch, useStyles2 } from '@grafana/ui';\n\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props extends Omit<HTMLProps<HTMLInputElement>, 'value' | 'ref'> {\n value?: boolean;\n label: string;\n}\n\nexport function QueryHeaderSwitch({ label, ...inputProps }: Props) {\n const dashedLabel = label.replace(' ', '-');\n const switchIdRef = useRef(uniqueId(`switch-${dashedLabel}`));\n const styles = useStyles2(getStyles);\n\n return (\n <EditorStack gap={1}>\n <label htmlFor={switchIdRef.current} className={styles.switchLabel}>\n {label}\n </label>\n <Switch {...inputProps} id={switchIdRef.current} />\n </EditorStack>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n switchLabel: css({\n color: theme.colors.text.secondary,\n cursor: 'pointer',\n fontSize: theme.typography.bodySmall.fontSize,\n '&:hover': {\n color: theme.colors.text.primary,\n },\n }),\n };\n};\n","import React from 'react';\nimport { css } from '@emotion/css';\nimport { useToggle } from 'react-use';\n\nimport { getValueFormat, type GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Collapse, Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type QueryStats } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props {\n title: string;\n collapsedInfo: string[];\n queryStats?: QueryStats | null;\n}\n\nexport function QueryOptionGroup({ title, children, collapsedInfo, queryStats }: React.PropsWithChildren<Props>) {\n const [isOpen, toggleOpen] = useToggle(false);\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <Collapse\n className={styles.collapse}\n collapsible\n isOpen={isOpen}\n onToggle={toggleOpen}\n label={\n <EditorStack gap={0}>\n <h6 className={styles.title}>{title}</h6>\n {!isOpen && (\n <div className={styles.description}>\n {collapsedInfo.map((x, i) => (\n <span key={i}>{x}</span>\n ))}\n </div>\n )}\n </EditorStack>\n }\n >\n <div className={styles.body}>{children}</div>\n </Collapse>\n <div className={styles.queryStatsWrap}>\n {/**TODO: This is Loki logic that should eventually be moved to Loki */}\n {queryStats && config.featureToggles.lokiQuerySplitting && (\n <Tooltip content=\"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.\">\n <Icon tabIndex={0} name=\"info-circle\" className={styles.tooltip} size=\"sm\" />\n </Tooltip>\n )}\n\n {queryStats && <p className={styles.stats}>{generateQueryStats(queryStats)}</p>}\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n collapse: css({\n backgroundColor: 'unset',\n border: 'unset',\n marginBottom: 0,\n\n ['> button']: {\n padding: theme.spacing(0, 1),\n },\n }),\n wrapper: css({\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n }),\n title: css({\n flexGrow: 1,\n overflow: 'hidden',\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n margin: 0,\n }),\n description: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n paddingLeft: theme.spacing(2),\n gap: theme.spacing(2),\n display: 'flex',\n }),\n body: css({\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }),\n queryStatsWrap: css({\n display: 'flex',\n alignItems: 'center',\n alignSelf: 'flex-start',\n label: 'query-stats-wrap',\n padding: theme.spacing(1),\n }),\n stats: css({\n margin: '0px',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n tooltip: css({\n marginRight: theme.spacing(0.25),\n }),\n };\n};\n\nconst generateQueryStats = (queryStats: QueryStats) => {\n if (queryStats.message) {\n return queryStats.message;\n }\n\n return `This query will process approximately ${convertUnits(queryStats)}.`;\n};\n\nconst convertUnits = (queryStats: QueryStats): string => {\n const { text, suffix } = getValueFormat('bytes')(queryStats.bytes, 1);\n return text + suffix;\n};\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 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 {\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","'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","'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 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\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\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","'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","'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","'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 SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\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 compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\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 compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\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 compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\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","'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 compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\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 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","'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","'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 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","'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 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","'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","'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","'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')\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 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\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","'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 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\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\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\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// 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 {\n LoadingState,\n type DataFrame,\n type DataQuery,\n type DataQueryRequest,\n type DataQueryResponse,\n} from '@grafana/data';\nimport { Observable, type Subscription, type Observer } from 'rxjs';\n\nexport interface RequestLoopOptions<TQuery extends DataQuery = DataQuery> {\n /**\n * If the response needs an additional request to execute, return it here\n */\n getNextQuery: (rsp: DataQueryResponse) => TQuery | undefined;\n\n /**\n * The datasource execute method\n */\n query: (req: DataQueryRequest<TQuery>) => Observable<DataQueryResponse>;\n\n /**\n * Process the results\n */\n process: (data: DataFrame[]) => DataFrame[];\n\n /**\n * Check if the query should be cancelled\n */\n shouldCancel: () => boolean;\n\n /**\n * Callback that gets executed when unsubscribed\n */\n onCancel: () => void;\n}\n\nconst DELAY_INTERVAL_MS = 10;\nconst MAX_NEXT_REQUEST_DELAY = 10000 / DELAY_INTERVAL_MS; // 10 seconds maximum delay between requests\n\n/**\n * Continue executing requests as long as `getNextQuery` returns a query\n */\nexport function getRequestLooper<T extends DataQuery = DataQuery>(\n req: DataQueryRequest<T>,\n options: RequestLoopOptions<T>\n): Observable<DataQueryResponse> {\n return new Observable<DataQueryResponse>((subscriber) => {\n let nextQuery: T | undefined = undefined;\n let subscription: Subscription | undefined = undefined;\n let loadingState: LoadingState | undefined = LoadingState.Loading;\n let nextRequestDelay = 1; // number of DELAY_INTERVAL_MS to wait before the next request\n let count = 1;\n let shouldCancel = false;\n\n // Single observer gets reused for each request\n const observer: Observer<DataQueryResponse> = {\n next: (rsp: DataQueryResponse) => {\n loadingState = rsp.state;\n let checkstate = false;\n if (loadingState !== LoadingState.Error) {\n nextQuery = options.getNextQuery(rsp);\n const _shouldCancel = options.shouldCancel();\n\n if (nextQuery && _shouldCancel) {\n // `shouldCancel` is set here only if there is a `nextQuery`, otherwise\n // we would try to cancel a finished query in the cleanup function\n shouldCancel = _shouldCancel;\n nextQuery = undefined;\n }\n\n checkstate = true;\n }\n const data = options.process(rsp.data);\n\n // Set the loading status to show a spinner if loading or to show data if streaming.\n if (checkstate) {\n if (nextQuery) {\n if (data.length && data[0].length) {\n loadingState = LoadingState.Streaming;\n } else {\n loadingState = LoadingState.Loading;\n }\n // Calculate the number of DELAY_INTERVAL_MS to wait before the next request.\n // Caps it so the delay is not more than 10s\n nextRequestDelay =\n nextRequestDelay * 2 > MAX_NEXT_REQUEST_DELAY ? MAX_NEXT_REQUEST_DELAY : nextRequestDelay * 2;\n } else {\n loadingState = LoadingState.Done;\n nextRequestDelay = 0;\n }\n }\n subscriber.next({ ...rsp, data, state: loadingState, key: req.requestId });\n },\n error: (err) => {\n subscriber.error(err);\n },\n complete: () => {\n // We unsubscribe from the internal subscription after completing a request\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n\n // Queues up a new request if the current query is still in a running state.\n // The timeout is set in the `next` callback.\n if (nextQuery) {\n const next = nextQuery;\n setTimeout(() => {\n subscription = options\n .query({ ...req, requestId: `${req.requestId}.${++count}`, targets: [next] })\n .subscribe(observer);\n nextQuery = undefined;\n }, nextRequestDelay * DELAY_INTERVAL_MS);\n } else {\n subscriber.complete();\n }\n },\n };\n\n // This runs the initial query, subsequent queries are run in the `complete` callback of the observer.\n subscription = options.query(req).subscribe(observer);\n\n // Cleanup function\n return function unsubscribe() {\n observer.complete();\n if (nextQuery || shouldCancel) {\n options.onCancel();\n }\n nextQuery = undefined;\n };\n });\n}\n","import type {\n DataFrame,\n DataQuery,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n DataSourceJsonData,\n} from '@grafana/data';\nimport {\n DataSourceWithBackend,\n config,\n getBackendSrv,\n toDataQueryResponse,\n type BackendDataSourceResponse,\n} from '@grafana/runtime';\nimport { merge, of, type Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { lt } from 'semver';\nimport { getRequestLooper } from './requestLooper';\n\nexport interface CustomMeta {\n queryID: string;\n status: string;\n}\n\nexport interface RunningQueryInfo {\n queryID?: string;\n shouldCancel?: boolean;\n}\n\ninterface DataQueryMeta {\n meta?: { queryFlow?: 'async' | 'sync' };\n}\n\nconst RUNNING_STATUSES = ['started', 'submitted', 'running'];\nconst isRunning = (status = '') => RUNNING_STATUSES.includes(status);\nconst isCustomMeta = (meta: unknown): meta is CustomMeta => {\n return !!(typeof meta === 'object' && meta?.hasOwnProperty('queryID') && meta?.hasOwnProperty('status'));\n};\n\nexport class DatasourceWithAsyncBackend<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData,\n> extends DataSourceWithBackend<TQuery, TOptions> {\n private runningQueries: { [hash: string]: RunningQueryInfo } = {};\n private requestCounter = 100;\n private requestIdPrefix: number | string;\n\n constructor(instanceSettings: DataSourceInstanceSettings<TOptions>) {\n super(instanceSettings);\n this.requestIdPrefix = instanceSettings.uid ?? instanceSettings.id;\n }\n\n query(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse> {\n const targets = this.filterQuery ? request.targets.filter(this.filterQuery) : request.targets;\n if (!targets.length) {\n return of({ data: [] });\n }\n const all: Array<Observable<DataQueryResponse>> = [];\n for (let target of targets) {\n if (target.hide) {\n continue;\n }\n all.push(this.doSingle(target, request));\n }\n return merge(...all);\n }\n\n storeQuery(target: TQuery, queryInfo: RunningQueryInfo) {\n const key = JSON.stringify(target);\n const existingQueryInfo = this.runningQueries[key] || {};\n this.runningQueries[key] = { ...existingQueryInfo, ...queryInfo };\n }\n\n getQuery(target: TQuery) {\n const key = JSON.stringify(target);\n return this.runningQueries[key] || {};\n }\n\n removeQuery(target: TQuery) {\n const key = JSON.stringify(target);\n delete this.runningQueries[key];\n }\n\n doSingle(target: TQuery, request: DataQueryRequest<TQuery>): Observable<DataQueryResponse> {\n let queryID: string | undefined = undefined;\n let status: string | undefined = undefined;\n let allData: DataFrame[] = [];\n\n return getRequestLooper(\n { ...request, targets: [target], requestId: `${this.requestIdPrefix}_${this.requestCounter++}` },\n {\n /**\n * Additional query to execute if the current query is still in a running state\n */\n getNextQuery: (rsp: DataQueryResponse) => {\n if (rsp.data?.length) {\n const first: DataFrame = rsp.data[0];\n const meta = first.meta?.custom;\n\n if (isCustomMeta(meta) && isRunning(meta.status)) {\n queryID = meta.queryID;\n status = meta.status;\n this.storeQuery(target, { queryID });\n return { ...target, queryID };\n }\n }\n\n this.removeQuery(target);\n return undefined;\n },\n\n /**\n * The original request\n */\n query: (request: DataQueryRequest<TQuery>) => {\n const { range, targets, requestId, intervalMs, maxDataPoints } = request;\n const [_query] = targets;\n const query: TQuery & DataQueryMeta = {\n ..._query,\n meta: { queryFlow: 'async' },\n intervalMs,\n maxDataPoints,\n // getRef optionally chained to support < v8.3.x of Grafana\n datasource: this?.getRef(),\n datasourceId: this.id,\n ...this.applyTemplateVariables(_query, request.scopedVars),\n };\n\n // Manually bypass the query cache for running queries if the caching service is not enabled.\n // The caching service handles bypassing the query cache automatically when it is enabled.\n const cachingDisabled = !config.featureToggles.awsAsyncQueryCaching;\n if (cachingDisabled && isRunning(status)) {\n const requestSkipQueryCacheUnsupported = lt(config.buildInfo.version, '10.2.3');\n if (requestSkipQueryCacheUnsupported) {\n return getBackendSrv()\n .fetch<BackendDataSourceResponse>({\n method: 'POST',\n url: '/api/ds/query',\n headers: { 'X-Cache-Skip': true },\n requestId,\n data: {\n queries: [query],\n range: range,\n from: range.from.valueOf().toString(),\n to: range.to.valueOf().toString(),\n },\n })\n .pipe(\n map((result) => ({ data: toDataQueryResponse(result).data })),\n catchError((err) => of(toDataQueryResponse(err)))\n );\n }\n\n return super.query({ ...request, targets: [query], skipQueryCache: true });\n }\n\n return super.query({ ...request, targets: [query] });\n },\n\n /**\n * Process the results\n */\n process: (data: DataFrame[]) => {\n for (const frame of data) {\n if (frame.fields.length > 0) {\n allData.push(frame);\n }\n }\n\n return allData;\n },\n\n shouldCancel: () => {\n const { shouldCancel } = this.getQuery(target);\n return !!shouldCancel;\n },\n\n /**\n * Callback that gets executed when unsubscribed\n */\n onCancel: () => {\n if (queryID) {\n this.removeQuery(target);\n this.postResource('cancel', {\n queryId: queryID,\n }).catch((err) => {\n err.isHandled = true; // avoid the popup\n console.error(`error cancelling query ID: ${queryID}`, err);\n });\n }\n },\n }\n );\n }\n\n // cancel sets shouldCancel to tell requestLooper to cancel the query\n cancel = (target: TQuery) => {\n this.storeQuery(target, { shouldCancel: true });\n };\n}\n","import React, { useState } from 'react';\nimport { Button } from '@grafana/ui';\nimport { type DataQuery, LoadingState } from '@grafana/data';\n\nexport interface RunQueryButtonsProps<TQuery extends DataQuery> {\n enableRun?: boolean;\n onRunQuery: () => void;\n onCancelQuery: (query: TQuery) => void;\n query: TQuery;\n state?: LoadingState;\n}\n\nexport const RunQueryButtons = <TQuery extends DataQuery>(props: RunQueryButtonsProps<TQuery>) => {\n const { state } = props;\n const [running, setRunning] = useState(false);\n const [stopping, setStopping] = useState(false);\n const [prevState, setPrevState] = useState(state);\n const [lastQuery, setLastQuery] = useState(props.query);\n\n if (state !== prevState) {\n setPrevState(state);\n if (state && state !== LoadingState.Loading) {\n setRunning(false);\n setStopping(false);\n }\n }\n\n const onRunQuery = () => {\n setRunning(true);\n setLastQuery(props.query);\n props.onRunQuery();\n };\n\n const onCancelQuery = props.onCancelQuery\n ? () => {\n props.onCancelQuery?.(lastQuery);\n setStopping(true);\n }\n : undefined;\n\n return (\n <>\n <Button\n variant={props.enableRun ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={running && !stopping ? 'fa fa-spinner' : undefined}\n disabled={state === LoadingState.Loading || !props.enableRun}\n >\n Run query\n </Button>\n <Button\n variant={running && !stopping ? 'primary' : 'secondary'}\n size=\"sm\"\n disabled={!running || stopping}\n icon={stopping ? 'fa fa-spinner' : undefined}\n onClick={onCancelQuery}\n >\n Stop query\n </Button>\n </>\n );\n};\n"],"names":["React","useState","useEffect","Input","GrafanaSegment","getStyles","css","memo","useTheme2","ClickOutsideWrapper","Calendar","Icon","cx","Badge","PluginSignatureStatus","PureComponent","__publicField","getDataSourceSrv","selectors","Select","HorizontalGroup","LegacyForms","stylesFactory","Button","DataLinkInput","usePrevious","DataLinkBuiltInVars","VariableOrigin","QueryEditorPropertyType","QueryEditorExpressionType","TokenType","OperatorType","MacroType","StatementPosition","SuggestionKind","CompletionItemPriority","CompletionItemKind","CompletionItemInsertTextRule","SQLEditorMode","getTemplateSrv","m","attachDebugger","createLogger","useRef","useMemo","v4","id","useCallback","CodeEditor","Registry","_a","QueryFormat","EditorMode","toOptionFromData","isEmpty","Stack","forwardRef","EditorList","useStyles2","Children","isValidElement","cloneElement","toOption","EditorField","ReactUtils","Tooltip","Space","Field","EditorRow","EditorRows","Switch","BaseSelectContainer","Modal","useAsync","editorModes","useCopyToClipboard","useId","InlineSwitch","RadioButtonGroup","format","getValueFormat","useAsyncFn","useDebounce","Spinner","formattedValueToString","reportInteraction","IconButton","useMeasure","AutoSizer","uniqueId","_b","Utils","BasicConfig","DateTimePicker","dateTime","customOperators","isString","config","Query","Builder","injectGlobal","DataSourceWithBackend","DataFrameView","lastValueFrom","getBackendSrv","map","toDataQueryResponse","catchError","of","InlineField","AuthMethod","SecretInput","Checkbox","SecretTextArea","TLSClientAuth","TLSClientAuthComponent","InlineFieldRow","headers","header","TagsInput","QueryEditorMode","item","uniqBy","change","isEqual","renderMarkdown","usePopperTooltip","Portal","AutoSizeInput","value","Draggable","DragDropContext","Droppable","Cascader","useMountedState","Prism","textUtil","hints","_c","useToggle","Collapse","require$$0","require$$1","require$$2","require$$3","require$$4","semver","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","require$$39","require$$40","Observable","LoadingState","data","merge","request","lt"],"mappings":"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","x_google_ignoreList":[131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175]}
|