@grafana/plugin-ui 0.16.1 → 0.17.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/dist/cjs/index.cjs +21907 -20495
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +882 -554
- package/dist/cjs/test-utils.cjs +3979 -91
- package/dist/cjs/test-utils.cjs.map +1 -1
- package/dist/cjs/test-utils.d.cts +1 -1
- package/dist/esm/_virtual/chance2.js +2 -2
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js +7 -7
- package/dist/esm/async-query-data/DatasourceWithAsyncBackend.js.map +1 -1
- package/dist/esm/async-query-data/RunQueryButtons.js +4 -4
- package/dist/esm/async-query-data/RunQueryButtons.js.map +1 -1
- package/dist/esm/async-query-data/requestLooper.js +6 -6
- package/dist/esm/async-query-data/requestLooper.js.map +1 -1
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +7 -7
- 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/DatasourceConfigWizard/DatasourceConfigWizard.js +23 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceConfigWizard.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js +27 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/DatasourceErrorBoundary.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js +61 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/SchemaField.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/WizardLayout.js +89 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/WizardLayout.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js +75 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/cel.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js +262 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/config.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js +354 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/datasource.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.js +93 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js +254 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useDatasourceConfigForm.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js +106 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/hooks/useHealthChecks.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js +52 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/AuthorizationHeaderField.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js +32 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ComplexFieldNote.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FieldInput.js +110 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FieldInput.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js +112 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/FileUploadField.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js +140 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/IndexedPairEditor.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js +201 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/ObjectArrayEditor.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PrimitiveInputs.js +103 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/PrimitiveInputs.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js +72 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/SecureFieldInput.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js +94 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/StringArrayInput.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/fieldUtils.js +138 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/inputs/fieldUtils.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/layoutParts.js +82 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/layoutParts.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js +30 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/resolvePluginName.js.map +1 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js +128 -0
- package/dist/esm/components/ConfigEditor/DatasourceConfigWizard/styles.js.map +1 -0
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLink.js +5 -4
- package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLinks.js +3 -3
- package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +10 -10
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/styles.js +2 -2
- package/dist/esm/components/DatePicker/styles.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
- package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
- package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
- package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
- package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js +2 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorField.js +5 -5
- package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
- package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
- package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
- package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
- package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
- package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
- package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditor.js +7 -7
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditorRow.js.map +1 -0
- package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
- package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/Space.js +2 -2
- package/dist/esm/components/QueryEditor/Space.js.map +1 -1
- package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/defaults.js +7 -7
- package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
- package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +4 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +3 -3
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/types.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
- package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +28 -27
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
- package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
- package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/types.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js +15 -12
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/tokenType.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
- package/dist/esm/components/Segment/Segment.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +8 -8
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +3 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +8 -5
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +5 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +6 -5
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
- package/dist/esm/datasource/SqlDatasource.js +17 -16
- package/dist/esm/datasource/SqlDatasource.js.map +1 -1
- package/dist/esm/datasource/constants.js.map +1 -1
- package/dist/esm/hooks/useDebounce.js.map +1 -1
- package/dist/esm/index.d.ts +882 -554
- package/dist/esm/index.js +11 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/chance/chance.js +3973 -88
- package/dist/esm/node_modules/chance/chance.js.map +1 -1
- package/dist/esm/node_modules/immutable/dist/immutable.es.js +6186 -0
- package/dist/esm/node_modules/immutable/dist/immutable.es.js.map +1 -0
- package/dist/esm/node_modules/js-yaml/dist/js-yaml.js +3059 -0
- package/dist/esm/node_modules/js-yaml/dist/js-yaml.js.map +1 -0
- package/dist/esm/node_modules/react-hook-form/dist/index.esm.js +2798 -0
- package/dist/esm/node_modules/react-hook-form/dist/index.esm.js.map +1 -0
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js +3 -3
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js +1 -6
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js +3 -3
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/merge.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/observable/of.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/catchError.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/map.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js +7 -5
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isIterable.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isPromise.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js +2 -2
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/lift.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -1
- package/dist/esm/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -1
- package/dist/esm/node_modules/semver/classes/comparator.js.map +1 -1
- package/dist/esm/node_modules/semver/classes/range.js +24 -4
- package/dist/esm/node_modules/semver/classes/range.js.map +1 -1
- package/dist/esm/node_modules/semver/classes/semver.js +27 -10
- package/dist/esm/node_modules/semver/classes/semver.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/clean.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/cmp.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/coerce.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/compare-build.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/diff.js +1 -1
- package/dist/esm/node_modules/semver/functions/diff.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/inc.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/parse.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/prerelease.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/satisfies.js.map +1 -1
- package/dist/esm/node_modules/semver/functions/truncate.js +62 -0
- package/dist/esm/node_modules/semver/functions/truncate.js.map +1 -0
- package/dist/esm/node_modules/semver/functions/valid.js +5 -5
- package/dist/esm/node_modules/semver/functions/valid.js.map +1 -1
- package/dist/esm/node_modules/semver/index.js +3 -0
- package/dist/esm/node_modules/semver/index.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/debug.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/identifiers.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/lrucache.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/parse-options.js.map +1 -1
- package/dist/esm/node_modules/semver/internal/re.js +13 -13
- package/dist/esm/node_modules/semver/internal/re.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/intersects.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/max-satisfying.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/min-satisfying.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/min-version.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/outside.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/simplify.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/subset.js +3 -3
- package/dist/esm/node_modules/semver/ranges/subset.js.map +1 -1
- package/dist/esm/node_modules/semver/ranges/valid.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +2 -2
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/esm/schema/utils/dsconfig.js +97 -0
- package/dist/esm/schema/utils/dsconfig.js.map +1 -0
- package/dist/esm/schema/utils/llm.js +54 -0
- package/dist/esm/schema/utils/llm.js.map +1 -0
- package/dist/esm/schema/utils/provisioning.js +389 -0
- package/dist/esm/schema/utils/provisioning.js.map +1 -0
- package/dist/esm/schema/utils/registry.js +31 -0
- package/dist/esm/schema/utils/registry.js.map +1 -0
- package/dist/esm/test/mocks/DataQuery.js.map +1 -1
- package/dist/esm/test/mocks/Datasource.js +1 -1
- package/dist/esm/test/mocks/Datasource.js.map +1 -1
- package/dist/esm/test/mocks/Plugin.js +5 -2
- package/dist/esm/test/mocks/Plugin.js.map +1 -1
- package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
- package/dist/esm/test/mocks/utils.js +2 -2
- package/dist/esm/test/mocks/utils.js.map +1 -1
- package/dist/esm/test-utils.d.ts +1 -1
- package/package.json +67 -66
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +0 -1
- package/dist/esm/schema/registry/alertmanager.schema.json.js +0 -77
- package/dist/esm/schema/registry/alertmanager.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/cloudwatch.schema.json.js +0 -384
- package/dist/esm/schema/registry/cloudwatch.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/elasticsearch.schema.json.js +0 -287
- package/dist/esm/schema/registry/elasticsearch.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js +0 -166
- package/dist/esm/schema/registry/grafana-amazonprometheus-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js +0 -145
- package/dist/esm/schema/registry/grafana-appdynamics-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js +0 -123
- package/dist/esm/schema/registry/grafana-astradb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js +0 -158
- package/dist/esm/schema/registry/grafana-athena-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js +0 -204
- package/dist/esm/schema/registry/grafana-azure-data-explorer-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js +0 -294
- package/dist/esm/schema/registry/grafana-azure-monitor-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js +0 -101
- package/dist/esm/schema/registry/grafana-azuredevops-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js +0 -125
- package/dist/esm/schema/registry/grafana-azureprometheus-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js +0 -508
- package/dist/esm/schema/registry/grafana-bigquery-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js +0 -1400
- package/dist/esm/schema/registry/grafana-clickhouse-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js +0 -302
- package/dist/esm/schema/registry/grafana-cockroachdb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js +0 -291
- package/dist/esm/schema/registry/grafana-databricks-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js +0 -155
- package/dist/esm/schema/registry/grafana-datadog-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js +0 -179
- package/dist/esm/schema/registry/grafana-dynatrace-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js +0 -134
- package/dist/esm/schema/registry/grafana-falconlogscale-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js +0 -156
- package/dist/esm/schema/registry/grafana-github-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js +0 -84
- package/dist/esm/schema/registry/grafana-gitlab-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js +0 -231
- package/dist/esm/schema/registry/grafana-googlesheets-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js +0 -87
- package/dist/esm/schema/registry/grafana-honeycomb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js +0 -159
- package/dist/esm/schema/registry/grafana-iot-sitewise-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js +0 -188
- package/dist/esm/schema/registry/grafana-jira-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js +0 -82
- package/dist/esm/schema/registry/grafana-looker-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js +0 -278
- package/dist/esm/schema/registry/grafana-mongodb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js +0 -168
- package/dist/esm/schema/registry/grafana-mqtt-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js +0 -129
- package/dist/esm/schema/registry/grafana-newrelic-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js +0 -56
- package/dist/esm/schema/registry/grafana-odbc-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js +0 -212
- package/dist/esm/schema/registry/grafana-opensearch-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js +0 -186
- package/dist/esm/schema/registry/grafana-oracle-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js +0 -85
- package/dist/esm/schema/registry/grafana-pagerduty-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js +0 -411
- package/dist/esm/schema/registry/grafana-postgresql-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js +0 -41
- package/dist/esm/schema/registry/grafana-pyroscope-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js +0 -201
- package/dist/esm/schema/registry/grafana-redshift-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js +0 -201
- package/dist/esm/schema/registry/grafana-salesforce-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js +0 -208
- package/dist/esm/schema/registry/grafana-saphana-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js +0 -94
- package/dist/esm/schema/registry/grafana-sentry-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js +0 -179
- package/dist/esm/schema/registry/grafana-servicenow-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js +0 -304
- package/dist/esm/schema/registry/grafana-snowflake-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js +0 -319
- package/dist/esm/schema/registry/grafana-splunk-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js +0 -90
- package/dist/esm/schema/registry/grafana-splunkobservability-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js +0 -74
- package/dist/esm/schema/registry/grafana-strava-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js +0 -102
- package/dist/esm/schema/registry/grafana-sumologic-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js +0 -92
- package/dist/esm/schema/registry/grafana-surrealdb-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js +0 -145
- package/dist/esm/schema/registry/grafana-timestream-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js +0 -80
- package/dist/esm/schema/registry/grafana-wavefront-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js +0 -112
- package/dist/esm/schema/registry/grafana-x-ray-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js +0 -114
- package/dist/esm/schema/registry/grafana-yugabyte-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/graphite.schema.json.js +0 -104
- package/dist/esm/schema/registry/graphite.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/index.js +0 -27
- package/dist/esm/schema/registry/index.js.map +0 -1
- package/dist/esm/schema/registry/influxdb.schema.json.js +0 -717
- package/dist/esm/schema/registry/influxdb.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/jaeger.schema.json.js +0 -59
- package/dist/esm/schema/registry/jaeger.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/loki.schema.json.js +0 -545
- package/dist/esm/schema/registry/loki.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js +0 -45
- package/dist/esm/schema/registry/marcusolsson-csv-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js +0 -36
- package/dist/esm/schema/registry/marcusolsson-json-datasource.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/mssql.schema.json.js +0 -292
- package/dist/esm/schema/registry/mssql.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/mysql.schema.json.js +0 -304
- package/dist/esm/schema/registry/mysql.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/opentsdb.schema.json.js +0 -113
- package/dist/esm/schema/registry/opentsdb.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/prometheus.schema.json.js +0 -783
- package/dist/esm/schema/registry/prometheus.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/stackdriver.schema.json.js +0 -224
- package/dist/esm/schema/registry/stackdriver.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/staticRegistry.js +0 -135
- package/dist/esm/schema/registry/staticRegistry.js.map +0 -1
- package/dist/esm/schema/registry/tempo.schema.json.js +0 -664
- package/dist/esm/schema/registry/tempo.schema.json.js.map +0 -1
- package/dist/esm/schema/registry/zipkin.schema.json.js +0 -40
- package/dist/esm/schema/registry/zipkin.schema.json.js.map +0 -1
- /package/dist/esm/components/{QueryEditorRow → QueryEditor}/QueryEditorRow.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WizardLayout.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/WizardLayout.tsx"],"sourcesContent":["import React, { type ReactNode, useMemo, useState } from 'react';\nimport { useStyles2, Button, Select, Icon, Tooltip, Spinner } from '@grafana/ui';\nimport { isAuthGroupId } from './config';\nimport { GroupFields, FormFooter, FetchErrorState } from './layoutParts';\nimport { getWizardStyles } from './styles';\nimport { type DatasourceConfigSchema } from '../../../schema/schema';\nimport { type useDatasourceConfigForm } from './hooks/useDatasourceConfigForm';\n\ntype WizardLayoutProps = {\n form: ReturnType<typeof useDatasourceConfigForm>;\n schema: DatasourceConfigSchema;\n dsUid: string;\n dsName: string;\n onRetest?: () => void;\n healthError?: string;\n renderActions?: (props: { dsUid: string; dsName: string; dsType: string; healthError?: string }) => ReactNode;\n};\n\nexport function WizardLayout({ form, schema, dsUid, dsName, onRetest, healthError, renderActions }: WizardLayoutProps) {\n const styles = useStyles2(getWizardStyles);\n const [currentStep, setCurrentStep] = useState(0);\n const { resolvedGroups, handleSubmit, initializing, fetchError, submitting, readOnly, isGroupValid, onSubmit } = form;\n const canSave = useMemo(() => resolvedGroups.every(isGroupValid), [resolvedGroups, isGroupValid]);\n\n if (initializing) {\n return (\n <div className={styles.container}>\n <Spinner size=\"sm\" inline /> Loading configuration...\n </div>\n );\n }\n\n if (fetchError) {\n return (\n <div className={styles.container}>\n <FetchErrorState error={fetchError} dsUid={dsUid} buttonClassName={styles.buttons} />\n </div>\n );\n }\n\n if (resolvedGroups.length === 0) {\n return <></>;\n }\n\n const currentResolved = resolvedGroups[currentStep];\n const currentGroup = currentResolved?.group;\n const isFirstStep = currentStep === 0;\n const isLastStep = currentStep === resolvedGroups.length - 1;\n\n return (\n <div className={styles.container}>\n {submitting && (\n <div className={styles.overlay}>\n <Spinner size=\"sm\" />\n <span>Saving & testing…</span>\n </div>\n )}\n {readOnly && (\n <div className={styles.readOnlyBanner}>\n <Icon name=\"lock\" size=\"xs\" />\n <span>Read-only — managed externally</span>\n </div>\n )}\n <div className={styles.navBar}>\n {currentGroup && (\n <Tooltip content={currentGroup.description ?? currentGroup.title}>\n <span className={styles.navTitle}>\n {currentGroup.title}\n <span className={styles.stepCount}>\n {currentStep + 1}/{resolvedGroups.length}\n </span>\n </span>\n </Tooltip>\n )}\n <div className={styles.navActions}>\n <Tooltip content={isFirstStep ? 'First step' : `Previous: ${resolvedGroups[currentStep - 1]?.group.title}`}>\n <Button\n variant=\"secondary\"\n fill=\"text\"\n size=\"sm\"\n icon=\"angle-left\"\n aria-label=\"Previous\"\n onClick={() => setCurrentStep(currentStep - 1)}\n disabled={isFirstStep || submitting}\n type=\"button\"\n />\n </Tooltip>\n <Select\n options={resolvedGroups.map((g, i) => ({ label: g.group.title, value: i }))}\n value={currentStep}\n onChange={(v) => {\n if (v?.value != null) {\n setCurrentStep(v.value);\n }\n }}\n disabled={submitting}\n width={18}\n />\n <Tooltip content={isLastStep ? 'Last step' : `Next: ${resolvedGroups[currentStep + 1]?.group.title}`}>\n <Button\n variant={isLastStep ? 'secondary' : 'primary'}\n size=\"sm\"\n icon=\"angle-right\"\n aria-label=\"Next\"\n onClick={() => setCurrentStep(currentStep + 1)}\n disabled={isLastStep || submitting}\n type=\"button\"\n />\n </Tooltip>\n </div>\n </div>\n\n {currentResolved && (\n <form onSubmit={handleSubmit(onSubmit)} className={styles.form}>\n <GroupFields\n group={currentResolved}\n form={form}\n dsUid={dsUid}\n showAuthHeaders={currentResolved.group.id === '_required' || isAuthGroupId(currentResolved.group.id)}\n />\n <FormFooter\n form={form}\n schema={schema}\n dsUid={dsUid}\n dsName={dsName}\n onRetest={onRetest}\n healthError={healthError}\n renderActions={renderActions}\n saveDisabled={submitting || !canSave}\n className={styles.buttons}\n />\n </form>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { evaluate, parse } from '@marcbachmann/cel-js';
|
|
2
|
+
|
|
3
|
+
const exprCache = /* @__PURE__ */ new Map();
|
|
4
|
+
function getCompiled(expr) {
|
|
5
|
+
if (exprCache.has(expr)) {
|
|
6
|
+
return exprCache.get(expr);
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const compiled = parse(expr);
|
|
10
|
+
exprCache.set(expr, compiled);
|
|
11
|
+
return compiled;
|
|
12
|
+
} catch (e) {
|
|
13
|
+
exprCache.set(expr, null);
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function buildCelContext(values) {
|
|
18
|
+
const ctx = {};
|
|
19
|
+
for (const [key, value] of Object.entries(values)) {
|
|
20
|
+
setNestedValue(ctx, key, value);
|
|
21
|
+
}
|
|
22
|
+
return ctx;
|
|
23
|
+
}
|
|
24
|
+
function setNestedValue(obj, path, value) {
|
|
25
|
+
const parts = path.split(".");
|
|
26
|
+
let current = obj;
|
|
27
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
28
|
+
const part = parts[i];
|
|
29
|
+
if (!(part in current) || typeof current[part] !== "object" || current[part] === null) {
|
|
30
|
+
current[part] = {};
|
|
31
|
+
}
|
|
32
|
+
current = current[part];
|
|
33
|
+
}
|
|
34
|
+
current[parts[parts.length - 1]] = value;
|
|
35
|
+
}
|
|
36
|
+
function evaluateCelExpression(expr, context, defaultValue = false) {
|
|
37
|
+
if (!expr || !expr.trim()) {
|
|
38
|
+
return defaultValue;
|
|
39
|
+
}
|
|
40
|
+
const compiled = getCompiled(expr);
|
|
41
|
+
if (!compiled) {
|
|
42
|
+
return defaultValue;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const result = compiled(context);
|
|
46
|
+
return !!result;
|
|
47
|
+
} catch (e) {
|
|
48
|
+
return defaultValue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function evaluateCelDirect(expr, context) {
|
|
52
|
+
return evaluate(expr, context);
|
|
53
|
+
}
|
|
54
|
+
function isValidCelExpression(expr) {
|
|
55
|
+
try {
|
|
56
|
+
parse(expr);
|
|
57
|
+
return true;
|
|
58
|
+
} catch (e) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function extractFieldRefs(expr) {
|
|
63
|
+
const matches = expr.matchAll(/([\w.]+)\s*(?:==|!=)/g);
|
|
64
|
+
const refs = /* @__PURE__ */ new Set();
|
|
65
|
+
for (const m of matches) {
|
|
66
|
+
refs.add(m[1]);
|
|
67
|
+
}
|
|
68
|
+
return [...refs];
|
|
69
|
+
}
|
|
70
|
+
function clearExpressionCache() {
|
|
71
|
+
exprCache.clear();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { buildCelContext, clearExpressionCache, evaluateCelDirect, evaluateCelExpression, extractFieldRefs, isValidCelExpression };
|
|
75
|
+
//# sourceMappingURL=cel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cel.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/cel.ts"],"sourcesContent":["/**\n * CEL (Common Expression Language) expression evaluator for schema conditions.\n *\n * Used by `dependsOn`, `requiredWhen`, `disabledWhen`, and `overrides[].when`.\n * Wraps @marcbachmann/cel-js with field-ID-aware context building.\n *\n * Go equivalent: github.com/google/cel-go\n */\n\nimport { evaluate as celEvaluate, parse as celParse } from '@marcbachmann/cel-js';\n\n// ============================================================\n// Expression cache — parse once, evaluate many times\n// ============================================================\n\ntype CompiledExpr = (ctx: Record<string, unknown>) => unknown;\nconst exprCache = new Map<string, CompiledExpr | null>();\n\nfunction getCompiled(expr: string): CompiledExpr | null {\n if (exprCache.has(expr)) {\n return exprCache.get(expr)!;\n }\n try {\n const compiled = celParse(expr);\n exprCache.set(expr, compiled);\n return compiled;\n } catch {\n exprCache.set(expr, null);\n return null;\n }\n}\n\n// ============================================================\n// Context builder — flat field values → nested object for CEL\n// ============================================================\n\n/**\n * Build a nested context object from flat form values keyed by field IDs.\n *\n * CEL interprets dots as property access, so `jsonData.auth_method == 'oauth2'`\n * requires `{ jsonData: { auth_method: 'oauth2' } }`.\n *\n * This function takes flat key-value pairs (from react-hook-form `watch()`)\n * and builds the nested structure CEL expects.\n *\n * @param values - Flat map of form keys to values (e.g. `{ \"auth_method\": \"oauth2\", \"oauth2.oauth2_type\": \"jwt\" }`)\n * @param fieldIdToFormKey - Optional map from field ID to form key for translation\n */\nexport function buildCelContext(values: Record<string, unknown>): Record<string, unknown> {\n const ctx: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(values)) {\n setNestedValue(ctx, key, value);\n }\n\n return ctx;\n}\n\nfunction setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const parts = path.split('.');\n let current = obj;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n if (!(part in current) || typeof current[part] !== 'object' || current[part] === null) {\n current[part] = {};\n }\n current = current[part] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = value;\n}\n\n// ============================================================\n// Public API\n// ============================================================\n\n/**\n * Evaluate a CEL expression against a context of field values.\n * Returns the boolean result, or `defaultValue` if the expression is invalid.\n *\n * @example\n * ```ts\n * evaluateCelExpression(\"jsonData.auth_method == 'oauth2'\", { jsonData: { auth_method: 'oauth2' } })\n * // => true\n *\n * evaluateCelExpression(\"auth_method == 'oauth2' && oauth2_type == 'jwt'\", { auth_method: 'oauth2', oauth2_type: 'jwt' })\n * // => true\n * ```\n */\nexport function evaluateCelExpression(expr: string, context: Record<string, unknown>, defaultValue = false): boolean {\n if (!expr || !expr.trim()) {\n return defaultValue;\n }\n\n const compiled = getCompiled(expr);\n if (!compiled) {\n return defaultValue;\n }\n\n try {\n const result = compiled(context);\n return !!result;\n } catch {\n return defaultValue;\n }\n}\n\n/**\n * Evaluate a CEL expression directly using `evaluate` (no caching).\n * Useful for one-off evaluations or testing.\n */\nexport function evaluateCelDirect(expr: string, context: Record<string, unknown>): unknown {\n return celEvaluate(expr, context);\n}\n\n/**\n * Validate that a CEL expression can be parsed without errors.\n * Returns true if valid, false otherwise.\n */\nexport function isValidCelExpression(expr: string): boolean {\n try {\n celParse(expr);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Extract all field ID references from a simple expression.\n * Used by `resolveRequiredFieldsGroup` to find dependency relationships.\n *\n * For simple expressions like `fieldA == 'x'`, returns `['fieldA']`.\n * For compound expressions like `fieldA == 'x' && fieldB == 'y'`, returns `['fieldA', 'fieldB']`.\n *\n * This uses regex extraction (not AST walking) for simplicity and speed.\n */\nexport function extractFieldRefs(expr: string): string[] {\n // Match identifiers (possibly dotted) that precede == or !=\n const matches = expr.matchAll(/([\\w.]+)\\s*(?:==|!=)/g);\n const refs = new Set<string>();\n for (const m of matches) {\n refs.add(m[1]);\n }\n return [...refs];\n}\n\n/**\n * Clear the expression cache. Useful for testing.\n */\nexport function clearExpressionCache(): void {\n exprCache.clear();\n}\n"],"names":["celParse","celEvaluate"],"mappings":"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"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { extractFieldRefs } from './cel.js';
|
|
2
|
+
|
|
3
|
+
const AUTH_GROUP_IDS = ["authentication", "auth"];
|
|
4
|
+
function isAuthGroupId(id) {
|
|
5
|
+
return AUTH_GROUP_IDS.includes(id);
|
|
6
|
+
}
|
|
7
|
+
function resolveGroups(schema) {
|
|
8
|
+
const fieldMap = /* @__PURE__ */ new Map();
|
|
9
|
+
for (const f of schema.fields) {
|
|
10
|
+
fieldMap.set(f.id, f);
|
|
11
|
+
}
|
|
12
|
+
if (schema.groups && schema.groups.length > 0) {
|
|
13
|
+
return schema.groups.slice().sort((a, b) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
return ((_a = a.order) != null ? _a : 0) - ((_b = b.order) != null ? _b : 0);
|
|
16
|
+
}).map((g) => ({
|
|
17
|
+
group: g,
|
|
18
|
+
fields: g.fieldRefs.map((ref) => fieldMap.get(ref)).filter((f) => f != null)
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
const allFields = schema.fields.filter((f) => f.kind !== "virtual" && !f.isItemField);
|
|
22
|
+
return [
|
|
23
|
+
{
|
|
24
|
+
group: { id: "default", title: "Configuration", fieldRefs: allFields.map((f) => f.id) },
|
|
25
|
+
fields: allFields
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
function resolveRequiredFieldsGroup(schema) {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
const fieldMap = /* @__PURE__ */ new Map();
|
|
32
|
+
for (const f of schema.fields) {
|
|
33
|
+
fieldMap.set(f.id, f);
|
|
34
|
+
}
|
|
35
|
+
const requiredIds = /* @__PURE__ */ new Set();
|
|
36
|
+
for (const f of schema.fields) {
|
|
37
|
+
if (f.required || ((_a = f.tags) == null ? void 0 : _a.includes("pinned"))) {
|
|
38
|
+
requiredIds.add(f.id);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const authGroup = (_b = schema.groups) == null ? void 0 : _b.find((g) => isAuthGroupId(g.id));
|
|
42
|
+
if (authGroup) {
|
|
43
|
+
for (const ref of authGroup.fieldRefs) {
|
|
44
|
+
if (fieldMap.has(ref)) {
|
|
45
|
+
requiredIds.add(ref);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (requiredIds.size === 0) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const includeIds = /* @__PURE__ */ new Set();
|
|
53
|
+
for (const id of requiredIds) {
|
|
54
|
+
includeIds.add(id);
|
|
55
|
+
const f = fieldMap.get(id);
|
|
56
|
+
if (f == null ? void 0 : f.dependsOn) {
|
|
57
|
+
for (const ref of extractFieldRefs(f.dependsOn)) {
|
|
58
|
+
if (fieldMap.has(ref)) {
|
|
59
|
+
includeIds.add(ref);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
for (const f of schema.fields) {
|
|
65
|
+
if (f.dependsOn && !includeIds.has(f.id)) {
|
|
66
|
+
const refs = extractFieldRefs(f.dependsOn);
|
|
67
|
+
if (refs.some((ref) => requiredIds.has(ref))) {
|
|
68
|
+
includeIds.add(f.id);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const virtualFields = schema.fields.filter((f) => includeIds.has(f.id));
|
|
73
|
+
if (virtualFields.length === 0) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
group: {
|
|
78
|
+
id: "_required",
|
|
79
|
+
title: "General",
|
|
80
|
+
fieldRefs: virtualFields.map((f) => f.id)
|
|
81
|
+
},
|
|
82
|
+
fields: virtualFields
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function formKey(field) {
|
|
86
|
+
return field.section ? `${field.section}.${field.key}` : field.key;
|
|
87
|
+
}
|
|
88
|
+
function getWatchedValue(watchedValues, key) {
|
|
89
|
+
if (key.includes(".")) {
|
|
90
|
+
const parts = key.split(".");
|
|
91
|
+
let current = watchedValues;
|
|
92
|
+
for (const part of parts) {
|
|
93
|
+
if (current == null || typeof current !== "object") {
|
|
94
|
+
return watchedValues[key];
|
|
95
|
+
}
|
|
96
|
+
current = current[part];
|
|
97
|
+
}
|
|
98
|
+
if (current !== void 0) {
|
|
99
|
+
return current;
|
|
100
|
+
}
|
|
101
|
+
return watchedValues[key];
|
|
102
|
+
}
|
|
103
|
+
return watchedValues[key];
|
|
104
|
+
}
|
|
105
|
+
function parseDependsOn(expr) {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
const m = expr.match(/^([\w.]+)\s*(==|!=)\s*(?:'([^']*)'|"([^"]*)"|(\S+))$/);
|
|
108
|
+
if (!m) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
return { field: m[1], value: ((_b = (_a = m[3]) != null ? _a : m[4]) != null ? _b : m[5]).trim(), negate: m[2] === "!=" };
|
|
112
|
+
}
|
|
113
|
+
function evaluateDependsOn(parsed, currentValue) {
|
|
114
|
+
const matches = String(currentValue != null ? currentValue : "") === parsed.value;
|
|
115
|
+
return parsed.negate ? !matches : matches;
|
|
116
|
+
}
|
|
117
|
+
function resolveActiveOverride(field, watchedValues, fieldById) {
|
|
118
|
+
if (!field.overrides || field.overrides.length === 0) {
|
|
119
|
+
return void 0;
|
|
120
|
+
}
|
|
121
|
+
for (const ov of field.overrides) {
|
|
122
|
+
const parsed = parseDependsOn(ov.when);
|
|
123
|
+
if (!parsed) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const depField = fieldById.get(parsed.field);
|
|
127
|
+
const depKey = depField ? formKey(depField) : parsed.field;
|
|
128
|
+
if (evaluateDependsOn(parsed, getWatchedValue(watchedValues, depKey))) {
|
|
129
|
+
return ov;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return void 0;
|
|
133
|
+
}
|
|
134
|
+
function resolveFieldValue(ref, values, fields) {
|
|
135
|
+
if (ref in values) {
|
|
136
|
+
return values[ref];
|
|
137
|
+
}
|
|
138
|
+
const field = fields.find((f) => f.id === ref);
|
|
139
|
+
if (field) {
|
|
140
|
+
const fk = formKey(field);
|
|
141
|
+
if (fk in values) {
|
|
142
|
+
return values[fk];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return void 0;
|
|
146
|
+
}
|
|
147
|
+
function evaluateComputedRead(expr, values, fields) {
|
|
148
|
+
function evalExpr(s) {
|
|
149
|
+
var _a;
|
|
150
|
+
s = s.trim();
|
|
151
|
+
if (s.startsWith("(") && findMatchingParen(s, 0) === s.length - 1) {
|
|
152
|
+
s = s.slice(1, -1).trim();
|
|
153
|
+
}
|
|
154
|
+
const qIdx = findTopLevel(s, "?");
|
|
155
|
+
if (qIdx !== -1) {
|
|
156
|
+
const condition = s.slice(0, qIdx).trim();
|
|
157
|
+
const rest = s.slice(qIdx + 1);
|
|
158
|
+
const cIdx = findTopLevel(rest, ":");
|
|
159
|
+
if (cIdx !== -1) {
|
|
160
|
+
const trueExpr = rest.slice(0, cIdx).trim();
|
|
161
|
+
const falseExpr = rest.slice(cIdx + 1).trim();
|
|
162
|
+
return evalCondition(condition) ? evalExpr(trueExpr) : evalExpr(falseExpr);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const strMatch = (_a = s.match(/^'([^']*)'$/)) != null ? _a : s.match(/^"([^"]*)"$/);
|
|
166
|
+
if (strMatch) {
|
|
167
|
+
return strMatch[1];
|
|
168
|
+
}
|
|
169
|
+
if (s === "true") {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
if (s === "false") {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
if (/^-?\d+(\.\d+)?$/.test(s)) {
|
|
176
|
+
return Number(s);
|
|
177
|
+
}
|
|
178
|
+
return resolveFieldValue(s, values, fields);
|
|
179
|
+
}
|
|
180
|
+
function evalCondition(cond) {
|
|
181
|
+
const eqMatch = cond.match(/^(.+?)\s*(==|!=)\s*(.+)$/);
|
|
182
|
+
if (eqMatch) {
|
|
183
|
+
const left = evalExpr(eqMatch[1]);
|
|
184
|
+
const right = evalExpr(eqMatch[3]);
|
|
185
|
+
const eq = String(left) === String(right);
|
|
186
|
+
return eqMatch[2] === "==" ? eq : !eq;
|
|
187
|
+
}
|
|
188
|
+
return !!evalExpr(cond);
|
|
189
|
+
}
|
|
190
|
+
function findMatchingParen(s, start) {
|
|
191
|
+
let depth = 0;
|
|
192
|
+
for (let i = start; i < s.length; i++) {
|
|
193
|
+
if (s[i] === "(") {
|
|
194
|
+
depth++;
|
|
195
|
+
} else if (s[i] === ")") {
|
|
196
|
+
depth--;
|
|
197
|
+
if (depth === 0) {
|
|
198
|
+
return i;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return -1;
|
|
203
|
+
}
|
|
204
|
+
function findTopLevel(s, char) {
|
|
205
|
+
let depth = 0;
|
|
206
|
+
let inStr = null;
|
|
207
|
+
for (let i = 0; i < s.length; i++) {
|
|
208
|
+
const c = s[i];
|
|
209
|
+
if (inStr) {
|
|
210
|
+
if (c === inStr) {
|
|
211
|
+
inStr = null;
|
|
212
|
+
}
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
if (c === "'" || c === '"') {
|
|
216
|
+
inStr = c;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (c === "(") {
|
|
220
|
+
depth++;
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (c === ")") {
|
|
224
|
+
depth--;
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (depth === 0 && c === char) {
|
|
228
|
+
return i;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return -1;
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
return evalExpr(expr);
|
|
235
|
+
} catch (e) {
|
|
236
|
+
return void 0;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function computeVirtualFieldValues(schema, existingValues) {
|
|
240
|
+
var _a;
|
|
241
|
+
const virtualValues = {};
|
|
242
|
+
for (const field of schema.fields) {
|
|
243
|
+
if (field.kind !== "virtual") {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
const fk = formKey(field);
|
|
247
|
+
if (((_a = field.storage) == null ? void 0 : _a.type) === "computed" && field.storage.read) {
|
|
248
|
+
const val = evaluateComputedRead(field.storage.read, existingValues, schema.fields);
|
|
249
|
+
if (val !== void 0) {
|
|
250
|
+
virtualValues[fk] = val;
|
|
251
|
+
} else if (field.defaultValue !== void 0) {
|
|
252
|
+
virtualValues[fk] = field.defaultValue;
|
|
253
|
+
}
|
|
254
|
+
} else if (field.defaultValue !== void 0) {
|
|
255
|
+
virtualValues[fk] = field.defaultValue;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return virtualValues;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export { AUTH_GROUP_IDS, computeVirtualFieldValues, evaluateComputedRead, evaluateDependsOn, formKey, getWatchedValue, isAuthGroupId, parseDependsOn, resolveActiveOverride, resolveGroups, resolveRequiredFieldsGroup };
|
|
262
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../../../src/components/ConfigEditor/DatasourceConfigWizard/config.ts"],"sourcesContent":["/**\n * Pure helper functions for working with DatasourceConfigSchema.\n *\n * Types are defined in schema.ts — import them from there directly.\n */\n\nimport { extractFieldRefs } from './cel';\nimport type { DatasourceConfigSchema, ConfigField, ConfigGroup, FieldOverride } from '../../../schema';\n\n/** A group paired with its resolved ConfigField objects (in fieldRefs order). */\nexport type ResolvedGroup = { group: ConfigGroup; fields: ConfigField[] };\n\n/**\n * Group ids that denote the authentication section. Registry schemas use the\n * full form `authentication`; `auth` is accepted for backwards compatibility\n * with older/short-form schemas.\n */\nexport const AUTH_GROUP_IDS: readonly string[] = ['authentication', 'auth'];\n\n/** Whether a group id denotes the authentication group. */\nexport function isAuthGroupId(id: string): boolean {\n return AUTH_GROUP_IDS.includes(id);\n}\n\n/**\n * Resolve a schema's groups into arrays of ConfigField objects.\n * If the schema has no groups, returns a single group containing all non-virtual fields.\n */\nexport function resolveGroups(schema: DatasourceConfigSchema): ResolvedGroup[] {\n const fieldMap = new Map<string, ConfigField>();\n for (const f of schema.fields) {\n fieldMap.set(f.id, f);\n }\n\n if (schema.groups && schema.groups.length > 0) {\n return schema.groups\n .slice()\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .map((g) => ({\n group: g,\n fields: g.fieldRefs.map((ref) => fieldMap.get(ref)).filter((f): f is ConfigField => f != null),\n }));\n }\n\n // No groups: single step with all storage fields\n const allFields = schema.fields.filter((f) => f.kind !== 'virtual' && !f.isItemField);\n return [\n {\n group: { id: 'default', title: 'Configuration', fieldRefs: allFields.map((f) => f.id) },\n fields: allFields,\n },\n ];\n}\n\n/**\n * Build a virtual \"Required\" group containing all required fields, any parent\n * fields they depend on (via `dependsOn`), and any child fields that depend on\n * required fields. When the schema contains an authentication group (id\n * `authentication` or `auth`), its fields are also pulled in (auth is\n * effectively required for Prometheus/Loki/Tempo style datasources). Fields\n * are returned in schema order and de-duplicated.\n * Returns `null` when the virtual group would be empty.\n */\nexport function resolveRequiredFieldsGroup(schema: DatasourceConfigSchema): ResolvedGroup | null {\n const fieldMap = new Map<string, ConfigField>();\n for (const f of schema.fields) {\n fieldMap.set(f.id, f);\n }\n\n const requiredIds = new Set<string>();\n for (const f of schema.fields) {\n if (f.required || f.tags?.includes('pinned')) {\n requiredIds.add(f.id);\n }\n }\n\n // Include all fields from the authentication group as effectively required\n const authGroup = schema.groups?.find((g) => isAuthGroupId(g.id));\n if (authGroup) {\n for (const ref of authGroup.fieldRefs) {\n if (fieldMap.has(ref)) {\n requiredIds.add(ref);\n }\n }\n }\n\n if (requiredIds.size === 0) {\n return null;\n }\n\n const includeIds = new Set<string>();\n\n // Required fields + parent fields they depend on\n for (const id of requiredIds) {\n includeIds.add(id);\n const f = fieldMap.get(id);\n if (f?.dependsOn) {\n for (const ref of extractFieldRefs(f.dependsOn)) {\n if (fieldMap.has(ref)) {\n includeIds.add(ref);\n }\n }\n }\n }\n\n // Child fields that depend on any required field\n for (const f of schema.fields) {\n if (f.dependsOn && !includeIds.has(f.id)) {\n const refs = extractFieldRefs(f.dependsOn);\n if (refs.some((ref) => requiredIds.has(ref))) {\n includeIds.add(f.id);\n }\n }\n }\n\n const virtualFields = schema.fields.filter((f) => includeIds.has(f.id));\n if (virtualFields.length === 0) {\n return null;\n }\n\n return {\n group: {\n id: '_required',\n title: 'General',\n fieldRefs: virtualFields.map((f) => f.id),\n },\n fields: virtualFields,\n };\n}\n\n/**\n * Unique form key for a field. Section-scoped fields (e.g. section:\"logs\", key:\"defaultTable\")\n * get a prefixed key (\"logs.defaultTable\") so they don't collide with top-level fields that\n * share the same key name.\n */\nexport function formKey(field: ConfigField): string {\n return field.section ? `${field.section}.${field.key}` : field.key;\n}\n\n/**\n * Resolve a possibly-dotted key against watchedValues from react-hook-form.\n * RHF's `watch()` returns nested objects for dotted Controller names\n * (e.g. \"logs.otelEnabled\" → { logs: { otelEnabled: true } }),\n * so a flat `obj[\"logs.otelEnabled\"]` lookup misses.\n *\n * For dotted keys we must try the nested path **first**: react-hook-form's\n * Controller `onChange` writes nested objects via its internal `set()`, but\n * `reset()` may have created a flat dotted key with the same name. After user\n * interaction the nested value is authoritative; the stale flat key must not\n * shadow it. This mirrors RHF's own `get()` semantics (nested-first, flat\n * fallback).\n */\nexport function getWatchedValue(watchedValues: Record<string, unknown>, key: string): unknown {\n // For dotted keys, prefer the nested path walk.\n if (key.includes('.')) {\n const parts = key.split('.');\n let current: unknown = watchedValues;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') {\n // Nested path doesn't exist — fall back to flat key\n return watchedValues[key];\n }\n current = (current as Record<string, unknown>)[part];\n }\n if (current !== undefined) {\n return current;\n }\n // Nested walk yielded undefined — try flat key as fallback\n return watchedValues[key];\n }\n // Non-dotted key: direct property access\n return watchedValues[key];\n}\n\n/**\n * Parse a simple CEL-like dependsOn expression: \"fieldId == 'value'\" or \"fieldId != 'value'\".\n * Only single comparisons are supported — no &&, ||, or parentheses.\n * Field IDs may contain dots and underscores (e.g. \"jsonData.oauth2.oauth2_type\").\n * Values may be single-quoted, double-quoted, or unquoted literals (true/false/numbers).\n * Returns { field, value, negate } or null if unparseable.\n */\nexport function parseDependsOn(expr: string): { field: string; value: string; negate: boolean } | null {\n // Match: fieldRef == 'value' | fieldRef == \"value\" | fieldRef == literal\n // Field ref: word chars and dots, no parens/operators.\n // Unquoted values: non-whitespace, no quotes, no logical operators.\n const m = expr.match(/^([\\w.]+)\\s*(==|!=)\\s*(?:'([^']*)'|\"([^\"]*)\"|(\\S+))$/);\n if (!m) {\n return null;\n }\n return { field: m[1], value: (m[3] ?? m[4] ?? m[5]).trim(), negate: m[2] === '!=' };\n}\n\n/**\n * Evaluate a parsed dependsOn condition against a value.\n * Handles both == and != operators.\n */\nexport function evaluateDependsOn(parsed: { value: string; negate: boolean }, currentValue: unknown): boolean {\n const matches = String(currentValue ?? '') === parsed.value;\n return parsed.negate ? !matches : matches;\n}\n\n/**\n * Resolve the first matching override for a field given current form values.\n * Override `when` uses the same \"fieldId == 'value'\" syntax as dependsOn.\n * Returns the matching override or undefined if none match.\n */\nexport function resolveActiveOverride(\n field: ConfigField,\n watchedValues: Record<string, unknown>,\n fieldById: Map<string, ConfigField>\n): FieldOverride | undefined {\n if (!field.overrides || field.overrides.length === 0) {\n return undefined;\n }\n for (const ov of field.overrides) {\n const parsed = parseDependsOn(ov.when);\n if (!parsed) {\n continue;\n }\n const depField = fieldById.get(parsed.field);\n const depKey = depField ? formKey(depField) : parsed.field;\n if (evaluateDependsOn(parsed, getWatchedValue(watchedValues, depKey))) {\n return ov;\n }\n }\n return undefined;\n}\n\n/**\n * Resolve a field reference like \"root.basicAuth\" or \"jsonData.oauthPassThru\"\n * to its current value from a flat form values map, using the schema's field definitions.\n */\nfunction resolveFieldValue(ref: string, values: Record<string, unknown>, fields: ConfigField[]): unknown {\n // Try direct match on formKey first\n if (ref in values) {\n return values[ref];\n }\n // Try matching by field ID → formKey\n const field = fields.find((f) => f.id === ref);\n if (field) {\n const fk = formKey(field);\n if (fk in values) {\n return values[fk];\n }\n }\n return undefined;\n}\n\n/**\n * Evaluate a simple computed.read expression against form values.\n * Supports patterns used in dsconfig schemas:\n * - \"fieldRef == true ? 'a' : (fieldRef == true ? 'b' : 'c')\"\n * - Simple ternary chains with equality checks\n * Falls back to the field's defaultValue if the expression can't be evaluated.\n */\nexport function evaluateComputedRead(expr: string, values: Record<string, unknown>, fields: ConfigField[]): unknown {\n // Recursively evaluate ternary: condition ? trueVal : falseVal\n function evalExpr(s: string): unknown {\n s = s.trim();\n\n // Strip outer parens\n if (s.startsWith('(') && findMatchingParen(s, 0) === s.length - 1) {\n s = s.slice(1, -1).trim();\n }\n\n // Ternary: find top-level \"?\"\n const qIdx = findTopLevel(s, '?');\n if (qIdx !== -1) {\n const condition = s.slice(0, qIdx).trim();\n const rest = s.slice(qIdx + 1);\n const cIdx = findTopLevel(rest, ':');\n if (cIdx !== -1) {\n const trueExpr = rest.slice(0, cIdx).trim();\n const falseExpr = rest.slice(cIdx + 1).trim();\n return evalCondition(condition) ? evalExpr(trueExpr) : evalExpr(falseExpr);\n }\n }\n\n // String literal\n const strMatch = s.match(/^'([^']*)'$/) ?? s.match(/^\"([^\"]*)\"$/);\n if (strMatch) {\n return strMatch[1];\n }\n // Boolean/number literals\n if (s === 'true') {\n return true;\n }\n if (s === 'false') {\n return false;\n }\n if (/^-?\\d+(\\.\\d+)?$/.test(s)) {\n return Number(s);\n }\n\n // Field reference\n return resolveFieldValue(s, values, fields);\n }\n\n function evalCondition(cond: string): boolean {\n // \"ref == value\" or \"ref != value\"\n const eqMatch = cond.match(/^(.+?)\\s*(==|!=)\\s*(.+)$/);\n if (eqMatch) {\n const left = evalExpr(eqMatch[1]);\n const right = evalExpr(eqMatch[3]);\n const eq = String(left) === String(right);\n return eqMatch[2] === '==' ? eq : !eq;\n }\n // Truthy check\n return !!evalExpr(cond);\n }\n\n function findMatchingParen(s: string, start: number): number {\n let depth = 0;\n for (let i = start; i < s.length; i++) {\n if (s[i] === '(') {\n depth++;\n } else if (s[i] === ')') {\n depth--;\n if (depth === 0) {\n return i;\n }\n }\n }\n return -1;\n }\n\n function findTopLevel(s: string, char: string): number {\n let depth = 0;\n let inStr: string | null = null;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (inStr) {\n if (c === inStr) {\n inStr = null;\n }\n continue;\n }\n if (c === \"'\" || c === '\"') {\n inStr = c;\n continue;\n }\n if (c === '(') {\n depth++;\n continue;\n }\n if (c === ')') {\n depth--;\n continue;\n }\n if (depth === 0 && c === char) {\n return i;\n }\n }\n return -1;\n }\n\n try {\n return evalExpr(expr);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Compute initial values for all virtual fields that have storage.computed.read expressions.\n * Call after loading existing storage field values.\n */\nexport function computeVirtualFieldValues(\n schema: DatasourceConfigSchema,\n existingValues: Record<string, unknown>\n): Record<string, unknown> {\n const virtualValues: Record<string, unknown> = {};\n for (const field of schema.fields) {\n if (field.kind !== 'virtual') {\n continue;\n }\n const fk = formKey(field);\n if (field.storage?.type === 'computed' && field.storage.read) {\n const val = evaluateComputedRead(field.storage.read, existingValues, schema.fields);\n if (val !== undefined) {\n virtualValues[fk] = val;\n } else if (field.defaultValue !== undefined) {\n virtualValues[fk] = field.defaultValue;\n }\n } else if (field.defaultValue !== undefined) {\n virtualValues[fk] = field.defaultValue;\n }\n }\n return virtualValues;\n}\n"],"names":[],"mappings":"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"}
|