@grafana/aws-sdk 0.10.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,23 +10,6 @@ This is a common package that can be used for all amazon plugins.
10
10
 
11
11
  see the ./src folder
12
12
 
13
- ## Drone configuration
14
-
15
- Drone signs the Drone configuration file. This needs to be run every time the drone.yml file is modified. See https://github.com/grafana/deployment_tools/blob/master/docs/infrastructure/drone/signing.md for more info.
16
-
17
- ### Update drone build
18
-
19
- If you have not installed drone CLI follow [these instructions](https://docs.drone.io/cli/install/)
20
-
21
- To sign the `.drone.yml` file:
22
-
23
- ```bash
24
- # Get your drone token from https://drone.grafana.net/account
25
- export DRONE_TOKEN=<Your DRONE_TOKEN>
26
-
27
- drone --server https://drone.grafana.net sign --save grafana/grafana-aws-sdk-react
28
- ```
29
-
30
13
  ### Local Development
31
14
 
32
15
  For local development instructions, please see the [contributing guide](https://github.com/grafana/grafana-aws-sdk-react/blob/main/CONTRIBUTING.md).
@@ -9,7 +9,6 @@ var runtime = require('@grafana/runtime');
9
9
  var css = require('@emotion/css');
10
10
  var pluginUi = require('@grafana/plugin-ui');
11
11
  var lodash = require('lodash');
12
- var asyncQueryData = require('@grafana/async-query-data');
13
12
 
14
13
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
15
14
 
@@ -551,10 +550,12 @@ function ResourceSelector(props) {
551
550
  const dependencies = React.useRef(props.dependencies);
552
551
  const fetched = React.useRef(false);
553
552
  const resource = React.useRef(props.value || props.default || null);
554
- const [resources, setResources] = React.useState(
555
- resource.current ? [resource.current] : []
556
- );
553
+ const [fetchedResources, setFetchedResources] = React.useState(() => {
554
+ const initialResource = props.value || props.default || null;
555
+ return initialResource ? [initialResource] : [];
556
+ });
557
557
  const [isLoading, setIsLoading] = React.useState(false);
558
+ const resources = props.resources !== void 0 ? props.resources : fetchedResources;
558
559
  const defaultOpts = React.useMemo(() => {
559
560
  const opts = [
560
561
  {
@@ -568,25 +569,18 @@ function ResourceSelector(props) {
568
569
  }
569
570
  return opts;
570
571
  }, [props.default, props.value]);
571
- const [options, setOptions] = React.useState(props.default ? defaultOpts : []);
572
- React.useEffect(() => {
573
- if (props.resources !== void 0) {
574
- setResources(props.resources);
572
+ const options = React.useMemo(() => {
573
+ if (!resources.length) {
574
+ return [];
575
575
  }
576
- }, [props.resources]);
577
- React.useEffect(() => {
578
576
  const newOptions = props.default ? defaultOpts : [];
579
- if (resources.length) {
580
- resources.forEach((r) => {
581
- const value = typeof r === "string" ? r : r.value;
582
- if (!newOptions.find((o) => o.value === value)) {
583
- typeof r === "string" ? newOptions.push({ label: r, value: r }) : newOptions.push(r);
584
- }
585
- });
586
- setOptions(newOptions);
587
- } else {
588
- setOptions([]);
589
- }
577
+ resources.forEach((r) => {
578
+ const value = typeof r === "string" ? r : r.value;
579
+ if (!newOptions.find((o) => o.value === value)) {
580
+ typeof r === "string" ? newOptions.push({ label: r, value: r }) : newOptions.push(r);
581
+ }
582
+ });
583
+ return newOptions;
590
584
  }, [resources, defaultOpts, props.default]);
591
585
  React.useEffect(() => {
592
586
  if (!lodash.isEqual(propsDependencies, dependencies.current)) {
@@ -606,7 +600,7 @@ function ResourceSelector(props) {
606
600
  }
607
601
  try {
608
602
  const resources2 = await ((_a = props.fetch) == null ? void 0 : _a.call(props)) || [];
609
- setResources(resources2);
603
+ setFetchedResources(resources2);
610
604
  } finally {
611
605
  fetched.current = true;
612
606
  }
@@ -764,7 +758,7 @@ function QueryEditorHeader({
764
758
  cancel
765
759
  }) {
766
760
  return /* @__PURE__ */ React__default.default.createElement(pluginUi.EditorHeader, null, extraHeaderElementLeft, /* @__PURE__ */ React__default.default.createElement(pluginUi.FlexItem, { grow: 1 }), showAsyncQueryButtons ? /* @__PURE__ */ React__default.default.createElement(
767
- asyncQueryData.RunQueryButtons,
761
+ pluginUi.RunQueryButtons,
768
762
  {
769
763
  onRunQuery,
770
764
  enableRun: enableRunButton,
@@ -931,4 +925,4 @@ exports.applySQLTemplateVariables = applySQLTemplateVariables;
931
925
  exports.awsAuthProviderOptions = awsAuthProviderOptions;
932
926
  exports.filterSQLQuery = filterSQLQuery;
933
927
  exports.standardRegions = standardRegions;
934
- //# sourceMappingURL=index.js.map
928
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/hooks/useConfigSaveReporter.ts","../../src/regions.ts","../../src/types.ts","../../src/providers.ts","../../src/components/ConnectionConfig.styles.ts","../../src/components/ConnectionConfig.tsx","../../src/components/utils/version.ts","../../src/components/Divider.tsx","../../src/components/SIGV4ConnectionConfig.tsx","../../src/sql/types.ts","../../src/sql/ResourceSelector.tsx","../../src/sql/ConfigEditor/ConfigSelect.tsx","../../src/sql/ConfigEditor/InlineInput.tsx","../../src/sql/QueryEditor/QueryCodeEditor.tsx","../../src/sql/QueryEditor/QueryEditorHeader.tsx","../../src/sql/QueryEditor/FormatSelect.tsx","../../src/sql/QueryEditor/FillValueSelect.tsx","../../src/sql/utils/utils.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { DataSourceTestSucceeded, DataSourceTestFailed } from '@grafana/data';\nimport { usePluginInteractionReporter, getAppEvents } from '@grafana/runtime';\nimport { AwsAuthType } from '../types';\n\nexport function useConfigSaveReporter(pluginId: string, authType: AwsAuthType | undefined): void {\n const report = usePluginInteractionReporter();\n\n useEffect(() => {\n const appEvents = getAppEvents();\n\n const successSubscription = appEvents.subscribe<DataSourceTestSucceeded>(DataSourceTestSucceeded, () => {\n report('grafana_plugin_aws_save', {\n auth_type: authType,\n result: 'succeeded',\n });\n });\n\n const failSubscription = appEvents.subscribe<DataSourceTestFailed>(DataSourceTestFailed, () => {\n report('grafana_plugin_aws_save', {\n auth_type: authType,\n result: 'failed',\n });\n });\n\n return () => {\n successSubscription.unsubscribe();\n failSubscription.unsubscribe();\n };\n }, [pluginId, authType, report]);\n}\n","export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-east-2',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-south-2',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ap-southeast-3',\n 'ap-southeast-4',\n 'ap-southeast-5',\n 'ap-southeast-6',\n 'ap-southeast-7',\n 'ca-central-1',\n 'ca-west-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-central-2',\n 'eu-isoe-west-1',\n 'eu-north-1',\n 'eu-south-1',\n 'eu-south-2',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'il-central-1',\n 'me-central-1',\n 'me-south-1',\n 'mx-central-1',\n 'sa-east-1',\n 'us-east-1',\n 'us-east-2',\n 'us-gov-east-1',\n 'us-gov-west-1',\n 'us-iso-east-1',\n 'us-iso-west-1',\n 'us-isob-east-1',\n 'us-isob-west-1',\n 'us-isof-east-1',\n 'us-northeast-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import type { DataSourceJsonData, DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\n\nexport enum AwsAuthType {\n Keys = 'keys',\n Credentials = 'credentials',\n Default = 'default', // was 'arn',\n EC2IAMRole = 'ec2_iam_role',\n /**\n * @deprecated use default\n */\n ARN = 'arn',\n GrafanaAssumeRole = 'grafana_assume_role',\n}\n\nexport interface AwsAuthDataSourceJsonData extends DataSourceJsonData {\n authType?: AwsAuthType;\n assumeRoleArn?: string;\n externalId?: string;\n profile?: string; // Credentials profile name, as specified in ~/.aws/credentials\n defaultRegion?: string; // region if it is not defined by your credentials file\n endpoint?: string;\n proxyType?: 'none' | 'env' | 'url';\n proxyUrl?: string;\n proxyUsername?: string;\n}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n proxyPassword?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n\nexport interface ConnectionConfigProps<\n J extends AwsAuthDataSourceJsonData = AwsAuthDataSourceJsonData,\n S = AwsAuthDataSourceSecureJsonData,\n> extends DataSourcePluginOptionsEditorProps<J, S> {\n standardRegions?: string[];\n loadRegions?: () => Promise<string[]>;\n defaultEndpoint?: string;\n skipHeader?: boolean;\n skipEndpoint?: boolean;\n children?: React.ReactNode;\n labelWidth?: number;\n inExperimentalAuthComponent?: boolean;\n externalId?: string;\n hideAssumeRoleArn?: boolean;\n showHttpProxySettings?: boolean;\n}\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions: Array<SelectableValue<AwsAuthType>> = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'Grafana Assume Role',\n value: AwsAuthType.GrafanaAssumeRole,\n },\n {\n label: 'AWS SDK Default',\n value: AwsAuthType.Default,\n },\n {\n label: 'Access & secret key',\n value: AwsAuthType.Keys,\n },\n {\n label: 'Credentials file',\n value: AwsAuthType.Credentials,\n },\n];\n","import { css } from '@emotion/css';\n\nexport const assumeRoleInstructionsStyle = css({\n maxWidth: '715px',\n});\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Text, TextLink, Collapse, Field, Space } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { useConfigSaveReporter } from '../hooks/useConfigSaveReporter';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\nimport { ConfigSection, ConfigSubSection } from '@grafana/plugin-ui';\n\nexport const DEFAULT_LABEL_WIDTH = 28;\nconst DS_TYPES_THAT_SUPPORT_TEMP_CREDS = [\n 'cloudwatch',\n 'grafana-amazonprometheus-datasource',\n 'grafana-athena-datasource',\n 'grafana-aurora-datasource',\n 'grafana-dynamodb-datasource',\n 'grafana-iot-sitewise-datasource',\n 'grafana-opensearch-datasource',\n 'grafana-redshift-datasource',\n 'grafana-timestream-datasource',\n 'grafana-x-ray-datasource',\n];\nconst RFC_2396_WARNING =\n 'This functionality should only be used with legacy web sites. RFC 2396 warns that interpreting Userinfo this way \"is NOT RECOMMENDED, because the passing of authentication information in clear text (such as URI) has proven to be a security risk in almost every case where it has been used.\"';\nconst toOption = (value: string) => ({ value, label: value });\nconst isAwsAuthType = (value: any): value is AwsAuthType => {\n return typeof value === 'string' && awsAuthProviderOptions.some((opt) => opt.value === value);\n};\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const {\n loadRegions,\n onOptionsChange,\n skipHeader = false,\n skipEndpoint = false,\n options,\n hideAssumeRoleArn = false,\n showHttpProxySettings = false,\n } = props;\n useConfigSaveReporter(options.type, options.jsonData.authType);\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n const tempCredsFeatureEnabled =\n config.featureToggles.awsDatasourcesTempCredentials && DS_TYPES_THAT_SUPPORT_TEMP_CREDS.includes(options.type);\n // @ts-ignore ignore feature toggle type error\n const httpProxySettingEnabled = showHttpProxySettings && (config.awsPerDatasourceHTTPProxyEnabled ?? false);\n const awsAssumeRoleEnabled = config.awsAssumeRoleEnabled ?? true;\n const awsAllowedAuthProviders = useMemo(\n () =>\n config.awsAllowedAuthProviders\n .filter((provider) => (provider === AwsAuthType.GrafanaAssumeRole ? tempCredsFeatureEnabled : true))\n .filter(isAwsAuthType),\n [tempCredsFeatureEnabled]\n );\n const externalId = useMemo(() => {\n if (tempCredsFeatureEnabled && options.jsonData.authType === AwsAuthType.GrafanaAssumeRole) {\n if (config.namespace.startsWith('stacks-')) {\n return config.namespace.substring(config.namespace.indexOf('-') + 1);\n }\n }\n return props.externalId;\n }, [tempCredsFeatureEnabled, options.jsonData.authType, props.externalId]);\n const currentProvider = awsAuthProviderOptions.find((p) => p.value === options.jsonData.authType);\n\n useEffect(() => {\n // Make sure a authType exists in the current model\n if (!currentProvider && awsAllowedAuthProviders.length) {\n let defaultAuthType = awsAllowedAuthProviders[0];\n if (awsAllowedAuthProviders.includes(AwsAuthType.GrafanaAssumeRole)) {\n defaultAuthType = AwsAuthType.GrafanaAssumeRole;\n }\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: defaultAuthType,\n },\n });\n }\n }, [currentProvider, options, onOptionsChange, awsAllowedAuthProviders]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <div data-testid=\"connection-config\">\n <ConfigSection title={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <ConfigSubSection title=\"Authentication\">\n <Field\n label=\"Authentication Provider\"\n description=\"Specify which AWS credentials chain to use.\"\n htmlFor=\"authProvider\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n inputId=\"authProvider\"\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </Field>\n {options.jsonData.authType === 'credentials' && (\n <Field\n label=\"Credentials Profile Name\"\n description=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\n placeholder=\"default\"\n value={options.jsonData.profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </Field>\n )}\n {options.jsonData.authType === 'keys' && (\n <>\n <Field label=\"Access Key ID\" htmlFor=\"accessKeyId\">\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" id=\"accessKeyId\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n id=\"accessKeyId\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </Field>\n\n <Field label=\"Secret Access Key\" htmlFor=\"secretKey\">\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n id=\"secretKey\"\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n id=\"secretKey\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </Field>\n </>\n )}\n </ConfigSubSection>\n\n {!hideAssumeRoleArn && (\n <ConfigSubSection\n title=\"Assume Role\"\n description={\n options.jsonData.authType === AwsAuthType.GrafanaAssumeRole ? (\n <Text>\n Learn more about{' '}\n <TextLink\n inline\n external\n variant=\"bodySmall\"\n href=\"https://grafana.com/docs/plugins/cloudwatch/latest/aws-authentication/#use-grafana-assume-role\"\n >\n Grafana Assume Role\n </TextLink>\n .\n </Text>\n ) : null\n }\n >\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={assumeRoleInstructionsStyle}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{externalId || 'External Id is currently unavailable'}</code> and click <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n {awsAssumeRoleEnabled && (\n <>\n <Field\n htmlFor=\"assumeRoleArn\"\n label=\"Assume Role ARN\"\n description=\"Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly.\"\n >\n <Input\n id=\"assumeRoleArn\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </Field>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n htmlFor=\"externalId\"\n label=\"External ID\"\n description=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n id=\"externalId\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </Field>\n )}\n </>\n )}\n </ConfigSubSection>\n )}\n {httpProxySettingEnabled && (\n <ConfigSubSection title=\"Proxy Configuration\">\n <Field\n label=\"Proxy Type\"\n description=\"Specify the type of proxy to use. This should not be set if Secure Socks Proxy is enabled.\"\n htmlFor=\"proxyType\"\n >\n <Select\n inputId=\"proxyType\"\n value={options.jsonData.proxyType || 'env'}\n options={[\n { label: 'Environment (default)', value: 'env' },\n { label: 'None', value: 'none' },\n { label: 'URL', value: 'url' },\n ]}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'proxyType')}\n />\n </Field>\n {(options.jsonData.proxyType === 'env' || !options.jsonData.proxyType) && (\n <>\n <Text variant=\"bodySmall\" color=\"secondary\">\n Proxy settings from environment variables will be used. Use <code>HTTP_PROXY</code> &amp;{' '}\n <code>HTTPS_PROXY</code> environment variables. This will be skipped if no environment variables\n found.\n </Text>\n <Space v={2} />\n </>\n )}\n {options.jsonData.proxyType === 'url' && (\n <>\n <Field\n label=\"Proxy URL\"\n description=\"Proxy URL. Don't set the username or password here\"\n htmlFor=\"proxyUrl\"\n >\n <Input\n id=\"proxyUrl\"\n placeholder=\"Example: https://localhost:3004\"\n value={options.jsonData.proxyUrl || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'proxyUrl')}\n />\n </Field>\n <Field\n label=\"Proxy Username\"\n description={`Optional: Proxy Username. ${RFC_2396_WARNING}`}\n htmlFor=\"proxyUsername\"\n >\n <Input\n id=\"proxyUsername\"\n value={options.jsonData.proxyUsername || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'proxyUsername')}\n />\n </Field>\n <Field\n label=\"Proxy Password\"\n description={`Optional: Proxy Password. ${RFC_2396_WARNING}`}\n htmlFor=\"proxyPassword\"\n >\n <Input\n id=\"proxyPassword\"\n value={options.secureJsonData?.proxyPassword ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'proxyPassword')}\n />\n </Field>\n </>\n )}\n </ConfigSubSection>\n )}\n <ConfigSubSection title=\"Additional Settings\">\n {!skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n label=\"Endpoint\"\n description=\"Optionally, specify a custom endpoint for the service\"\n htmlFor=\"endpoint\"\n >\n <Input\n id=\"endpoint\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </Field>\n )}\n\n <Field\n label=\"Default Region\"\n description=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n htmlFor=\"defaultRegion\"\n >\n <Select\n inputId=\"defaultRegion\"\n value={\n regions.find((region) => region.value === options.jsonData.defaultRegion) ??\n (options.jsonData.defaultRegion\n ? {\n label: options.jsonData.defaultRegion,\n value: options.jsonData.defaultRegion,\n }\n : undefined)\n }\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </Field>\n </ConfigSubSection>\n {props.children}\n </ConfigSection>\n </div>\n );\n};\n","// copied from Azure Data Explorer plugin\nimport { isNumber } from 'lodash';\n\nconst versionPattern = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-([0-9A-Za-z\\.]+))?/;\n\nexport class SemVersion {\n major: number;\n minor: number;\n patch: number;\n meta: string;\n\n constructor(version: string) {\n this.major = 0;\n this.minor = 0;\n this.patch = 0;\n this.meta = '';\n\n const match = versionPattern.exec(version);\n if (match) {\n this.major = Number(match[1]);\n this.minor = Number(match[2] || 0);\n this.patch = Number(match[3] || 0);\n this.meta = match[4];\n }\n }\n\n isGtOrEq(version: string): boolean {\n const compared = new SemVersion(version);\n\n for (let i = 0; i < this.comparable.length; ++i) {\n if (this.comparable[i] > compared.comparable[i]) {\n return true;\n }\n if (this.comparable[i] < compared.comparable[i]) {\n return false;\n }\n }\n return true;\n }\n\n isValid(): boolean {\n return isNumber(this.major);\n }\n\n get comparable() {\n return [this.major, this.minor, this.patch];\n }\n}\n\nexport function isVersionGtOrEq(a: string, b: string): boolean {\n const aSemver = new SemVersion(a);\n return aSemver.isGtOrEq(b);\n}\n","// copied from Azure Data Explorer plugin since there is not Divider component in G<10.1\nimport React from 'react';\nimport { Divider as GrafanaDivider, useTheme2 } from '@grafana/ui';\nimport { config } from '@grafana/runtime';\nimport { isVersionGtOrEq } from './utils/version';\n\nexport function Divider() {\n const theme = useTheme2();\n if (isVersionGtOrEq(config.buildInfo.version, '10.1.0')) {\n return <GrafanaDivider />;\n }\n return (\n <div\n style={{ borderTop: `1px solid ${theme.colors.border.weak}`, margin: theme.spacing(2, 0), width: '100%' }}\n ></div>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig } from '../components/ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData, ConnectionConfigProps } from '../types';\n\nexport interface SIGV4ConnectionConfigProps extends DataSourcePluginOptionsEditorProps<any, any> {\n inExperimentalAuthComponent?: boolean;\n}\n\nexport const SIGV4ConnectionConfig: React.FC<SIGV4ConnectionConfigProps> = (props: SIGV4ConnectionConfigProps) => {\n const { onOptionsChange, options } = props;\n\n // Map HttpSettings props to ConnectionConfigProps\n const connectionConfigProps: ConnectionConfigProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> = {\n onOptionsChange: (awsDataSourceSettings) => {\n const dataSourceSettings: DataSourceSettings<any, any> = {\n ...options,\n jsonData: {\n ...options.jsonData,\n sigV4AuthType: awsDataSourceSettings.jsonData.authType,\n sigV4Profile: awsDataSourceSettings.jsonData.profile,\n sigV4AssumeRoleArn: awsDataSourceSettings.jsonData.assumeRoleArn,\n sigV4ExternalId: awsDataSourceSettings.jsonData.externalId,\n sigV4Region: awsDataSourceSettings.jsonData.defaultRegion,\n sigV4Endpoint: awsDataSourceSettings.jsonData.endpoint,\n },\n secureJsonFields: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonFields?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonFields?.secretKey,\n },\n secureJsonData: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonData?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonData?.secretKey,\n },\n };\n onOptionsChange(dataSourceSettings);\n },\n options: {\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: options.jsonData.sigV4AuthType,\n profile: options.jsonData.sigV4Profile,\n assumeRoleArn: options.jsonData.sigV4AssumeRoleArn,\n externalId: options.jsonData.sigV4ExternalId,\n defaultRegion: options.jsonData.sigV4Region,\n endpoint: options.jsonData.sigV4Endpoint,\n },\n secureJsonFields: {\n accessKey: options.secureJsonFields?.sigV4AccessKey,\n secretKey: options.secureJsonFields?.sigV4SecretKey,\n },\n secureJsonData: {\n accessKey: options.secureJsonData?.sigV4AccessKey,\n secretKey: options.secureJsonData?.sigV4SecretKey,\n },\n },\n inExperimentalAuthComponent: props.inExperimentalAuthComponent,\n };\n\n return (\n <>\n <div className=\"gf-form\">\n <h6>SigV4 Auth Details</h6>\n </div>\n <ConnectionConfig {...connectionConfigProps} skipHeader skipEndpoint></ConnectionConfig>\n </>\n );\n};\n","import { DataQuery } from '@grafana/schema';\nimport { FillValueOptions } from './QueryEditor/FillValueSelect';\n\nexport const defaultKey = '__default';\n\nexport interface SQLQuery extends DataQuery {\n rawSQL: string;\n format?: number;\n fillMode?: { mode: FillValueOptions; value?: number };\n}\n","import { SelectableValue } from '@grafana/data';\nimport { Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [fetchedResources, setFetchedResources] = useState<Array<string | SelectableValue>>(() => {\n const initialResource = props.value || props.default || null;\n return initialResource ? [initialResource] : [];\n });\n const [isLoading, setIsLoading] = useState(false);\n\n // Resources come either from the `resources` prop (controlled) or from `fetch()` results.\n const resources = props.resources !== undefined ? props.resources : fetchedResources;\n\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n\n const options = useMemo(() => {\n if (!resources.length) {\n return [];\n }\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n return newOptions;\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = (await props.fetch?.()) || [];\n setFetchedResources(resources);\n } finally {\n fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = e.value;\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Select\n {...props}\n id={props.id}\n inputId={props.id}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n );\n}\n","import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface ConfigSelectProps extends DataSourcePluginOptionsEditorProps<\n AwsAuthDataSourceJsonData,\n AwsAuthDataSourceSecureJsonData\n> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n // input id and label necessary for accessibility attributes\n id: string;\n label: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n id={props.id}\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n placeholder={props.placeholder}\n width={props.width}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React, { FormEvent } from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n labelWidth?: number;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={props.labelWidth ?? DEFAULT_LABEL_WIDTH}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n","import { defaults } from 'lodash';\n\nimport React, { useRef, useEffect } from 'react';\nimport { CodeEditor, CodeEditorSuggestionItem, CodeEditorMonacoOptions } from '@grafana/ui';\nimport { DataQuery } from '@grafana/schema';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: CodeEditorMonacoOptions;\n};\n\ntype Props<TQuery extends DataQuery> = {\n query: TQuery;\n language: string;\n editorProps?: EditorProps;\n onChange: (value: TQuery) => void;\n onRunQuery: () => void;\n getSuggestions: (query: TQuery) => CodeEditorSuggestionItem[];\n};\n\nexport function QueryCodeEditor<TQuery extends DataQuery>(props: Props<TQuery>) {\n const { getSuggestions, query } = props;\n const { rawSQL } = defaults(props.query, { rawSQL: '' });\n const onRawSqlChange = (rawSQL: string) => {\n const query = {\n ...props.query,\n rawSQL,\n };\n props.onChange(query);\n props.onRunQuery();\n };\n\n // Use a reference for suggestions because a bug in CodeEditor getSuggestions\n // https://github.com/grafana/grafana/issues/40121\n // It was been fixed in 8.3 but keeping the workaround here to support older\n // versions.\n const suggestionsRef = useRef<CodeEditorSuggestionItem[]>([]);\n useEffect(() => {\n suggestionsRef.current = getSuggestions(query);\n }, [getSuggestions, query]);\n\n return (\n <CodeEditor\n language={props.language}\n value={rawSQL}\n onBlur={onRawSqlChange}\n showMiniMap={false}\n showLineNumbers={true}\n getSuggestions={() => suggestionsRef.current}\n height=\"240px\"\n {...props.editorProps}\n />\n );\n}\n","import React from 'react';\n\nimport { DataQuery, DataSourceApi, DataSourceJsonData, LoadingState, QueryEditorProps } from '@grafana/data';\nimport { EditorHeader, FlexItem, RunQueryButtons } from '@grafana/plugin-ui';\nimport { Button } from '@grafana/ui';\n\nexport interface Props<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n> extends QueryEditorProps<Datasource, TQuery, JsonData> {\n showAsyncQueryButtons?: boolean;\n extraHeaderElementLeft?: React.JSX.Element;\n extraHeaderElementRight?: React.JSX.Element;\n enableRunButton: boolean;\n cancel?: (target: TQuery) => void;\n onRunQuery: () => void;\n}\n\nexport function QueryEditorHeader<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n>({\n query,\n showAsyncQueryButtons,\n extraHeaderElementLeft,\n extraHeaderElementRight,\n enableRunButton,\n onRunQuery,\n data,\n cancel,\n}: Props<Datasource, TQuery, JsonData>): React.JSX.Element {\n return (\n <EditorHeader>\n {extraHeaderElementLeft}\n <FlexItem grow={1} />\n {showAsyncQueryButtons ? (\n <RunQueryButtons\n onRunQuery={onRunQuery}\n enableRun={enableRunButton}\n query={query}\n onCancelQuery={(target: TQuery) => {\n cancel?.(target);\n }}\n state={data?.state}\n />\n ) : (\n <Button\n variant={enableRunButton ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={data?.state === LoadingState.Loading ? 'fa fa-spinner' : undefined}\n disabled={data?.state === LoadingState.Loading || !enableRunButton}\n >\n Run queries\n </Button>\n )}\n {extraHeaderElementRight}\n </EditorHeader>\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n id?: string;\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return (\n <Select\n aria-label=\"Format data frames as\"\n id={props.id ?? 'formatAs'}\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n menuShouldPortal={true}\n />\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Input, Select } from '@grafana/ui';\nimport { EditorField } from '@grafana/plugin-ui';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n <EditorField label=\"Fill with\" tooltip=\"value to fill missing points\" htmlFor=\"fillWith\">\n <Select\n id=\"fillWith\"\n aria-label=\"Fill with\"\n data-testid=\"table-fill-with-select\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n menuShouldPortal={true}\n />\n </EditorField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <EditorField label=\"Value\" htmlFor=\"valueToFill\" width={6}>\n <Input\n id=\"valueToFill\"\n aria-label=\"Value\"\n type=\"number\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </EditorField>\n )}\n </>\n );\n}\n","import { ScopedVars, TypedVariableModel } from '@grafana/data';\nimport { SQLQuery } from '../types';\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind } from '@grafana/ui';\n\n/**\n * Do not execute queries that do not exist yet\n */\nexport function filterSQLQuery(query: SQLQuery): boolean {\n return !!query.rawSQL;\n}\n\nexport function applySQLTemplateVariables<T extends SQLQuery>(\n query: T,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): T {\n const templateSrv = getTemplateSrv();\n return {\n ...query,\n rawSQL: templateSrv.replace(query.rawSQL, scopedVars, interpolateVariable),\n };\n}\n\nfunction interpolateVariable(value: string | string[]) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n const quotedValues = value.map((v) => {\n return quoteLiteral(v);\n });\n return quotedValues.join(',');\n}\n\nfunction quoteLiteral(value: any) {\n return \"'\" + String(value).replace(/'/g, \"''\") + \"'\";\n}\n\nexport const appendTemplateVariablesAsSuggestions = (getTemplateSrv: () => any, sugs: CodeEditorSuggestionItem[]) => {\n const templateSrv = getTemplateSrv();\n const templateSugs: CodeEditorSuggestionItem[] = [];\n templateSrv.getVariables().forEach((variable: TypedVariableModel) => {\n const label = '$' + variable.name;\n let val = templateSrv.replace(label);\n if (val === label) {\n val = '';\n }\n templateSugs.push({\n label,\n kind: CodeEditorSuggestionItemKind.Text,\n detail: `(Template Variable) ${val}`,\n });\n });\n\n return sugs.concat(templateSugs);\n};\n"],"names":["usePluginInteractionReporter","useEffect","getAppEvents","DataSourceTestSucceeded","DataSourceTestFailed","AwsAuthType","css","useState","config","useMemo","regions","React","ConfigSection","ConfigSubSection","Field","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","Text","TextLink","Collapse","Space","isNumber","useTheme2","GrafanaDivider","_a","_b","_c","_d","useRef","isEqual","resources","InlineField","defaults","rawSQL","query","CodeEditor","data","EditorHeader","FlexItem","RunQueryButtons","Button","LoadingState","FillValueOptions","EditorField","CodeEditorSuggestionItemKind"],"mappings":"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"}
@@ -0,0 +1,196 @@
1
+ import React$1, { FC, FormEvent, DependencyList } from 'react';
2
+ import { DataSourceJsonData, DataSourceSettings, DataSourcePluginOptionsEditorProps, SelectableValue, DataSourceApi, DataQuery as DataQuery$1, QueryEditorProps, ScopedVars } from '@grafana/data';
3
+ import { InputActionMeta, SelectCommonProps, CodeEditorMonacoOptions, CodeEditorSuggestionItem } from '@grafana/ui';
4
+ import { DataQuery } from '@grafana/schema';
5
+
6
+ declare enum AwsAuthType {
7
+ Keys = "keys",
8
+ Credentials = "credentials",
9
+ Default = "default",// was 'arn',
10
+ EC2IAMRole = "ec2_iam_role",
11
+ /**
12
+ * @deprecated use default
13
+ */
14
+ ARN = "arn",
15
+ GrafanaAssumeRole = "grafana_assume_role"
16
+ }
17
+ interface AwsAuthDataSourceJsonData extends DataSourceJsonData {
18
+ authType?: AwsAuthType;
19
+ assumeRoleArn?: string;
20
+ externalId?: string;
21
+ profile?: string;
22
+ defaultRegion?: string;
23
+ endpoint?: string;
24
+ proxyType?: 'none' | 'env' | 'url';
25
+ proxyUrl?: string;
26
+ proxyUsername?: string;
27
+ }
28
+ interface AwsAuthDataSourceSecureJsonData {
29
+ accessKey?: string;
30
+ secretKey?: string;
31
+ proxyPassword?: string;
32
+ sessionToken?: string;
33
+ }
34
+ type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;
35
+ interface ConnectionConfigProps<J extends AwsAuthDataSourceJsonData = AwsAuthDataSourceJsonData, S = AwsAuthDataSourceSecureJsonData> extends DataSourcePluginOptionsEditorProps<J, S> {
36
+ standardRegions?: string[];
37
+ loadRegions?: () => Promise<string[]>;
38
+ defaultEndpoint?: string;
39
+ skipHeader?: boolean;
40
+ skipEndpoint?: boolean;
41
+ children?: React.ReactNode;
42
+ labelWidth?: number;
43
+ inExperimentalAuthComponent?: boolean;
44
+ externalId?: string;
45
+ hideAssumeRoleArn?: boolean;
46
+ showHttpProxySettings?: boolean;
47
+ }
48
+
49
+ declare const DEFAULT_LABEL_WIDTH = 28;
50
+ declare const ConnectionConfig: FC<ConnectionConfigProps>;
51
+
52
+ declare function Divider(): React$1.JSX.Element;
53
+
54
+ interface SIGV4ConnectionConfigProps extends DataSourcePluginOptionsEditorProps<any, any> {
55
+ inExperimentalAuthComponent?: boolean;
56
+ }
57
+ declare const SIGV4ConnectionConfig: React$1.FC<SIGV4ConnectionConfigProps>;
58
+
59
+ interface ConfigSelectProps extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {
60
+ value: string;
61
+ fetch: () => Promise<Array<string | SelectableValue<string>>>;
62
+ onChange: (e: SelectableValue<string> | null) => void;
63
+ dependencies?: string[];
64
+ id: string;
65
+ label: string;
66
+ 'data-testid'?: string;
67
+ hidden?: boolean;
68
+ disabled?: boolean;
69
+ allowCustomValue?: boolean;
70
+ saveOptions: () => Promise<void>;
71
+ autoFocus?: boolean;
72
+ backspaceRemovesValue?: boolean;
73
+ className?: string;
74
+ invalid?: boolean;
75
+ isClearable?: boolean;
76
+ isMulti?: boolean;
77
+ inputId?: string;
78
+ showAllSelectedWhenOpen?: boolean;
79
+ maxMenuHeight?: number;
80
+ minMenuHeight?: number;
81
+ maxVisibleValues?: number;
82
+ menuPlacement?: 'auto' | 'bottom' | 'top';
83
+ menuPosition?: 'fixed' | 'absolute';
84
+ noOptionsMessage?: string;
85
+ onBlur?: () => void;
86
+ onCreateOption?: (value: string) => void;
87
+ onInputChange?: (value: string, actionMeta: InputActionMeta) => void;
88
+ placeholder?: string;
89
+ width?: number;
90
+ isOptionDisabled?: () => boolean;
91
+ labelWidth?: number;
92
+ }
93
+ declare function ConfigSelect(props: ConfigSelectProps): React$1.JSX.Element;
94
+
95
+ interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {
96
+ value: string;
97
+ onChange: (e: FormEvent<HTMLInputElement>) => void;
98
+ label?: string;
99
+ tooltip?: string;
100
+ placeholder?: string;
101
+ 'data-testid'?: string;
102
+ hidden?: boolean;
103
+ disabled?: boolean;
104
+ labelWidth?: number;
105
+ }
106
+ declare function InlineInput(props: InlineInputProps): React$1.JSX.Element;
107
+
108
+ interface ResourceSelectorProps extends SelectCommonProps<string> {
109
+ tooltip?: string;
110
+ hidden?: boolean;
111
+ value: string | null;
112
+ dependencies?: DependencyList;
113
+ id: string;
114
+ label: string;
115
+ 'data-testid'?: string;
116
+ default?: string;
117
+ title?: string;
118
+ labelWidth?: number;
119
+ saveOptions?: () => Promise<void>;
120
+ fetch?: () => Promise<Array<string | SelectableValue<string>>>;
121
+ resources?: string[];
122
+ onChange: (e: SelectableValue<string> | null) => void;
123
+ }
124
+ declare function ResourceSelector(props: ResourceSelectorProps): React$1.JSX.Element;
125
+
126
+ declare enum FillValueOptions {
127
+ Previous = 0,
128
+ Null = 1,
129
+ Value = 2
130
+ }
131
+ type FillValueSelectProps<TQuery extends DataQuery> = {
132
+ query: TQuery;
133
+ onChange: (value: TQuery) => void;
134
+ onRunQuery?: () => void;
135
+ };
136
+ declare function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>): React$1.JSX.Element;
137
+
138
+ interface SQLQuery extends DataQuery {
139
+ rawSQL: string;
140
+ format?: number;
141
+ fillMode?: {
142
+ mode: FillValueOptions;
143
+ value?: number;
144
+ };
145
+ }
146
+
147
+ type EditorProps = {
148
+ width?: number | string;
149
+ height?: number | string;
150
+ readOnly?: boolean;
151
+ showMiniMap?: boolean;
152
+ showLineNumbers?: boolean;
153
+ monacoOptions?: CodeEditorMonacoOptions;
154
+ };
155
+ type Props$1<TQuery extends DataQuery> = {
156
+ query: TQuery;
157
+ language: string;
158
+ editorProps?: EditorProps;
159
+ onChange: (value: TQuery) => void;
160
+ onRunQuery: () => void;
161
+ getSuggestions: (query: TQuery) => CodeEditorSuggestionItem[];
162
+ };
163
+ declare function QueryCodeEditor<TQuery extends DataQuery>(props: Props$1<TQuery>): React$1.JSX.Element;
164
+
165
+ interface Props<Datasource extends DataSourceApi<TQuery, JsonData>, TQuery extends DataQuery$1, JsonData extends DataSourceJsonData> extends QueryEditorProps<Datasource, TQuery, JsonData> {
166
+ showAsyncQueryButtons?: boolean;
167
+ extraHeaderElementLeft?: React$1.JSX.Element;
168
+ extraHeaderElementRight?: React$1.JSX.Element;
169
+ enableRunButton: boolean;
170
+ cancel?: (target: TQuery) => void;
171
+ onRunQuery: () => void;
172
+ }
173
+ declare function QueryEditorHeader<Datasource extends DataSourceApi<TQuery, JsonData>, TQuery extends DataQuery$1, JsonData extends DataSourceJsonData>({ query, showAsyncQueryButtons, extraHeaderElementLeft, extraHeaderElementRight, enableRunButton, onRunQuery, data, cancel, }: Props<Datasource, TQuery, JsonData>): React$1.JSX.Element;
174
+
175
+ type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {
176
+ id?: string;
177
+ query: TQuery;
178
+ options: Array<SelectableValue<FormatOptions>>;
179
+ onChange: (value: TQuery) => void;
180
+ onRunQuery?: () => void;
181
+ };
182
+ declare function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(props: FormatSelectProps<TQuery, FormatOptions>): React$1.JSX.Element;
183
+
184
+ /**
185
+ * Do not execute queries that do not exist yet
186
+ */
187
+ declare function filterSQLQuery(query: SQLQuery): boolean;
188
+ declare function applySQLTemplateVariables<T extends SQLQuery>(query: T, scopedVars: ScopedVars, getTemplateSrv: () => any): T;
189
+ declare const appendTemplateVariablesAsSuggestions: (getTemplateSrv: () => any, sugs: CodeEditorSuggestionItem[]) => CodeEditorSuggestionItem[];
190
+
191
+ declare const standardRegions: string[];
192
+
193
+ declare const awsAuthProviderOptions: Array<SelectableValue<AwsAuthType>>;
194
+
195
+ export { AwsAuthType, ConfigSelect, ConnectionConfig, DEFAULT_LABEL_WIDTH, Divider, FillValueOptions, FillValueSelect, FormatSelect, InlineInput, QueryCodeEditor, QueryEditorHeader, ResourceSelector, SIGV4ConnectionConfig, appendTemplateVariablesAsSuggestions, applySQLTemplateVariables, awsAuthProviderOptions, filterSQLQuery, standardRegions };
196
+ export type { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceSettings, ConnectionConfigProps, ResourceSelectorProps, SQLQuery };
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigSelect.js","sources":["../../../../src/sql/ConfigEditor/ConfigSelect.tsx"],"sourcesContent":["import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n // input id and label necessary for accessibility attributes\n id: string;\n label: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n id={props.id}\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n placeholder={props.placeholder}\n width={props.width}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n"],"names":[],"mappings":";;;;AA4CO,SAAS,aAAa,KAAA,EAA0B;AA5CvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6CE,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,KAAA,CAAM,OAAA;AAC3B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,KAAA,EAAO,QAAA,CAAS,aAAA,GAAgB,EAAA,GAAK,yBAAA;AAAA,IACrC,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,EAAA,GAAoB,mBAAA;AAAA,IAChC,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,MAAM,YAAA,GAA+B;AAAA,IACnC,KAAA,CAAM,QAAQ,QAAA,CAAS,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,UAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,OAAA;AAAA,IAAA,CACvB,EAAA,GAAA,KAAA,CAAM,OAAA,CAAQ,cAAA,KAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAA8B,SAAA;AAAA,IAAA,CAC9B,EAAA,GAAA,KAAA,CAAM,OAAA,CAAQ,cAAA,KAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAA8B;AAAA,GAChC,CAAE,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAC3B,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAA,EAAa,MAAM,aAAa,CAAA;AAAA,MAChC,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,YAAA;AAAA,MACA,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,QAAA,EAAU,KAAA,CAAM,QAAA,IAAY,CAAC,QAAA,CAAS,aAAA;AAAA,MACtC,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,uBAAuB,KAAA,CAAM,qBAAA;AAAA,MAC7B,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,yBAAyB,KAAA,CAAM,uBAAA;AAAA,MAC/B,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACvB,GAAG;AAAA;AAAA,GACN;AAEJ;;;;"}
1
+ {"version":3,"file":"ConfigSelect.js","sources":["../../../../src/sql/ConfigEditor/ConfigSelect.tsx"],"sourcesContent":["import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface ConfigSelectProps extends DataSourcePluginOptionsEditorProps<\n AwsAuthDataSourceJsonData,\n AwsAuthDataSourceSecureJsonData\n> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n // input id and label necessary for accessibility attributes\n id: string;\n label: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n id={props.id}\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n placeholder={props.placeholder}\n width={props.width}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n"],"names":[],"mappings":";;;;AA8CO,SAAS,aAAa,KAAA,EAA0B;AA9CvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+CE,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,KAAA,CAAM,OAAA;AAC3B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,KAAA,EAAO,QAAA,CAAS,aAAA,GAAgB,EAAA,GAAK,yBAAA;AAAA,IACrC,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,EAAA,GAAoB,mBAAA;AAAA,IAChC,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,MAAM,YAAA,GAA+B;AAAA,IACnC,KAAA,CAAM,QAAQ,QAAA,CAAS,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,UAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAA,CAAS,OAAA;AAAA,IAAA,CACvB,EAAA,GAAA,KAAA,CAAM,OAAA,CAAQ,cAAA,KAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAA8B,SAAA;AAAA,IAAA,CAC9B,EAAA,GAAA,KAAA,CAAM,OAAA,CAAQ,cAAA,KAAd,IAAA,GAAA,MAAA,GAAA,EAAA,CAA8B;AAAA,GAChC,CAAE,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAC3B,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAA,EAAa,MAAM,aAAa,CAAA;AAAA,MAChC,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,YAAA;AAAA,MACA,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,QAAA,EAAU,KAAA,CAAM,QAAA,IAAY,CAAC,QAAA,CAAS,aAAA;AAAA,MACtC,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,uBAAuB,KAAA,CAAM,qBAAA;AAAA,MAC7B,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,yBAAyB,KAAA,CAAM,uBAAA;AAAA,MAC/B,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,eAAe,KAAA,CAAM,aAAA;AAAA,MACrB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACvB,GAAG;AAAA;AAAA,GACN;AAEJ;;;;"}
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
  import { LoadingState } from '@grafana/data';
3
- import { EditorHeader, FlexItem } from '@grafana/plugin-ui';
3
+ import { EditorHeader, FlexItem, RunQueryButtons } from '@grafana/plugin-ui';
4
4
  import { Button } from '@grafana/ui';
5
- import { RunQueryButtons } from '@grafana/async-query-data';
6
5
 
7
6
  function QueryEditorHeader({
8
7
  query,
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEditorHeader.js","sources":["../../../../src/sql/QueryEditor/QueryEditorHeader.tsx"],"sourcesContent":["import React from 'react';\n\nimport { DataQuery, DataSourceApi, DataSourceJsonData, LoadingState, QueryEditorProps } from '@grafana/data';\nimport { EditorHeader, FlexItem } from '@grafana/plugin-ui';\nimport { Button } from '@grafana/ui';\nimport { RunQueryButtons } from '@grafana/async-query-data';\n\nexport interface Props<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n> extends QueryEditorProps<Datasource, TQuery, JsonData> {\n showAsyncQueryButtons?: boolean;\n extraHeaderElementLeft?: React.JSX.Element;\n extraHeaderElementRight?: React.JSX.Element;\n enableRunButton: boolean;\n cancel?: (target: TQuery) => void;\n onRunQuery: () => void;\n}\n\nexport function QueryEditorHeader<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n>({\n query,\n showAsyncQueryButtons,\n extraHeaderElementLeft,\n extraHeaderElementRight,\n enableRunButton,\n onRunQuery,\n data,\n cancel,\n}: Props<Datasource, TQuery, JsonData>): React.JSX.Element {\n return (\n <EditorHeader>\n {extraHeaderElementLeft}\n <FlexItem grow={1} />\n {showAsyncQueryButtons ? (\n <RunQueryButtons\n onRunQuery={onRunQuery}\n enableRun={enableRunButton}\n query={query}\n onCancelQuery={(target: TQuery) => {\n cancel?.(target);\n }}\n state={data?.state}\n />\n ) : (\n <Button\n variant={enableRunButton ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={data?.state === LoadingState.Loading ? 'fa fa-spinner' : undefined}\n disabled={data?.state === LoadingState.Loading || !enableRunButton}\n >\n Run queries\n </Button>\n )}\n {extraHeaderElementRight}\n </EditorHeader>\n );\n}\n"],"names":[],"mappings":";;;;;;AAoBO,SAAS,iBAAA,CAId;AAAA,EACA,KAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA2D;AACzD,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,oBACE,sBAAA,kBACD,KAAA,CAAA,aAAA,CAAC,YAAS,IAAA,EAAM,CAAA,EAAG,GAClB,qBAAA,mBACC,KAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,SAAA,EAAW,eAAA;AAAA,MACX,KAAA;AAAA,MACA,aAAA,EAAe,CAAC,MAAA,KAAmB;AACjC,QAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAS,MAAA,CAAA;AAAA,MACX,CAAA;AAAA,MACA,OAAO,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM;AAAA;AAAA,GACf,mBAEA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,kBAAkB,SAAA,GAAY,WAAA;AAAA,MACvC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAA,CAAM,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,MAAU,YAAA,CAAa,UAAU,eAAA,GAAkB,MAAA;AAAA,MAC/D,QAAA,EAAA,CAAU,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,MAAU,YAAA,CAAa,WAAW,CAAC;AAAA,KAAA;AAAA,IACpD;AAAA,KAIF,uBACH,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"QueryEditorHeader.js","sources":["../../../../src/sql/QueryEditor/QueryEditorHeader.tsx"],"sourcesContent":["import React from 'react';\n\nimport { DataQuery, DataSourceApi, DataSourceJsonData, LoadingState, QueryEditorProps } from '@grafana/data';\nimport { EditorHeader, FlexItem, RunQueryButtons } from '@grafana/plugin-ui';\nimport { Button } from '@grafana/ui';\n\nexport interface Props<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n> extends QueryEditorProps<Datasource, TQuery, JsonData> {\n showAsyncQueryButtons?: boolean;\n extraHeaderElementLeft?: React.JSX.Element;\n extraHeaderElementRight?: React.JSX.Element;\n enableRunButton: boolean;\n cancel?: (target: TQuery) => void;\n onRunQuery: () => void;\n}\n\nexport function QueryEditorHeader<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n>({\n query,\n showAsyncQueryButtons,\n extraHeaderElementLeft,\n extraHeaderElementRight,\n enableRunButton,\n onRunQuery,\n data,\n cancel,\n}: Props<Datasource, TQuery, JsonData>): React.JSX.Element {\n return (\n <EditorHeader>\n {extraHeaderElementLeft}\n <FlexItem grow={1} />\n {showAsyncQueryButtons ? (\n <RunQueryButtons\n onRunQuery={onRunQuery}\n enableRun={enableRunButton}\n query={query}\n onCancelQuery={(target: TQuery) => {\n cancel?.(target);\n }}\n state={data?.state}\n />\n ) : (\n <Button\n variant={enableRunButton ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={data?.state === LoadingState.Loading ? 'fa fa-spinner' : undefined}\n disabled={data?.state === LoadingState.Loading || !enableRunButton}\n >\n Run queries\n </Button>\n )}\n {extraHeaderElementRight}\n </EditorHeader>\n );\n}\n"],"names":[],"mappings":";;;;;AAmBO,SAAS,iBAAA,CAId;AAAA,EACA,KAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAA2D;AACzD,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,oBACE,sBAAA,kBACD,KAAA,CAAA,aAAA,CAAC,YAAS,IAAA,EAAM,CAAA,EAAG,GAClB,qBAAA,mBACC,KAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,SAAA,EAAW,eAAA;AAAA,MACX,KAAA;AAAA,MACA,aAAA,EAAe,CAAC,MAAA,KAAmB;AACjC,QAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAS,MAAA,CAAA;AAAA,MACX,CAAA;AAAA,MACA,OAAO,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM;AAAA;AAAA,GACf,mBAEA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,kBAAkB,SAAA,GAAY,WAAA;AAAA,MACvC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAA,CAAM,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,MAAU,YAAA,CAAa,UAAU,eAAA,GAAkB,MAAA;AAAA,MAC/D,QAAA,EAAA,CAAU,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,MAAU,YAAA,CAAa,WAAW,CAAC;AAAA,KAAA;AAAA,IACpD;AAAA,KAIF,uBACH,CAAA;AAEJ;;;;"}
@@ -9,10 +9,12 @@ function ResourceSelector(props) {
9
9
  const dependencies = useRef(props.dependencies);
10
10
  const fetched = useRef(false);
11
11
  const resource = useRef(props.value || props.default || null);
12
- const [resources, setResources] = useState(
13
- resource.current ? [resource.current] : []
14
- );
12
+ const [fetchedResources, setFetchedResources] = useState(() => {
13
+ const initialResource = props.value || props.default || null;
14
+ return initialResource ? [initialResource] : [];
15
+ });
15
16
  const [isLoading, setIsLoading] = useState(false);
17
+ const resources = props.resources !== void 0 ? props.resources : fetchedResources;
16
18
  const defaultOpts = useMemo(() => {
17
19
  const opts = [
18
20
  {
@@ -26,25 +28,18 @@ function ResourceSelector(props) {
26
28
  }
27
29
  return opts;
28
30
  }, [props.default, props.value]);
29
- const [options, setOptions] = useState(props.default ? defaultOpts : []);
30
- useEffect(() => {
31
- if (props.resources !== void 0) {
32
- setResources(props.resources);
31
+ const options = useMemo(() => {
32
+ if (!resources.length) {
33
+ return [];
33
34
  }
34
- }, [props.resources]);
35
- useEffect(() => {
36
35
  const newOptions = props.default ? defaultOpts : [];
37
- if (resources.length) {
38
- resources.forEach((r) => {
39
- const value = typeof r === "string" ? r : r.value;
40
- if (!newOptions.find((o) => o.value === value)) {
41
- typeof r === "string" ? newOptions.push({ label: r, value: r }) : newOptions.push(r);
42
- }
43
- });
44
- setOptions(newOptions);
45
- } else {
46
- setOptions([]);
47
- }
36
+ resources.forEach((r) => {
37
+ const value = typeof r === "string" ? r : r.value;
38
+ if (!newOptions.find((o) => o.value === value)) {
39
+ typeof r === "string" ? newOptions.push({ label: r, value: r }) : newOptions.push(r);
40
+ }
41
+ });
42
+ return newOptions;
48
43
  }, [resources, defaultOpts, props.default]);
49
44
  useEffect(() => {
50
45
  if (!isEqual(propsDependencies, dependencies.current)) {
@@ -64,7 +59,7 @@ function ResourceSelector(props) {
64
59
  }
65
60
  try {
66
61
  const resources2 = await ((_a = props.fetch) == null ? void 0 : _a.call(props)) || [];
67
- setResources(resources2);
62
+ setFetchedResources(resources2);
68
63
  } finally {
69
64
  fetched.current = true;
70
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceSelector.js","sources":["../../../src/sql/ResourceSelector.tsx"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\nimport { Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [resources, setResources] = useState<Array<string | SelectableValue>>(\n resource.current ? [resource.current] : []\n );\n const [isLoading, setIsLoading] = useState(false);\n\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = (await props.fetch?.()) || [];\n setResources(resources);\n } finally {\n fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = e.value;\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Select\n {...props}\n id={props.id}\n inputId={props.id}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n );\n}\n"],"names":["resources"],"mappings":"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"}
1
+ {"version":3,"file":"ResourceSelector.js","sources":["../../../src/sql/ResourceSelector.tsx"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\nimport { Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [fetchedResources, setFetchedResources] = useState<Array<string | SelectableValue>>(() => {\n const initialResource = props.value || props.default || null;\n return initialResource ? [initialResource] : [];\n });\n const [isLoading, setIsLoading] = useState(false);\n\n // Resources come either from the `resources` prop (controlled) or from `fetch()` results.\n const resources = props.resources !== undefined ? props.resources : fetchedResources;\n\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n\n const options = useMemo(() => {\n if (!resources.length) {\n return [];\n }\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n return newOptions;\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = (await props.fetch?.()) || [];\n setFetchedResources(resources);\n } finally {\n fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = e.value;\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Select\n {...props}\n id={props.id}\n inputId={props.id}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n );\n}\n"],"names":["resources"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,25 @@
1
1
  {
2
2
  "name": "@grafana/aws-sdk",
3
- "version": "0.10.3",
3
+ "version": "0.11.0",
4
4
  "description": "Common AWS features for grafana",
5
- "main": "dist/index.js",
5
+ "type": "module",
6
+ "main": "dist/cjs/index.cjs",
6
7
  "module": "dist/esm/index.js",
7
- "types": "dist/index.d.ts",
8
+ "types": "dist/cjs/index.d.cts",
9
+ "exports": {
10
+ "./package.json": "./package.json",
11
+ ".": {
12
+ "import": {
13
+ "types": "./dist/esm/index.d.ts",
14
+ "default": "./dist/esm/index.js"
15
+ },
16
+ "require": {
17
+ "types": "./dist/cjs/index.d.cts",
18
+ "default": "./dist/cjs/index.cjs"
19
+ }
20
+ }
21
+ },
22
+ "sideEffects": false,
8
23
  "publishConfig": {
9
24
  "access": "public"
10
25
  },
@@ -13,7 +28,8 @@
13
28
  "build": "yarn clean && yarn typecheck && yarn bundle",
14
29
  "bundle": "rollup -c rollup.config.ts --configPlugin esbuild",
15
30
  "clean": "rimraf ./dist ./compiled",
16
- "lint": "eslint --cache . && yarn spellcheck",
31
+ "lint": "eslint --cache . && yarn spellcheck && yarn lint:package",
32
+ "lint:package": "yarn build && publint",
17
33
  "spellcheck": "cspell -c cspell.config.json \"**/*.{ts,tsx,js,go,md,mdx,yml,yaml,json,scss,css}\"",
18
34
  "typecheck": "tsc -p ./tsconfig.build.json",
19
35
  "test": "jest --notify --watch",
@@ -25,60 +41,64 @@
25
41
  ],
26
42
  "repository": {
27
43
  "type": "git",
28
- "url": "https://github.com/grafana/grafana-aws-sdk-react.git"
44
+ "url": "git+https://github.com/grafana/grafana-aws-sdk-react.git"
29
45
  },
30
46
  "author": "Grafana Labs <team@grafana.com> (https://grafana.com)",
31
47
  "license": "Apache-2.0",
32
- "dependencies": {
33
- "@grafana/async-query-data": "0.4.2",
34
- "@grafana/plugin-ui": "^0.13.0"
48
+ "engines": {
49
+ "node": ">=24"
50
+ },
51
+ "peerDependencies": {
52
+ "@grafana/plugin-ui": ">=0.14.0"
35
53
  },
36
54
  "devDependencies": {
37
- "@eslint/eslintrc": "^3.3.1",
38
- "@eslint/js": "^10.0.0",
39
- "@grafana/data": "12.3.3",
40
- "@grafana/eslint-config": "^9.0.0",
41
- "@grafana/runtime": "12.3.3",
42
- "@grafana/tsconfig": "^2.0.0",
43
- "@grafana/ui": "13.0.0",
44
- "@rollup/plugin-node-resolve": "^16.0.0",
45
- "@stylistic/eslint-plugin-ts": "^4.2.0",
46
- "@swc/core": "^1.14.0",
47
- "@swc/jest": "^0.2.36",
55
+ "@grafana/data": "13.0.2",
56
+ "@grafana/e2e-selectors": "13.0.2",
57
+ "@grafana/eslint-config": "10.0.0",
58
+ "@grafana/plugin-ui": "0.15.1",
59
+ "@grafana/runtime": "13.0.2",
60
+ "@grafana/tsconfig": "2.2.0",
61
+ "@grafana/ui": "13.0.2",
62
+ "@rollup/plugin-node-resolve": "16.0.3",
63
+ "@stylistic/eslint-plugin": "5.10.0",
64
+ "@swc/core": "1.15.41",
65
+ "@swc/jest": "0.2.39",
66
+ "@testing-library/dom": "10.4.1",
48
67
  "@testing-library/jest-dom": "6.9.1",
49
68
  "@testing-library/react": "16.3.2",
50
- "@testing-library/react-hooks": "8.0.1",
51
- "@testing-library/user-event": "^14.5.2",
69
+ "@testing-library/user-event": "14.6.1",
52
70
  "@types/jest": "30.0.0",
53
71
  "@types/lodash": "4.17.23",
54
72
  "@types/node": "24.10.13",
55
73
  "@types/react": "18.3.28",
56
74
  "@types/react-dom": "18.3.7",
57
- "@typescript-eslint/eslint-plugin": "^8.53.0",
58
- "@typescript-eslint/parser": "^8.53.0",
59
- "cspell": "10.0.0",
60
- "esbuild": "^0.27.2",
61
- "eslint": "^10.0.0",
62
- "eslint-config-prettier": "^10.0.1",
63
- "eslint-plugin-deprecation": "^3.0.0",
64
- "eslint-plugin-jsdoc": "^62.0.0",
65
- "eslint-plugin-react": "^7.37.2",
66
- "eslint-plugin-react-hooks": "^7.0.0",
67
- "identity-obj-proxy": "^3.0.0",
68
- "jest": "30.2.0",
69
- "jest-environment-jsdom": "^30.0.0",
70
- "lefthook": "^2.1.0",
71
- "node-notifier": "^10.0.1",
72
- "prettier": "^3.8.0",
75
+ "@typescript-eslint/eslint-plugin": "8.61.0",
76
+ "@typescript-eslint/parser": "8.61.0",
77
+ "cspell": "10.0.1",
78
+ "esbuild": "0.27.7",
79
+ "eslint": "9.39.4",
80
+ "eslint-config-prettier": "10.1.8",
81
+ "eslint-plugin-jsdoc": "62.9.0",
82
+ "eslint-plugin-prettier": "5.5.6",
83
+ "eslint-plugin-react": "7.37.5",
84
+ "eslint-plugin-react-hooks": "7.1.1",
85
+ "identity-obj-proxy": "3.0.0",
86
+ "jest": "30.4.2",
87
+ "jest-environment-jsdom": "30.4.1",
88
+ "lefthook": "2.1.9",
89
+ "node-notifier": "10.0.1",
90
+ "prettier": "3.8.4",
91
+ "publint": "0.3.21",
73
92
  "react": "18.3.1",
74
93
  "react-dom": "18.3.1",
75
- "react-select-event": "^5.5.1",
76
- "rimraf": "^6.0.1",
77
- "rollup": "4.59.0",
78
- "rollup-plugin-dts": "^6.3.0",
79
- "rollup-plugin-esbuild": "^6.1.1",
80
- "rollup-plugin-node-externals": "^9.0.0",
81
- "typescript": "^5.9.2"
94
+ "react-select-event": "5.5.1",
95
+ "rimraf": "6.1.3",
96
+ "rollup": "4.62.0",
97
+ "rollup-plugin-dts": "6.4.1",
98
+ "rollup-plugin-esbuild": "6.2.1",
99
+ "rollup-plugin-node-externals": "9.0.1",
100
+ "rxjs": "7.8.2",
101
+ "typescript": "6.0.3"
82
102
  },
83
- "packageManager": "yarn@4.12.0"
103
+ "packageManager": "yarn@4.17.0"
84
104
  }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/hooks/useConfigSaveReporter.ts","../src/regions.ts","../src/types.ts","../src/providers.ts","../src/components/ConnectionConfig.styles.ts","../src/components/ConnectionConfig.tsx","../src/components/utils/version.ts","../src/components/Divider.tsx","../src/components/SIGV4ConnectionConfig.tsx","../src/sql/types.ts","../src/sql/ResourceSelector.tsx","../src/sql/ConfigEditor/ConfigSelect.tsx","../src/sql/ConfigEditor/InlineInput.tsx","../src/sql/QueryEditor/QueryCodeEditor.tsx","../src/sql/QueryEditor/QueryEditorHeader.tsx","../src/sql/QueryEditor/FormatSelect.tsx","../src/sql/QueryEditor/FillValueSelect.tsx","../src/sql/utils/utils.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { DataSourceTestSucceeded, DataSourceTestFailed } from '@grafana/data';\nimport { usePluginInteractionReporter, getAppEvents } from '@grafana/runtime';\nimport { AwsAuthType } from '../types';\n\nexport function useConfigSaveReporter(pluginId: string, authType: AwsAuthType | undefined): void {\n const report = usePluginInteractionReporter();\n\n useEffect(() => {\n const appEvents = getAppEvents();\n\n const successSubscription = appEvents.subscribe<DataSourceTestSucceeded>(DataSourceTestSucceeded, () => {\n report('grafana_plugin_aws_save', {\n auth_type: authType,\n result: 'succeeded',\n });\n });\n\n const failSubscription = appEvents.subscribe<DataSourceTestFailed>(DataSourceTestFailed, () => {\n report('grafana_plugin_aws_save', {\n auth_type: authType,\n result: 'failed',\n });\n });\n\n return () => {\n successSubscription.unsubscribe();\n failSubscription.unsubscribe();\n };\n }, [pluginId, authType, report]);\n}\n","export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-east-2',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-south-2',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ap-southeast-3',\n 'ap-southeast-4',\n 'ap-southeast-5',\n 'ap-southeast-6',\n 'ap-southeast-7',\n 'ca-central-1',\n 'ca-west-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-central-2',\n 'eu-isoe-west-1',\n 'eu-north-1',\n 'eu-south-1',\n 'eu-south-2',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'il-central-1',\n 'me-central-1',\n 'me-south-1',\n 'mx-central-1',\n 'sa-east-1',\n 'us-east-1',\n 'us-east-2',\n 'us-gov-east-1',\n 'us-gov-west-1',\n 'us-iso-east-1',\n 'us-iso-west-1',\n 'us-isob-east-1',\n 'us-isob-west-1',\n 'us-isof-east-1',\n 'us-northeast-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import type { DataSourceJsonData, DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\n\nexport enum AwsAuthType {\n Keys = 'keys',\n Credentials = 'credentials',\n Default = 'default', // was 'arn',\n EC2IAMRole = 'ec2_iam_role',\n /**\n * @deprecated use default\n */\n ARN = 'arn',\n GrafanaAssumeRole = 'grafana_assume_role',\n}\n\nexport interface AwsAuthDataSourceJsonData extends DataSourceJsonData {\n authType?: AwsAuthType;\n assumeRoleArn?: string;\n externalId?: string;\n profile?: string; // Credentials profile name, as specified in ~/.aws/credentials\n defaultRegion?: string; // region if it is not defined by your credentials file\n endpoint?: string;\n proxyType?: 'none' | 'env' | 'url';\n proxyUrl?: string;\n proxyUsername?: string;\n}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n proxyPassword?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n\nexport interface ConnectionConfigProps<\n J extends AwsAuthDataSourceJsonData = AwsAuthDataSourceJsonData,\n S = AwsAuthDataSourceSecureJsonData,\n> extends DataSourcePluginOptionsEditorProps<J, S> {\n standardRegions?: string[];\n loadRegions?: () => Promise<string[]>;\n defaultEndpoint?: string;\n skipHeader?: boolean;\n skipEndpoint?: boolean;\n children?: React.ReactNode;\n labelWidth?: number;\n inExperimentalAuthComponent?: boolean;\n externalId?: string;\n hideAssumeRoleArn?: boolean;\n showHttpProxySettings?: boolean;\n}\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions: Array<SelectableValue<AwsAuthType>> = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\n },\n {\n label: 'Grafana Assume Role',\n value: AwsAuthType.GrafanaAssumeRole,\n },\n {\n label: 'AWS SDK Default',\n value: AwsAuthType.Default,\n },\n {\n label: 'Access & secret key',\n value: AwsAuthType.Keys,\n },\n {\n label: 'Credentials file',\n value: AwsAuthType.Credentials,\n },\n];\n","import { css } from '@emotion/css';\n\nexport const assumeRoleInstructionsStyle = css({\n maxWidth: '715px',\n});\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Text, TextLink, Collapse, Field, Space } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { useConfigSaveReporter } from '../hooks/useConfigSaveReporter';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\nimport { ConfigSection, ConfigSubSection } from '@grafana/plugin-ui';\n\nexport const DEFAULT_LABEL_WIDTH = 28;\nconst DS_TYPES_THAT_SUPPORT_TEMP_CREDS = [\n 'cloudwatch',\n 'grafana-amazonprometheus-datasource',\n 'grafana-athena-datasource',\n 'grafana-aurora-datasource',\n 'grafana-dynamodb-datasource',\n 'grafana-iot-sitewise-datasource',\n 'grafana-opensearch-datasource',\n 'grafana-redshift-datasource',\n 'grafana-timestream-datasource',\n 'grafana-x-ray-datasource',\n];\nconst RFC_2396_WARNING =\n 'This functionality should only be used with legacy web sites. RFC 2396 warns that interpreting Userinfo this way \"is NOT RECOMMENDED, because the passing of authentication information in clear text (such as URI) has proven to be a security risk in almost every case where it has been used.\"';\nconst toOption = (value: string) => ({ value, label: value });\nconst isAwsAuthType = (value: any): value is AwsAuthType => {\n return typeof value === 'string' && awsAuthProviderOptions.some((opt) => opt.value === value);\n};\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const {\n loadRegions,\n onOptionsChange,\n skipHeader = false,\n skipEndpoint = false,\n options,\n hideAssumeRoleArn = false,\n showHttpProxySettings = false,\n } = props;\n useConfigSaveReporter(options.type, options.jsonData.authType);\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n const tempCredsFeatureEnabled =\n config.featureToggles.awsDatasourcesTempCredentials && DS_TYPES_THAT_SUPPORT_TEMP_CREDS.includes(options.type);\n // @ts-ignore ignore feature toggle type error\n const httpProxySettingEnabled = showHttpProxySettings && (config.awsPerDatasourceHTTPProxyEnabled ?? false);\n const awsAssumeRoleEnabled = config.awsAssumeRoleEnabled ?? true;\n const awsAllowedAuthProviders = useMemo(\n () =>\n config.awsAllowedAuthProviders\n .filter((provider) => (provider === AwsAuthType.GrafanaAssumeRole ? tempCredsFeatureEnabled : true))\n .filter(isAwsAuthType),\n [tempCredsFeatureEnabled]\n );\n const externalId = useMemo(() => {\n if (tempCredsFeatureEnabled && options.jsonData.authType === AwsAuthType.GrafanaAssumeRole) {\n if (config.namespace.startsWith('stacks-')) {\n return config.namespace.substring(config.namespace.indexOf('-') + 1);\n }\n }\n return props.externalId;\n }, [tempCredsFeatureEnabled, options.jsonData.authType, props.externalId]);\n const currentProvider = awsAuthProviderOptions.find((p) => p.value === options.jsonData.authType);\n\n useEffect(() => {\n // Make sure a authType exists in the current model\n if (!currentProvider && awsAllowedAuthProviders.length) {\n let defaultAuthType = awsAllowedAuthProviders[0];\n if (awsAllowedAuthProviders.includes(AwsAuthType.GrafanaAssumeRole)) {\n defaultAuthType = AwsAuthType.GrafanaAssumeRole;\n }\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: defaultAuthType,\n },\n });\n }\n }, [currentProvider, options, onOptionsChange, awsAllowedAuthProviders]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <div data-testid=\"connection-config\">\n <ConfigSection title={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <ConfigSubSection title=\"Authentication\">\n <Field\n label=\"Authentication Provider\"\n description=\"Specify which AWS credentials chain to use.\"\n htmlFor=\"authProvider\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n inputId=\"authProvider\"\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </Field>\n {options.jsonData.authType === 'credentials' && (\n <Field\n label=\"Credentials Profile Name\"\n description=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\n placeholder=\"default\"\n value={options.jsonData.profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </Field>\n )}\n {options.jsonData.authType === 'keys' && (\n <>\n <Field label=\"Access Key ID\" htmlFor=\"accessKeyId\">\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" id=\"accessKeyId\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n id=\"accessKeyId\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </Field>\n\n <Field label=\"Secret Access Key\" htmlFor=\"secretKey\">\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n id=\"secretKey\"\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n id=\"secretKey\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </Field>\n </>\n )}\n </ConfigSubSection>\n\n {!hideAssumeRoleArn && (\n <ConfigSubSection\n title=\"Assume Role\"\n description={\n options.jsonData.authType === AwsAuthType.GrafanaAssumeRole ? (\n <Text>\n Learn more about{' '}\n <TextLink\n inline\n external\n variant=\"bodySmall\"\n href=\"https://grafana.com/docs/plugins/cloudwatch/latest/aws-authentication/#use-grafana-assume-role\"\n >\n Grafana Assume Role\n </TextLink>\n .\n </Text>\n ) : null\n }\n >\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={assumeRoleInstructionsStyle}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{externalId || 'External Id is currently unavailable'}</code> and click <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n {awsAssumeRoleEnabled && (\n <>\n <Field\n htmlFor=\"assumeRoleArn\"\n label=\"Assume Role ARN\"\n description=\"Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly.\"\n >\n <Input\n id=\"assumeRoleArn\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </Field>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n htmlFor=\"externalId\"\n label=\"External ID\"\n description=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n id=\"externalId\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </Field>\n )}\n </>\n )}\n </ConfigSubSection>\n )}\n {httpProxySettingEnabled && (\n <ConfigSubSection title=\"Proxy Configuration\">\n <Field\n label=\"Proxy Type\"\n description=\"Specify the type of proxy to use. This should not be set if Secure Socks Proxy is enabled.\"\n htmlFor=\"proxyType\"\n >\n <Select\n inputId=\"proxyType\"\n value={options.jsonData.proxyType || 'env'}\n options={[\n { label: 'Environment (default)', value: 'env' },\n { label: 'None', value: 'none' },\n { label: 'URL', value: 'url' },\n ]}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'proxyType')}\n />\n </Field>\n {(options.jsonData.proxyType === 'env' || !options.jsonData.proxyType) && (\n <>\n <Text variant=\"bodySmall\" color=\"secondary\">\n Proxy settings from environment variables will be used. Use <code>HTTP_PROXY</code> &amp;{' '}\n <code>HTTPS_PROXY</code> environment variables. This will be skipped if no environment variables\n found.\n </Text>\n <Space v={2} />\n </>\n )}\n {options.jsonData.proxyType === 'url' && (\n <>\n <Field\n label=\"Proxy URL\"\n description=\"Proxy URL. Don't set the username or password here\"\n htmlFor=\"proxyUrl\"\n >\n <Input\n id=\"proxyUrl\"\n placeholder=\"Example: https://localhost:3004\"\n value={options.jsonData.proxyUrl || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'proxyUrl')}\n />\n </Field>\n <Field\n label=\"Proxy Username\"\n description={`Optional: Proxy Username. ${RFC_2396_WARNING}`}\n htmlFor=\"proxyUsername\"\n >\n <Input\n id=\"proxyUsername\"\n value={options.jsonData.proxyUsername || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'proxyUsername')}\n />\n </Field>\n <Field\n label=\"Proxy Password\"\n description={`Optional: Proxy Password. ${RFC_2396_WARNING}`}\n htmlFor=\"proxyPassword\"\n >\n <Input\n id=\"proxyPassword\"\n value={options.secureJsonData?.proxyPassword ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'proxyPassword')}\n />\n </Field>\n </>\n )}\n </ConfigSubSection>\n )}\n <ConfigSubSection title=\"Additional Settings\">\n {!skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n label=\"Endpoint\"\n description=\"Optionally, specify a custom endpoint for the service\"\n htmlFor=\"endpoint\"\n >\n <Input\n id=\"endpoint\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </Field>\n )}\n\n <Field\n label=\"Default Region\"\n description=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n htmlFor=\"defaultRegion\"\n >\n <Select\n inputId=\"defaultRegion\"\n value={\n regions.find((region) => region.value === options.jsonData.defaultRegion) ??\n (options.jsonData.defaultRegion\n ? {\n label: options.jsonData.defaultRegion,\n value: options.jsonData.defaultRegion,\n }\n : undefined)\n }\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </Field>\n </ConfigSubSection>\n {props.children}\n </ConfigSection>\n </div>\n );\n};\n","// copied from Azure Data Explorer plugin\nimport { isNumber } from 'lodash';\n\nconst versionPattern = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-([0-9A-Za-z\\.]+))?/;\n\nexport class SemVersion {\n major: number;\n minor: number;\n patch: number;\n meta: string;\n\n constructor(version: string) {\n this.major = 0;\n this.minor = 0;\n this.patch = 0;\n this.meta = '';\n\n const match = versionPattern.exec(version);\n if (match) {\n this.major = Number(match[1]);\n this.minor = Number(match[2] || 0);\n this.patch = Number(match[3] || 0);\n this.meta = match[4];\n }\n }\n\n isGtOrEq(version: string): boolean {\n const compared = new SemVersion(version);\n\n for (let i = 0; i < this.comparable.length; ++i) {\n if (this.comparable[i] > compared.comparable[i]) {\n return true;\n }\n if (this.comparable[i] < compared.comparable[i]) {\n return false;\n }\n }\n return true;\n }\n\n isValid(): boolean {\n return isNumber(this.major);\n }\n\n get comparable() {\n return [this.major, this.minor, this.patch];\n }\n}\n\nexport function isVersionGtOrEq(a: string, b: string): boolean {\n const aSemver = new SemVersion(a);\n return aSemver.isGtOrEq(b);\n}\n","// copied from Azure Data Explorer plugin since there is not Divider component in G<10.1\nimport React from 'react';\nimport { Divider as GrafanaDivider, useTheme2 } from '@grafana/ui';\nimport { config } from '@grafana/runtime';\nimport { isVersionGtOrEq } from './utils/version';\n\nexport function Divider() {\n const theme = useTheme2();\n if (isVersionGtOrEq(config.buildInfo.version, '10.1.0')) {\n return <GrafanaDivider />;\n }\n return (\n <div\n style={{ borderTop: `1px solid ${theme.colors.border.weak}`, margin: theme.spacing(2, 0), width: '100%' }}\n ></div>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig } from '../components/ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData, ConnectionConfigProps } from '../types';\n\nexport interface SIGV4ConnectionConfigProps extends DataSourcePluginOptionsEditorProps<any, any> {\n inExperimentalAuthComponent?: boolean;\n}\n\nexport const SIGV4ConnectionConfig: React.FC<SIGV4ConnectionConfigProps> = (props: SIGV4ConnectionConfigProps) => {\n const { onOptionsChange, options } = props;\n\n // Map HttpSettings props to ConnectionConfigProps\n const connectionConfigProps: ConnectionConfigProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> = {\n onOptionsChange: (awsDataSourceSettings) => {\n const dataSourceSettings: DataSourceSettings<any, any> = {\n ...options,\n jsonData: {\n ...options.jsonData,\n sigV4AuthType: awsDataSourceSettings.jsonData.authType,\n sigV4Profile: awsDataSourceSettings.jsonData.profile,\n sigV4AssumeRoleArn: awsDataSourceSettings.jsonData.assumeRoleArn,\n sigV4ExternalId: awsDataSourceSettings.jsonData.externalId,\n sigV4Region: awsDataSourceSettings.jsonData.defaultRegion,\n sigV4Endpoint: awsDataSourceSettings.jsonData.endpoint,\n },\n secureJsonFields: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonFields?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonFields?.secretKey,\n },\n secureJsonData: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonData?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonData?.secretKey,\n },\n };\n onOptionsChange(dataSourceSettings);\n },\n options: {\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: options.jsonData.sigV4AuthType,\n profile: options.jsonData.sigV4Profile,\n assumeRoleArn: options.jsonData.sigV4AssumeRoleArn,\n externalId: options.jsonData.sigV4ExternalId,\n defaultRegion: options.jsonData.sigV4Region,\n endpoint: options.jsonData.sigV4Endpoint,\n },\n secureJsonFields: {\n accessKey: options.secureJsonFields?.sigV4AccessKey,\n secretKey: options.secureJsonFields?.sigV4SecretKey,\n },\n secureJsonData: {\n accessKey: options.secureJsonData?.sigV4AccessKey,\n secretKey: options.secureJsonData?.sigV4SecretKey,\n },\n },\n inExperimentalAuthComponent: props.inExperimentalAuthComponent,\n };\n\n return (\n <>\n <div className=\"gf-form\">\n <h6>SigV4 Auth Details</h6>\n </div>\n <ConnectionConfig {...connectionConfigProps} skipHeader skipEndpoint></ConnectionConfig>\n </>\n );\n};\n","import { DataQuery } from '@grafana/schema';\nimport { FillValueOptions } from './QueryEditor/FillValueSelect';\n\nexport const defaultKey = '__default';\n\nexport interface SQLQuery extends DataQuery {\n rawSQL: string;\n format?: number;\n fillMode?: { mode: FillValueOptions; value?: number };\n}\n","import { SelectableValue } from '@grafana/data';\nimport { Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [resources, setResources] = useState<Array<string | SelectableValue>>(\n resource.current ? [resource.current] : []\n );\n const [isLoading, setIsLoading] = useState(false);\n\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = (await props.fetch?.()) || [];\n setResources(resources);\n } finally {\n fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = e.value;\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Select\n {...props}\n id={props.id}\n inputId={props.id}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n );\n}\n","import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n // input id and label necessary for accessibility attributes\n id: string;\n label: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n id={props.id}\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n placeholder={props.placeholder}\n width={props.width}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React, { FormEvent } from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n labelWidth?: number;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={props.labelWidth ?? DEFAULT_LABEL_WIDTH}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n","import { defaults } from 'lodash';\n\nimport React, { useRef, useEffect } from 'react';\nimport { CodeEditor, CodeEditorSuggestionItem, CodeEditorMonacoOptions } from '@grafana/ui';\nimport { DataQuery } from '@grafana/schema';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: CodeEditorMonacoOptions;\n};\n\ntype Props<TQuery extends DataQuery> = {\n query: TQuery;\n language: string;\n editorProps?: EditorProps;\n onChange: (value: TQuery) => void;\n onRunQuery: () => void;\n getSuggestions: (query: TQuery) => CodeEditorSuggestionItem[];\n};\n\nexport function QueryCodeEditor<TQuery extends DataQuery>(props: Props<TQuery>) {\n const { getSuggestions, query } = props;\n const { rawSQL } = defaults(props.query, { rawSQL: '' });\n const onRawSqlChange = (rawSQL: string) => {\n const query = {\n ...props.query,\n rawSQL,\n };\n props.onChange(query);\n props.onRunQuery();\n };\n\n // Use a reference for suggestions because a bug in CodeEditor getSuggestions\n // https://github.com/grafana/grafana/issues/40121\n // It was been fixed in 8.3 but keeping the workaround here to support older\n // versions.\n const suggestionsRef = useRef<CodeEditorSuggestionItem[]>([]);\n useEffect(() => {\n suggestionsRef.current = getSuggestions(query);\n }, [getSuggestions, query]);\n\n return (\n <CodeEditor\n language={props.language}\n value={rawSQL}\n onBlur={onRawSqlChange}\n showMiniMap={false}\n showLineNumbers={true}\n getSuggestions={() => suggestionsRef.current}\n height=\"240px\"\n {...props.editorProps}\n />\n );\n}\n","import React from 'react';\n\nimport { DataQuery, DataSourceApi, DataSourceJsonData, LoadingState, QueryEditorProps } from '@grafana/data';\nimport { EditorHeader, FlexItem } from '@grafana/plugin-ui';\nimport { Button } from '@grafana/ui';\nimport { RunQueryButtons } from '@grafana/async-query-data';\n\nexport interface Props<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n> extends QueryEditorProps<Datasource, TQuery, JsonData> {\n showAsyncQueryButtons?: boolean;\n extraHeaderElementLeft?: React.JSX.Element;\n extraHeaderElementRight?: React.JSX.Element;\n enableRunButton: boolean;\n cancel?: (target: TQuery) => void;\n onRunQuery: () => void;\n}\n\nexport function QueryEditorHeader<\n Datasource extends DataSourceApi<TQuery, JsonData>,\n TQuery extends DataQuery,\n JsonData extends DataSourceJsonData,\n>({\n query,\n showAsyncQueryButtons,\n extraHeaderElementLeft,\n extraHeaderElementRight,\n enableRunButton,\n onRunQuery,\n data,\n cancel,\n}: Props<Datasource, TQuery, JsonData>): React.JSX.Element {\n return (\n <EditorHeader>\n {extraHeaderElementLeft}\n <FlexItem grow={1} />\n {showAsyncQueryButtons ? (\n <RunQueryButtons\n onRunQuery={onRunQuery}\n enableRun={enableRunButton}\n query={query}\n onCancelQuery={(target: TQuery) => {\n cancel?.(target);\n }}\n state={data?.state}\n />\n ) : (\n <Button\n variant={enableRunButton ? 'primary' : 'secondary'}\n size=\"sm\"\n onClick={onRunQuery}\n icon={data?.state === LoadingState.Loading ? 'fa fa-spinner' : undefined}\n disabled={data?.state === LoadingState.Loading || !enableRunButton}\n >\n Run queries\n </Button>\n )}\n {extraHeaderElementRight}\n </EditorHeader>\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n id?: string;\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return (\n <Select\n aria-label=\"Format data frames as\"\n id={props.id ?? 'formatAs'}\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n menuShouldPortal={true}\n />\n );\n}\n","import React from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\nimport { Input, Select } from '@grafana/ui';\nimport { EditorField } from '@grafana/plugin-ui';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n <EditorField label=\"Fill with\" tooltip=\"value to fill missing points\" htmlFor=\"fillWith\">\n <Select\n id=\"fillWith\"\n aria-label=\"Fill with\"\n data-testid=\"table-fill-with-select\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n menuShouldPortal={true}\n />\n </EditorField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <EditorField label=\"Value\" htmlFor=\"valueToFill\" width={6}>\n <Input\n id=\"valueToFill\"\n aria-label=\"Value\"\n type=\"number\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </EditorField>\n )}\n </>\n );\n}\n","import { ScopedVars, TypedVariableModel } from '@grafana/data';\nimport { SQLQuery } from '../types';\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind } from '@grafana/ui';\n\n/**\n * Do not execute queries that do not exist yet\n */\nexport function filterSQLQuery(query: SQLQuery): boolean {\n return !!query.rawSQL;\n}\n\nexport function applySQLTemplateVariables<T extends SQLQuery>(\n query: T,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): T {\n const templateSrv = getTemplateSrv();\n return {\n ...query,\n rawSQL: templateSrv.replace(query.rawSQL, scopedVars, interpolateVariable),\n };\n}\n\nfunction interpolateVariable(value: string | string[]) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n const quotedValues = value.map((v) => {\n return quoteLiteral(v);\n });\n return quotedValues.join(',');\n}\n\nfunction quoteLiteral(value: any) {\n return \"'\" + String(value).replace(/'/g, \"''\") + \"'\";\n}\n\nexport const appendTemplateVariablesAsSuggestions = (getTemplateSrv: () => any, sugs: CodeEditorSuggestionItem[]) => {\n const templateSrv = getTemplateSrv();\n const templateSugs: CodeEditorSuggestionItem[] = [];\n templateSrv.getVariables().forEach((variable: TypedVariableModel) => {\n const label = '$' + variable.name;\n let val = templateSrv.replace(label);\n if (val === label) {\n val = '';\n }\n templateSugs.push({\n label,\n kind: CodeEditorSuggestionItemKind.Text,\n detail: `(Template Variable) ${val}`,\n });\n });\n\n return sugs.concat(templateSugs);\n};\n"],"names":["usePluginInteractionReporter","useEffect","getAppEvents","DataSourceTestSucceeded","DataSourceTestFailed","AwsAuthType","css","useState","config","useMemo","regions","React","ConfigSection","ConfigSubSection","Field","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","Text","TextLink","Collapse","Space","isNumber","useTheme2","GrafanaDivider","_a","_b","_c","_d","useRef","isEqual","resources","InlineField","defaults","rawSQL","query","CodeEditor","data","EditorHeader","FlexItem","RunQueryButtons","Button","LoadingState","FillValueOptions","EditorField","CodeEditorSuggestionItemKind"],"mappings":"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"}
File without changes