@grafana/plugin-ui 0.14.1-dsconfig.f952c80 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -3
- package/dist/cjs/index.cjs +5618 -4022
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +61 -653
- package/dist/cjs/test-utils.cjs +7881 -62
- package/dist/cjs/test-utils.cjs.map +1 -1
- package/dist/cjs/test-utils.d.cts +1 -1
- package/dist/esm/_virtual/chance.js +6 -0
- package/dist/esm/_virtual/chance.js.map +1 -0
- package/dist/esm/_virtual/chance2.js +4 -0
- package/dist/esm/_virtual/chance2.js.map +1 -0
- package/dist/esm/_virtual/index.js +6 -0
- package/dist/esm/_virtual/index.js.map +1 -0
- package/dist/esm/_virtual/re.js +4 -0
- package/dist/esm/_virtual/re.js.map +1 -0
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js +157 -0
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js.map +1 -0
- package/dist/esm/async-query-data/RunQueryButtons.js +52 -0
- package/dist/esm/async-query-data/RunQueryButtons.js.map +1 -0
- package/dist/esm/async-query-data/requestLooper.js +74 -0
- package/dist/esm/async-query-data/requestLooper.js.map +1 -0
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLink.js +4 -4
- package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLinks.js +3 -3
- package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/styles.js +2 -2
- package/dist/esm/components/DatePicker/styles.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
- package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
- package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
- package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
- package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorField.js +5 -5
- package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
- package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
- package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
- package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
- package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js.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 -9
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- 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 +2 -2
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +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 +27 -26
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +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/QueryEditorRow/QueryEditorRow.js.map +1 -1
- package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
- package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/definition.js.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 +7 -7
- 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 +2 -2
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +2 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -5
- 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 +5 -7
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -4
- 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 -4
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +0 -2
- 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 +18 -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 +61 -653
- package/dist/esm/index.js +3 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/chance/chance.js +7820 -0
- package/dist/esm/node_modules/chance/chance.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js +104 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js +154 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js +145 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js +10 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js +26 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/empty.js +6 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/from.js +9 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/from.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js +146 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js +26 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/of.js +14 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/of.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js +63 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/catchError.js +30 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/catchError.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js +14 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js +10 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js +56 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js +19 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js +13 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js +11 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js +21 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js +26 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js +35 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js +10 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js +10 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js +9 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js +40 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +18 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js +10 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +4 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js +10 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +15 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/args.js +14 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/args.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +9 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +13 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +8 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js +20 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/identity.js +6 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js +4 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js +8 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +6 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js +9 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js +9 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js +8 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js +41 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js +8 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js +23 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/noop.js +4 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/pipe.js +16 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +12 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js +6 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js.map +1 -0
- package/dist/esm/node_modules/semver/classes/comparator.js +160 -0
- package/dist/esm/node_modules/semver/classes/comparator.js.map +1 -0
- package/dist/esm/node_modules/semver/classes/range.js +575 -0
- package/dist/esm/node_modules/semver/classes/range.js.map +1 -0
- package/dist/esm/node_modules/semver/classes/semver.js +349 -0
- package/dist/esm/node_modules/semver/classes/semver.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/clean.js +20 -0
- package/dist/esm/node_modules/semver/functions/clean.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/cmp.js +71 -0
- package/dist/esm/node_modules/semver/functions/cmp.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/coerce.js +76 -0
- package/dist/esm/node_modules/semver/functions/coerce.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/compare-build.js +21 -0
- package/dist/esm/node_modules/semver/functions/compare-build.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/compare-loose.js +17 -0
- package/dist/esm/node_modules/semver/functions/compare-loose.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/compare.js +19 -0
- package/dist/esm/node_modules/semver/functions/compare.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/diff.js +72 -0
- package/dist/esm/node_modules/semver/functions/diff.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/eq.js +17 -0
- package/dist/esm/node_modules/semver/functions/eq.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/gt.js +17 -0
- package/dist/esm/node_modules/semver/functions/gt.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/gte.js +17 -0
- package/dist/esm/node_modules/semver/functions/gte.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/inc.js +33 -0
- package/dist/esm/node_modules/semver/functions/inc.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/lt.js +17 -0
- package/dist/esm/node_modules/semver/functions/lt.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/lte.js +17 -0
- package/dist/esm/node_modules/semver/functions/lte.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/major.js +17 -0
- package/dist/esm/node_modules/semver/functions/major.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/minor.js +17 -0
- package/dist/esm/node_modules/semver/functions/minor.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/neq.js +17 -0
- package/dist/esm/node_modules/semver/functions/neq.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/parse.js +30 -0
- package/dist/esm/node_modules/semver/functions/parse.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/patch.js +17 -0
- package/dist/esm/node_modules/semver/functions/patch.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/prerelease.js +20 -0
- package/dist/esm/node_modules/semver/functions/prerelease.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/rcompare.js +17 -0
- package/dist/esm/node_modules/semver/functions/rcompare.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/rsort.js +17 -0
- package/dist/esm/node_modules/semver/functions/rsort.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/satisfies.js +24 -0
- package/dist/esm/node_modules/semver/functions/satisfies.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/sort.js +17 -0
- package/dist/esm/node_modules/semver/functions/sort.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/valid.js +20 -0
- package/dist/esm/node_modules/semver/functions/valid.js.map +1 -0
- package/dist/esm/node_modules/semver/index.js +143 -0
- package/dist/esm/node_modules/semver/index.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/constants.js +47 -0
- package/dist/esm/node_modules/semver/internal/constants.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/debug.js +21 -0
- package/dist/esm/node_modules/semver/internal/debug.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/identifiers.js +39 -0
- package/dist/esm/node_modules/semver/internal/identifiers.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/lrucache.js +52 -0
- package/dist/esm/node_modules/semver/internal/lrucache.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/parse-options.js +27 -0
- package/dist/esm/node_modules/semver/internal/parse-options.js.map +1 -0
- package/dist/esm/node_modules/semver/internal/re.js +238 -0
- package/dist/esm/node_modules/semver/internal/re.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/gtr.js +18 -0
- package/dist/esm/node_modules/semver/ranges/gtr.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/intersects.js +21 -0
- package/dist/esm/node_modules/semver/ranges/intersects.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/ltr.js +18 -0
- package/dist/esm/node_modules/semver/ranges/ltr.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/max-satisfying.js +40 -0
- package/dist/esm/node_modules/semver/ranges/max-satisfying.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/min-satisfying.js +39 -0
- package/dist/esm/node_modules/semver/ranges/min-satisfying.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/min-version.js +77 -0
- package/dist/esm/node_modules/semver/ranges/min-version.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/outside.js +101 -0
- package/dist/esm/node_modules/semver/ranges/outside.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/simplify.js +62 -0
- package/dist/esm/node_modules/semver/ranges/simplify.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/subset.js +264 -0
- package/dist/esm/node_modules/semver/ranges/subset.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/to-comparators.js +22 -0
- package/dist/esm/node_modules/semver/ranges/to-comparators.js.map +1 -0
- package/dist/esm/node_modules/semver/ranges/valid.js +25 -0
- package/dist/esm/node_modules/semver/ranges/valid.js.map +1 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js +140 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/test/mocks/DataQuery.js +5 -5
- package/dist/esm/test/mocks/DataQuery.js.map +1 -1
- package/dist/esm/test/mocks/Datasource.js +22 -22
- package/dist/esm/test/mocks/Datasource.js.map +1 -1
- package/dist/esm/test/mocks/Plugin.js +30 -30
- package/dist/esm/test/mocks/Plugin.js.map +1 -1
- package/dist/esm/test/mocks/QueryEditorProps.js +6 -6
- package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
- package/dist/esm/test/mocks/utils.js +5 -5
- package/dist/esm/test/mocks/utils.js.map +1 -1
- package/dist/esm/test-utils.d.ts +1 -1
- package/package.json +74 -102
- package/dist/cjs/schemas.cjs +0 -25
- package/dist/cjs/schemas.cjs.map +0 -1
- package/dist/cjs/schemas.d.cts +0 -448
- package/dist/cjs/useDatasourceSchema-BWcU0Gkw.js +0 -16623
- package/dist/cjs/useDatasourceSchema-BWcU0Gkw.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js +0 -234
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js +0 -27
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js +0 -71
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js +0 -54
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SidebarNav.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js +0 -181
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/TabLayout.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js +0 -75
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js +0 -258
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js +0 -354
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js +0 -138
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js +0 -326
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js +0 -106
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js +0 -51
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js +0 -26
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js +0 -106
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js +0 -124
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js +0 -190
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js +0 -31
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PdcFieldNote.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js +0 -59
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js +0 -80
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js +0 -141
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/renderFieldInput.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js +0 -30
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js.map +0 -1
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js +0 -360
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.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 -597
- package/dist/esm/schema/registry/elasticsearch.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.schema.json.js +0 -95
- package/dist/esm/schema/registry/grafana-adobeanalytics-datasource.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 -300
- 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 -248
- 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 -690
- 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 -139
- 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/tempo.schema.json.js +0 -664
- package/dist/esm/schema/registry/tempo.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.schema.json.js +0 -1073
- package/dist/esm/schema/registry/yesoreyeram-infinity-datasource.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/schema/utils/dsconfig.js +0 -97
- package/dist/esm/schema/utils/dsconfig.js.map +0 -1
- package/dist/esm/schema/utils/llm.js +0 -54
- package/dist/esm/schema/utils/llm.js.map +0 -1
- package/dist/esm/schema/utils/provisioning.js +0 -434
- package/dist/esm/schema/utils/provisioning.js.map +0 -1
- package/dist/esm/schema/utils/useDatasourceSchema.js +0 -16
- package/dist/esm/schema/utils/useDatasourceSchema.js.map +0 -1
- package/dist/esm/schemas.d.ts +0 -448
- package/dist/esm/schemas.js +0 -6
- package/dist/esm/schemas.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/datasource.ts"],"sourcesContent":["import { getBackendSrv } from '@grafana/runtime';\nimport { formKey } from './config';\nimport type { ConfigField, FieldOverride } from '../../../schema/schema';\n\nexport type DatasourceResponse = Record<string, unknown> & {\n name: string;\n id: number;\n uid: string;\n access?: 'proxy' | 'direct';\n type?: string;\n typeLogoUrl?: string;\n url?: string;\n withCredentials?: boolean;\n basicAuth?: boolean;\n basicAuthUser?: string;\n user?: string;\n database?: string;\n jsonData?: Record<string, unknown>;\n secureJsonFields?: Record<string, boolean>;\n readOnly?: boolean;\n};\n\nexport type DatasourceConfigPayload = {\n rootFields: Record<string, unknown>;\n jsonData: Record<string, unknown>;\n secureJsonData: Record<string, string>;\n secureJsonFields: Record<string, boolean>;\n};\n\nexport type FormValues = Record<string, unknown>;\n\nexport const SECURE_FIELD_CONFIGURED = '__CONFIGURED__';\n\n// ============================================================\n// secureKey helpers for per-item secure routing\n// ============================================================\n\n/**\n * Resolve a secureKey template string by replacing placeholders.\n *\n * Supported placeholders:\n * - `{index}` — 0-based array position\n * - `{index1}` — 1-based array position\n * - `{item.KEY}` — value of sibling field `KEY` in the same item object\n */\nexport function resolveSecureKeyTemplate(template: string, item: Record<string, unknown>, index: number): string {\n return template\n .replace(/\\{index1\\}/g, String(index + 1))\n .replace(/\\{index\\}/g, String(index))\n .replace(/\\{item\\.(\\w+)\\}/g, (_, key) => String(item[key] ?? ''));\n}\n\n/**\n * Evaluate a simple item-scoped condition like `item.secure == true`.\n * Only supports `item.KEY == VALUE` and the literal `true`.\n * Returns false for expressions it cannot evaluate.\n */\nfunction evaluateItemCondition(condition: string, item: Record<string, unknown>): boolean {\n const trimmed = condition.trim();\n if (trimmed === 'true') {\n return true;\n }\n // Match: item.KEY == VALUE (with optional quotes)\n const match = trimmed.match(/^item\\.(\\w+)\\s*==\\s*(.+)$/);\n if (!match) {\n return false;\n }\n const [, key, rawValue] = match;\n const actualValue = item[key];\n // Parse the expected value\n const expected = rawValue.trim();\n if (expected === 'true') {\n return actualValue === true;\n }\n if (expected === 'false') {\n return actualValue === false;\n }\n // String comparison (strip quotes)\n const unquoted = expected.replace(/^['\"]|['\"]$/g, '');\n return String(actualValue) === unquoted;\n}\n\n/**\n * For a given item object at a given index, find the first active secureKey\n * override across all item fields. Returns the resolved secureJsonData key\n * and the item field key whose value should be routed, or null if none active.\n */\nexport function findActiveSecureOverride(\n itemFields: ConfigField[],\n item: Record<string, unknown>,\n index: number\n): { fieldKey: string; resolvedKey: string } | null {\n for (const field of itemFields) {\n if (!field.overrides) {\n continue;\n }\n for (const override of field.overrides) {\n if (!override.secureKey) {\n continue;\n }\n if (evaluateItemCondition(override.when, item)) {\n return {\n fieldKey: field.key,\n resolvedKey: resolveSecureKeyTemplate(override.secureKey, item, index),\n };\n }\n }\n }\n return null;\n}\n\nexport type FetchExistingResult = {\n values: FormValues;\n readOnly: boolean;\n error?: string;\n};\n\n/** Indexed pair item as stored in form values. Each item tracks its original storage index. */\nexport type IndexedPairItem = {\n /** Original storage index (e.g. 1 for httpHeaderName1). 0 = new item, not yet persisted. */\n index: number;\n name: string;\n value: string;\n};\n\n/**\n * Build a RegExp that matches keys produced by a pattern like \"httpHeaderName{index}\"\n * and captures the numeric index.\n */\nfunction patternToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp('^' + escaped.replace('\\\\{index\\\\}', '(\\\\d+)') + '$');\n}\n\n/**\n * Find all numeric indices present in a record for a given pattern.\n * E.g. for pattern \"httpHeaderName{index}\" and keys {httpHeaderName1, httpHeaderName3}\n * returns a sorted array [1, 3].\n */\nfunction findIndicesForPattern(record: Record<string, unknown>, pattern: string): number[] {\n const re = patternToRegex(pattern);\n const indices: number[] = [];\n for (const key of Object.keys(record)) {\n const m = key.match(re);\n if (m) {\n const n = Number(m[1]);\n if (!Number.isNaN(n)) {\n indices.push(n);\n }\n }\n }\n return indices.sort((a, b) => a - b);\n}\n\n/**\n * Expand indexed pair storage (e.g. httpHeaderName1..N / httpHeaderValue1..N)\n * into an array of {index, name, value} items for the form.\n * Each item's `index` tracks its storage position so deletes don't shift others.\n * Scans all keys in the source record to find matching indices — no gap heuristics.\n */\nexport function expandIndexedPair(field: ConfigField, ds: DatasourceResponse): IndexedPairItem[] {\n const storage = field.storage;\n if (storage?.type !== 'indexedPair' || !storage.key || !storage.value) {\n return [];\n }\n const source = storage.key.target === 'jsonData' ? (ds.jsonData ?? {}) : (ds as Record<string, unknown>);\n const indices = findIndicesForPattern(source as Record<string, unknown>, storage.key.pattern);\n const items: IndexedPairItem[] = [];\n for (const i of indices) {\n const nameKey = storage.key.pattern.replace('{index}', String(i));\n const valueKey = storage.value.pattern.replace('{index}', String(i));\n const nameVal = (source as Record<string, unknown>)[nameKey];\n if (nameVal === undefined || nameVal === null) {\n continue;\n }\n const hasValue =\n storage.value.target === 'secureJsonData' ? !!ds.secureJsonFields?.[valueKey] : !!ds.jsonData?.[valueKey];\n items.push({\n index: i,\n name: String(nameVal),\n value: hasValue ? SECURE_FIELD_CONFIGURED : '',\n });\n }\n return items;\n}\n\n/**\n * Flatten an array of indexed pair items back into individual indexed keys\n * for jsonData and secureJsonData.\n */\nexport function flattenIndexedPair(\n field: ConfigField,\n items: IndexedPairItem[],\n jsonData: Record<string, unknown>,\n secureJsonData: Record<string, string>,\n secureJsonFields: Record<string, boolean>\n) {\n const storage = field.storage;\n if (storage?.type !== 'indexedPair' || !storage.key || !storage.value) {\n return;\n }\n // Find all existing storage indices by scanning keys in jsonData.\n const existingIndices = new Set(\n storage.key.target === 'jsonData'\n ? findIndicesForPattern(jsonData as Record<string, unknown>, storage.key.pattern)\n : []\n );\n\n // Track which indices are still in use by the surviving items.\n const usedIndices = new Set<number>();\n const startIdx = storage.startIndex ?? 1;\n let nextIndex = existingIndices.size > 0 ? Math.max(...existingIndices) + 1 : startIdx;\n\n // Write each item at its original index. New items (index === 0) get the next available.\n for (const item of items) {\n let idx = item.index;\n if (idx === 0) {\n idx = nextIndex++;\n }\n usedIndices.add(idx);\n const nameKey = storage.key.pattern.replace('{index}', String(idx));\n const valueKey = storage.value.pattern.replace('{index}', String(idx));\n if (storage.key.target === 'jsonData') {\n jsonData[nameKey] = item.name;\n }\n if (storage.value.target === 'secureJsonData') {\n if (item.value === SECURE_FIELD_CONFIGURED) {\n secureJsonFields[valueKey] = true;\n } else if (item.value) {\n secureJsonData[valueKey] = item.value;\n secureJsonFields[valueKey] = false;\n }\n } else if (storage.value.target === 'jsonData') {\n jsonData[valueKey] = item.value;\n }\n }\n\n // Clear deleted indices: indices that existed before but are no longer in use.\n for (const idx of existingIndices) {\n if (usedIndices.has(idx)) {\n continue;\n }\n const nameKey = storage.key.pattern.replace('{index}', String(idx));\n const valueKey = storage.value.pattern.replace('{index}', String(idx));\n if (storage.key.target === 'jsonData') {\n delete jsonData[nameKey];\n }\n if (storage.value.target === 'secureJsonData') {\n delete secureJsonFields[valueKey];\n delete secureJsonData[valueKey];\n } else if (storage.value.target === 'jsonData') {\n delete jsonData[valueKey];\n }\n }\n}\n\n/**\n * Resolve a dotted storage path against the raw API response.\n * Handles: \"jsonData.server\", \"root.database\", \"secureJsonData.password\"\n */\nfunction resolveRawPath(ref: string, ds: DatasourceResponse): unknown {\n const trimmed = ref.trim();\n if (trimmed.startsWith('jsonData.')) {\n return ds.jsonData?.[trimmed.slice(9)];\n }\n if (trimmed.startsWith('root.')) {\n return (ds as Record<string, unknown>)[trimmed.slice(5)];\n }\n return undefined;\n}\n\nexport async function fetchExistingValues(dsUid: string, fields: ConfigField[]): Promise<FetchExistingResult> {\n try {\n const ds: DatasourceResponse = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`, undefined, undefined, {\n showErrorAlert: false,\n });\n\n const values: FormValues = {};\n for (const field of fields) {\n // Expand indexedPair storage: read httpHeaderName1..N + secureJsonFields httpHeaderValue1..N\n if (field.storage?.type === 'indexedPair') {\n values[field.key] = expandIndexedPair(field, ds);\n continue;\n }\n const fk = formKey(field);\n switch (field.target) {\n case 'root':\n if (ds[field.key] !== undefined) {\n values[fk] = ds[field.key];\n }\n break;\n case 'jsonData':\n // Section-scoped fields are stored nested: jsonData.{section}.{key}\n if (field.section) {\n const sectionObj = ds.jsonData?.[field.section] as Record<string, unknown> | undefined;\n if (sectionObj?.[field.key] !== undefined) {\n values[fk] = sectionObj[field.key];\n }\n } else if (ds.jsonData?.[field.key] !== undefined) {\n values[fk] = ds.jsonData[field.key];\n }\n break;\n case 'secureJsonData':\n if (ds.secureJsonFields?.[field.key]) {\n values[fk] = SECURE_FIELD_CONFIGURED;\n }\n break;\n }\n\n // Fallback: if value is still missing and field has storage.read,\n // resolve the expression against the raw API response.\n if (values[fk] === undefined && field.storage?.type === 'computed' && field.storage.read) {\n const fallback = resolveRawPath(field.storage.read, ds);\n if (fallback !== undefined) {\n values[fk] = fallback;\n }\n }\n }\n\n // Post-process arrays with secureKey overrides: for each item, check\n // whether the item's value is stored in secureJsonFields and mark it.\n for (const field of fields) {\n if (field.valueType !== 'array' || !field.item?.fields) {\n continue;\n }\n const itemFields = field.item.fields;\n const hasSecureOverride = itemFields.some((f) => f.overrides?.some((o) => o.secureKey));\n if (!hasSecureOverride) {\n continue;\n }\n const fk = formKey(field);\n const arr = values[fk];\n if (!Array.isArray(arr)) {\n continue;\n }\n values[fk] = arr.map((item: Record<string, unknown>, idx: number) => {\n const match = findActiveSecureOverride(itemFields, item, idx);\n if (match && ds.secureJsonFields?.[match.resolvedKey]) {\n return { ...item, [match.fieldKey]: SECURE_FIELD_CONFIGURED };\n }\n return item;\n });\n }\n\n return { values, readOnly: !!ds.readOnly };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'Failed to load datasource configuration';\n return { values: {}, readOnly: false, error: message };\n }\n}\n\nexport function buildDatasourceConfigPayload(\n data: FormValues,\n fields: ConfigField[],\n existing: DatasourceResponse,\n isFieldVisible: (field: ConfigField) => boolean\n): DatasourceConfigPayload {\n const rootFields: Record<string, unknown> = {};\n const jsonData: Record<string, unknown> = { ...(existing.jsonData ?? {}) };\n const secureJsonData: Record<string, string> = {};\n const secureJsonFields: Record<string, boolean> = { ...(existing.secureJsonFields ?? {}) };\n\n for (const field of fields) {\n // Flatten indexedPair storage back into individual indexed keys\n if (field.storage?.type === 'indexedPair') {\n const items = Array.isArray(data[field.key]) ? (data[field.key] as IndexedPairItem[]) : [];\n flattenIndexedPair(field, items, jsonData, secureJsonData, secureJsonFields);\n continue;\n }\n\n // Always include fields managed by effects (tagged \"managed-by:*\")\n // even when they're hidden from the UI — their values are set by effects.\n const isManagedByEffect = field.tags?.some((t) => t.startsWith('managed-by:'));\n if (!isManagedByEffect && !isFieldVisible(field)) {\n continue;\n }\n const fk = formKey(field);\n const value = data[fk];\n\n if (field.target === 'secureJsonData') {\n if (value === SECURE_FIELD_CONFIGURED) {\n secureJsonFields[field.key] = true;\n continue;\n }\n if (value && value !== '') {\n secureJsonData[field.key] = String(value);\n secureJsonFields[field.key] = false;\n } else {\n secureJsonFields[field.key] = false;\n }\n continue;\n }\n\n if (value === undefined || value === '') {\n continue;\n }\n switch (field.target) {\n case 'root':\n rootFields[field.key] = value;\n break;\n case 'jsonData':\n // Section-scoped fields write to jsonData.{section}.{key}\n if (field.section) {\n if (!jsonData[field.section] || typeof jsonData[field.section] !== 'object') {\n jsonData[field.section] = {};\n }\n (jsonData[field.section] as Record<string, unknown>)[field.key] = value;\n } else {\n jsonData[field.key] = value;\n }\n break;\n }\n }\n\n // Post-process arrays with secureKey overrides: route values to secureJsonData\n // and clean up stale secure keys from previous saves.\n for (const field of fields) {\n if (field.valueType !== 'array' || !field.item?.fields || field.target !== 'jsonData') {\n continue;\n }\n const itemFields = field.item.fields;\n const hasSecureOverride = itemFields.some((f) => f.overrides?.some((o) => o.secureKey));\n if (!hasSecureOverride) {\n continue;\n }\n const arr = (\n field.section ? (jsonData[field.section] as Record<string, unknown>)?.[field.key] : jsonData[field.key]\n ) as Array<Record<string, unknown>> | undefined;\n if (!Array.isArray(arr)) {\n continue;\n }\n\n // Collect all secureKey patterns from this field's item overrides for cleanup\n const secureKeyOverrides: Array<{ fieldKey: string; override: FieldOverride }> = [];\n for (const f of itemFields) {\n for (const o of f.overrides ?? []) {\n if (o.secureKey) {\n secureKeyOverrides.push({ fieldKey: f.key, override: o });\n }\n }\n }\n\n // Track which secure keys are still active so we can remove stale ones\n const activeSecureKeys = new Set<string>();\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n const match = findActiveSecureOverride(itemFields, item, i);\n if (!match) {\n continue;\n }\n const resolvedKey = match.resolvedKey;\n activeSecureKeys.add(resolvedKey);\n const itemValue = item[match.fieldKey];\n\n if (itemValue === SECURE_FIELD_CONFIGURED) {\n // Value already stored in secureJsonData, keep it\n secureJsonFields[resolvedKey] = true;\n } else if (itemValue && itemValue !== '') {\n // New or updated secret value — route to secureJsonData\n secureJsonData[resolvedKey] = String(itemValue);\n secureJsonFields[resolvedKey] = false;\n // Clear the value from the inline array\n item[match.fieldKey] = '';\n }\n }\n\n // Remove stale secure keys that were previously set but are no longer in the array\n const existingSecureFields = existing.secureJsonFields ?? {};\n for (const existingKey of Object.keys(existingSecureFields)) {\n // Check if this key could have been produced by any of this field's secureKey templates\n const couldBeFromThisField = secureKeyOverrides.some((sko) => {\n // Simple heuristic: check if the existing key starts with the static prefix\n // of the template (everything before the first placeholder)\n const staticPrefix = sko.override.secureKey!.split('{')[0];\n return staticPrefix && existingKey.startsWith(staticPrefix);\n });\n if (couldBeFromThisField && !activeSecureKeys.has(existingKey)) {\n secureJsonFields[existingKey] = false;\n secureJsonData[existingKey] = '';\n }\n }\n }\n\n return { rootFields, jsonData, secureJsonData, secureJsonFields };\n}\n\nexport async function submitDatasourceConfig(\n dsUid: string,\n data: FormValues,\n fields: ConfigField[],\n isFieldVisible: (field: ConfigField) => boolean\n): Promise<void> {\n const existing: DatasourceResponse = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`);\n const { rootFields, jsonData, secureJsonData, secureJsonFields } = buildDatasourceConfigPayload(\n data,\n fields,\n existing,\n isFieldVisible\n );\n\n await getBackendSrv().put(`/api/datasources/uid/${dsUid}`, {\n ...existing,\n ...rootFields,\n jsonData,\n secureJsonData,\n secureJsonFields,\n });\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { parseDependsOn, formKey, evaluateDependsOn, getWatchedValue } from './config.js';
|
|
2
|
-
import { evaluateCelExpression } from './cel.js';
|
|
3
|
-
import { SECURE_FIELD_CONFIGURED } from './datasource.js';
|
|
4
|
-
|
|
5
|
-
function evaluateEffectCondition(when, fieldValue) {
|
|
6
|
-
var _a, _b;
|
|
7
|
-
const m = when.match(/^value\s*(==|!=)\s*(?:'([^']*)'|"([^"]*)"|(.+))$/);
|
|
8
|
-
if (!m) {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
const op = m[1];
|
|
12
|
-
let target = (_b = (_a = m[2]) != null ? _a : m[3]) != null ? _b : m[4];
|
|
13
|
-
if (target === "true") {
|
|
14
|
-
target = true;
|
|
15
|
-
} else if (target === "false") {
|
|
16
|
-
target = false;
|
|
17
|
-
} else if (typeof target === "string" && /^-?\d+(\.\d+)?$/.test(target)) {
|
|
18
|
-
target = Number(target);
|
|
19
|
-
}
|
|
20
|
-
const eq = String(fieldValue) === String(target);
|
|
21
|
-
return op === "==" ? eq : !eq;
|
|
22
|
-
}
|
|
23
|
-
function isFieldRequired(field, watchedValues, fieldById, celContext) {
|
|
24
|
-
if (field.required) {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
if (field.requiredWhen) {
|
|
28
|
-
if (celContext) {
|
|
29
|
-
return evaluateCelExpression(field.requiredWhen, celContext);
|
|
30
|
-
}
|
|
31
|
-
const parsed = parseDependsOn(field.requiredWhen);
|
|
32
|
-
if (parsed) {
|
|
33
|
-
const depField = fieldById.get(parsed.field);
|
|
34
|
-
const depKey = depField ? formKey(depField) : parsed.field;
|
|
35
|
-
return evaluateDependsOn(parsed, getWatchedValue(watchedValues, depKey));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
function buildValidationRules(field, required) {
|
|
41
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
42
|
-
const rules = {};
|
|
43
|
-
const label = (_a = field.label) != null ? _a : field.key;
|
|
44
|
-
if (required) {
|
|
45
|
-
if (field.target === "secureJsonData") {
|
|
46
|
-
rules.validate = (value) => {
|
|
47
|
-
if (value === SECURE_FIELD_CONFIGURED) {
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
if (!value || value === "") {
|
|
51
|
-
return `${label} is required`;
|
|
52
|
-
}
|
|
53
|
-
return true;
|
|
54
|
-
};
|
|
55
|
-
} else {
|
|
56
|
-
rules.required = `${label} is required`;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
if (field.valueType === "array" && ((_b = field.item) == null ? void 0 : _b.valueType) === "object" && ((_c = field.item.fields) == null ? void 0 : _c.length)) {
|
|
60
|
-
const requiredItemFields = field.item.fields.filter((f) => f.required);
|
|
61
|
-
if (requiredItemFields.length > 0) {
|
|
62
|
-
const existingValidate = rules.validate;
|
|
63
|
-
rules.validate = (value) => {
|
|
64
|
-
var _a2;
|
|
65
|
-
if (existingValidate) {
|
|
66
|
-
const r = existingValidate(value);
|
|
67
|
-
if (r !== true) {
|
|
68
|
-
return r;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (!Array.isArray(value)) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
const itemErrors = {};
|
|
75
|
-
for (let i = 0; i < value.length; i++) {
|
|
76
|
-
const item = value[i];
|
|
77
|
-
const missing = [];
|
|
78
|
-
for (const rf of requiredItemFields) {
|
|
79
|
-
const v = item[rf.key];
|
|
80
|
-
if (v === void 0 || v === null || v === "") {
|
|
81
|
-
missing.push((_a2 = rf.label) != null ? _a2 : rf.key);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (missing.length > 0) {
|
|
85
|
-
itemErrors[i] = `${missing.join(", ")} required`;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (Object.keys(itemErrors).length === 0) {
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
return `__ITEM_ERRORS__${JSON.stringify(itemErrors)}`;
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (field.validations) {
|
|
96
|
-
for (const v of field.validations) {
|
|
97
|
-
switch (v.type) {
|
|
98
|
-
case "pattern":
|
|
99
|
-
rules.pattern = {
|
|
100
|
-
value: new RegExp(v.pattern),
|
|
101
|
-
message: (_d = v.message) != null ? _d : `Invalid ${label}`
|
|
102
|
-
};
|
|
103
|
-
break;
|
|
104
|
-
case "range":
|
|
105
|
-
if (v.min !== void 0) {
|
|
106
|
-
rules.min = { value: v.min, message: (_e = v.message) != null ? _e : `Minimum value is ${v.min}` };
|
|
107
|
-
}
|
|
108
|
-
if (v.max !== void 0) {
|
|
109
|
-
rules.max = { value: v.max, message: (_f = v.message) != null ? _f : `Maximum value is ${v.max}` };
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
case "length":
|
|
113
|
-
if (v.min !== void 0) {
|
|
114
|
-
rules.minLength = { value: v.min, message: (_g = v.message) != null ? _g : `Minimum length is ${v.min}` };
|
|
115
|
-
}
|
|
116
|
-
if (v.max !== void 0) {
|
|
117
|
-
rules.maxLength = { value: v.max, message: (_h = v.message) != null ? _h : `Maximum length is ${v.max}` };
|
|
118
|
-
}
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return rules;
|
|
124
|
-
}
|
|
125
|
-
const ITEM_ERRORS_PREFIX = "__ITEM_ERRORS__";
|
|
126
|
-
function parseItemErrors(errorMessage) {
|
|
127
|
-
if (!errorMessage || !errorMessage.startsWith(ITEM_ERRORS_PREFIX)) {
|
|
128
|
-
return null;
|
|
129
|
-
}
|
|
130
|
-
try {
|
|
131
|
-
return JSON.parse(errorMessage.slice(ITEM_ERRORS_PREFIX.length));
|
|
132
|
-
} catch (e) {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export { buildValidationRules, evaluateEffectCondition, isFieldRequired, parseItemErrors };
|
|
138
|
-
//# sourceMappingURL=fieldUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fieldUtils.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/fieldUtils.ts"],"sourcesContent":["import type { ConfigField } from '../../../schema/schema';\nimport { parseDependsOn, evaluateDependsOn, formKey, getWatchedValue } from './config';\nimport { evaluateCelExpression } from './cel';\nimport { SECURE_FIELD_CONFIGURED } from './datasource';\n\n/**\n * Evaluate an effect's `when` condition against a field value.\n * Supports: \"value == 'literal'\", \"value == true\", \"value != 'literal'\"\n * The keyword `value` refers to the current value of the source field.\n */\nexport function evaluateEffectCondition(when: string, fieldValue: unknown): boolean {\n const m = when.match(/^value\\s*(==|!=)\\s*(?:'([^']*)'|\"([^\"]*)\"|(.+))$/);\n if (!m) {\n return false;\n }\n const op = m[1];\n let target: unknown = m[2] ?? m[3] ?? m[4];\n if (target === 'true') {\n target = true;\n } else if (target === 'false') {\n target = false;\n } else if (typeof target === 'string' && /^-?\\d+(\\.\\d+)?$/.test(target)) {\n target = Number(target);\n }\n\n const eq = String(fieldValue) === String(target);\n return op === '==' ? eq : !eq;\n}\n\n/**\n * Evaluate whether a field is currently required, considering both the static\n * `required` flag and the conditional `requiredWhen` expression.\n */\nexport function isFieldRequired(\n field: ConfigField,\n watchedValues: Record<string, unknown>,\n fieldById: Map<string, ConfigField>,\n celContext?: Record<string, unknown>\n): boolean {\n if (field.required) {\n return true;\n }\n if (field.requiredWhen) {\n // Use CEL evaluation if context is available (supports compound expressions)\n if (celContext) {\n return evaluateCelExpression(field.requiredWhen, celContext);\n }\n // Fallback to simple parser for backward compatibility\n const parsed = parseDependsOn(field.requiredWhen);\n if (parsed) {\n const depField = fieldById.get(parsed.field);\n const depKey = depField ? formKey(depField) : parsed.field;\n return evaluateDependsOn(parsed, getWatchedValue(watchedValues, depKey));\n }\n }\n return false;\n}\n\nexport function buildValidationRules(field: ConfigField, required: boolean) {\n const rules: Record<string, unknown> = {};\n const label = field.label ?? field.key;\n\n if (required) {\n if (field.target === 'secureJsonData') {\n rules.validate = (value: unknown) => {\n if (value === SECURE_FIELD_CONFIGURED) {\n return true;\n }\n if (!value || value === '') {\n return `${label} is required`;\n }\n return true;\n };\n } else {\n rules.required = `${label} is required`;\n }\n }\n\n // Validate required item fields inside object arrays.\n // Returns a JSON-encoded map of {itemIndex: \"message\"} so ObjectArrayEditor\n // can render errors inline per item. react-hook-form treats any non-true\n // string as an error message.\n if (field.valueType === 'array' && field.item?.valueType === 'object' && field.item.fields?.length) {\n const requiredItemFields = field.item.fields.filter((f) => f.required);\n if (requiredItemFields.length > 0) {\n const existingValidate = rules.validate as ((v: unknown) => true | string) | undefined;\n rules.validate = (value: unknown) => {\n if (existingValidate) {\n const r = existingValidate(value);\n if (r !== true) {\n return r;\n }\n }\n if (!Array.isArray(value)) {\n return true;\n }\n const itemErrors: Record<number, string> = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i] as Record<string, unknown>;\n const missing: string[] = [];\n for (const rf of requiredItemFields) {\n const v = item[rf.key];\n if (v === undefined || v === null || v === '') {\n missing.push(rf.label ?? rf.key);\n }\n }\n if (missing.length > 0) {\n itemErrors[i] = `${missing.join(', ')} required`;\n }\n }\n if (Object.keys(itemErrors).length === 0) {\n return true;\n }\n // Encode as JSON so ObjectArrayEditor can parse and show per-item\n return `__ITEM_ERRORS__${JSON.stringify(itemErrors)}`;\n };\n }\n }\n\n if (field.validations) {\n for (const v of field.validations) {\n switch (v.type) {\n case 'pattern':\n rules.pattern = {\n value: new RegExp(v.pattern),\n message: v.message ?? `Invalid ${label}`,\n };\n break;\n case 'range':\n if (v.min !== undefined) {\n rules.min = { value: v.min, message: v.message ?? `Minimum value is ${v.min}` };\n }\n if (v.max !== undefined) {\n rules.max = { value: v.max, message: v.message ?? `Maximum value is ${v.max}` };\n }\n break;\n case 'length':\n if (v.min !== undefined) {\n rules.minLength = { value: v.min, message: v.message ?? `Minimum length is ${v.min}` };\n }\n if (v.max !== undefined) {\n rules.maxLength = { value: v.max, message: v.message ?? `Maximum length is ${v.max}` };\n }\n break;\n }\n }\n }\n\n return rules;\n}\nconst ITEM_ERRORS_PREFIX = '__ITEM_ERRORS__';\n\n/**\n * Parse a per-item error message encoded by buildValidationRules.\n * Returns a map of item index → error message, or null if not an item error.\n */\nexport function parseItemErrors(errorMessage: string | undefined): Record<number, string> | null {\n if (!errorMessage || !errorMessage.startsWith(ITEM_ERRORS_PREFIX)) {\n return null;\n }\n try {\n return JSON.parse(errorMessage.slice(ITEM_ERRORS_PREFIX.length));\n } catch {\n return null;\n }\n}\n"],"names":["_a"],"mappings":"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"}
|
package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js
DELETED
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
import { useState, useMemo, useEffect, useRef, useCallback } from 'react';
|
|
2
|
-
import { useForm } from 'react-hook-form';
|
|
3
|
-
import { resolveGroups, resolveRequiredFieldsGroup, formKey, computeVirtualFieldValues, getWatchedValue, parseDependsOn, evaluateDependsOn } from '../config.js';
|
|
4
|
-
import { evaluateCelExpression, extractFieldRefs } from '../cel.js';
|
|
5
|
-
import { fetchExistingValues, submitDatasourceConfig, SECURE_FIELD_CONFIGURED } from '../datasource.js';
|
|
6
|
-
import { evaluateEffectCondition, isFieldRequired } from '../fieldUtils.js';
|
|
7
|
-
|
|
8
|
-
function useDatasourceConfigForm({ schema, dsUid, onSuccess, onSaving }) {
|
|
9
|
-
const [submitting, setSubmitting] = useState(false);
|
|
10
|
-
const [submitError, setSubmitError] = useState(null);
|
|
11
|
-
const [initializing, setInitializing] = useState(true);
|
|
12
|
-
const [fetchError, setFetchError] = useState(null);
|
|
13
|
-
const [detectedReadOnly, setDetectedReadOnly] = useState(false);
|
|
14
|
-
const readOnly = detectedReadOnly;
|
|
15
|
-
const resolvedGroups = useMemo(() => {
|
|
16
|
-
const groups = resolveGroups(schema);
|
|
17
|
-
const requiredGroup = resolveRequiredFieldsGroup(schema);
|
|
18
|
-
if (!requiredGroup) {
|
|
19
|
-
return groups;
|
|
20
|
-
}
|
|
21
|
-
return [requiredGroup, ...groups];
|
|
22
|
-
}, [schema]);
|
|
23
|
-
const fieldById = useMemo(() => {
|
|
24
|
-
const m = /* @__PURE__ */ new Map();
|
|
25
|
-
for (const f of schema.fields) {
|
|
26
|
-
m.set(f.id, f);
|
|
27
|
-
}
|
|
28
|
-
return m;
|
|
29
|
-
}, [schema.fields]);
|
|
30
|
-
const httpHeadersField = useMemo(
|
|
31
|
-
() => {
|
|
32
|
-
var _a;
|
|
33
|
-
return (_a = schema.fields.find((f) => {
|
|
34
|
-
var _a2;
|
|
35
|
-
return f.key === "httpHeaders" && ((_a2 = f.storage) == null ? void 0 : _a2.type) === "indexedPair";
|
|
36
|
-
})) != null ? _a : null;
|
|
37
|
-
},
|
|
38
|
-
[schema.fields]
|
|
39
|
-
);
|
|
40
|
-
const allStorageFields = useMemo(
|
|
41
|
-
() => schema.fields.filter((f) => f.kind !== "virtual" && !f.isItemField && f.target),
|
|
42
|
-
[schema.fields]
|
|
43
|
-
);
|
|
44
|
-
const {
|
|
45
|
-
control,
|
|
46
|
-
handleSubmit,
|
|
47
|
-
watch,
|
|
48
|
-
reset,
|
|
49
|
-
trigger,
|
|
50
|
-
setValue,
|
|
51
|
-
formState: { errors }
|
|
52
|
-
} = useForm({ mode: "onChange" });
|
|
53
|
-
const fieldsWithEffects = useMemo(() => {
|
|
54
|
-
const result = [];
|
|
55
|
-
for (const field of schema.fields) {
|
|
56
|
-
if (!field.effects || field.effects.length === 0) {
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
const mapped = field.effects.map((eff) => ({
|
|
60
|
-
when: eff.when,
|
|
61
|
-
targets: Object.entries(eff.set).map(([targetId, val]) => {
|
|
62
|
-
const targetField = fieldById.get(targetId);
|
|
63
|
-
return { key: targetField ? formKey(targetField) : targetId, value: val };
|
|
64
|
-
})
|
|
65
|
-
}));
|
|
66
|
-
result.push({ sourceKey: formKey(field), effects: mapped });
|
|
67
|
-
}
|
|
68
|
-
return result;
|
|
69
|
-
}, [schema.fields, fieldById]);
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
let cancelled = false;
|
|
72
|
-
fetchExistingValues(dsUid, allStorageFields).then((result) => {
|
|
73
|
-
if (cancelled) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (result.error) {
|
|
77
|
-
setFetchError(result.error);
|
|
78
|
-
setInitializing(false);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
if (result.readOnly) {
|
|
82
|
-
setDetectedReadOnly(true);
|
|
83
|
-
}
|
|
84
|
-
const defaults = {};
|
|
85
|
-
for (const field of allStorageFields) {
|
|
86
|
-
if (field.defaultValue !== void 0) {
|
|
87
|
-
defaults[formKey(field)] = field.defaultValue;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const merged = { ...defaults, ...result.values };
|
|
91
|
-
const virtualValues = computeVirtualFieldValues(schema, merged);
|
|
92
|
-
reset({ ...merged, ...virtualValues });
|
|
93
|
-
setInitializing(false);
|
|
94
|
-
});
|
|
95
|
-
return () => {
|
|
96
|
-
cancelled = true;
|
|
97
|
-
};
|
|
98
|
-
}, [dsUid, allStorageFields, schema, reset]);
|
|
99
|
-
const watchedValues = watch();
|
|
100
|
-
const prevEffectValuesRef = useRef({});
|
|
101
|
-
useEffect(() => {
|
|
102
|
-
if (initializing) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
for (const { sourceKey, effects } of fieldsWithEffects) {
|
|
106
|
-
const currentVal = getWatchedValue(watchedValues, sourceKey);
|
|
107
|
-
const prevVal = prevEffectValuesRef.current[sourceKey];
|
|
108
|
-
if (currentVal === prevVal) {
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
prevEffectValuesRef.current[sourceKey] = currentVal;
|
|
112
|
-
for (const eff of effects) {
|
|
113
|
-
if (evaluateEffectCondition(eff.when, currentVal)) {
|
|
114
|
-
for (const { key, value } of eff.targets) {
|
|
115
|
-
setValue(key, value);
|
|
116
|
-
}
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}, [watchedValues, fieldsWithEffects, initializing, setValue]);
|
|
122
|
-
const fieldsWithOverrideDefaults = useMemo(() => {
|
|
123
|
-
const result = [];
|
|
124
|
-
for (const field of schema.fields) {
|
|
125
|
-
if (!field.overrides || field.overrides.length === 0) {
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
const ovs = field.overrides.filter((ov) => ov.defaultValue !== void 0).map((ov) => {
|
|
129
|
-
const parsed = parseDependsOn(ov.when);
|
|
130
|
-
if (!parsed) {
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
const depField = fieldById.get(parsed.field);
|
|
134
|
-
return {
|
|
135
|
-
depKey: depField ? formKey(depField) : parsed.field,
|
|
136
|
-
depValue: parsed.value,
|
|
137
|
-
negate: parsed.negate,
|
|
138
|
-
defaultValue: ov.defaultValue
|
|
139
|
-
};
|
|
140
|
-
}).filter(Boolean);
|
|
141
|
-
if (ovs.length > 0) {
|
|
142
|
-
result.push({ targetKey: formKey(field), fieldDefault: field.defaultValue, overrides: ovs });
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return result;
|
|
146
|
-
}, [schema.fields, fieldById]);
|
|
147
|
-
const prevOverrideDepRef = useRef({});
|
|
148
|
-
useEffect(() => {
|
|
149
|
-
var _a;
|
|
150
|
-
if (initializing) {
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
for (const { targetKey, fieldDefault, overrides } of fieldsWithOverrideDefaults) {
|
|
154
|
-
for (const ov of overrides) {
|
|
155
|
-
const currentDepVal = String((_a = getWatchedValue(watchedValues, ov.depKey)) != null ? _a : "");
|
|
156
|
-
const trackKey = `${targetKey}::${ov.depKey}`;
|
|
157
|
-
const prevDepVal = prevOverrideDepRef.current[trackKey];
|
|
158
|
-
if (currentDepVal === prevDepVal) {
|
|
159
|
-
continue;
|
|
160
|
-
}
|
|
161
|
-
prevOverrideDepRef.current[trackKey] = currentDepVal;
|
|
162
|
-
const active = evaluateDependsOn({ value: ov.depValue, negate: ov.negate }, currentDepVal);
|
|
163
|
-
const wasActive = prevDepVal !== void 0 && evaluateDependsOn({ value: ov.depValue, negate: ov.negate }, prevDepVal);
|
|
164
|
-
if (active) {
|
|
165
|
-
setValue(targetKey, ov.defaultValue);
|
|
166
|
-
} else if (wasActive && fieldDefault !== void 0) {
|
|
167
|
-
setValue(targetKey, fieldDefault);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}, [watchedValues, fieldsWithOverrideDefaults, initializing, setValue]);
|
|
172
|
-
const celContext = useMemo(() => {
|
|
173
|
-
const ctx = {};
|
|
174
|
-
for (const f of fieldById.values()) {
|
|
175
|
-
const fk = formKey(f);
|
|
176
|
-
const val = getWatchedValue(watchedValues, fk);
|
|
177
|
-
if (val !== void 0) {
|
|
178
|
-
const parts = f.id.split(".");
|
|
179
|
-
let current = ctx;
|
|
180
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
181
|
-
if (!(parts[i] in current) || typeof current[parts[i]] !== "object" || current[parts[i]] === null) {
|
|
182
|
-
current[parts[i]] = {};
|
|
183
|
-
}
|
|
184
|
-
current = current[parts[i]];
|
|
185
|
-
}
|
|
186
|
-
current[parts[parts.length - 1]] = val;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return ctx;
|
|
190
|
-
}, [watchedValues, fieldById]);
|
|
191
|
-
const isFieldVisible = useCallback(
|
|
192
|
-
(field) => {
|
|
193
|
-
function check(f, visited) {
|
|
194
|
-
var _a;
|
|
195
|
-
if (f.kind === "virtual" && !f.ui) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
if ((_a = f.tags) == null ? void 0 : _a.some((t) => t.startsWith("managed-by:"))) {
|
|
199
|
-
return false;
|
|
200
|
-
}
|
|
201
|
-
if (!f.dependsOn) {
|
|
202
|
-
return true;
|
|
203
|
-
}
|
|
204
|
-
const refs = extractFieldRefs(f.dependsOn);
|
|
205
|
-
for (const ref of refs) {
|
|
206
|
-
const depField = fieldById.get(ref);
|
|
207
|
-
if (depField && !visited.has(depField.id)) {
|
|
208
|
-
visited.add(f.id);
|
|
209
|
-
if (!check(depField, visited)) {
|
|
210
|
-
return false;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return evaluateCelExpression(f.dependsOn, celContext);
|
|
215
|
-
}
|
|
216
|
-
return check(field, /* @__PURE__ */ new Set());
|
|
217
|
-
},
|
|
218
|
-
[celContext, fieldById]
|
|
219
|
-
);
|
|
220
|
-
const onSubmit = useCallback(
|
|
221
|
-
async (data) => {
|
|
222
|
-
setSubmitting(true);
|
|
223
|
-
setSubmitError(null);
|
|
224
|
-
onSaving == null ? void 0 : onSaving(true);
|
|
225
|
-
const minDelay = new Promise((r) => setTimeout(r, 2e3));
|
|
226
|
-
try {
|
|
227
|
-
await submitDatasourceConfig(dsUid, data, allStorageFields, isFieldVisible);
|
|
228
|
-
const [refreshed] = await Promise.all([fetchExistingValues(dsUid, allStorageFields), minDelay]);
|
|
229
|
-
const defaults = {};
|
|
230
|
-
for (const field of allStorageFields) {
|
|
231
|
-
if (field.defaultValue !== void 0) {
|
|
232
|
-
defaults[formKey(field)] = field.defaultValue;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
const merged = { ...defaults, ...refreshed.values };
|
|
236
|
-
const virtualValues = computeVirtualFieldValues(schema, merged);
|
|
237
|
-
reset({ ...merged, ...virtualValues });
|
|
238
|
-
onSuccess("UPDATED", "Configuration saved.");
|
|
239
|
-
} catch (err) {
|
|
240
|
-
await minDelay;
|
|
241
|
-
setSubmitError(err instanceof Error ? err.message : "Failed to update datasource");
|
|
242
|
-
} finally {
|
|
243
|
-
setSubmitting(false);
|
|
244
|
-
onSaving == null ? void 0 : onSaving(false);
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
[dsUid, allStorageFields, isFieldVisible, schema, reset, onSuccess, onSaving]
|
|
248
|
-
);
|
|
249
|
-
const isGroupValid = useCallback(
|
|
250
|
-
(group) => {
|
|
251
|
-
for (const field of group.fields) {
|
|
252
|
-
if (!isFieldVisible(field)) {
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
if (errors[formKey(field)]) {
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
if (isFieldRequired(field, watchedValues, fieldById, celContext)) {
|
|
259
|
-
const val = getWatchedValue(watchedValues, formKey(field));
|
|
260
|
-
if (val === SECURE_FIELD_CONFIGURED) {
|
|
261
|
-
continue;
|
|
262
|
-
}
|
|
263
|
-
if (val === void 0 || val === null || val === "") {
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return true;
|
|
269
|
-
},
|
|
270
|
-
[errors, watchedValues, fieldById, celContext, isFieldVisible]
|
|
271
|
-
);
|
|
272
|
-
const isFieldDisabled = useCallback(
|
|
273
|
-
(field) => {
|
|
274
|
-
if (!field.disabledWhen) {
|
|
275
|
-
return false;
|
|
276
|
-
}
|
|
277
|
-
return evaluateCelExpression(field.disabledWhen, celContext);
|
|
278
|
-
},
|
|
279
|
-
[celContext]
|
|
280
|
-
);
|
|
281
|
-
const groupHasData = useCallback(
|
|
282
|
-
(group) => {
|
|
283
|
-
for (const field of group.fields) {
|
|
284
|
-
const val = getWatchedValue(watchedValues, formKey(field));
|
|
285
|
-
if (val === void 0 || val === null || val === "" || val === false) {
|
|
286
|
-
continue;
|
|
287
|
-
}
|
|
288
|
-
if (val === field.defaultValue) {
|
|
289
|
-
continue;
|
|
290
|
-
}
|
|
291
|
-
return true;
|
|
292
|
-
}
|
|
293
|
-
return false;
|
|
294
|
-
},
|
|
295
|
-
[watchedValues]
|
|
296
|
-
);
|
|
297
|
-
return {
|
|
298
|
-
// Schema
|
|
299
|
-
resolvedGroups,
|
|
300
|
-
fieldById,
|
|
301
|
-
httpHeadersField,
|
|
302
|
-
// Form
|
|
303
|
-
control,
|
|
304
|
-
handleSubmit,
|
|
305
|
-
trigger,
|
|
306
|
-
errors,
|
|
307
|
-
watchedValues,
|
|
308
|
-
celContext,
|
|
309
|
-
// State
|
|
310
|
-
initializing,
|
|
311
|
-
fetchError,
|
|
312
|
-
submitting,
|
|
313
|
-
submitError,
|
|
314
|
-
readOnly,
|
|
315
|
-
// Callbacks
|
|
316
|
-
isFieldVisible,
|
|
317
|
-
isFieldDisabled,
|
|
318
|
-
isGroupValid,
|
|
319
|
-
groupHasData,
|
|
320
|
-
onSubmit,
|
|
321
|
-
setValue
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
export { useDatasourceConfigForm };
|
|
326
|
-
//# sourceMappingURL=useDatasourceConfigForm.js.map
|
package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDatasourceConfigForm.js","sources":["../../../../../../src/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport type { ConfigField, ConfigGroup, DatasourceConfigSchema } from '../../../../schema/schema';\nimport {\n resolveGroups,\n resolveRequiredFieldsGroup,\n parseDependsOn,\n evaluateDependsOn,\n computeVirtualFieldValues,\n formKey,\n getWatchedValue,\n} from '../config';\nimport { extractFieldRefs, evaluateCelExpression } from '../cel';\nimport { SECURE_FIELD_CONFIGURED, fetchExistingValues, submitDatasourceConfig, type FormValues } from '../datasource';\nimport { evaluateEffectCondition, isFieldRequired } from '../fieldUtils';\n\nexport type DatasourceConfigFormOptions = {\n schema: DatasourceConfigSchema;\n dsUid: string;\n onSuccess: (status: string, message?: string) => void;\n onSaving?: (saving: boolean) => void;\n};\n\nexport type ResolvedGroup = { group: ConfigGroup; fields: ConfigField[] };\n\nexport function useDatasourceConfigForm({ schema, dsUid, onSuccess, onSaving }: DatasourceConfigFormOptions) {\n const [submitting, setSubmitting] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [initializing, setInitializing] = useState(true);\n const [fetchError, setFetchError] = useState<string | null>(null);\n const [detectedReadOnly, setDetectedReadOnly] = useState(false);\n const readOnly = detectedReadOnly;\n\n const resolvedGroups: ResolvedGroup[] = useMemo(() => {\n const groups = resolveGroups(schema);\n const requiredGroup = resolveRequiredFieldsGroup(schema);\n if (!requiredGroup) {\n return groups;\n }\n return [requiredGroup, ...groups];\n }, [schema]);\n\n const fieldById = useMemo(() => {\n const m = new Map<string, ConfigField>();\n for (const f of schema.fields) {\n m.set(f.id, f);\n }\n return m;\n }, [schema.fields]);\n\n const httpHeadersField = useMemo(\n () => schema.fields.find((f) => f.key === 'httpHeaders' && f.storage?.type === 'indexedPair') ?? null,\n [schema.fields]\n );\n\n const allStorageFields = useMemo(\n () => schema.fields.filter((f) => f.kind !== 'virtual' && !f.isItemField && f.target),\n [schema.fields]\n );\n\n const {\n control,\n handleSubmit,\n watch,\n reset,\n trigger,\n setValue,\n formState: { errors },\n } = useForm<FormValues>({ mode: 'onChange' });\n\n const fieldsWithEffects = useMemo(() => {\n const result: Array<{\n sourceKey: string;\n effects: Array<{ when: string; targets: Array<{ key: string; value: unknown }> }>;\n }> = [];\n for (const field of schema.fields) {\n if (!field.effects || field.effects.length === 0) {\n continue;\n }\n const mapped = field.effects.map((eff) => ({\n when: eff.when,\n targets: Object.entries(eff.set).map(([targetId, val]) => {\n const targetField = fieldById.get(targetId);\n return { key: targetField ? formKey(targetField) : targetId, value: val };\n }),\n }));\n result.push({ sourceKey: formKey(field), effects: mapped });\n }\n return result;\n }, [schema.fields, fieldById]);\n\n // Load existing values on mount\n useEffect(() => {\n let cancelled = false;\n fetchExistingValues(dsUid, allStorageFields).then((result) => {\n if (cancelled) {\n return;\n }\n if (result.error) {\n setFetchError(result.error);\n setInitializing(false);\n return;\n }\n if (result.readOnly) {\n setDetectedReadOnly(true);\n }\n const defaults: FormValues = {};\n for (const field of allStorageFields) {\n if (field.defaultValue !== undefined) {\n defaults[formKey(field)] = field.defaultValue;\n }\n }\n const merged = { ...defaults, ...result.values };\n const virtualValues = computeVirtualFieldValues(schema, merged);\n reset({ ...merged, ...virtualValues });\n setInitializing(false);\n });\n return () => {\n cancelled = true;\n };\n }, [dsUid, allStorageFields, schema, reset]);\n\n const watchedValues = watch();\n\n // Apply field effects\n const prevEffectValuesRef = useRef<Record<string, unknown>>({});\n useEffect(() => {\n if (initializing) {\n return;\n }\n for (const { sourceKey, effects } of fieldsWithEffects) {\n const currentVal = getWatchedValue(watchedValues, sourceKey);\n const prevVal = prevEffectValuesRef.current[sourceKey];\n if (currentVal === prevVal) {\n continue;\n }\n prevEffectValuesRef.current[sourceKey] = currentVal;\n for (const eff of effects) {\n if (evaluateEffectCondition(eff.when, currentVal)) {\n for (const { key, value } of eff.targets) {\n setValue(key, value);\n }\n break;\n }\n }\n }\n }, [watchedValues, fieldsWithEffects, initializing, setValue]);\n\n // Override defaults\n const fieldsWithOverrideDefaults = useMemo(() => {\n const result: Array<{\n targetKey: string;\n fieldDefault: unknown;\n overrides: Array<{ depKey: string; depValue: string; negate: boolean; defaultValue: unknown }>;\n }> = [];\n for (const field of schema.fields) {\n if (!field.overrides || field.overrides.length === 0) {\n continue;\n }\n const ovs = field.overrides\n .filter((ov) => ov.defaultValue !== undefined)\n .map((ov) => {\n const parsed = parseDependsOn(ov.when);\n if (!parsed) {\n return null;\n }\n const depField = fieldById.get(parsed.field);\n return {\n depKey: depField ? formKey(depField) : parsed.field,\n depValue: parsed.value,\n negate: parsed.negate,\n defaultValue: ov.defaultValue,\n };\n })\n .filter(Boolean) as Array<{ depKey: string; depValue: string; negate: boolean; defaultValue: unknown }>;\n if (ovs.length > 0) {\n result.push({ targetKey: formKey(field), fieldDefault: field.defaultValue, overrides: ovs });\n }\n }\n return result;\n }, [schema.fields, fieldById]);\n\n const prevOverrideDepRef = useRef<Record<string, string>>({});\n useEffect(() => {\n if (initializing) {\n return;\n }\n for (const { targetKey, fieldDefault, overrides } of fieldsWithOverrideDefaults) {\n for (const ov of overrides) {\n const currentDepVal = String(getWatchedValue(watchedValues, ov.depKey) ?? '');\n const trackKey = `${targetKey}::${ov.depKey}`;\n const prevDepVal = prevOverrideDepRef.current[trackKey];\n if (currentDepVal === prevDepVal) {\n continue;\n }\n prevOverrideDepRef.current[trackKey] = currentDepVal;\n const active = evaluateDependsOn({ value: ov.depValue, negate: ov.negate }, currentDepVal);\n const wasActive =\n prevDepVal !== undefined && evaluateDependsOn({ value: ov.depValue, negate: ov.negate }, prevDepVal);\n if (active) {\n setValue(targetKey, ov.defaultValue);\n } else if (wasActive && fieldDefault !== undefined) {\n setValue(targetKey, fieldDefault);\n }\n }\n }\n }, [watchedValues, fieldsWithOverrideDefaults, initializing, setValue]);\n\n // Build a CEL-compatible nested context from flat watched values + field ID mappings.\n // Field IDs like \"jsonData.auth_method\" become { jsonData: { auth_method: value } }.\n const celContext = useMemo(() => {\n const ctx: Record<string, unknown> = {};\n for (const f of fieldById.values()) {\n const fk = formKey(f);\n const val = getWatchedValue(watchedValues, fk);\n if (val !== undefined) {\n // Set by field ID path (e.g. \"jsonData.oauth2.oauth2_type\")\n const parts = f.id.split('.');\n let current = ctx as Record<string, unknown>;\n for (let i = 0; i < parts.length - 1; i++) {\n if (!(parts[i] in current) || typeof current[parts[i]] !== 'object' || current[parts[i]] === null) {\n current[parts[i]] = {};\n }\n current = current[parts[i]] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = val;\n }\n }\n return ctx;\n }, [watchedValues, fieldById]);\n\n const isFieldVisible = useCallback(\n (field: ConfigField): boolean => {\n // Inner recursive helper with a visited set to guard against circular deps.\n function check(f: ConfigField, visited: Set<string>): boolean {\n if (f.kind === 'virtual' && !f.ui) {\n return false;\n }\n if (f.tags?.some((t) => t.startsWith('managed-by:'))) {\n return false;\n }\n if (!f.dependsOn) {\n return true;\n }\n\n // Transitive visibility: all referenced dependency fields must themselves be visible.\n const refs = extractFieldRefs(f.dependsOn);\n for (const ref of refs) {\n const depField = fieldById.get(ref);\n if (depField && !visited.has(depField.id)) {\n visited.add(f.id);\n if (!check(depField, visited)) {\n return false;\n }\n }\n }\n\n // Evaluate the full CEL expression\n return evaluateCelExpression(f.dependsOn, celContext);\n }\n return check(field, new Set<string>());\n },\n [celContext, fieldById]\n );\n\n const onSubmit = useCallback(\n async (data: FormValues) => {\n setSubmitting(true);\n setSubmitError(null);\n onSaving?.(true);\n const minDelay = new Promise((r) => setTimeout(r, 2000));\n\n try {\n await submitDatasourceConfig(dsUid, data, allStorageFields, isFieldVisible);\n const [refreshed] = await Promise.all([fetchExistingValues(dsUid, allStorageFields), minDelay]);\n const defaults: FormValues = {};\n for (const field of allStorageFields) {\n if (field.defaultValue !== undefined) {\n defaults[formKey(field)] = field.defaultValue;\n }\n }\n const merged = { ...defaults, ...refreshed.values };\n const virtualValues = computeVirtualFieldValues(schema, merged);\n reset({ ...merged, ...virtualValues });\n onSuccess('UPDATED', 'Configuration saved.');\n } catch (err: unknown) {\n await minDelay;\n setSubmitError(err instanceof Error ? err.message : 'Failed to update datasource');\n } finally {\n setSubmitting(false);\n onSaving?.(false);\n }\n },\n [dsUid, allStorageFields, isFieldVisible, schema, reset, onSuccess, onSaving]\n );\n\n /** Check if a group has any visible required fields that are empty. */\n const isGroupValid = useCallback(\n (group: ResolvedGroup): boolean => {\n for (const field of group.fields) {\n if (!isFieldVisible(field)) {\n continue;\n }\n if (errors[formKey(field)]) {\n return false;\n }\n if (isFieldRequired(field, watchedValues, fieldById, celContext)) {\n const val = getWatchedValue(watchedValues, formKey(field));\n if (val === SECURE_FIELD_CONFIGURED) {\n continue;\n }\n if (val === undefined || val === null || val === '') {\n return false;\n }\n }\n }\n return true;\n },\n [errors, watchedValues, fieldById, celContext, isFieldVisible]\n );\n\n const isFieldDisabled = useCallback(\n (field: ConfigField): boolean => {\n if (!field.disabledWhen) {\n return false;\n }\n return evaluateCelExpression(field.disabledWhen, celContext);\n },\n [celContext]\n );\n\n /** Check if a group has any fields with non-default/non-empty values. */\n const groupHasData = useCallback(\n (group: ResolvedGroup): boolean => {\n for (const field of group.fields) {\n const val = getWatchedValue(watchedValues, formKey(field));\n if (val === undefined || val === null || val === '' || val === false) {\n continue;\n }\n if (val === field.defaultValue) {\n continue;\n }\n return true;\n }\n return false;\n },\n [watchedValues]\n );\n\n return {\n // Schema\n resolvedGroups,\n fieldById,\n httpHeadersField,\n // Form\n control,\n handleSubmit,\n trigger,\n errors,\n watchedValues,\n celContext,\n // State\n initializing,\n fetchError,\n submitting,\n submitError,\n readOnly,\n // Callbacks\n isFieldVisible,\n isFieldDisabled,\n isGroupValid,\n groupHasData,\n onSubmit,\n setValue,\n };\n}\n"],"names":["_a"],"mappings":";;;;;;;AAyBO,SAAS,wBAAwB,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,UAAS,EAAgC;AAC3G,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,QAAA,GAAW,gBAAA;AAEjB,EAAA,MAAM,cAAA,GAAkC,QAAQ,MAAM;AACpD,IAAA,MAAM,MAAA,GAAS,cAAc,MAAM,CAAA;AACnC,IAAA,MAAM,aAAA,GAAgB,2BAA2B,MAAM,CAAA;AACvD,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAC,aAAA,EAAe,GAAG,MAAM,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAM;AAC9B,IAAA,MAAM,CAAA,uBAAQ,GAAA,EAAyB;AACvC,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,EAAQ;AAC7B,MAAA,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,EAAA,EAAI,CAAC,CAAA;AAAA,IACf;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,CAAO,MAAM,CAAC,CAAA;AAElB,EAAA,MAAM,gBAAA,GAAmB,OAAA;AAAA,IACvB,MAAG;AAnDP,MAAA,IAAA,EAAA;AAmDU,MAAA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAG;AAnDjC,QAAA,IAAAA,GAAAA;AAmDoC,QAAA,OAAA,CAAA,CAAE,QAAQ,aAAA,IAAA,CAAA,CAAiBA,GAAAA,GAAA,EAAE,OAAA,KAAF,IAAA,GAAA,MAAA,GAAAA,IAAW,IAAA,MAAS,aAAA;AAAA,MAAA,CAAa,MAAtF,IAAA,GAAA,EAAA,GAA2F,IAAA;AAAA,IAAA,CAAA;AAAA,IACjG,CAAC,OAAO,MAAM;AAAA,GAChB;AAEA,EAAA,MAAM,gBAAA,GAAmB,OAAA;AAAA,IACvB,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,SAAA,IAAa,CAAC,CAAA,CAAE,WAAA,IAAe,EAAE,MAAM,CAAA;AAAA,IACpF,CAAC,OAAO,MAAM;AAAA,GAChB;AAEA,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,EAAW,EAAE,MAAA;AAAO,GACtB,GAAI,OAAA,CAAoB,EAAE,IAAA,EAAM,YAAY,CAAA;AAE5C,EAAA,MAAM,iBAAA,GAAoB,QAAQ,MAAM;AACtC,IAAA,MAAM,SAGD,EAAC;AACN,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAChD,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,QACzC,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,QAAA,EAAU,GAAG,CAAA,KAAM;AACxD,UAAA,MAAM,WAAA,GAAc,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAC1C,UAAA,OAAO,EAAE,KAAK,WAAA,GAAc,OAAA,CAAQ,WAAW,CAAA,GAAI,QAAA,EAAU,OAAO,GAAA,EAAI;AAAA,QAC1E,CAAC;AAAA,OACH,CAAE,CAAA;AACF,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,SAAA,EAAW,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAA,EAAS,QAAQ,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAC,CAAA;AAG7B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,mBAAA,CAAoB,KAAA,EAAO,gBAAgB,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW;AAC5D,MAAA,IAAI,SAAA,EAAW;AACb,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,aAAA,CAAc,OAAO,KAAK,CAAA;AAC1B,QAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,MAC1B;AACA,MAAA,MAAM,WAAuB,EAAC;AAC9B,MAAA,KAAA,MAAW,SAAS,gBAAA,EAAkB;AACpC,QAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAW;AACpC,UAAA,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAC,CAAA,GAAI,KAAA,CAAM,YAAA;AAAA,QACnC;AAAA,MACF;AACA,MAAA,MAAM,SAAS,EAAE,GAAG,QAAA,EAAU,GAAG,OAAO,MAAA,EAAO;AAC/C,MAAA,MAAM,aAAA,GAAgB,yBAAA,CAA0B,MAAA,EAAQ,MAAM,CAAA;AAC9D,MAAA,KAAA,CAAM,EAAE,GAAG,MAAA,EAAQ,GAAG,eAAe,CAAA;AACrC,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,gBAAA,EAAkB,MAAA,EAAQ,KAAK,CAAC,CAAA;AAE3C,EAAA,MAAM,gBAAgB,KAAA,EAAM;AAG5B,EAAA,MAAM,mBAAA,GAAsB,MAAA,CAAgC,EAAE,CAAA;AAC9D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,EAAE,SAAA,EAAW,OAAA,EAAQ,IAAK,iBAAA,EAAmB;AACtD,MAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,aAAA,EAAe,SAAS,CAAA;AAC3D,MAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,SAAS,CAAA;AACrD,MAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,mBAAA,CAAoB,OAAA,CAAQ,SAAS,CAAA,GAAI,UAAA;AACzC,MAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,QAAA,IAAI,uBAAA,CAAwB,GAAA,CAAI,IAAA,EAAM,UAAU,CAAA,EAAG;AACjD,UAAA,KAAA,MAAW,EAAE,GAAA,EAAK,KAAA,EAAM,IAAK,IAAI,OAAA,EAAS;AACxC,YAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,UACrB;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,aAAA,EAAe,iBAAA,EAAmB,YAAA,EAAc,QAAQ,CAAC,CAAA;AAG7D,EAAA,MAAM,0BAAA,GAA6B,QAAQ,MAAM;AAC/C,IAAA,MAAM,SAID,EAAC;AACN,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,IAAI,CAAC,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,SAAA,CAAU,WAAW,CAAA,EAAG;AACpD,QAAA;AAAA,MACF;AACA,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,SAAA,CACf,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,YAAA,KAAiB,MAAS,CAAA,CAC5C,GAAA,CAAI,CAAC,EAAA,KAAO;AACX,QAAA,MAAM,MAAA,GAAS,cAAA,CAAe,EAAA,CAAG,IAAI,CAAA;AACrC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAC3C,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,QAAA,GAAW,OAAA,CAAQ,QAAQ,IAAI,MAAA,CAAO,KAAA;AAAA,UAC9C,UAAU,MAAA,CAAO,KAAA;AAAA,UACjB,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,cAAc,EAAA,CAAG;AAAA,SACnB;AAAA,MACF,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA;AACjB,MAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAClB,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,SAAA,EAAW,OAAA,CAAQ,KAAK,CAAA,EAAG,YAAA,EAAc,KAAA,CAAM,YAAA,EAAc,SAAA,EAAW,GAAA,EAAK,CAAA;AAAA,MAC7F;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAC,CAAA;AAE7B,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAA+B,EAAE,CAAA;AAC5D,EAAA,SAAA,CAAU,MAAM;AAvLlB,IAAA,IAAA,EAAA;AAwLI,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,EAAE,SAAA,EAAW,YAAA,EAAc,SAAA,MAAe,0BAAA,EAA4B;AAC/E,MAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,QAAA,MAAM,aAAA,GAAgB,QAAO,EAAA,GAAA,eAAA,CAAgB,aAAA,EAAe,GAAG,MAAM,CAAA,KAAxC,YAA6C,EAAE,CAAA;AAC5E,QAAA,MAAM,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,GAAG,MAAM,CAAA,CAAA;AAC3C,QAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,OAAA,CAAQ,QAAQ,CAAA;AACtD,QAAA,IAAI,kBAAkB,UAAA,EAAY;AAChC,UAAA;AAAA,QACF;AACA,QAAA,kBAAA,CAAmB,OAAA,CAAQ,QAAQ,CAAA,GAAI,aAAA;AACvC,QAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,EAAA,CAAG,UAAU,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAO,EAAG,aAAa,CAAA;AACzF,QAAA,MAAM,SAAA,GACJ,UAAA,KAAe,MAAA,IAAa,iBAAA,CAAkB,EAAE,KAAA,EAAO,EAAA,CAAG,QAAA,EAAU,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAO,EAAG,UAAU,CAAA;AACrG,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,QAAA,CAAS,SAAA,EAAW,GAAG,YAAY,CAAA;AAAA,QACrC,CAAA,MAAA,IAAW,SAAA,IAAa,YAAA,KAAiB,MAAA,EAAW;AAClD,UAAA,QAAA,CAAS,WAAW,YAAY,CAAA;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,aAAA,EAAe,0BAAA,EAA4B,YAAA,EAAc,QAAQ,CAAC,CAAA;AAItE,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAA,IAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAClC,MAAA,MAAM,EAAA,GAAK,QAAQ,CAAC,CAAA;AACpB,MAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,aAAA,EAAe,EAAE,CAAA;AAC7C,MAAA,IAAI,QAAQ,MAAA,EAAW;AAErB,QAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC5B,QAAA,IAAI,OAAA,GAAU,GAAA;AACd,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACzC,UAAA,IAAI,EAAE,KAAA,CAAM,CAAC,CAAA,IAAK,OAAA,CAAA,IAAY,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,MAAM,QAAA,IAAY,OAAA,CAAQ,MAAM,CAAC,CAAC,MAAM,IAAA,EAAM;AACjG,YAAA,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,EAAC;AAAA,UACvB;AACA,UAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,QAC5B;AACA,QAAA,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAA,GAAI,GAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,aAAA,EAAe,SAAS,CAAC,CAAA;AAE7B,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,CAAC,KAAA,KAAgC;AAE/B,MAAA,SAAS,KAAA,CAAM,GAAgB,OAAA,EAA+B;AA1OpE,QAAA,IAAA,EAAA;AA2OQ,QAAA,IAAI,CAAA,CAAE,IAAA,KAAS,SAAA,IAAa,CAAC,EAAE,EAAA,EAAI;AACjC,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,IAAA,CAAI,EAAA,GAAA,CAAA,CAAE,SAAF,IAAA,GAAA,MAAA,GAAA,EAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,aAAa,CAAA,CAAA,EAAI;AACpD,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,IAAI,CAAC,EAAE,SAAA,EAAW;AAChB,UAAA,OAAO,IAAA;AAAA,QACT;AAGA,QAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,CAAA,CAAE,SAAS,CAAA;AACzC,QAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAClC,UAAA,IAAI,YAAY,CAAC,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA,EAAG;AACzC,YAAA,OAAA,CAAQ,GAAA,CAAI,EAAE,EAAE,CAAA;AAChB,YAAA,IAAI,CAAC,KAAA,CAAM,QAAA,EAAU,OAAO,CAAA,EAAG;AAC7B,cAAA,OAAO,KAAA;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAGA,QAAA,OAAO,qBAAA,CAAsB,CAAA,CAAE,SAAA,EAAW,UAAU,CAAA;AAAA,MACtD;AACA,MAAA,OAAO,KAAA,CAAM,KAAA,kBAAO,IAAI,GAAA,EAAa,CAAA;AAAA,IACvC,CAAA;AAAA,IACA,CAAC,YAAY,SAAS;AAAA,GACxB;AAEA,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,OAAO,IAAA,KAAqB;AAC1B,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,IAAA,CAAA;AACX,MAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAQ,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,GAAI,CAAC,CAAA;AAEvD,MAAA,IAAI;AACF,QAAA,MAAM,sBAAA,CAAuB,KAAA,EAAO,IAAA,EAAM,gBAAA,EAAkB,cAAc,CAAA;AAC1E,QAAA,MAAM,CAAC,SAAS,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,mBAAA,CAAoB,KAAA,EAAO,gBAAgB,CAAA,EAAG,QAAQ,CAAC,CAAA;AAC9F,QAAA,MAAM,WAAuB,EAAC;AAC9B,QAAA,KAAA,MAAW,SAAS,gBAAA,EAAkB;AACpC,UAAA,IAAI,KAAA,CAAM,iBAAiB,KAAA,CAAA,EAAW;AACpC,YAAA,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAC,CAAA,GAAI,KAAA,CAAM,YAAA;AAAA,UACnC;AAAA,QACF;AACA,QAAA,MAAM,SAAS,EAAE,GAAG,QAAA,EAAU,GAAG,UAAU,MAAA,EAAO;AAClD,QAAA,MAAM,aAAA,GAAgB,yBAAA,CAA0B,MAAA,EAAQ,MAAM,CAAA;AAC9D,QAAA,KAAA,CAAM,EAAE,GAAG,MAAA,EAAQ,GAAG,eAAe,CAAA;AACrC,QAAA,SAAA,CAAU,WAAW,sBAAsB,CAAA;AAAA,MAC7C,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,QAAA;AACN,QAAA,cAAA,CAAe,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,6BAA6B,CAAA;AAAA,MACnF,CAAA,SAAE;AACA,QAAA,aAAA,CAAc,KAAK,CAAA;AACnB,QAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AAAA,MACb;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,gBAAA,EAAkB,gBAAgB,MAAA,EAAQ,KAAA,EAAO,WAAW,QAAQ;AAAA,GAC9E;AAGA,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,KAAA,KAAkC;AACjC,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,QAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AAC1B,UAAA;AAAA,QACF;AACA,QAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG;AAC1B,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,IAAI,eAAA,CAAgB,KAAA,EAAO,aAAA,EAAe,SAAA,EAAW,UAAU,CAAA,EAAG;AAChE,UAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,aAAA,EAAe,OAAA,CAAQ,KAAK,CAAC,CAAA;AACzD,UAAA,IAAI,QAAQ,uBAAA,EAAyB;AACnC,YAAA;AAAA,UACF;AACA,UAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,IAAA,IAAQ,QAAQ,EAAA,EAAI;AACnD,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,aAAA,EAAe,SAAA,EAAW,YAAY,cAAc;AAAA,GAC/D;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,KAAA,KAAgC;AAC/B,MAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AACvB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,qBAAA,CAAsB,KAAA,CAAM,YAAA,EAAc,UAAU,CAAA;AAAA,IAC7D,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAGA,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,KAAA,KAAkC;AACjC,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,QAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,aAAA,EAAe,OAAA,CAAQ,KAAK,CAAC,CAAA;AACzD,QAAA,IAAI,QAAQ,MAAA,IAAa,GAAA,KAAQ,QAAQ,GAAA,KAAQ,EAAA,IAAM,QAAQ,KAAA,EAAO;AACpE,UAAA;AAAA,QACF;AACA,QAAA,IAAI,GAAA,KAAQ,MAAM,YAAA,EAAc;AAC9B,UAAA;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,cAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA;AAAA;AAAA,IAEA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA;AAAA,IAEA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA;AAAA,IAEA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|