@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,354 @@
|
|
|
1
|
+
import { getBackendSrv } from '@grafana/runtime';
|
|
2
|
+
import { formKey } from './config.js';
|
|
3
|
+
|
|
4
|
+
const SECURE_FIELD_CONFIGURED = "__CONFIGURED__";
|
|
5
|
+
function resolveSecureKeyTemplate(template, item, index) {
|
|
6
|
+
return template.replace(/\{index1\}/g, String(index + 1)).replace(/\{index\}/g, String(index)).replace(/\{item\.(\w+)\}/g, (_, key) => {
|
|
7
|
+
var _a;
|
|
8
|
+
return String((_a = item[key]) != null ? _a : "");
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function evaluateItemCondition(condition, item) {
|
|
12
|
+
const trimmed = condition.trim();
|
|
13
|
+
if (trimmed === "true") {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
const match = trimmed.match(/^item\.(\w+)\s*==\s*(.+)$/);
|
|
17
|
+
if (!match) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const [, key, rawValue] = match;
|
|
21
|
+
const actualValue = item[key];
|
|
22
|
+
const expected = rawValue.trim();
|
|
23
|
+
if (expected === "true") {
|
|
24
|
+
return actualValue === true;
|
|
25
|
+
}
|
|
26
|
+
if (expected === "false") {
|
|
27
|
+
return actualValue === false;
|
|
28
|
+
}
|
|
29
|
+
const unquoted = expected.replace(/^['"]|['"]$/g, "");
|
|
30
|
+
return String(actualValue) === unquoted;
|
|
31
|
+
}
|
|
32
|
+
function findActiveSecureOverride(itemFields, item, index) {
|
|
33
|
+
for (const field of itemFields) {
|
|
34
|
+
if (!field.overrides) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
for (const override of field.overrides) {
|
|
38
|
+
if (!override.secureKey) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (evaluateItemCondition(override.when, item)) {
|
|
42
|
+
return {
|
|
43
|
+
fieldKey: field.key,
|
|
44
|
+
resolvedKey: resolveSecureKeyTemplate(override.secureKey, item, index)
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
function patternToRegex(pattern) {
|
|
52
|
+
const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
53
|
+
return new RegExp("^" + escaped.replace("\\{index\\}", "(\\d+)") + "$");
|
|
54
|
+
}
|
|
55
|
+
function findIndicesForPattern(record, pattern) {
|
|
56
|
+
const re = patternToRegex(pattern);
|
|
57
|
+
const indices = [];
|
|
58
|
+
for (const key of Object.keys(record)) {
|
|
59
|
+
const m = key.match(re);
|
|
60
|
+
if (m) {
|
|
61
|
+
const n = Number(m[1]);
|
|
62
|
+
if (!Number.isNaN(n)) {
|
|
63
|
+
indices.push(n);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return indices.sort((a, b) => a - b);
|
|
68
|
+
}
|
|
69
|
+
function expandIndexedPair(field, ds) {
|
|
70
|
+
var _a, _b, _c;
|
|
71
|
+
const storage = field.storage;
|
|
72
|
+
if ((storage == null ? void 0 : storage.type) !== "indexedPair" || !storage.key || !storage.value) {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
const source = storage.key.target === "jsonData" ? (_a = ds.jsonData) != null ? _a : {} : ds;
|
|
76
|
+
const indices = findIndicesForPattern(source, storage.key.pattern);
|
|
77
|
+
const items = [];
|
|
78
|
+
for (const i of indices) {
|
|
79
|
+
const nameKey = storage.key.pattern.replace("{index}", String(i));
|
|
80
|
+
const valueKey = storage.value.pattern.replace("{index}", String(i));
|
|
81
|
+
const nameVal = source[nameKey];
|
|
82
|
+
if (nameVal === void 0 || nameVal === null) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const hasValue = storage.value.target === "secureJsonData" ? !!((_b = ds.secureJsonFields) == null ? void 0 : _b[valueKey]) : !!((_c = ds.jsonData) == null ? void 0 : _c[valueKey]);
|
|
86
|
+
items.push({
|
|
87
|
+
index: i,
|
|
88
|
+
name: String(nameVal),
|
|
89
|
+
value: hasValue ? SECURE_FIELD_CONFIGURED : ""
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return items;
|
|
93
|
+
}
|
|
94
|
+
function flattenIndexedPair(field, items, jsonData, secureJsonData, secureJsonFields) {
|
|
95
|
+
var _a;
|
|
96
|
+
const storage = field.storage;
|
|
97
|
+
if ((storage == null ? void 0 : storage.type) !== "indexedPair" || !storage.key || !storage.value) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const existingIndices = new Set(
|
|
101
|
+
storage.key.target === "jsonData" ? findIndicesForPattern(jsonData, storage.key.pattern) : []
|
|
102
|
+
);
|
|
103
|
+
const usedIndices = /* @__PURE__ */ new Set();
|
|
104
|
+
const startIdx = (_a = storage.startIndex) != null ? _a : 1;
|
|
105
|
+
let nextIndex = existingIndices.size > 0 ? Math.max(...existingIndices) + 1 : startIdx;
|
|
106
|
+
for (const item of items) {
|
|
107
|
+
let idx = item.index;
|
|
108
|
+
if (idx === 0) {
|
|
109
|
+
idx = nextIndex++;
|
|
110
|
+
}
|
|
111
|
+
usedIndices.add(idx);
|
|
112
|
+
const nameKey = storage.key.pattern.replace("{index}", String(idx));
|
|
113
|
+
const valueKey = storage.value.pattern.replace("{index}", String(idx));
|
|
114
|
+
if (storage.key.target === "jsonData") {
|
|
115
|
+
jsonData[nameKey] = item.name;
|
|
116
|
+
}
|
|
117
|
+
if (storage.value.target === "secureJsonData") {
|
|
118
|
+
if (item.value === SECURE_FIELD_CONFIGURED) {
|
|
119
|
+
secureJsonFields[valueKey] = true;
|
|
120
|
+
} else if (item.value) {
|
|
121
|
+
secureJsonData[valueKey] = item.value;
|
|
122
|
+
secureJsonFields[valueKey] = false;
|
|
123
|
+
}
|
|
124
|
+
} else if (storage.value.target === "jsonData") {
|
|
125
|
+
jsonData[valueKey] = item.value;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
for (const idx of existingIndices) {
|
|
129
|
+
if (usedIndices.has(idx)) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
const nameKey = storage.key.pattern.replace("{index}", String(idx));
|
|
133
|
+
const valueKey = storage.value.pattern.replace("{index}", String(idx));
|
|
134
|
+
if (storage.key.target === "jsonData") {
|
|
135
|
+
delete jsonData[nameKey];
|
|
136
|
+
}
|
|
137
|
+
if (storage.value.target === "secureJsonData") {
|
|
138
|
+
delete secureJsonFields[valueKey];
|
|
139
|
+
delete secureJsonData[valueKey];
|
|
140
|
+
} else if (storage.value.target === "jsonData") {
|
|
141
|
+
delete jsonData[valueKey];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function resolveRawPath(ref, ds) {
|
|
146
|
+
var _a;
|
|
147
|
+
const trimmed = ref.trim();
|
|
148
|
+
if (trimmed.startsWith("jsonData.")) {
|
|
149
|
+
return (_a = ds.jsonData) == null ? void 0 : _a[trimmed.slice(9)];
|
|
150
|
+
}
|
|
151
|
+
if (trimmed.startsWith("root.")) {
|
|
152
|
+
return ds[trimmed.slice(5)];
|
|
153
|
+
}
|
|
154
|
+
return void 0;
|
|
155
|
+
}
|
|
156
|
+
async function fetchExistingValues(dsUid, fields) {
|
|
157
|
+
var _a, _b, _c, _d, _e, _f;
|
|
158
|
+
try {
|
|
159
|
+
const ds = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`, void 0, void 0, {
|
|
160
|
+
showErrorAlert: false
|
|
161
|
+
});
|
|
162
|
+
const values = {};
|
|
163
|
+
for (const field of fields) {
|
|
164
|
+
if (((_a = field.storage) == null ? void 0 : _a.type) === "indexedPair") {
|
|
165
|
+
values[field.key] = expandIndexedPair(field, ds);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const fk = formKey(field);
|
|
169
|
+
switch (field.target) {
|
|
170
|
+
case "root":
|
|
171
|
+
if (ds[field.key] !== void 0) {
|
|
172
|
+
values[fk] = ds[field.key];
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
case "jsonData":
|
|
176
|
+
if (field.section) {
|
|
177
|
+
const sectionObj = (_b = ds.jsonData) == null ? void 0 : _b[field.section];
|
|
178
|
+
if ((sectionObj == null ? void 0 : sectionObj[field.key]) !== void 0) {
|
|
179
|
+
values[fk] = sectionObj[field.key];
|
|
180
|
+
}
|
|
181
|
+
} else if (((_c = ds.jsonData) == null ? void 0 : _c[field.key]) !== void 0) {
|
|
182
|
+
values[fk] = ds.jsonData[field.key];
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
case "secureJsonData":
|
|
186
|
+
if ((_d = ds.secureJsonFields) == null ? void 0 : _d[field.key]) {
|
|
187
|
+
values[fk] = SECURE_FIELD_CONFIGURED;
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
if (values[fk] === void 0 && ((_e = field.storage) == null ? void 0 : _e.type) === "computed" && field.storage.read) {
|
|
192
|
+
const fallback = resolveRawPath(field.storage.read, ds);
|
|
193
|
+
if (fallback !== void 0) {
|
|
194
|
+
values[fk] = fallback;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
for (const field of fields) {
|
|
199
|
+
if (field.valueType !== "array" || !((_f = field.item) == null ? void 0 : _f.fields)) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const itemFields = field.item.fields;
|
|
203
|
+
const hasSecureOverride = itemFields.some((f) => {
|
|
204
|
+
var _a2;
|
|
205
|
+
return (_a2 = f.overrides) == null ? void 0 : _a2.some((o) => o.secureKey);
|
|
206
|
+
});
|
|
207
|
+
if (!hasSecureOverride) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
const fk = formKey(field);
|
|
211
|
+
const arr = values[fk];
|
|
212
|
+
if (!Array.isArray(arr)) {
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
values[fk] = arr.map((item, idx) => {
|
|
216
|
+
var _a2;
|
|
217
|
+
const match = findActiveSecureOverride(itemFields, item, idx);
|
|
218
|
+
if (match && ((_a2 = ds.secureJsonFields) == null ? void 0 : _a2[match.resolvedKey])) {
|
|
219
|
+
return { ...item, [match.fieldKey]: SECURE_FIELD_CONFIGURED };
|
|
220
|
+
}
|
|
221
|
+
return item;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
return { values, readOnly: !!ds.readOnly };
|
|
225
|
+
} catch (err) {
|
|
226
|
+
const message = err instanceof Error ? err.message : "Failed to load datasource configuration";
|
|
227
|
+
return { values: {}, readOnly: false, error: message };
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function buildDatasourceConfigPayload(data, fields, existing, isFieldVisible) {
|
|
231
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
232
|
+
const rootFields = {};
|
|
233
|
+
const jsonData = { ...(_a = existing.jsonData) != null ? _a : {} };
|
|
234
|
+
const secureJsonData = {};
|
|
235
|
+
const secureJsonFields = { ...(_b = existing.secureJsonFields) != null ? _b : {} };
|
|
236
|
+
for (const field of fields) {
|
|
237
|
+
if (((_c = field.storage) == null ? void 0 : _c.type) === "indexedPair") {
|
|
238
|
+
const items = Array.isArray(data[field.key]) ? data[field.key] : [];
|
|
239
|
+
flattenIndexedPair(field, items, jsonData, secureJsonData, secureJsonFields);
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
const isManagedByEffect = (_d = field.tags) == null ? void 0 : _d.some((t) => t.startsWith("managed-by:"));
|
|
243
|
+
if (!isManagedByEffect && !isFieldVisible(field)) {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
const fk = formKey(field);
|
|
247
|
+
const value = data[fk];
|
|
248
|
+
if (field.target === "secureJsonData") {
|
|
249
|
+
if (value === SECURE_FIELD_CONFIGURED) {
|
|
250
|
+
secureJsonFields[field.key] = true;
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
if (value && value !== "") {
|
|
254
|
+
secureJsonData[field.key] = String(value);
|
|
255
|
+
secureJsonFields[field.key] = false;
|
|
256
|
+
} else {
|
|
257
|
+
secureJsonFields[field.key] = false;
|
|
258
|
+
}
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (value === void 0 || value === "") {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
switch (field.target) {
|
|
265
|
+
case "root":
|
|
266
|
+
rootFields[field.key] = value;
|
|
267
|
+
break;
|
|
268
|
+
case "jsonData":
|
|
269
|
+
if (field.section) {
|
|
270
|
+
if (!jsonData[field.section] || typeof jsonData[field.section] !== "object") {
|
|
271
|
+
jsonData[field.section] = {};
|
|
272
|
+
}
|
|
273
|
+
jsonData[field.section][field.key] = value;
|
|
274
|
+
} else {
|
|
275
|
+
jsonData[field.key] = value;
|
|
276
|
+
}
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
for (const field of fields) {
|
|
281
|
+
if (field.valueType !== "array" || !((_e = field.item) == null ? void 0 : _e.fields) || field.target !== "jsonData") {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
const itemFields = field.item.fields;
|
|
285
|
+
const hasSecureOverride = itemFields.some((f) => {
|
|
286
|
+
var _a2;
|
|
287
|
+
return (_a2 = f.overrides) == null ? void 0 : _a2.some((o) => o.secureKey);
|
|
288
|
+
});
|
|
289
|
+
if (!hasSecureOverride) {
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
const arr = field.section ? (_f = jsonData[field.section]) == null ? void 0 : _f[field.key] : jsonData[field.key];
|
|
293
|
+
if (!Array.isArray(arr)) {
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
const secureKeyOverrides = [];
|
|
297
|
+
for (const f of itemFields) {
|
|
298
|
+
for (const o of (_g = f.overrides) != null ? _g : []) {
|
|
299
|
+
if (o.secureKey) {
|
|
300
|
+
secureKeyOverrides.push({ fieldKey: f.key, override: o });
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const activeSecureKeys = /* @__PURE__ */ new Set();
|
|
305
|
+
for (let i = 0; i < arr.length; i++) {
|
|
306
|
+
const item = arr[i];
|
|
307
|
+
const match = findActiveSecureOverride(itemFields, item, i);
|
|
308
|
+
if (!match) {
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
const resolvedKey = match.resolvedKey;
|
|
312
|
+
activeSecureKeys.add(resolvedKey);
|
|
313
|
+
const itemValue = item[match.fieldKey];
|
|
314
|
+
if (itemValue === SECURE_FIELD_CONFIGURED) {
|
|
315
|
+
secureJsonFields[resolvedKey] = true;
|
|
316
|
+
} else if (itemValue && itemValue !== "") {
|
|
317
|
+
secureJsonData[resolvedKey] = String(itemValue);
|
|
318
|
+
secureJsonFields[resolvedKey] = false;
|
|
319
|
+
item[match.fieldKey] = "";
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const existingSecureFields = (_h = existing.secureJsonFields) != null ? _h : {};
|
|
323
|
+
for (const existingKey of Object.keys(existingSecureFields)) {
|
|
324
|
+
const couldBeFromThisField = secureKeyOverrides.some((sko) => {
|
|
325
|
+
const staticPrefix = sko.override.secureKey.split("{")[0];
|
|
326
|
+
return staticPrefix && existingKey.startsWith(staticPrefix);
|
|
327
|
+
});
|
|
328
|
+
if (couldBeFromThisField && !activeSecureKeys.has(existingKey)) {
|
|
329
|
+
secureJsonFields[existingKey] = false;
|
|
330
|
+
secureJsonData[existingKey] = "";
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return { rootFields, jsonData, secureJsonData, secureJsonFields };
|
|
335
|
+
}
|
|
336
|
+
async function submitDatasourceConfig(dsUid, data, fields, isFieldVisible) {
|
|
337
|
+
const existing = await getBackendSrv().get(`/api/datasources/uid/${dsUid}`);
|
|
338
|
+
const { rootFields, jsonData, secureJsonData, secureJsonFields } = buildDatasourceConfigPayload(
|
|
339
|
+
data,
|
|
340
|
+
fields,
|
|
341
|
+
existing,
|
|
342
|
+
isFieldVisible
|
|
343
|
+
);
|
|
344
|
+
await getBackendSrv().put(`/api/datasources/uid/${dsUid}`, {
|
|
345
|
+
...existing,
|
|
346
|
+
...rootFields,
|
|
347
|
+
jsonData,
|
|
348
|
+
secureJsonData,
|
|
349
|
+
secureJsonFields
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export { SECURE_FIELD_CONFIGURED, buildDatasourceConfigPayload, expandIndexedPair, fetchExistingValues, findActiveSecureOverride, flattenIndexedPair, resolveSecureKeyTemplate, submitDatasourceConfig };
|
|
354
|
+
//# sourceMappingURL=datasource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":";;;AA+BO,MAAM,uBAAA,GAA0B;AAchC,SAAS,wBAAA,CAAyB,QAAA,EAAkB,IAAA,EAA+B,KAAA,EAAuB;AAC/G,EAAA,OAAO,SACJ,OAAA,CAAQ,aAAA,EAAe,OAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,CACxC,OAAA,CAAQ,YAAA,EAAc,MAAA,CAAO,KAAK,CAAC,CAAA,CACnC,QAAQ,kBAAA,EAAoB,CAAC,GAAG,GAAA,KAAK;AAjD1C,IAAA,IAAA,EAAA;AAiD6C,IAAA,OAAA,MAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,GAAG,CAAA,KAAR,IAAA,GAAA,EAAA,GAAa,EAAE,CAAA;AAAA,EAAA,CAAC,CAAA;AACpE;AAOA,SAAS,qBAAA,CAAsB,WAAmB,IAAA,EAAwC;AACxF,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,2BAA2B,CAAA;AACvD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAG,GAAA,EAAK,QAAQ,CAAA,GAAI,KAAA;AAC1B,EAAA,MAAM,WAAA,GAAc,KAAK,GAAG,CAAA;AAE5B,EAAA,MAAM,QAAA,GAAW,SAAS,IAAA,EAAK;AAC/B,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,OAAO,WAAA,KAAgB,IAAA;AAAA,EACzB;AACA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,OAAO,WAAA,KAAgB,KAAA;AAAA,EACzB;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA;AACpD,EAAA,OAAO,MAAA,CAAO,WAAW,CAAA,KAAM,QAAA;AACjC;AAOO,SAAS,wBAAA,CACd,UAAA,EACA,IAAA,EACA,KAAA,EACkD;AAClD,EAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC9B,IAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,QAAA,IAAY,MAAM,SAAA,EAAW;AACtC,MAAA,IAAI,CAAC,SAAS,SAAA,EAAW;AACvB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,qBAAA,CAAsB,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA,EAAG;AAC9C,QAAA,OAAO;AAAA,UACL,UAAU,KAAA,CAAM,GAAA;AAAA,UAChB,WAAA,EAAa,wBAAA,CAAyB,QAAA,CAAS,SAAA,EAAW,MAAM,KAAK;AAAA,SACvE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAoBA,SAAS,eAAe,OAAA,EAAyB;AAC/C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AAC7D,EAAA,OAAO,IAAI,OAAO,GAAA,GAAM,OAAA,CAAQ,QAAQ,aAAA,EAAe,QAAQ,IAAI,GAAG,CAAA;AACxE;AAOA,SAAS,qBAAA,CAAsB,QAAiC,OAAA,EAA2B;AACzF,EAAA,MAAM,EAAA,GAAK,eAAe,OAAO,CAAA;AACjC,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACrC,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AACtB,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACrB,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG;AACpB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACrC;AAQO,SAAS,iBAAA,CAAkB,OAAoB,EAAA,EAA2C;AAhKjG,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiKE,EAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,EAAA,IAAA,CAAI,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,UAAS,aAAA,IAAiB,CAAC,QAAQ,GAAA,IAAO,CAAC,QAAQ,KAAA,EAAO;AACrE,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,MAAA,KAAW,cAAc,EAAA,GAAA,EAAA,CAAG,QAAA,KAAH,IAAA,GAAA,EAAA,GAAe,EAAC,GAAM,EAAA;AAC1E,EAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,MAAA,EAAmC,OAAA,CAAQ,IAAI,OAAO,CAAA;AAC5F,EAAA,MAAM,QAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,OAAA,CAAQ,QAAQ,SAAA,EAAW,MAAA,CAAO,CAAC,CAAC,CAAA;AAChE,IAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,SAAA,EAAW,MAAA,CAAO,CAAC,CAAC,CAAA;AACnE,IAAA,MAAM,OAAA,GAAW,OAAmC,OAAO,CAAA;AAC3D,IAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,IAAA,EAAM;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GACJ,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,mBAAmB,CAAC,EAAA,CAAC,EAAA,GAAA,EAAA,CAAG,gBAAA,KAAH,mBAAsB,QAAA,CAAA,CAAA,GAAY,CAAC,EAAA,CAAC,EAAA,GAAA,EAAA,CAAG,aAAH,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,QAAA,CAAA,CAAA;AAClG,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA,EAAO,CAAA;AAAA,MACP,IAAA,EAAM,OAAO,OAAO,CAAA;AAAA,MACpB,KAAA,EAAO,WAAW,uBAAA,GAA0B;AAAA,KAC7C,CAAA;AAAA,EACH;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,kBAAA,CACd,KAAA,EACA,KAAA,EACA,QAAA,EACA,gBACA,gBAAA,EACA;AApMF,EAAA,IAAA,EAAA;AAqME,EAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,EAAA,IAAA,CAAI,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,UAAS,aAAA,IAAiB,CAAC,QAAQ,GAAA,IAAO,CAAC,QAAQ,KAAA,EAAO;AACrE,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,kBAAkB,IAAI,GAAA;AAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,MAAA,KAAW,UAAA,GACnB,qBAAA,CAAsB,UAAqC,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,GAC9E;AAAC,GACP;AAGA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,EAAA,MAAM,QAAA,GAAA,CAAW,EAAA,GAAA,OAAA,CAAQ,UAAA,KAAR,IAAA,GAAA,EAAA,GAAsB,CAAA;AACvC,EAAA,IAAI,SAAA,GAAY,gBAAgB,IAAA,GAAO,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,eAAe,CAAA,GAAI,CAAA,GAAI,QAAA;AAG9E,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,MAAM,IAAA,CAAK,KAAA;AACf,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,GAAA,GAAM,SAAA,EAAA;AAAA,IACR;AACA,IAAA,WAAA,CAAY,IAAI,GAAG,CAAA;AACnB,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,OAAA,CAAQ,QAAQ,SAAA,EAAW,MAAA,CAAO,GAAG,CAAC,CAAA;AAClE,IAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,SAAA,EAAW,MAAA,CAAO,GAAG,CAAC,CAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,MAAA,KAAW,UAAA,EAAY;AACrC,MAAA,QAAA,CAAS,OAAO,IAAI,IAAA,CAAK,IAAA;AAAA,IAC3B;AACA,IAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,gBAAA,EAAkB;AAC7C,MAAA,IAAI,IAAA,CAAK,UAAU,uBAAA,EAAyB;AAC1C,QAAA,gBAAA,CAAiB,QAAQ,CAAA,GAAI,IAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,KAAK,KAAA,EAAO;AACrB,QAAA,cAAA,CAAe,QAAQ,IAAI,IAAA,CAAK,KAAA;AAChC,QAAA,gBAAA,CAAiB,QAAQ,CAAA,GAAI,KAAA;AAAA,MAC/B;AAAA,IACF,CAAA,MAAA,IAAW,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,UAAA,EAAY;AAC9C,MAAA,QAAA,CAAS,QAAQ,IAAI,IAAA,CAAK,KAAA;AAAA,IAC5B;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAO,eAAA,EAAiB;AACjC,IAAA,IAAI,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG;AACxB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,OAAA,CAAQ,QAAQ,SAAA,EAAW,MAAA,CAAO,GAAG,CAAC,CAAA;AAClE,IAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,SAAA,EAAW,MAAA,CAAO,GAAG,CAAC,CAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,MAAA,KAAW,UAAA,EAAY;AACrC,MAAA,OAAO,SAAS,OAAO,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,gBAAA,EAAkB;AAC7C,MAAA,OAAO,iBAAiB,QAAQ,CAAA;AAChC,MAAA,OAAO,eAAe,QAAQ,CAAA;AAAA,IAChC,CAAA,MAAA,IAAW,OAAA,CAAQ,KAAA,CAAM,MAAA,KAAW,UAAA,EAAY;AAC9C,MAAA,OAAO,SAAS,QAAQ,CAAA;AAAA,IAC1B;AAAA,EACF;AACF;AAMA,SAAS,cAAA,CAAe,KAAa,EAAA,EAAiC;AApQtE,EAAA,IAAA,EAAA;AAqQE,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,WAAW,CAAA,EAAG;AACnC,IAAA,OAAA,CAAO,EAAA,GAAA,EAAA,CAAG,QAAA,KAAH,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AAC/B,IAAA,OAAQ,EAAA,CAA+B,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,mBAAA,CAAoB,OAAe,MAAA,EAAqD;AA/Q9G,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgRE,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,GAAyB,MAAM,aAAA,EAAc,CAAE,IAAI,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAA,EAAI,KAAA,CAAA,EAAW,KAAA,CAAA,EAAW;AAAA,MAC9G,cAAA,EAAgB;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAE1B,MAAA,IAAA,CAAA,CAAI,EAAA,GAAA,KAAA,CAAM,OAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,IAAA,MAAS,aAAA,EAAe;AACzC,QAAA,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,iBAAA,CAAkB,OAAO,EAAE,CAAA;AAC/C,QAAA;AAAA,MACF;AACA,MAAA,MAAM,EAAA,GAAK,QAAQ,KAAK,CAAA;AACxB,MAAA,QAAQ,MAAM,MAAA;AAAQ,QACpB,KAAK,MAAA;AACH,UAAA,IAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,KAAM,KAAA,CAAA,EAAW;AAC/B,YAAA,MAAA,CAAO,EAAE,CAAA,GAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAAA,UAC3B;AACA,UAAA;AAAA,QACF,KAAK,UAAA;AAEH,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,EAAA,CAAG,QAAA,KAAH,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,KAAA,CAAM,OAAA,CAAA;AACvC,YAAA,IAAA,CAAI,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAa,KAAA,CAAM,GAAA,CAAA,MAAS,KAAA,CAAA,EAAW;AACzC,cAAA,MAAA,CAAO,EAAE,CAAA,GAAI,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA;AAAA,YACnC;AAAA,UACF,aAAW,EAAA,GAAA,EAAA,CAAG,QAAA,KAAH,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,KAAA,CAAM,UAAS,KAAA,CAAA,EAAW;AACjD,YAAA,MAAA,CAAO,EAAE,CAAA,GAAI,EAAA,CAAG,QAAA,CAAS,MAAM,GAAG,CAAA;AAAA,UACpC;AACA,UAAA;AAAA,QACF,KAAK,gBAAA;AACH,UAAA,IAAA,CAAI,EAAA,GAAA,EAAA,CAAG,gBAAA,KAAH,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsB,KAAA,CAAM,GAAA,CAAA,EAAM;AACpC,YAAA,MAAA,CAAO,EAAE,CAAA,GAAI,uBAAA;AAAA,UACf;AACA,UAAA;AAAA;AAKJ,MAAA,IAAI,MAAA,CAAO,EAAE,CAAA,KAAM,KAAA,CAAA,IAAA,CAAA,CAAa,EAAA,GAAA,KAAA,CAAM,OAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,IAAA,MAAS,UAAA,IAAc,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM;AACxF,QAAA,MAAM,QAAA,GAAW,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,MAAM,EAAE,CAAA;AACtD,QAAA,IAAI,aAAa,KAAA,CAAA,EAAW;AAC1B,UAAA,MAAA,CAAO,EAAE,CAAA,GAAI,QAAA;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAIA,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,MAAM,SAAA,KAAc,OAAA,IAAW,GAAC,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,mBAAY,MAAA,CAAA,EAAQ;AACtD,QAAA;AAAA,MACF;AACA,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA;AAC9B,MAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAG;AAtUpD,QAAA,IAAAA,GAAAA;AAsUuD,QAAA,OAAA,CAAAA,GAAAA,GAAA,EAAE,SAAA,KAAF,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAA,CAAA;AAAA,MAAA,CAAU,CAAA;AACtF,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,EAAA,GAAK,QAAQ,KAAK,CAAA;AACxB,MAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvB,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,EAAE,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,CAAC,MAA+B,GAAA,KAAgB;AA/U3E,QAAA,IAAAA,GAAAA;AAgVQ,QAAA,MAAM,KAAA,GAAQ,wBAAA,CAAyB,UAAA,EAAY,IAAA,EAAM,GAAG,CAAA;AAC5D,QAAA,IAAI,WAASA,GAAAA,GAAA,EAAA,CAAG,qBAAH,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAAA,CAAsB,MAAM,WAAA,CAAA,CAAA,EAAc;AACrD,UAAA,OAAO,EAAE,GAAG,IAAA,EAAM,CAAC,KAAA,CAAM,QAAQ,GAAG,uBAAA,EAAwB;AAAA,QAC9D;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,CAAC,CAAC,GAAG,QAAA,EAAS;AAAA,EAC3C,SAAS,GAAA,EAAc;AACrB,IAAA,MAAM,OAAA,GAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,yCAAA;AACrD,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAI,QAAA,EAAU,KAAA,EAAO,OAAO,OAAA,EAAQ;AAAA,EACvD;AACF;AAEO,SAAS,4BAAA,CACd,IAAA,EACA,MAAA,EACA,QAAA,EACA,cAAA,EACyB;AApW3B,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqWE,EAAA,MAAM,aAAsC,EAAC;AAC7C,EAAA,MAAM,WAAoC,EAAE,GAAA,CAAI,cAAS,QAAA,KAAT,IAAA,GAAA,EAAA,GAAqB,EAAC,EAAG;AACzE,EAAA,MAAM,iBAAyC,EAAC;AAChD,EAAA,MAAM,mBAA4C,EAAE,GAAA,CAAI,cAAS,gBAAA,KAAT,IAAA,GAAA,EAAA,GAA6B,EAAC,EAAG;AAEzF,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAE1B,IAAA,IAAA,CAAA,CAAI,EAAA,GAAA,KAAA,CAAM,OAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA,MAAS,aAAA,EAAe;AACzC,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA,GAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAA0B,EAAC;AACzF,MAAA,kBAAA,CAAmB,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,cAAA,EAAgB,gBAAgB,CAAA;AAC3E,MAAA;AAAA,IACF;AAIA,IAAA,MAAM,iBAAA,GAAA,CAAoB,WAAM,IAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,aAAa,CAAA,CAAA;AAC5E,IAAA,IAAI,CAAC,iBAAA,IAAqB,CAAC,cAAA,CAAe,KAAK,CAAA,EAAG;AAChD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAA,GAAK,QAAQ,KAAK,CAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,KAAK,EAAE,CAAA;AAErB,IAAA,IAAI,KAAA,CAAM,WAAW,gBAAA,EAAkB;AACrC,MAAA,IAAI,UAAU,uBAAA,EAAyB;AACrC,QAAA,gBAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,GAAI,IAAA;AAC9B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,IAAS,UAAU,EAAA,EAAI;AACzB,QAAA,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AACxC,QAAA,gBAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,MAChC;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,EAAI;AACvC,MAAA;AAAA,IACF;AACA,IAAA,QAAQ,MAAM,MAAA;AAAQ,MACpB,KAAK,MAAA;AACH,QAAA,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AACxB,QAAA;AAAA,MACF,KAAK,UAAA;AAEH,QAAA,IAAI,MAAM,OAAA,EAAS;AACjB,UAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,IAAK,OAAO,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,KAAM,QAAA,EAAU;AAC3E,YAAA,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,GAAI,EAAC;AAAA,UAC7B;AACA,UAAC,SAAS,KAAA,CAAM,OAAO,CAAA,CAA8B,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,QACpE,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,QACxB;AACA,QAAA;AAAA;AACJ,EACF;AAIA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,KAAA,CAAM,SAAA,KAAc,OAAA,IAAW,EAAA,CAAC,EAAA,GAAA,KAAA,CAAM,SAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,MAAA,CAAA,IAAU,KAAA,CAAM,MAAA,KAAW,UAAA,EAAY;AACrF,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA;AAC9B,IAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAG;AAralD,MAAA,IAAAA,GAAAA;AAqaqD,MAAA,OAAA,CAAAA,GAAAA,GAAA,EAAE,SAAA,KAAF,IAAA,GAAA,MAAA,GAAAA,IAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAA,CAAA;AAAA,IAAA,CAAU,CAAA;AACtF,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GACJ,KAAA,CAAM,OAAA,GAAA,CAAW,EAAA,GAAA,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA,KAAtB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsD,KAAA,CAAM,GAAA,CAAA,GAAO,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAExG,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACvB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,qBAA2E,EAAC;AAClF,IAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,KAAA,MAAW,CAAA,IAAA,CAAK,EAAA,GAAA,CAAA,CAAE,SAAA,KAAF,IAAA,GAAA,EAAA,GAAe,EAAC,EAAG;AACjC,QAAA,IAAI,EAAE,SAAA,EAAW;AACf,UAAA,kBAAA,CAAmB,KAAK,EAAE,QAAA,EAAU,EAAE,GAAA,EAAK,QAAA,EAAU,GAAG,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AAEzC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAClB,MAAA,MAAM,KAAA,GAAQ,wBAAA,CAAyB,UAAA,EAAY,IAAA,EAAM,CAAC,CAAA;AAC1D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AACA,MAAA,MAAM,cAAc,KAAA,CAAM,WAAA;AAC1B,MAAA,gBAAA,CAAiB,IAAI,WAAW,CAAA;AAChC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAErC,MAAA,IAAI,cAAc,uBAAA,EAAyB;AAEzC,QAAA,gBAAA,CAAiB,WAAW,CAAA,GAAI,IAAA;AAAA,MAClC,CAAA,MAAA,IAAW,SAAA,IAAa,SAAA,KAAc,EAAA,EAAI;AAExC,QAAA,cAAA,CAAe,WAAW,CAAA,GAAI,MAAA,CAAO,SAAS,CAAA;AAC9C,QAAA,gBAAA,CAAiB,WAAW,CAAA,GAAI,KAAA;AAEhC,QAAA,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAA;AAAA,MACzB;AAAA,IACF;AAGA,IAAA,MAAM,oBAAA,GAAA,CAAuB,EAAA,GAAA,QAAA,CAAS,gBAAA,KAAT,IAAA,GAAA,EAAA,GAA6B,EAAC;AAC3D,IAAA,KAAA,MAAW,WAAA,IAAe,MAAA,CAAO,IAAA,CAAK,oBAAoB,CAAA,EAAG;AAE3D,MAAA,MAAM,oBAAA,GAAuB,kBAAA,CAAmB,IAAA,CAAK,CAAC,GAAA,KAAQ;AAG5D,QAAA,MAAM,eAAe,GAAA,CAAI,QAAA,CAAS,UAAW,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACzD,QAAA,OAAO,YAAA,IAAgB,WAAA,CAAY,UAAA,CAAW,YAAY,CAAA;AAAA,MAC5D,CAAC,CAAA;AACD,MAAA,IAAI,oBAAA,IAAwB,CAAC,gBAAA,CAAiB,GAAA,CAAI,WAAW,CAAA,EAAG;AAC9D,QAAA,gBAAA,CAAiB,WAAW,CAAA,GAAI,KAAA;AAChC,QAAA,cAAA,CAAe,WAAW,CAAA,GAAI,EAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,gBAAA,EAAiB;AAClE;AAEA,eAAsB,sBAAA,CACpB,KAAA,EACA,IAAA,EACA,MAAA,EACA,cAAA,EACe;AACf,EAAA,MAAM,WAA+B,MAAM,aAAA,GAAgB,GAAA,CAAI,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAE,CAAA;AAC9F,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,kBAAiB,GAAI,4BAAA;AAAA,IACjE,IAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,aAAA,EAAc,CAAE,GAAA,CAAI,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAA,EAAI;AAAA,IACzD,GAAG,QAAA;AAAA,IACH,GAAG,UAAA;AAAA,IACH,QAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { formKey, getWatchedValue } from '../config.js';
|
|
2
|
+
import { evaluateCelExpression, extractFieldRefs } from '../cel.js';
|
|
3
|
+
import { isFieldRequired } from '../inputs/fieldUtils.js';
|
|
4
|
+
import { SECURE_FIELD_CONFIGURED } from '../datasource.js';
|
|
5
|
+
|
|
6
|
+
function buildFieldCelContext(fieldById, watchedValues) {
|
|
7
|
+
const ctx = {};
|
|
8
|
+
for (const f of fieldById.values()) {
|
|
9
|
+
const fk = formKey(f);
|
|
10
|
+
const val = getWatchedValue(watchedValues, fk);
|
|
11
|
+
if (val !== void 0) {
|
|
12
|
+
const parts = f.id.split(".");
|
|
13
|
+
let current = ctx;
|
|
14
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
15
|
+
if (!(parts[i] in current) || typeof current[parts[i]] !== "object" || current[parts[i]] === null) {
|
|
16
|
+
current[parts[i]] = {};
|
|
17
|
+
}
|
|
18
|
+
current = current[parts[i]];
|
|
19
|
+
}
|
|
20
|
+
current[parts[parts.length - 1]] = val;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return ctx;
|
|
24
|
+
}
|
|
25
|
+
function isFieldVisible(field, fieldById, celContext) {
|
|
26
|
+
function check(f, visited) {
|
|
27
|
+
var _a;
|
|
28
|
+
if (f.kind === "virtual" && !f.ui) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if ((_a = f.tags) == null ? void 0 : _a.some((t) => t.startsWith("managed-by:"))) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (!f.dependsOn) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
const refs = extractFieldRefs(f.dependsOn);
|
|
38
|
+
for (const ref of refs) {
|
|
39
|
+
const depField = fieldById.get(ref);
|
|
40
|
+
if (depField && !visited.has(depField.id)) {
|
|
41
|
+
visited.add(f.id);
|
|
42
|
+
if (!check(depField, visited)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return evaluateCelExpression(f.dependsOn, celContext);
|
|
48
|
+
}
|
|
49
|
+
return check(field, /* @__PURE__ */ new Set());
|
|
50
|
+
}
|
|
51
|
+
function isFieldDisabled(field, celContext) {
|
|
52
|
+
if (!field.disabledWhen) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return evaluateCelExpression(field.disabledWhen, celContext);
|
|
56
|
+
}
|
|
57
|
+
function isGroupValid(group, args) {
|
|
58
|
+
const { watchedValues, fieldById, celContext, errors, isVisible } = args;
|
|
59
|
+
for (const field of group.fields) {
|
|
60
|
+
if (!isVisible(field)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (errors[formKey(field)]) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (isFieldRequired(field, watchedValues, fieldById, celContext)) {
|
|
67
|
+
const val = getWatchedValue(watchedValues, formKey(field));
|
|
68
|
+
if (val === SECURE_FIELD_CONFIGURED) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (val === void 0 || val === null || val === "") {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
function groupHasData(group, watchedValues) {
|
|
79
|
+
for (const field of group.fields) {
|
|
80
|
+
const val = getWatchedValue(watchedValues, formKey(field));
|
|
81
|
+
if (val === void 0 || val === null || val === "" || val === false) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (val === field.defaultValue) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { buildFieldCelContext, groupHasData, isFieldDisabled, isFieldVisible, isGroupValid };
|
|
93
|
+
//# sourceMappingURL=formInterpreter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formInterpreter.js","sources":["../../../../../../src/components/ConfigEditor/DatasourceConfigWizard/hooks/formInterpreter.ts"],"sourcesContent":["/**\n * Pure \"interpreter\" helpers for the datasource config form.\n *\n * These derive UI state (CEL context, field visibility/disabled, group\n * validity/data) purely from a schema snapshot + current form values, with no\n * React or form-library dependency. `useDatasourceConfigForm` wires them into\n * memoized callbacks; keeping them pure makes the logic independently testable.\n */\n\nimport type { ConfigField } from '../../../../schema/schema';\nimport { formKey, getWatchedValue, type ResolvedGroup } from '../config';\nimport { extractFieldRefs, evaluateCelExpression } from '../cel';\nimport { isFieldRequired } from '../inputs/fieldUtils';\nimport { SECURE_FIELD_CONFIGURED } from '../datasource';\n\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 */\nexport function buildFieldCelContext(\n fieldById: Map<string, ConfigField>,\n watchedValues: Record<string, unknown>\n): Record<string, unknown> {\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}\n\n/**\n * Whether a field should be shown. Hidden when it's a virtual field without UI,\n * managed by an effect, or its (transitive) `dependsOn` chain evaluates falsy.\n */\nexport function isFieldVisible(\n field: ConfigField,\n fieldById: Map<string, ConfigField>,\n celContext: Record<string, unknown>\n): 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\n/** Whether a field is currently disabled via its `disabledWhen` CEL expression. */\nexport function isFieldDisabled(field: ConfigField, celContext: Record<string, unknown>): boolean {\n if (!field.disabledWhen) {\n return false;\n }\n return evaluateCelExpression(field.disabledWhen, celContext);\n}\n\n/** Check whether all visible required fields in a group have a value (and no errors). */\nexport function isGroupValid(\n group: ResolvedGroup,\n args: {\n watchedValues: Record<string, unknown>;\n fieldById: Map<string, ConfigField>;\n celContext: Record<string, unknown>;\n errors: Record<string, unknown>;\n isVisible: (field: ConfigField) => boolean;\n }\n): boolean {\n const { watchedValues, fieldById, celContext, errors, isVisible } = args;\n for (const field of group.fields) {\n if (!isVisible(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\n/** Whether a group has any field with a non-default, non-empty value. */\nexport function groupHasData(group: ResolvedGroup, watchedValues: Record<string, unknown>): 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"],"names":[],"mappings":"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"}
|