@grafana/plugin-ui 0.16.1 → 0.17.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/dist/cjs/index.cjs +16723 -20759
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +30 -12
- package/dist/cjs/test-utils.cjs +3979 -91
- package/dist/cjs/test-utils.cjs.map +1 -1
- package/dist/cjs/test-utils.d.cts +1 -1
- package/dist/esm/_virtual/chance2.js +2 -2
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js +7 -7
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js.map +1 -1
- package/dist/esm/async-query-data/RunQueryButtons.js +4 -4
- package/dist/esm/async-query-data/RunQueryButtons.js.map +1 -1
- package/dist/esm/async-query-data/requestLooper.js +6 -6
- package/dist/esm/async-query-data/requestLooper.js.map +1 -1
- 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 +5 -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 +10 -10
- 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 +2 -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.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 +7 -7
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditorRow.js.map +1 -0
- package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
- 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.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.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +4 -4
- 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 +3 -3
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/types.js.map +1 -1
- 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 +28 -27
- 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 +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -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 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -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.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.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.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 +3 -3
- 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 +25 -25
- 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.map +1 -1
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js +15 -12
- 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 +1 -1
- 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.map +1 -1
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
- 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 +8 -8
- 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 -2
- 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 +8 -5
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +5 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -3
- 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 -5
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -2
- 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 +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +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 +17 -16
- 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 +30 -12
- package/dist/esm/index.js +3 -3
- package/dist/esm/node_modules/chance/chance.js +3973 -88
- package/dist/esm/node_modules/chance/chance.js.map +1 -1
- package/dist/esm/node_modules/immutable/dist/immutable.es.js +6186 -0
- package/dist/esm/node_modules/immutable/dist/immutable.es.js.map +1 -0
- package/dist/esm/node_modules/js-yaml/dist/js-yaml.js +3059 -0
- package/dist/esm/node_modules/js-yaml/dist/js-yaml.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js +3 -3
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js +1 -6
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js +3 -3
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/of.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/catchError.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js +7 -5
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -1
- package/dist/esm/node_modules/semver/classes/comparator.js.map +1 -1
- package/dist/esm/node_modules/semver/classes/range.js +24 -4
- package/dist/esm/node_modules/semver/classes/range.js.map +1 -1
- package/dist/esm/node_modules/semver/classes/semver.js +27 -10
- package/dist/esm/node_modules/semver/classes/semver.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/clean.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/cmp.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/coerce.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/compare-build.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/diff.js +1 -1
- package/dist/esm/node_modules/semver/functions/diff.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/inc.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/parse.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/prerelease.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/satisfies.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/truncate.js +62 -0
- package/dist/esm/node_modules/semver/functions/truncate.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/valid.js +5 -5
- package/dist/esm/node_modules/semver/functions/valid.js.map +1 -1
- package/dist/esm/node_modules/semver/index.js +3 -0
- package/dist/esm/node_modules/semver/index.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/debug.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/identifiers.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/lrucache.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/parse-options.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/re.js +13 -13
- package/dist/esm/node_modules/semver/internal/re.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/intersects.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/max-satisfying.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/min-satisfying.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/min-version.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/outside.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/simplify.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/subset.js +3 -3
- package/dist/esm/node_modules/semver/ranges/subset.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/valid.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +2 -2
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/esm/schema/utils/provisioning.js +389 -0
- package/dist/esm/schema/utils/provisioning.js.map +1 -0
- package/dist/esm/schema/utils/registry.js +31 -0
- package/dist/esm/schema/utils/registry.js.map +1 -0
- package/dist/esm/test/mocks/DataQuery.js.map +1 -1
- package/dist/esm/test/mocks/Datasource.js +1 -1
- package/dist/esm/test/mocks/Datasource.js.map +1 -1
- package/dist/esm/test/mocks/Plugin.js +5 -2
- package/dist/esm/test/mocks/Plugin.js.map +1 -1
- package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
- package/dist/esm/test/mocks/utils.js +2 -2
- package/dist/esm/test/mocks/utils.js.map +1 -1
- package/dist/esm/test-utils.d.ts +1 -1
- package/package.json +66 -66
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +0 -1
- package/dist/esm/schema/registry/alertmanager.schema.json.js +0 -77
- package/dist/esm/schema/registry/alertmanager.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/cloudwatch.schema.json.js +0 -384
- package/dist/esm/schema/registry/cloudwatch.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/elasticsearch.schema.json.js +0 -287
- package/dist/esm/schema/registry/elasticsearch.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js +0 -166
- package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js +0 -145
- package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js +0 -123
- package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js +0 -158
- package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js +0 -204
- package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js +0 -294
- package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js +0 -101
- package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js +0 -125
- package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js +0 -508
- package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js +0 -1400
- package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js +0 -302
- package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js +0 -291
- package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js +0 -155
- package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js +0 -179
- package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js +0 -134
- package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js +0 -156
- package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js +0 -84
- package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js +0 -231
- package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js +0 -87
- package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js +0 -159
- package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js +0 -188
- package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js +0 -82
- package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js +0 -278
- package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js +0 -168
- package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js +0 -129
- package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js +0 -56
- package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js +0 -212
- package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js +0 -186
- package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js +0 -85
- package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js +0 -411
- package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js +0 -41
- package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js +0 -201
- package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js +0 -201
- package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js +0 -208
- package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js +0 -94
- package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js +0 -179
- package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js +0 -304
- package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js +0 -319
- package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js +0 -90
- package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js +0 -74
- package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js +0 -102
- package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js +0 -92
- package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js +0 -145
- package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js +0 -80
- package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js +0 -112
- package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js +0 -114
- package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/graphite.schema.json.js +0 -104
- package/dist/esm/schema/registry/graphite.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/index.js +0 -27
- package/dist/esm/schema/registry/index.js.map +0 -1
- package/dist/esm/schema/registry/influxdb.schema.json.js +0 -717
- package/dist/esm/schema/registry/influxdb.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/jaeger.schema.json.js +0 -59
- package/dist/esm/schema/registry/jaeger.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/loki.schema.json.js +0 -545
- package/dist/esm/schema/registry/loki.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js +0 -45
- package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js +0 -36
- package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/mssql.schema.json.js +0 -292
- package/dist/esm/schema/registry/mssql.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/mysql.schema.json.js +0 -304
- package/dist/esm/schema/registry/mysql.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/opentsdb.schema.json.js +0 -113
- package/dist/esm/schema/registry/opentsdb.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/prometheus.schema.json.js +0 -783
- package/dist/esm/schema/registry/prometheus.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/stackdriver.schema.json.js +0 -224
- package/dist/esm/schema/registry/stackdriver.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/staticRegistry.js +0 -135
- package/dist/esm/schema/registry/staticRegistry.js.map +0 -1
- package/dist/esm/schema/registry/tempo.schema.json.js +0 -664
- package/dist/esm/schema/registry/tempo.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/zipkin.schema.json.js +0 -40
- package/dist/esm/schema/registry/zipkin.schema.json.js.map +0 -1
- /package/dist/esm/components/{QueryEditorRow → QueryEditor}/QueryEditorRow.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _grafana_data from '@grafana/data';
|
|
2
|
-
import { DataSourceInstanceSettings, DataQuery, DataSourcePluginMeta,
|
|
2
|
+
import { DataSourceInstanceSettings, DataQuery, DataSourcePluginMeta, PluginDependencies, PluginInclude, PluginIncludeType, PluginMeta, PluginMetaInfo, PluginSignatureStatus, PluginState, PluginType, LoadingState, QueryEditorProps, TimeRange, SelectableValue } from '@grafana/data';
|
|
3
3
|
import { DataSourceWithBackend } from '@grafana/runtime';
|
|
4
4
|
|
|
5
5
|
declare class DatasourceMock extends DataSourceWithBackend {
|
|
@@ -12,7 +12,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
12
12
|
const RUNNING_STATUSES = ["started", "submitted", "running"];
|
|
13
13
|
const isRunning = (status = "") => RUNNING_STATUSES.includes(status);
|
|
14
14
|
const isCustomMeta = (meta) => {
|
|
15
|
-
return !!(typeof meta === "object" && (meta == null ?
|
|
15
|
+
return !!(typeof meta === "object" && (meta == null ? void 0 : meta.hasOwnProperty("queryID")) && (meta == null ? void 0 : meta.hasOwnProperty("status")));
|
|
16
16
|
};
|
|
17
17
|
class DatasourceWithAsyncBackend extends DataSourceWithBackend {
|
|
18
18
|
constructor(instanceSettings) {
|
|
@@ -55,8 +55,8 @@ class DatasourceWithAsyncBackend extends DataSourceWithBackend {
|
|
|
55
55
|
delete this.runningQueries[key];
|
|
56
56
|
}
|
|
57
57
|
doSingle(target, request) {
|
|
58
|
-
let queryID =
|
|
59
|
-
let status =
|
|
58
|
+
let queryID = void 0;
|
|
59
|
+
let status = void 0;
|
|
60
60
|
let allData = [];
|
|
61
61
|
return getRequestLooper(
|
|
62
62
|
{ ...request, targets: [target], requestId: `${this.requestIdPrefix}_${this.requestCounter++}` },
|
|
@@ -66,9 +66,9 @@ class DatasourceWithAsyncBackend extends DataSourceWithBackend {
|
|
|
66
66
|
*/
|
|
67
67
|
getNextQuery: (rsp) => {
|
|
68
68
|
var _a, _b;
|
|
69
|
-
if ((_a = rsp.data) == null ?
|
|
69
|
+
if ((_a = rsp.data) == null ? void 0 : _a.length) {
|
|
70
70
|
const first = rsp.data[0];
|
|
71
|
-
const meta = (_b = first.meta) == null ?
|
|
71
|
+
const meta = (_b = first.meta) == null ? void 0 : _b.custom;
|
|
72
72
|
if (isCustomMeta(meta) && isRunning(meta.status)) {
|
|
73
73
|
queryID = meta.queryID;
|
|
74
74
|
status = meta.status;
|
|
@@ -77,7 +77,7 @@ class DatasourceWithAsyncBackend extends DataSourceWithBackend {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
this.removeQuery(target);
|
|
80
|
-
return
|
|
80
|
+
return void 0;
|
|
81
81
|
},
|
|
82
82
|
/**
|
|
83
83
|
* The original request
|
|
@@ -91,7 +91,7 @@ class DatasourceWithAsyncBackend extends DataSourceWithBackend {
|
|
|
91
91
|
intervalMs,
|
|
92
92
|
maxDataPoints,
|
|
93
93
|
// getRef optionally chained to support < v8.3.x of Grafana
|
|
94
|
-
datasource: this == null ?
|
|
94
|
+
datasource: this == null ? void 0 : this.getRef(),
|
|
95
95
|
datasourceId: this.id,
|
|
96
96
|
...this.applyTemplateVariables(_query, request2.scopedVars)
|
|
97
97
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasourceWithAsyncBackend.js","sources":["../../../src/async-query-data/DatasourceWithAsyncBackend.ts"],"sourcesContent":["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"],"names":["request","lt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatasourceWithAsyncBackend.js","sources":["../../../src/async-query-data/DatasourceWithAsyncBackend.ts"],"sourcesContent":["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"],"names":["request","lt"],"mappings":"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"}
|
|
@@ -22,16 +22,16 @@ const RunQueryButtons = (props) => {
|
|
|
22
22
|
};
|
|
23
23
|
const onCancelQuery = props.onCancelQuery ? () => {
|
|
24
24
|
var _a;
|
|
25
|
-
(_a = props.onCancelQuery) == null ?
|
|
25
|
+
(_a = props.onCancelQuery) == null ? void 0 : _a.call(props, lastQuery);
|
|
26
26
|
setStopping(true);
|
|
27
|
-
} :
|
|
27
|
+
} : void 0;
|
|
28
28
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
29
29
|
Button,
|
|
30
30
|
{
|
|
31
31
|
variant: props.enableRun ? "primary" : "secondary",
|
|
32
32
|
size: "sm",
|
|
33
33
|
onClick: onRunQuery,
|
|
34
|
-
icon: running && !stopping ? "fa fa-spinner" :
|
|
34
|
+
icon: running && !stopping ? "fa fa-spinner" : void 0,
|
|
35
35
|
disabled: state === LoadingState.Loading || !props.enableRun
|
|
36
36
|
},
|
|
37
37
|
"Run query"
|
|
@@ -41,7 +41,7 @@ const RunQueryButtons = (props) => {
|
|
|
41
41
|
variant: running && !stopping ? "primary" : "secondary",
|
|
42
42
|
size: "sm",
|
|
43
43
|
disabled: !running || stopping,
|
|
44
|
-
icon: stopping ? "fa fa-spinner" :
|
|
44
|
+
icon: stopping ? "fa fa-spinner" : void 0,
|
|
45
45
|
onClick: onCancelQuery
|
|
46
46
|
},
|
|
47
47
|
"Stop query"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunQueryButtons.js","sources":["../../../src/async-query-data/RunQueryButtons.tsx"],"sourcesContent":["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":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"RunQueryButtons.js","sources":["../../../src/async-query-data/RunQueryButtons.tsx"],"sourcesContent":["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":[],"mappings":";;;;AAYO,MAAM,eAAA,GAAkB,CAA2B,KAAA,KAAwC;AAChG,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAClB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA,CAAS,MAAM,KAAK,CAAA;AAEtD,EAAA,IAAI,UAAU,SAAA,EAAW;AACvB,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,IAAI,KAAA,IAAS,KAAA,KAAU,YAAA,CAAa,OAAA,EAAS;AAC3C,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,YAAA,CAAa,MAAM,KAAK,CAAA;AACxB,IAAA,KAAA,CAAM,UAAA,EAAW;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,aAAA,GACxB,MAAM;AAlCZ,IAAA,IAAA,EAAA;AAmCQ,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,kBAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAsB,SAAA,CAAA;AACtB,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,GACA,MAAA;AAEJ,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,KAAA,CAAM,SAAA,GAAY,SAAA,GAAY,WAAA;AAAA,MACvC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAM,OAAA,IAAW,CAAC,QAAA,GAAW,eAAA,GAAkB,MAAA;AAAA,MAC/C,QAAA,EAAU,KAAA,KAAU,YAAA,CAAa,OAAA,IAAW,CAAC,KAAA,CAAM;AAAA,KAAA;AAAA,IACpD;AAAA,GAED,kBACA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,OAAA,IAAW,CAAC,QAAA,GAAW,SAAA,GAAY,WAAA;AAAA,MAC5C,IAAA,EAAK,IAAA;AAAA,MACL,QAAA,EAAU,CAAC,OAAA,IAAW,QAAA;AAAA,MACtB,IAAA,EAAM,WAAW,eAAA,GAAkB,MAAA;AAAA,MACnC,OAAA,EAAS;AAAA,KAAA;AAAA,IACV;AAAA,GAGH,CAAA;AAEJ;;;;"}
|
|
@@ -5,8 +5,8 @@ const DELAY_INTERVAL_MS = 10;
|
|
|
5
5
|
const MAX_NEXT_REQUEST_DELAY = 1e4 / DELAY_INTERVAL_MS;
|
|
6
6
|
function getRequestLooper(req, options) {
|
|
7
7
|
return new Observable((subscriber) => {
|
|
8
|
-
let nextQuery =
|
|
9
|
-
let subscription =
|
|
8
|
+
let nextQuery = void 0;
|
|
9
|
+
let subscription = void 0;
|
|
10
10
|
let loadingState = LoadingState.Loading;
|
|
11
11
|
let nextRequestDelay = 1;
|
|
12
12
|
let count = 1;
|
|
@@ -20,7 +20,7 @@ function getRequestLooper(req, options) {
|
|
|
20
20
|
const _shouldCancel = options.shouldCancel();
|
|
21
21
|
if (nextQuery && _shouldCancel) {
|
|
22
22
|
shouldCancel = _shouldCancel;
|
|
23
|
-
nextQuery =
|
|
23
|
+
nextQuery = void 0;
|
|
24
24
|
}
|
|
25
25
|
checkstate = true;
|
|
26
26
|
}
|
|
@@ -46,13 +46,13 @@ function getRequestLooper(req, options) {
|
|
|
46
46
|
complete: () => {
|
|
47
47
|
if (subscription) {
|
|
48
48
|
subscription.unsubscribe();
|
|
49
|
-
subscription =
|
|
49
|
+
subscription = void 0;
|
|
50
50
|
}
|
|
51
51
|
if (nextQuery) {
|
|
52
52
|
const next = nextQuery;
|
|
53
53
|
setTimeout(() => {
|
|
54
54
|
subscription = options.query({ ...req, requestId: `${req.requestId}.${++count}`, targets: [next] }).subscribe(observer);
|
|
55
|
-
nextQuery =
|
|
55
|
+
nextQuery = void 0;
|
|
56
56
|
}, nextRequestDelay * DELAY_INTERVAL_MS);
|
|
57
57
|
} else {
|
|
58
58
|
subscriber.complete();
|
|
@@ -65,7 +65,7 @@ function getRequestLooper(req, options) {
|
|
|
65
65
|
if (nextQuery || shouldCancel) {
|
|
66
66
|
options.onCancel();
|
|
67
67
|
}
|
|
68
|
-
nextQuery =
|
|
68
|
+
nextQuery = void 0;
|
|
69
69
|
};
|
|
70
70
|
});
|
|
71
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestLooper.js","sources":["../../../src/async-query-data/requestLooper.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAoCA,MAAM,
|
|
1
|
+
{"version":3,"file":"requestLooper.js","sources":["../../../src/async-query-data/requestLooper.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedHttpSettings.js","sources":["../../../../../src/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;AAYO,MAAM,uBAAoF,CAAC;AAAA,EAChG,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,
|
|
1
|
+
{"version":3,"file":"AdvancedHttpSettings.js","sources":["../../../../../src/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;AAYO,MAAM,uBAAoF,CAAC;AAAA,EAChG,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,eAAA,GAAkB,CAAC,OAAA,KAAsB;AAC7C,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,MAAA;AAAA,MACH,QAAA,EAAU;AAAA,QACR,GAAG,MAAA,CAAO,QAAA;AAAA,QACV,WAAA,EAAa;AAAA;AACf,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA6C;AACpE,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,MAAA;AAAA,MACH,QAAA,EAAU;AAAA,QACR,GAAG,MAAA,CAAO,QAAA;AAAA,QACV,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,aAAA,CAAc,OAAO,EAAE;AAAA;AACjD,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,MACb,QAAA,EAAU;AAAA,KACX;AAAA,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,wBAAA,EAAyB,WAAW,EAAA,CAAG,MAAA,CAAO,SAAA,EAAW,SAAS,CAAA,EAAA,kBACxF,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,uBAAA;AAAA,MACR,KAAA,EAAM,iBAAA;AAAA,MACN,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAQ,0HAAA;AAAA,MACR,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,IAAA,EAAI;AAAA,KAAA;AAAA,oBAEJ,KAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,uBAAA;AAAA,QACH,WAAA,EAAY,+BAAA;AAAA,QACZ,IAAA,EAAM,OAAO,QAAA,CAAS,WAAA;AAAA,QACtB,QAAA,EAAU;AAAA;AAAA;AACZ,GACF,kBAEA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,uBAAA;AAAA,MACR,KAAA,EAAM,SAAA;AAAA,MACN,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAQ,iCAAA;AAAA,MACR,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,IAAA,EAAI;AAAA,KAAA;AAAA,oBAEJ,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,uBAAA;AAAA,QACH,IAAA,EAAK,QAAA;AAAA,QACL,GAAA,EAAK,CAAA;AAAA,QACL,WAAA,EAAY,oBAAA;AAAA,QACZ,YAAA,EAAW,oBAAA;AAAA,QACX,KAAA,EAAO,OAAO,QAAA,CAAS,OAAA;AAAA,QACvB,QAAA,EAAU;AAAA;AAAA;AACZ,GAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","sources":["../../../../../src/components/ConfigEditor/Auth/Auth.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;;;;AAsBO,MAAM,OAAO,CAAC;AAAA,EACnB,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EACA,
|
|
1
|
+
{"version":3,"file":"Auth.js","sources":["../../../../../src/components/ConfigEditor/Auth/Auth.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;;;;AAsBO,MAAM,OAAO,CAAC;AAAA,EACnB,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAa;AACX,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,MACb,QAAA,EAAU;AAAA,KACX;AAAA,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,6BACrB,KAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,OAAM,gBAAA,EAAA,kBACnB,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA,kBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GACF,EACC,GAAA,oBAAO,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAa,GAAG,GAAA,EAAK,QAAA,EAAoB,CAAA,EACjD,aAAA,wCAAkB,aAAA,EAAA,EAAe,GAAG,aAAA,EAAe,QAAA,EAAoB,CAC1E,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -48,7 +48,7 @@ const AuthMethodSettings = ({
|
|
|
48
48
|
AuthMethod.BasicAuth,
|
|
49
49
|
AuthMethod.OAuthForward,
|
|
50
50
|
AuthMethod.NoAuth,
|
|
51
|
-
...(_a2 = customMethods == null ?
|
|
51
|
+
...(_a2 = customMethods == null ? void 0 : customMethods.map((m) => m.id)) != null ? _a2 : []
|
|
52
52
|
];
|
|
53
53
|
},
|
|
54
54
|
[customMethods, visibleMethodsFromProps]
|
|
@@ -56,7 +56,7 @@ const AuthMethodSettings = ({
|
|
|
56
56
|
const hasSelect = visibleMethods.length > 1;
|
|
57
57
|
const preparedOptions = useMemo(() => {
|
|
58
58
|
var _a2;
|
|
59
|
-
const customOptions = (_a2 = customMethods == null ?
|
|
59
|
+
const customOptions = (_a2 = customMethods == null ? void 0 : customMethods.reduce((acc, method) => {
|
|
60
60
|
acc[method.id] = {
|
|
61
61
|
label: method.label,
|
|
62
62
|
value: method.id,
|
|
@@ -69,7 +69,7 @@ const AuthMethodSettings = ({
|
|
|
69
69
|
for (k in defaultOptions) {
|
|
70
70
|
preparedDefaultOptions[k] = {
|
|
71
71
|
...defaultOptions[k],
|
|
72
|
-
...defaultOptionsOverrides == null ?
|
|
72
|
+
...defaultOptionsOverrides == null ? void 0 : defaultOptionsOverrides[k]
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
const allOptions = {
|
|
@@ -97,7 +97,7 @@ const AuthMethodSettings = ({
|
|
|
97
97
|
if (selected === AuthMethod.BasicAuth && basicAuth) {
|
|
98
98
|
AuthFieldsComponent = /* @__PURE__ */ React.createElement(BasicAuth, { ...basicAuth, readOnly });
|
|
99
99
|
} else if (selected.startsWith("custom-")) {
|
|
100
|
-
AuthFieldsComponent = (_b = (_a = customMethods == null ?
|
|
100
|
+
AuthFieldsComponent = (_b = (_a = customMethods == null ? void 0 : customMethods.find((m) => m.id === selected)) == null ? void 0 : _a.component) != null ? _b : null;
|
|
101
101
|
}
|
|
102
102
|
const title = hasSelect ? "Authentication methods" : (_c = preparedOptions[0].label) != null ? _c : "";
|
|
103
103
|
const description = hasSelect ? "Choose an authentication method to access the data source" : (_d = preparedOptions[0].description) != null ? _d : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthMethodSettings.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.tsx"],"sourcesContent":["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"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthMethodSettings.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.tsx"],"sourcesContent":["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"],"names":["_a"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasicAuth.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/BasicAuth.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;AAoBO,MAAM,YAAY,CAAC;AAAA,EACxB,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,
|
|
1
|
+
{"version":3,"file":"BasicAuth.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/BasicAuth.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;AAoBO,MAAM,YAAY,CAAC;AAAA,EACxB,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA,GAAY,MAAA;AAAA,EACZ,WAAA,GAAc,yCAAA;AAAA,EACd,eAAA,GAAkB,MAAA;AAAA,EAClB,aAAA,GAAgB,UAAA;AAAA,EAChB,eAAA,GAAkB,yCAAA;AAAA,EAClB,mBAAA,GAAsB,UAAA;AAAA,EACtB,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAa;AACX,EAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,iBAAiB,GAAA,CAAI;AAAA,MACnB,YAAA,EAAc;AAAA,KACf;AAAA,GACH;AACA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,WAAW,YAAA,CAAa,wBAAA;AAAA,MACxB,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAS,WAAA;AAAA,MACT,QAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,uBAAA;AAAA,MACR,WAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAI,IAAA;AAAA,MACJ,QAAA,EAAU;AAAA,KAAA;AAAA,oBAEV,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,uBAAA;AAAA,QACH,WAAA,EAAa,eAAA;AAAA,QACb,KAAA,EAAO,IAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,QACnD,QAAA,EAAQ;AAAA;AAAA;AACV,GACF,kBACA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,YAAA,CAAa,wBAAA;AAAA,QACb,YAAA,CAAa,qBAAA;AAAA,QACb,MAAA,CAAO;AAAA,OACT;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACP,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAS,eAAA;AAAA,MACT,QAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,2BAAA;AAAA,MACR,WAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAI,IAAA;AAAA,MACJ,QAAA,EAAU;AAAA,KAAA;AAAA,oBAEV,KAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,2BAAA;AAAA,QACH,YAAA,EAAc,kBAAA;AAAA,QACd,OAAA,EAAS,WAAW,MAAM;AAAA,QAAC,CAAA,GAAI,eAAA;AAAA,QAC/B,WAAA,EAAa,mBAAA;AAAA,QACb,UAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,QACvD,QAAA,EAAQ;AAAA;AAAA;AACV,GAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomHeader.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeader.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"CustomHeader.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeader.tsx"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ const CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }) => {
|
|
|
19
19
|
let changed = false;
|
|
20
20
|
const newHeaders = headers2.map((header) => {
|
|
21
21
|
var _a;
|
|
22
|
-
const configured = (_a = headersFromProps.find((h) => h.name === header.name)) == null ?
|
|
22
|
+
const configured = (_a = headersFromProps.find((h) => h.name === header.name)) == null ? void 0 : _a.configured;
|
|
23
23
|
if (typeof configured !== "undefined" && header.configured !== configured) {
|
|
24
24
|
changed = true;
|
|
25
25
|
return { ...header, configured };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomHeaders.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeaders.tsx"],"sourcesContent":["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"],"names":["headers","header"],"mappings":";;;;;;;AAaO,MAAM,gBAAgB,CAAC,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"CustomHeaders.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeaders.tsx"],"sourcesContent":["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"],"names":["headers","header"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../../../../src/components/ConfigEditor/Auth/styles.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEO,MAAM,kBAAkB,MAAM;AACnC,
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../../../../../src/components/ConfigEditor/Auth/styles.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEO,MAAM,kBAAkB,MAAM;AACnC,EAAA,OAAO;AAAA,IACL,0BAA0B,GAAA,CAAI;AAAA,MAC5B,WAAA,EAAa;AAAA,KACd,CAAA;AAAA;AAAA,IAED,uBAAuB,GAAA,CAAI;AAAA,MACzB,8CAAA,EAAgD;AAAA,QAC9C,QAAA,EAAU;AAAA;AACZ,KACD;AAAA,GACH;AACF;;;;"}
|
|
@@ -29,7 +29,7 @@ const SelfSignedCertificate = ({
|
|
|
29
29
|
{
|
|
30
30
|
label: "CA Certificate",
|
|
31
31
|
labelWidth: 24,
|
|
32
|
-
tooltip: (_a = tooltips == null ?
|
|
32
|
+
tooltip: (_a = tooltips == null ? void 0 : tooltips.certificateLabel) != null ? _a : "Your self-signed certificate",
|
|
33
33
|
required: true,
|
|
34
34
|
htmlFor: "self-signed-certificate-input",
|
|
35
35
|
interactive: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelfSignedCertificate.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SelfSignedCertificate.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;AAkBO,MAAM,wBAAwB,CAAC;AAAA,EACpC,OAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,
|
|
1
|
+
{"version":3,"file":"SelfSignedCertificate.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SelfSignedCertificate.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;AAkBO,MAAM,wBAAwB,CAAC;AAAA,EACpC,OAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAa;AA1Bb,EAAA,IAAA,EAAA;AA2BE,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,KAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAY,6IAAA;AAAA,MACZ,QAAA,EAAU,CAAC,UAAA,KAAe,QAAA,CAAS,UAAU,CAAA;AAAA,MAC7C;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,gBAAA;AAAA,QACN,UAAA,EAAY,EAAA;AAAA,QACZ,OAAA,EAAA,CAAS,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,gBAAA,KAAV,IAAA,GAAA,EAAA,GAA8B,8BAAA;AAAA,QACvC,QAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAQ,+BAAA;AAAA,QACR,WAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAI,IAAA;AAAA,QACJ,SAAA,EAAW,EAAA,CAAG,YAAA,CAAa,wBAAA,EAA0B,aAAa,qBAAqB,CAAA;AAAA,QACvF,QAAA,EAAU;AAAA,OAAA;AAAA,sBAEV,KAAA,CAAA,aAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,+BAAA;AAAA,UACH,YAAA,EAAc,qBAAA;AAAA,UACd,UAAU,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,UAC1D,OAAA,EAAS,WAAW,MAAM;AAAA,UAAC,CAAA,GAAI,kBAAA;AAAA,UAC/B,WAAA,EAAY,uCAAA;AAAA,UACZ,IAAA,EAAM,CAAA;AAAA,UACN,QAAA,EAAQ;AAAA;AAAA;AACV;AACF,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkipTLSVerification.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SkipTLSVerification.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;AASO,MAAM,sBAAsB,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"SkipTLSVerification.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SkipTLSVerification.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;AASO,MAAM,sBAAsB,CAAC,EAAE,OAAA,EAAS,QAAA,EAAU,UAAS,KAAa;AAC7E,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,KAAA,EAAM,iCAAA;AAAA,MACN,WAAA,EAAY,mGAAA;AAAA,MACZ,QAAA,EAAU,CAAC,UAAA,KAAe,QAAA,CAAS,UAAU,CAAA;AAAA,MAC7C;AAAA;AAAA,GACF;AAEJ;;;;"}
|