@grafana/aws-sdk 0.0.32 → 0.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.development.js +22 -20
- package/dist/index.development.js.map +1 -1
- package/dist/index.production.js +1 -1
- package/dist/index.production.js.map +1 -1
- package/dist/sql/ConfigEditor/ConfigSelect.d.ts +22 -0
- package/dist/sql/QueryEditor/index.d.ts +1 -1
- package/dist/sql/ResourceSelector.d.ts +5 -6
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { ConnectionConfig, ConnectionConfigProps } from './ConnectionConfig';
|
|
|
2
2
|
export { ConfigSelect, InlineInput } from './sql/ConfigEditor';
|
|
3
3
|
export { ResourceSelector, ResourceSelectorProps } from './sql/ResourceSelector';
|
|
4
4
|
export { SQLQuery } from './sql/types';
|
|
5
|
-
export { QueryCodeEditor, FormatSelect, FillValueSelect } from './sql/QueryEditor';
|
|
5
|
+
export { QueryCodeEditor, FormatSelect, FillValueSelect, FillValueOptions } from './sql/QueryEditor';
|
|
6
6
|
export * from './sql/utils';
|
|
7
7
|
export * from './types';
|
|
8
8
|
export * from './regions';
|
|
@@ -182,7 +182,7 @@ var ConnectionConfig = function (props) {
|
|
|
182
182
|
React__default.createElement(ui.InlineField, { label: "Authentication Provider", labelWidth: 28, tooltip: "Specify which AWS credentials chain to use." },
|
|
183
183
|
React__default.createElement(ui.Select, { "aria-label": "Authentication Provider", className: "width-30", value: currentProvider, options: awsAuthProviderOptions.filter(function (opt) { return awsAllowedAuthProviders.includes(opt.value); }), defaultValue: options.jsonData.authType, onChange: function (option) {
|
|
184
184
|
data.onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);
|
|
185
|
-
} })),
|
|
185
|
+
}, menuShouldPortal: true })),
|
|
186
186
|
options.jsonData.authType === 'credentials' && (React__default.createElement(ui.InlineField, { label: "Credentials Profile Name", labelWidth: 28, tooltip: "Credentials profile name, as specified in ~/.aws/credentials, leave blank for default." },
|
|
187
187
|
React__default.createElement(ui.Input, { "aria-label": "Credentials Profile Name", className: "width-30", placeholder: "default", value: profile, onChange: data.onUpdateDatasourceJsonDataOption(props, 'profile') }))),
|
|
188
188
|
options.jsonData.authType === 'keys' && (React__default.createElement(React__default.Fragment, null,
|
|
@@ -200,7 +200,7 @@ var ConnectionConfig = function (props) {
|
|
|
200
200
|
!skipEndpoint && (React__default.createElement(ui.InlineField, { label: "Endpoint", labelWidth: 28, tooltip: "Optionally, specify a custom endpoint for the service" },
|
|
201
201
|
React__default.createElement(ui.Input, { "aria-label": "Endpoint", className: "width-30", placeholder: (_j = props.defaultEndpoint) !== null && _j !== void 0 ? _j : 'https://{service}.{region}.amazonaws.com', value: options.jsonData.endpoint || '', onChange: data.onUpdateDatasourceJsonDataOption(props, 'endpoint') }))),
|
|
202
202
|
React__default.createElement(ui.InlineField, { label: "Default Region", labelWidth: 28, tooltip: "Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region." },
|
|
203
|
-
React__default.createElement(ui.Select, { "aria-label": "Default Region", className: "width-30", value: regions.find(function (region) { return region.value === options.jsonData.defaultRegion; }), options: regions, defaultValue: options.jsonData.defaultRegion, allowCustomValue: true, onChange: data.onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion'), formatCreateLabel: function (r) { return "Use region: " + r; } })),
|
|
203
|
+
React__default.createElement(ui.Select, { "aria-label": "Default Region", className: "width-30", value: regions.find(function (region) { return region.value === options.jsonData.defaultRegion; }), options: regions, defaultValue: options.jsonData.defaultRegion, allowCustomValue: true, onChange: data.onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion'), formatCreateLabel: function (r) { return "Use region: " + r; }, menuShouldPortal: true })),
|
|
204
204
|
props.children));
|
|
205
205
|
};
|
|
206
206
|
|
|
@@ -228,15 +228,20 @@ function ResourceSelector(props) {
|
|
|
228
228
|
}, [props.default, props.value]);
|
|
229
229
|
var _f = __read(React.useState(props.default ? defaultOpts : []), 2), options = _f[0], setOptions = _f[1];
|
|
230
230
|
React.useEffect(function () {
|
|
231
|
+
if (props.resources !== undefined) {
|
|
232
|
+
setResources(props.resources);
|
|
233
|
+
}
|
|
234
|
+
}, [props.resources]);
|
|
235
|
+
React.useEffect(function () {
|
|
236
|
+
var newOptions = props.default ? defaultOpts : [];
|
|
231
237
|
if (resources.length) {
|
|
232
|
-
var newOptions_1 = props.default ? defaultOpts : [];
|
|
233
238
|
resources.forEach(function (r) {
|
|
234
239
|
var value = typeof r === 'string' ? r : r.value;
|
|
235
|
-
if (!
|
|
236
|
-
typeof r === 'string' ?
|
|
240
|
+
if (!newOptions.find(function (o) { return o.value === value; })) {
|
|
241
|
+
typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);
|
|
237
242
|
}
|
|
238
243
|
});
|
|
239
|
-
setOptions(
|
|
244
|
+
setOptions(newOptions);
|
|
240
245
|
}
|
|
241
246
|
else {
|
|
242
247
|
setOptions([]);
|
|
@@ -246,7 +251,6 @@ function ResourceSelector(props) {
|
|
|
246
251
|
// A change in the dependencies cause a state clean-up
|
|
247
252
|
if (!lodash.isEqual(props.dependencies, dependencies)) {
|
|
248
253
|
setFetched(false);
|
|
249
|
-
setResources([]);
|
|
250
254
|
setResource(null);
|
|
251
255
|
props.onChange(null);
|
|
252
256
|
setDependencies(props.dependencies);
|
|
@@ -306,14 +310,13 @@ function ResourceSelector(props) {
|
|
|
306
310
|
}); };
|
|
307
311
|
return (React__default.createElement(ui.InlineField, { label: props.label, labelWidth: props.labelWidth, tooltip: props.tooltip, hidden: props.hidden },
|
|
308
312
|
React__default.createElement("div", { "data-testid": props['data-testid'], title: props.title },
|
|
309
|
-
React__default.createElement(ui.Select, { "aria-label": props.label, options: options,
|
|
313
|
+
React__default.createElement(ui.Select, __assign({}, props, { "aria-label": props.label, options: options, onChange: onChange, isLoading: isLoading, className: props.className || 'min-width-6', onOpenMenu: function () { return props.fetch && onClick(); }, menuShouldPortal: true })))));
|
|
310
314
|
}
|
|
311
315
|
|
|
312
316
|
function ConfigSelect(props) {
|
|
313
317
|
var jsonData = props.options.jsonData;
|
|
314
318
|
var commonProps = {
|
|
315
319
|
title: jsonData.defaultRegion ? '' : 'select a default region',
|
|
316
|
-
disabled: !jsonData.defaultRegion,
|
|
317
320
|
labelWidth: 28,
|
|
318
321
|
className: 'width-30',
|
|
319
322
|
};
|
|
@@ -326,7 +329,7 @@ function ConfigSelect(props) {
|
|
|
326
329
|
props.options.jsonData.externalId,
|
|
327
330
|
props.options.jsonData.profile,
|
|
328
331
|
].concat(props.dependencies);
|
|
329
|
-
return (React__default.createElement(ResourceSelector, __assign({ label: props.label, "data-testid": props['data-testid'], onChange: props.onChange, fetch: props.fetch, value: props.value, saveOptions: props.saveOptions, dependencies: dependencies, hidden: props.hidden, disabled: props.disabled }, commonProps)));
|
|
332
|
+
return (React__default.createElement(ResourceSelector, __assign({ label: props.label, "data-testid": props['data-testid'], onChange: props.onChange, fetch: props.fetch, value: props.value, saveOptions: props.saveOptions, dependencies: dependencies, hidden: props.hidden, disabled: props.disabled || !jsonData.defaultRegion, allowCustomValue: props.allowCustomValue, autoFocus: props.autoFocus, backspaceRemovesValue: props.backspaceRemovesValue, className: props.className, invalid: props.invalid, isClearable: props.isClearable, isMulti: props.isMulti, inputId: props.inputId, showAllSelectedWhenOpen: props.showAllSelectedWhenOpen, maxMenuHeight: props.maxMenuHeight, minMenuHeight: props.minMenuHeight, maxVisibleValues: props.maxVisibleValues, menuPlacement: props.menuPlacement, menuPosition: props.menuPosition, noOptionsMessage: props.noOptionsMessage, onBlur: props.onBlur, onCreateOption: props.onCreateOption, onInputChange: props.onInputChange, placeholder: props.placeholder, width: props.width, isOptionDisabled: props.isOptionDisabled }, commonProps)));
|
|
330
333
|
}
|
|
331
334
|
|
|
332
335
|
function InlineInput(props) {
|
|
@@ -359,45 +362,44 @@ function FormatSelect(props) {
|
|
|
359
362
|
props.onRunQuery();
|
|
360
363
|
};
|
|
361
364
|
return (React__default.createElement(ui.InlineField, { label: "Format as", labelWidth: 11 },
|
|
362
|
-
React__default.createElement(ui.Select, { "aria-label": "Format as", options: props.options, value: props.query.format, onChange: onChangeFormat, className: "width-12" })));
|
|
365
|
+
React__default.createElement(ui.Select, { "aria-label": "Format as", options: props.options, value: props.query.format, onChange: onChangeFormat, className: "width-12", menuShouldPortal: true })));
|
|
363
366
|
}
|
|
364
367
|
|
|
365
|
-
var FillValueOptions;
|
|
366
368
|
(function (FillValueOptions) {
|
|
367
369
|
FillValueOptions[FillValueOptions["Previous"] = 0] = "Previous";
|
|
368
370
|
FillValueOptions[FillValueOptions["Null"] = 1] = "Null";
|
|
369
371
|
FillValueOptions[FillValueOptions["Value"] = 2] = "Value";
|
|
370
|
-
})(FillValueOptions || (FillValueOptions = {}));
|
|
372
|
+
})(exports.FillValueOptions || (exports.FillValueOptions = {}));
|
|
371
373
|
var SelectableFillValueOptions = [
|
|
372
374
|
{
|
|
373
375
|
label: 'Previous Value',
|
|
374
|
-
value: FillValueOptions.Previous,
|
|
376
|
+
value: exports.FillValueOptions.Previous,
|
|
375
377
|
},
|
|
376
378
|
{
|
|
377
379
|
label: 'NULL',
|
|
378
|
-
value: FillValueOptions.Null,
|
|
380
|
+
value: exports.FillValueOptions.Null,
|
|
379
381
|
},
|
|
380
382
|
{
|
|
381
383
|
label: 'Value',
|
|
382
|
-
value: FillValueOptions.Value,
|
|
384
|
+
value: exports.FillValueOptions.Value,
|
|
383
385
|
},
|
|
384
386
|
];
|
|
385
387
|
function FillValueSelect(props) {
|
|
386
388
|
var _a, _b, _c;
|
|
387
389
|
return (React__default.createElement(React__default.Fragment, null,
|
|
388
390
|
React__default.createElement(ui.InlineField, { label: "Fill value", tooltip: "value to fill missing points" },
|
|
389
|
-
React__default.createElement(ui.Select, { "aria-label": "Fill value", options: SelectableFillValueOptions, value: (_b = (_a = props.query.fillMode) === null || _a === void 0 ? void 0 : _a.mode) !== null && _b !== void 0 ? _b : FillValueOptions.Previous, onChange: function (_a) {
|
|
391
|
+
React__default.createElement(ui.Select, { "aria-label": "Fill value", options: SelectableFillValueOptions, value: (_b = (_a = props.query.fillMode) === null || _a === void 0 ? void 0 : _a.mode) !== null && _b !== void 0 ? _b : exports.FillValueOptions.Previous, onChange: function (_a) {
|
|
390
392
|
var value = _a.value;
|
|
391
393
|
props.onChange(__assign(__assign({}, props.query), {
|
|
392
394
|
// Keep the fillMode.value in case FillValueOptions.Value mode is selected back
|
|
393
395
|
fillMode: __assign(__assign({}, props.query.fillMode), { mode: value }) }));
|
|
394
396
|
props.onRunQuery();
|
|
395
|
-
}, className: "width-12" })),
|
|
396
|
-
((_c = props.query.fillMode) === null || _c === void 0 ? void 0 : _c.mode) === FillValueOptions.Value && (React__default.createElement(ui.InlineField, { label: "Value", labelWidth: 11 },
|
|
397
|
+
}, className: "width-12", menuShouldPortal: true })),
|
|
398
|
+
((_c = props.query.fillMode) === null || _c === void 0 ? void 0 : _c.mode) === exports.FillValueOptions.Value && (React__default.createElement(ui.InlineField, { label: "Value", labelWidth: 11 },
|
|
397
399
|
React__default.createElement(ui.Input, { type: "number", "aria-label": "Value", value: props.query.fillMode.value, onChange: function (_a) {
|
|
398
400
|
var currentTarget = _a.currentTarget;
|
|
399
401
|
return props.onChange(__assign(__assign({}, props.query), { fillMode: {
|
|
400
|
-
mode: FillValueOptions.Value,
|
|
402
|
+
mode: exports.FillValueOptions.Value,
|
|
401
403
|
value: currentTarget.valueAsNumber,
|
|
402
404
|
} }));
|
|
403
405
|
}, onBlur: function () { return props.onRunQuery(); } })))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.development.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/ConnectionConfig.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/FormatSelect.tsx","../src/sql/QueryEditor/FillValueSelect.tsx","../src/sql/utils/utils.ts"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-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-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import { DataSourceJsonData, 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}\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}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\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] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, 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}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const options = props.options;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = settings.awsAllowedAuthProviders ?? [\n AwsAuthType.Default,\n AwsAuthType.Keys,\n AwsAuthType.Credentials,\n ];\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\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 onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={28}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\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 />\n </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={28}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={28}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\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 aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={28}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\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 aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={28}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={28}\n tooltip=\"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 aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField label=\"Endpoint\" labelWidth={28} tooltip=\"Optionally, specify a custom endpoint for the service\">\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={28}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n />\n </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import { DataQuery } from '@grafana/data';\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 React, { useState, useEffect, useMemo } from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport { defaultKey } from './types';\n\nexport type ResourceSelectorProps = {\n value: string | null;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n disabled?: boolean;\n labelWidth?: number;\n className?: string;\n saveOptions?: () => Promise<void>;\n};\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\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 (resources.length) {\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 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(props.dependencies, dependencies)) {\n setFetched(false);\n setResources([]);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\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 setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(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 <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n aria-label={props.label}\n options={options}\n value={props.value}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n disabled={props.disabled}\n onOpenMenu={onClick}\n />\n </div>\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\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 label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n saveOptions: () => Promise<void>;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n disabled: !jsonData.defaultRegion,\n labelWidth: 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\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 ].concat(props.dependencies);\n return (\n <ResourceSelector\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}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\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}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={28}\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 } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\nimport { MonacoOptions } from '@grafana/ui/components/Monaco/types';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: MonacoOptions;\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';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\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 <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/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 <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\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 className=\"width-12\"\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\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 </InlineField>\n )}\n </>\n );\n}\n","import { ScopedVars, VariableModel } 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(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\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') {\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: VariableModel) => {\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":["AwsAuthType","useState","useEffect","React","FieldSet","InlineField","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","useMemo","isEqual","defaults","useRef","CodeEditor","CodeEditorSuggestionItemKind"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.development.js","sources":["../src/regions.ts","../src/types.ts","../src/providers.ts","../src/ConnectionConfig.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/FormatSelect.tsx","../src/sql/QueryEditor/FillValueSelect.tsx","../src/sql/utils/utils.ts"],"sourcesContent":["export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-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-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import { DataSourceJsonData, 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}\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}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\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] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, 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}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const options = props.options;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = settings.awsAllowedAuthProviders ?? [\n AwsAuthType.Default,\n AwsAuthType.Keys,\n AwsAuthType.Credentials,\n ];\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\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 onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={28}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\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 </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={28}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={28}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\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 aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={28}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\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 aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={28}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={28}\n tooltip=\"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 aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField label=\"Endpoint\" labelWidth={28} tooltip=\"Optionally, specify a custom endpoint for the service\">\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={28}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\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 </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import { DataQuery } from '@grafana/data';\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 { InlineField, Select } from '@grafana/ui';\nimport { SelectCommonProps } from '@grafana/ui/components/Select/types';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n value: string | null;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\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}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\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(props.dependencies, dependencies)) {\n setFetched(false);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\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 setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(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 <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n {...props}\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 </div>\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui/components/Select/types';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\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 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}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\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 ].concat(props.dependencies);\n return (\n <ResourceSelector\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 className={props.className}\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 onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\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}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={28}\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 } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\nimport { MonacoOptions } from '@grafana/ui/components/Monaco/types';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: MonacoOptions;\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';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\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 <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/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 <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\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 className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\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 </InlineField>\n )}\n </>\n );\n}\n","import { ScopedVars, VariableModel } 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(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\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') {\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: VariableModel) => {\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":["AwsAuthType","useState","useEffect","React","FieldSet","InlineField","Select","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","ButtonGroup","ToolbarButton","onUpdateDatasourceResetOption","onUpdateDatasourceSecureJsonDataOption","useMemo","isEqual","defaults","useRef","CodeEditor","FillValueOptions","CodeEditorSuggestionItemKind"],"mappings":"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"}
|
package/dist/index.production.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),a=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,n=require("@grafana/ui"),l=require("@grafana/data"),o=require("lodash"),r=function(){return(r=Object.assign||function(e){for(var t,a=1,n=arguments.length;a<n;a++)for(var l in t=arguments[a])Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l]);return e}).apply(this,arguments)};function i(e,t,a,n){return new(a||(a=Promise))((function(l,o){function r(e){try{u(n.next(e))}catch(e){o(e)}}function i(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?l(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,i)}u((n=n.apply(e,t||[])).next())}))}function u(e,t){var a,n,l,o,r={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return o={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function i(o){return function(i){return function(o){if(a)throw new TypeError("Generator is already executing.");for(;r;)try{if(a=1,n&&(l=2&o[0]?n.return:o[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,o[1])).done)return l;switch(n=0,l&&(o=[2&o[0],l.value]),o[0]){case 0:case 1:l=o;break;case 4:return r.label++,{value:o[1],done:!1};case 5:r.label++,n=o[1],o=[0];continue;case 7:o=r.ops.pop(),r.trys.pop();continue;default:if(!(l=r.trys,(l=l.length>0&&l[l.length-1])||6!==o[0]&&2!==o[0])){r=0;continue}if(3===o[0]&&(!l||o[1]>l[0]&&o[1]<l[3])){r.label=o[1];break}if(6===o[0]&&r.label<l[1]){r.label=l[1],l=o;break}if(l&&r.label<l[2]){r.label=l[2],r.ops.push(o);break}l[2]&&r.ops.pop(),r.trys.pop();continue}o=t.call(e,r)}catch(e){o=[6,e],n=0}finally{a=l=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,i])}}}function s(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var n,l,o=a.call(e),r=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)r.push(n.value)}catch(e){l={error:e}}finally{try{n&&!n.done&&(a=o.return)&&a.call(o)}finally{if(l)throw l.error}}return r}var c,d=["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-southeast-1","ap-southeast-2","ca-central-1","cn-north-1","cn-northwest-1","eu-central-1","eu-north-1","eu-west-1","eu-west-2","eu-west-3","me-south-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-iso-east-1","us-isob-east-1","us-west-1","us-west-2"];(c=exports.AwsAuthType||(exports.AwsAuthType={})).Keys="keys",c.Credentials="credentials",c.Default="default",c.EC2IAMRole="ec2_iam_role",c.ARN="arn";var p,f=[{label:"Workspace IAM Role",value:exports.AwsAuthType.EC2IAMRole},{label:"AWS SDK Default",value:exports.AwsAuthType.Default},{label:"Access & secret key",value:exports.AwsAuthType.Keys},{label:"Credentials file",value:exports.AwsAuthType.Credentials}],h=function(e){return{value:e,label:e}};function v(e){var l=this,r=s(t.useState(e.value||e.default||null),2),c=r[0],d=r[1],p=s(t.useState(c?[c]:[]),2),f=p[0],h=p[1],v=s(t.useState(e.dependencies),2),b=v[0],m=v[1],y=s(t.useState(!1),2),g=y[0],w=y[1],E=s(t.useState(!1),2),D=E[0],S=E[1],A=t.useMemo((function(){var t=[{label:"default ("+e.default+")",value:"__default",description:"Default value set in the data source"}];return e.value&&"__default"!==e.value&&t.push({label:e.value,value:e.value}),t}),[e.default,e.value]),C=s(t.useState(e.default?A:[]),2),I=C[0],x=C[1];t.useEffect((function(){if(f.length){var t=e.default?A:[];f.forEach((function(e){var a="string"==typeof e?e:e.value;t.find((function(e){return e.value===a}))||("string"==typeof e?t.push({label:e,value:e}):t.push(e))})),x(t)}else x([])}),[f,A,e.default]),t.useEffect((function(){o.isEqual(e.dependencies,b)||(S(!1),h([]),d(null),e.onChange(null),m(e.dependencies))}),[e,b]);return a.createElement(n.InlineField,{label:e.label,labelWidth:e.labelWidth,tooltip:e.tooltip,hidden:e.hidden},a.createElement("div",{"data-testid":e["data-testid"],title:e.title},a.createElement(n.Select,{"aria-label":e.label,options:I,value:e.value,onChange:function(t){e.onChange(t),t.value&&d(t.value)},isLoading:g,className:e.className||"min-width-6",disabled:e.disabled,onOpenMenu:function(){return i(l,void 0,void 0,(function(){return u(this,(function(t){switch(t.label){case 0:w(!0),t.label=1;case 1:return t.trys.push([1,,3,4]),[4,i(l,void 0,void 0,(function(){var t;return u(this,(function(a){switch(a.label){case 0:return D?[2]:e.saveOptions?[4,e.saveOptions()]:[3,2];case 1:a.sent(),a.label=2;case 2:return a.trys.push([2,,4,5]),[4,e.fetch()];case 3:return t=a.sent(),h(t),[3,5];case 4:return S(!0),[7];case 5:return[2]}}))}))];case 2:return t.sent(),[3,4];case 3:return w(!1),[7];case 4:return[2]}}))}))}})))}!function(e){e[e.Previous=0]="Previous",e[e.Null=1]="Null",e[e.Value=2]="Value"}(p||(p={}));var b=[{label:"Previous Value",value:p.Previous},{label:"NULL",value:p.Null},{label:"Value",value:p.Value}];function m(e){return"string"==typeof e?e:e.map((function(e){return function(e){return"'"+String(e).replace(/'/g,"''")+"'"}(e)})).join(",")}exports.ConfigSelect=function(e){var t=e.options.jsonData,n={title:t.defaultRegion?"":"select a default region",disabled:!t.defaultRegion,labelWidth:28,className:"width-30"},l=[e.options.jsonData.assumeRoleArn,e.options.jsonData.authType,e.options.jsonData.defaultRegion,e.options.jsonData.endpoint,e.options.jsonData.externalId,e.options.jsonData.profile].concat(e.dependencies);return a.createElement(v,r({label:e.label,"data-testid":e["data-testid"],onChange:e.onChange,fetch:e.fetch,value:e.value,saveOptions:e.saveOptions,dependencies:l,hidden:e.hidden,disabled:e.disabled},n))},exports.ConnectionConfig=function(e){var o,i,u,c,p,v,b,m,y,g=s(t.useState((e.standardRegions||d).map(h)),2),w=g[0],E=g[1],D=e.loadRegions,S=e.onOptionsChange,A=e.skipHeader,C=void 0!==A&&A,I=e.skipEndpoint,x=void 0!==I&&I,R=e.options,N=R.jsonData.profile;void 0===N&&(N=R.database);var F=window.grafanaBootData.settings,j=null!==(o=F.awsAllowedAuthProviders)&&void 0!==o?o:[exports.AwsAuthType.Default,exports.AwsAuthType.Keys,exports.AwsAuthType.Credentials],O=null===(i=F.awsAssumeRoleEnabled)||void 0===i||i,T=f.find((function(e){return e.value===R.jsonData.authType}));return t.useEffect((function(){!T&&j.length&&S(r(r({},R),{jsonData:r(r({},R.jsonData),{authType:j[0]})}))}),[T,R,S]),t.useEffect((function(){D&&D().then((function(e){return E(e.map(h))}))}),[D]),a.createElement(n.FieldSet,{label:C?"":"Connection Details","data-testid":"connection-config"},a.createElement(n.InlineField,{label:"Authentication Provider",labelWidth:28,tooltip:"Specify which AWS credentials chain to use."},a.createElement(n.Select,{"aria-label":"Authentication Provider",className:"width-30",value:T,options:f.filter((function(e){return j.includes(e.value)})),defaultValue:R.jsonData.authType,onChange:function(t){l.onUpdateDatasourceJsonDataOptionSelect(e,"authType")(t)}})),"credentials"===R.jsonData.authType&&a.createElement(n.InlineField,{label:"Credentials Profile Name",labelWidth:28,tooltip:"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default."},a.createElement(n.Input,{"aria-label":"Credentials Profile Name",className:"width-30",placeholder:"default",value:N,onChange:l.onUpdateDatasourceJsonDataOption(e,"profile")})),"keys"===R.jsonData.authType&&a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Access Key ID",labelWidth:28},(null===(u=e.options.secureJsonFields)||void 0===u?void 0:u.accessKey)?a.createElement(n.ButtonGroup,{className:"width-30"},a.createElement(n.Input,{disabled:!0,placeholder:"Configured"}),a.createElement(n.ToolbarButton,{icon:"edit",tooltip:"Edit Access Key ID",type:"button",onClick:l.onUpdateDatasourceResetOption(e,"accessKey")})):a.createElement(n.Input,{"aria-label":"Access Key ID",className:"width-30",value:null!==(p=null===(c=R.secureJsonData)||void 0===c?void 0:c.accessKey)&&void 0!==p?p:"",onChange:l.onUpdateDatasourceSecureJsonDataOption(e,"accessKey")})),a.createElement(n.InlineField,{label:"Secret Access Key",labelWidth:28},(null===(v=e.options.secureJsonFields)||void 0===v?void 0:v.secretKey)?a.createElement(n.ButtonGroup,{className:"width-30"},a.createElement(n.Input,{disabled:!0,placeholder:"Configured"}),a.createElement(n.ToolbarButton,{icon:"edit",type:"button",tooltip:"Edit Secret Access Key",onClick:l.onUpdateDatasourceResetOption(e,"secretKey")})):a.createElement(n.Input,{"aria-label":"Secret Access Key",className:"width-30",value:null!==(m=null===(b=R.secureJsonData)||void 0===b?void 0:b.secretKey)&&void 0!==m?m:"",onChange:l.onUpdateDatasourceSecureJsonDataOption(e,"secretKey")}))),O&&a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Assume Role ARN",labelWidth:28,tooltip:"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all"},a.createElement(n.Input,{"aria-label":"Assume Role ARN",className:"width-30",placeholder:"arn:aws:iam:*",value:R.jsonData.assumeRoleArn||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"assumeRoleArn")})),a.createElement(n.InlineField,{label:"External ID",labelWidth:28,tooltip:"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."},a.createElement(n.Input,{"aria-label":"External ID",className:"width-30",placeholder:"External ID",value:R.jsonData.externalId||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"externalId")}))),!x&&a.createElement(n.InlineField,{label:"Endpoint",labelWidth:28,tooltip:"Optionally, specify a custom endpoint for the service"},a.createElement(n.Input,{"aria-label":"Endpoint",className:"width-30",placeholder:null!==(y=e.defaultEndpoint)&&void 0!==y?y:"https://{service}.{region}.amazonaws.com",value:R.jsonData.endpoint||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"endpoint")})),a.createElement(n.InlineField,{label:"Default Region",labelWidth:28,tooltip:"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region."},a.createElement(n.Select,{"aria-label":"Default Region",className:"width-30",value:w.find((function(e){return e.value===R.jsonData.defaultRegion})),options:w,defaultValue:R.jsonData.defaultRegion,allowCustomValue:!0,onChange:l.onUpdateDatasourceJsonDataOptionSelect(e,"defaultRegion"),formatCreateLabel:function(e){return"Use region: "+e}})),e.children)},exports.FillValueSelect=function(e){var t,l,o;return a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Fill value",tooltip:"value to fill missing points"},a.createElement(n.Select,{"aria-label":"Fill value",options:b,value:null!==(l=null===(t=e.query.fillMode)||void 0===t?void 0:t.mode)&&void 0!==l?l:p.Previous,onChange:function(t){var a=t.value;e.onChange(r(r({},e.query),{fillMode:r(r({},e.query.fillMode),{mode:a})})),e.onRunQuery()},className:"width-12"})),(null===(o=e.query.fillMode)||void 0===o?void 0:o.mode)===p.Value&&a.createElement(n.InlineField,{label:"Value",labelWidth:11},a.createElement(n.Input,{type:"number","aria-label":"Value",value:e.query.fillMode.value,onChange:function(t){var a=t.currentTarget;return e.onChange(r(r({},e.query),{fillMode:{mode:p.Value,value:a.valueAsNumber}}))},onBlur:function(){return e.onRunQuery()}})))},exports.FormatSelect=function(e){return a.createElement(n.InlineField,{label:"Format as",labelWidth:11},a.createElement(n.Select,{"aria-label":"Format as",options:e.options,value:e.query.format,onChange:function(t){e.onChange(r(r({},e.query),{format:t.value||0})),e.onRunQuery()},className:"width-12"}))},exports.InlineInput=function(e){return a.createElement(n.InlineField,{label:e.label,labelWidth:28,tooltip:e.tooltip,hidden:e.hidden,disabled:e.disabled},a.createElement(n.Input,{"data-testid":e["data-testid"],className:"width-30",value:e.value,onChange:e.onChange,placeholder:e.placeholder,disabled:e.disabled}))},exports.QueryCodeEditor=function(e){var l=e.getSuggestions,i=e.query,u=o.defaults(e.query,{rawSQL:""}).rawSQL,s=t.useRef([]);return t.useEffect((function(){s.current=l(i)}),[l,i]),a.createElement(n.CodeEditor,r({language:e.language,value:u,onBlur:function(t){var a=r(r({},e.query),{rawSQL:t});e.onChange(a),e.onRunQuery()},showMiniMap:!1,showLineNumbers:!0,getSuggestions:function(){return s.current},height:"240px"},e.editorProps))},exports.ResourceSelector=v,exports.appendTemplateVariablesAsSuggestions=function(e,t){var a=e(),l=[];return a.getVariables().forEach((function(e){var t="$"+e.name,o=a.replace(t);o===t&&(o=""),l.push({label:t,kind:n.CodeEditorSuggestionItemKind.Text,detail:"(Template Variable) "+o})})),t.concat(l)},exports.applySQLTemplateVariables=function(e,t,a){var n=a();return r(r({},e),{rawSQL:n.replace(e.rawSQL,t,m)})},exports.awsAuthProviderOptions=f,exports.filterSQLQuery=function(e){return!!e.rawSQL},exports.standardRegions=d;
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),a=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,n=require("@grafana/ui"),l=require("@grafana/data"),o=require("lodash"),i=function(){return(i=Object.assign||function(e){for(var t,a=1,n=arguments.length;a<n;a++)for(var l in t=arguments[a])Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l]);return e}).apply(this,arguments)};function r(e,t,a,n){return new(a||(a=Promise))((function(l,o){function i(e){try{s(n.next(e))}catch(e){o(e)}}function r(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?l(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(i,r)}s((n=n.apply(e,t||[])).next())}))}function s(e,t){var a,n,l,o,i={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(o){return function(r){return function(o){if(a)throw new TypeError("Generator is already executing.");for(;i;)try{if(a=1,n&&(l=2&o[0]?n.return:o[0]?n.throw||((l=n.return)&&l.call(n),0):n.next)&&!(l=l.call(n,o[1])).done)return l;switch(n=0,l&&(o=[2&o[0],l.value]),o[0]){case 0:case 1:l=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,n=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(l=i.trys,(l=l.length>0&&l[l.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!l||o[1]>l[0]&&o[1]<l[3])){i.label=o[1];break}if(6===o[0]&&i.label<l[1]){i.label=l[1],l=o;break}if(l&&i.label<l[2]){i.label=l[2],i.ops.push(o);break}l[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],n=0}finally{a=l=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,r])}}}function u(e,t){var a="function"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var n,l,o=a.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){l={error:e}}finally{try{n&&!n.done&&(a=o.return)&&a.call(o)}finally{if(l)throw l.error}}return i}var c,d=["af-south-1","ap-east-1","ap-northeast-1","ap-northeast-2","ap-northeast-3","ap-south-1","ap-southeast-1","ap-southeast-2","ca-central-1","cn-north-1","cn-northwest-1","eu-central-1","eu-north-1","eu-west-1","eu-west-2","eu-west-3","me-south-1","sa-east-1","us-east-1","us-east-2","us-gov-east-1","us-gov-west-1","us-iso-east-1","us-isob-east-1","us-west-1","us-west-2"];(c=exports.AwsAuthType||(exports.AwsAuthType={})).Keys="keys",c.Credentials="credentials",c.Default="default",c.EC2IAMRole="ec2_iam_role",c.ARN="arn";var p,h=[{label:"Workspace IAM Role",value:exports.AwsAuthType.EC2IAMRole},{label:"AWS SDK Default",value:exports.AwsAuthType.Default},{label:"Access & secret key",value:exports.AwsAuthType.Keys},{label:"Credentials file",value:exports.AwsAuthType.Credentials}],f=function(e){return{value:e,label:e}};function v(e){var l=this,c=u(t.useState(e.value||e.default||null),2),d=c[0],p=c[1],h=u(t.useState(d?[d]:[]),2),f=h[0],v=h[1],m=u(t.useState(e.dependencies),2),b=m[0],y=m[1],g=u(t.useState(!1),2),w=g[0],E=g[1],D=u(t.useState(!1),2),S=D[0],C=D[1],x=t.useMemo((function(){var t=[{label:"default ("+e.default+")",value:"__default",description:"Default value set in the data source"}];return e.value&&"__default"!==e.value&&t.push({label:e.value,value:e.value}),t}),[e.default,e.value]),A=u(t.useState(e.default?x:[]),2),I=A[0],O=A[1];t.useEffect((function(){void 0!==e.resources&&v(e.resources)}),[e.resources]),t.useEffect((function(){var t=e.default?x:[];f.length?(f.forEach((function(e){var a="string"==typeof e?e:e.value;t.find((function(e){return e.value===a}))||("string"==typeof e?t.push({label:e,value:e}):t.push(e))})),O(t)):O([])}),[f,x,e.default]),t.useEffect((function(){o.isEqual(e.dependencies,b)||(C(!1),p(null),e.onChange(null),y(e.dependencies))}),[e,b]);return a.createElement(n.InlineField,{label:e.label,labelWidth:e.labelWidth,tooltip:e.tooltip,hidden:e.hidden},a.createElement("div",{"data-testid":e["data-testid"],title:e.title},a.createElement(n.Select,i({},e,{"aria-label":e.label,options:I,onChange:function(t){e.onChange(t),t.value&&p(t.value)},isLoading:w,className:e.className||"min-width-6",onOpenMenu:function(){return e.fetch&&r(l,void 0,void 0,(function(){return s(this,(function(t){switch(t.label){case 0:E(!0),t.label=1;case 1:return t.trys.push([1,,3,4]),[4,r(l,void 0,void 0,(function(){var t;return s(this,(function(a){switch(a.label){case 0:return S?[2]:e.saveOptions?[4,e.saveOptions()]:[3,2];case 1:a.sent(),a.label=2;case 2:return a.trys.push([2,,4,5]),[4,e.fetch()];case 3:return t=a.sent(),v(t),[3,5];case 4:return C(!0),[7];case 5:return[2]}}))}))];case 2:return t.sent(),[3,4];case 3:return E(!1),[7];case 4:return[2]}}))}))},menuShouldPortal:!0}))))}(p=exports.FillValueOptions||(exports.FillValueOptions={}))[p.Previous=0]="Previous",p[p.Null=1]="Null",p[p.Value=2]="Value";var m=[{label:"Previous Value",value:exports.FillValueOptions.Previous},{label:"NULL",value:exports.FillValueOptions.Null},{label:"Value",value:exports.FillValueOptions.Value}];function b(e){return"string"==typeof e?e:e.map((function(e){return function(e){return"'"+String(e).replace(/'/g,"''")+"'"}(e)})).join(",")}exports.ConfigSelect=function(e){var t=e.options.jsonData,n={title:t.defaultRegion?"":"select a default region",labelWidth:28,className:"width-30"},l=[e.options.jsonData.assumeRoleArn,e.options.jsonData.authType,e.options.jsonData.defaultRegion,e.options.jsonData.endpoint,e.options.jsonData.externalId,e.options.jsonData.profile].concat(e.dependencies);return a.createElement(v,i({label:e.label,"data-testid":e["data-testid"],onChange:e.onChange,fetch:e.fetch,value:e.value,saveOptions:e.saveOptions,dependencies:l,hidden:e.hidden,disabled:e.disabled||!t.defaultRegion,allowCustomValue:e.allowCustomValue,autoFocus:e.autoFocus,backspaceRemovesValue:e.backspaceRemovesValue,className:e.className,invalid:e.invalid,isClearable:e.isClearable,isMulti:e.isMulti,inputId:e.inputId,showAllSelectedWhenOpen:e.showAllSelectedWhenOpen,maxMenuHeight:e.maxMenuHeight,minMenuHeight:e.minMenuHeight,maxVisibleValues:e.maxVisibleValues,menuPlacement:e.menuPlacement,menuPosition:e.menuPosition,noOptionsMessage:e.noOptionsMessage,onBlur:e.onBlur,onCreateOption:e.onCreateOption,onInputChange:e.onInputChange,placeholder:e.placeholder,width:e.width,isOptionDisabled:e.isOptionDisabled},n))},exports.ConnectionConfig=function(e){var o,r,s,c,p,v,m,b,y,g=u(t.useState((e.standardRegions||d).map(f)),2),w=g[0],E=g[1],D=e.loadRegions,S=e.onOptionsChange,C=e.skipHeader,x=void 0!==C&&C,A=e.skipEndpoint,I=void 0!==A&&A,O=e.options,F=O.jsonData.profile;void 0===F&&(F=O.database);var R=window.grafanaBootData.settings,V=null!==(o=R.awsAllowedAuthProviders)&&void 0!==o?o:[exports.AwsAuthType.Default,exports.AwsAuthType.Keys,exports.AwsAuthType.Credentials],N=null===(r=R.awsAssumeRoleEnabled)||void 0===r||r,j=h.find((function(e){return e.value===O.jsonData.authType}));return t.useEffect((function(){!j&&V.length&&S(i(i({},O),{jsonData:i(i({},O.jsonData),{authType:V[0]})}))}),[j,O,S]),t.useEffect((function(){D&&D().then((function(e){return E(e.map(f))}))}),[D]),a.createElement(n.FieldSet,{label:x?"":"Connection Details","data-testid":"connection-config"},a.createElement(n.InlineField,{label:"Authentication Provider",labelWidth:28,tooltip:"Specify which AWS credentials chain to use."},a.createElement(n.Select,{"aria-label":"Authentication Provider",className:"width-30",value:j,options:h.filter((function(e){return V.includes(e.value)})),defaultValue:O.jsonData.authType,onChange:function(t){l.onUpdateDatasourceJsonDataOptionSelect(e,"authType")(t)},menuShouldPortal:!0})),"credentials"===O.jsonData.authType&&a.createElement(n.InlineField,{label:"Credentials Profile Name",labelWidth:28,tooltip:"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default."},a.createElement(n.Input,{"aria-label":"Credentials Profile Name",className:"width-30",placeholder:"default",value:F,onChange:l.onUpdateDatasourceJsonDataOption(e,"profile")})),"keys"===O.jsonData.authType&&a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Access Key ID",labelWidth:28},(null===(s=e.options.secureJsonFields)||void 0===s?void 0:s.accessKey)?a.createElement(n.ButtonGroup,{className:"width-30"},a.createElement(n.Input,{disabled:!0,placeholder:"Configured"}),a.createElement(n.ToolbarButton,{icon:"edit",tooltip:"Edit Access Key ID",type:"button",onClick:l.onUpdateDatasourceResetOption(e,"accessKey")})):a.createElement(n.Input,{"aria-label":"Access Key ID",className:"width-30",value:null!==(p=null===(c=O.secureJsonData)||void 0===c?void 0:c.accessKey)&&void 0!==p?p:"",onChange:l.onUpdateDatasourceSecureJsonDataOption(e,"accessKey")})),a.createElement(n.InlineField,{label:"Secret Access Key",labelWidth:28},(null===(v=e.options.secureJsonFields)||void 0===v?void 0:v.secretKey)?a.createElement(n.ButtonGroup,{className:"width-30"},a.createElement(n.Input,{disabled:!0,placeholder:"Configured"}),a.createElement(n.ToolbarButton,{icon:"edit",type:"button",tooltip:"Edit Secret Access Key",onClick:l.onUpdateDatasourceResetOption(e,"secretKey")})):a.createElement(n.Input,{"aria-label":"Secret Access Key",className:"width-30",value:null!==(b=null===(m=O.secureJsonData)||void 0===m?void 0:m.secretKey)&&void 0!==b?b:"",onChange:l.onUpdateDatasourceSecureJsonDataOption(e,"secretKey")}))),N&&a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Assume Role ARN",labelWidth:28,tooltip:"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all"},a.createElement(n.Input,{"aria-label":"Assume Role ARN",className:"width-30",placeholder:"arn:aws:iam:*",value:O.jsonData.assumeRoleArn||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"assumeRoleArn")})),a.createElement(n.InlineField,{label:"External ID",labelWidth:28,tooltip:"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."},a.createElement(n.Input,{"aria-label":"External ID",className:"width-30",placeholder:"External ID",value:O.jsonData.externalId||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"externalId")}))),!I&&a.createElement(n.InlineField,{label:"Endpoint",labelWidth:28,tooltip:"Optionally, specify a custom endpoint for the service"},a.createElement(n.Input,{"aria-label":"Endpoint",className:"width-30",placeholder:null!==(y=e.defaultEndpoint)&&void 0!==y?y:"https://{service}.{region}.amazonaws.com",value:O.jsonData.endpoint||"",onChange:l.onUpdateDatasourceJsonDataOption(e,"endpoint")})),a.createElement(n.InlineField,{label:"Default Region",labelWidth:28,tooltip:"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region."},a.createElement(n.Select,{"aria-label":"Default Region",className:"width-30",value:w.find((function(e){return e.value===O.jsonData.defaultRegion})),options:w,defaultValue:O.jsonData.defaultRegion,allowCustomValue:!0,onChange:l.onUpdateDatasourceJsonDataOptionSelect(e,"defaultRegion"),formatCreateLabel:function(e){return"Use region: "+e},menuShouldPortal:!0})),e.children)},exports.FillValueSelect=function(e){var t,l,o;return a.createElement(a.Fragment,null,a.createElement(n.InlineField,{label:"Fill value",tooltip:"value to fill missing points"},a.createElement(n.Select,{"aria-label":"Fill value",options:m,value:null!==(l=null===(t=e.query.fillMode)||void 0===t?void 0:t.mode)&&void 0!==l?l:exports.FillValueOptions.Previous,onChange:function(t){var a=t.value;e.onChange(i(i({},e.query),{fillMode:i(i({},e.query.fillMode),{mode:a})})),e.onRunQuery()},className:"width-12",menuShouldPortal:!0})),(null===(o=e.query.fillMode)||void 0===o?void 0:o.mode)===exports.FillValueOptions.Value&&a.createElement(n.InlineField,{label:"Value",labelWidth:11},a.createElement(n.Input,{type:"number","aria-label":"Value",value:e.query.fillMode.value,onChange:function(t){var a=t.currentTarget;return e.onChange(i(i({},e.query),{fillMode:{mode:exports.FillValueOptions.Value,value:a.valueAsNumber}}))},onBlur:function(){return e.onRunQuery()}})))},exports.FormatSelect=function(e){return a.createElement(n.InlineField,{label:"Format as",labelWidth:11},a.createElement(n.Select,{"aria-label":"Format as",options:e.options,value:e.query.format,onChange:function(t){e.onChange(i(i({},e.query),{format:t.value||0})),e.onRunQuery()},className:"width-12",menuShouldPortal:!0}))},exports.InlineInput=function(e){return a.createElement(n.InlineField,{label:e.label,labelWidth:28,tooltip:e.tooltip,hidden:e.hidden,disabled:e.disabled},a.createElement(n.Input,{"data-testid":e["data-testid"],className:"width-30",value:e.value,onChange:e.onChange,placeholder:e.placeholder,disabled:e.disabled}))},exports.QueryCodeEditor=function(e){var l=e.getSuggestions,r=e.query,s=o.defaults(e.query,{rawSQL:""}).rawSQL,u=t.useRef([]);return t.useEffect((function(){u.current=l(r)}),[l,r]),a.createElement(n.CodeEditor,i({language:e.language,value:s,onBlur:function(t){var a=i(i({},e.query),{rawSQL:t});e.onChange(a),e.onRunQuery()},showMiniMap:!1,showLineNumbers:!0,getSuggestions:function(){return u.current},height:"240px"},e.editorProps))},exports.ResourceSelector=v,exports.appendTemplateVariablesAsSuggestions=function(e,t){var a=e(),l=[];return a.getVariables().forEach((function(e){var t="$"+e.name,o=a.replace(t);o===t&&(o=""),l.push({label:t,kind:n.CodeEditorSuggestionItemKind.Text,detail:"(Template Variable) "+o})})),t.concat(l)},exports.applySQLTemplateVariables=function(e,t,a){var n=a();return i(i({},e),{rawSQL:n.replace(e.rawSQL,t,b)})},exports.awsAuthProviderOptions=h,exports.filterSQLQuery=function(e){return!!e.rawSQL},exports.standardRegions=d;
|
|
2
2
|
//# sourceMappingURL=index.production.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.js","sources":["../src/types.ts","../src/regions.ts","../src/sql/QueryEditor/FillValueSelect.tsx","../src/providers.ts","../src/ConnectionConfig.tsx","../src/sql/ResourceSelector.tsx","../src/sql/types.ts","../src/sql/utils/utils.ts","../src/sql/ConfigEditor/ConfigSelect.tsx","../src/sql/QueryEditor/FormatSelect.tsx","../src/sql/ConfigEditor/InlineInput.tsx","../src/sql/QueryEditor/QueryCodeEditor.tsx"],"sourcesContent":["import { DataSourceJsonData, 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}\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}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-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-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/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 <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\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 className=\"width-12\"\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\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 </InlineField>\n )}\n </>\n );\n}\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\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] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, 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}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const options = props.options;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = settings.awsAllowedAuthProviders ?? [\n AwsAuthType.Default,\n AwsAuthType.Keys,\n AwsAuthType.Credentials,\n ];\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\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 onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={28}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\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 />\n </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={28}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={28}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\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 aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={28}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\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 aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={28}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={28}\n tooltip=\"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 aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField label=\"Endpoint\" labelWidth={28} tooltip=\"Optionally, specify a custom endpoint for the service\">\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={28}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n />\n </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport { defaultKey } from './types';\n\nexport type ResourceSelectorProps = {\n value: string | null;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n disabled?: boolean;\n labelWidth?: number;\n className?: string;\n saveOptions?: () => Promise<void>;\n};\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\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 (resources.length) {\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 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(props.dependencies, dependencies)) {\n setFetched(false);\n setResources([]);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\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 setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(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 <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n aria-label={props.label}\n options={options}\n value={props.value}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n disabled={props.disabled}\n onOpenMenu={onClick}\n />\n </div>\n </InlineField>\n );\n}\n","import { DataQuery } from '@grafana/data';\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 { ScopedVars, VariableModel } 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(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\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') {\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: VariableModel) => {\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","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\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 label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n saveOptions: () => Promise<void>;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n disabled: !jsonData.defaultRegion,\n labelWidth: 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\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 ].concat(props.dependencies);\n return (\n <ResourceSelector\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}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\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 <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\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}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={28}\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 } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\nimport { MonacoOptions } from '@grafana/ui/components/Monaco/types';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: MonacoOptions;\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"],"names":["AwsAuthType","standardRegions","FillValueOptions","awsAuthProviderOptions","label","value","EC2IAMRole","Default","Keys","Credentials","toOption","ResourceSelector","props","_a","__read","useState","default","resource","setResource","_b","resources","setResources","_c","dependencies","setDependencies","_d","isLoading","setIsLoading","_e","fetched","setFetched","defaultOpts","useMemo","opts","description","push","_f","options","setOptions","useEffect","length","newOptions_1","forEach","r","find","o","isEqual","onChange","React","InlineField","labelWidth","tooltip","hidden","title","Select","e","className","disabled","onOpenMenu","saveOptions","fetch","resources_1","SelectableFillValueOptions","Previous","Null","Value","interpolateVariable","map","v","String","replace","quoteLiteral","join","jsonData","commonProps","defaultRegion","assumeRoleArn","authType","endpoint","externalId","profile","concat","_k","regions","setRegions","loadRegions","onOptionsChange","_l","skipHeader","_m","skipEndpoint","undefined","database","settings","window","grafanaBootData","awsAllowedAuthProviders","awsAssumeRoleEnabled","currentProvider","p","then","FieldSet","filter","opt","includes","defaultValue","option","onUpdateDatasourceJsonDataOptionSelect","Input","placeholder","onUpdateDatasourceJsonDataOption","secureJsonFields","accessKey","ButtonGroup","ToolbarButton","icon","type","onClick","onUpdateDatasourceResetOption","secureJsonData","onUpdateDatasourceSecureJsonDataOption","secretKey","defaultEndpoint","region","allowCustomValue","formatCreateLabel","children","query","fillMode","mode","onRunQuery","currentTarget","valueAsNumber","onBlur","format","getSuggestions","rawSQL","defaults","suggestionsRef","useRef","current","CodeEditor","language","showMiniMap","showLineNumbers","height","editorProps","getTemplateSrv","sugs","templateSrv","templateSugs","getVariables","variable","name","val","kind","CodeEditorSuggestionItemKind","Text","detail","scopedVars"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.production.js","sources":["../src/types.ts","../src/regions.ts","../src/sql/QueryEditor/FillValueSelect.tsx","../src/providers.ts","../src/ConnectionConfig.tsx","../src/sql/ResourceSelector.tsx","../src/sql/types.ts","../src/sql/utils/utils.ts","../src/sql/ConfigEditor/ConfigSelect.tsx","../src/sql/QueryEditor/FormatSelect.tsx","../src/sql/ConfigEditor/InlineInput.tsx","../src/sql/QueryEditor/QueryCodeEditor.tsx"],"sourcesContent":["import { DataSourceJsonData, 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}\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}\n\nexport interface AwsAuthDataSourceSecureJsonData {\n accessKey?: string;\n secretKey?: string;\n sessionToken?: string;\n}\n\nexport type AwsAuthDataSourceSettings = DataSourceSettings<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData>;\n","export const standardRegions: string[] = [\n 'af-south-1',\n 'ap-east-1',\n 'ap-northeast-1',\n 'ap-northeast-2',\n 'ap-northeast-3',\n 'ap-south-1',\n 'ap-southeast-1',\n 'ap-southeast-2',\n 'ca-central-1',\n 'cn-north-1',\n 'cn-northwest-1',\n 'eu-central-1',\n 'eu-north-1',\n 'eu-west-1',\n 'eu-west-2',\n 'eu-west-3',\n 'me-south-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-isob-east-1',\n 'us-west-1',\n 'us-west-2',\n];\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/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 <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\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 className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\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 </InlineField>\n )}\n </>\n );\n}\n","import { SelectableValue } from '@grafana/data';\nimport { AwsAuthType } from './types';\n\nexport const awsAuthProviderOptions = [\n {\n label: 'Workspace IAM Role',\n value: AwsAuthType.EC2IAMRole,\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] as Array<SelectableValue<AwsAuthType>>;\n","import React, { FC, useEffect, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\n\nimport { standardRegions } from './regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from './types';\nimport { awsAuthProviderOptions } from './providers';\n\nconst toOption = (value: string) => ({ value, label: value });\n\nexport interface ConnectionConfigProps<J = AwsAuthDataSourceJsonData, 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}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const options = props.options;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n\n const settings = (window as any).grafanaBootData.settings;\n const awsAllowedAuthProviders = settings.awsAllowedAuthProviders ?? [\n AwsAuthType.Default,\n AwsAuthType.Keys,\n AwsAuthType.Credentials,\n ];\n const awsAssumeRoleEnabled = settings.awsAssumeRoleEnabled ?? true;\n\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 onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n return (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={28}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className=\"width-30\"\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 </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={28}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className=\"width-30\"\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={28}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\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 aria-label=\"Access Key ID\"\n className=\"width-30\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={28}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className=\"width-30\">\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\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 aria-label=\"Secret Access Key\"\n className=\"width-30\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={28}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className=\"width-30\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n <InlineField\n label=\"External ID\"\n labelWidth={28}\n tooltip=\"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 aria-label=\"External ID\"\n className=\"width-30\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n </>\n )}\n {!skipEndpoint && (\n <InlineField label=\"Endpoint\" labelWidth={28} tooltip=\"Optionally, specify a custom endpoint for the service\">\n <Input\n aria-label=\"Endpoint\"\n className=\"width-30\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={28}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className=\"width-30\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\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 </InlineField>\n {props.children}\n </FieldSet>\n );\n};\n","import { SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\nimport { SelectCommonProps } from '@grafana/ui/components/Select/types';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n value: string | null;\n dependencies?: Array<string | null | undefined>;\n tooltip?: string;\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\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}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const [resource, setResource] = useState<string | null>(props.value || props.default || null);\n const [resources, setResources] = useState<Array<string | SelectableValue>>(resource ? [resource] : []);\n const [dependencies, setDependencies] = useState(props.dependencies);\n const [isLoading, setIsLoading] = useState(false);\n const [fetched, setFetched] = useState(false);\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(props.dependencies, dependencies)) {\n setFetched(false);\n setResource(null);\n props.onChange(null);\n setDependencies(props.dependencies);\n }\n }, [props, dependencies]);\n\n const fetch = async () => {\n if (fetched) {\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 setFetched(true);\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n props.onChange(e);\n if (e.value) {\n setResource(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 <InlineField label={props.label} labelWidth={props.labelWidth} tooltip={props.tooltip} hidden={props.hidden}>\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n {...props}\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 </div>\n </InlineField>\n );\n}\n","import { DataQuery } from '@grafana/data';\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 { ScopedVars, VariableModel } 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(\n query: SQLQuery,\n scopedVars: ScopedVars,\n getTemplateSrv: () => any\n): SQLQuery {\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') {\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: VariableModel) => {\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","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui/components/Select/types';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\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 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}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: 28,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: string[] = [\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 ].concat(props.dependencies);\n return (\n <ResourceSelector\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 className={props.className}\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 onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n","import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\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 <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n );\n}\n","import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\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}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={28}\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 } from '@grafana/ui';\nimport { DataQuery } from '@grafana/data';\nimport { MonacoOptions } from '@grafana/ui/components/Monaco/types';\n\ntype EditorProps = {\n width?: number | string;\n height?: number | string;\n readOnly?: boolean;\n showMiniMap?: boolean;\n showLineNumbers?: boolean;\n monacoOptions?: MonacoOptions;\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"],"names":["AwsAuthType","standardRegions","FillValueOptions","awsAuthProviderOptions","label","value","EC2IAMRole","Default","Keys","Credentials","toOption","ResourceSelector","props","_a","__read","useState","default","resource","setResource","_b","resources","setResources","_c","dependencies","setDependencies","_d","isLoading","setIsLoading","_e","fetched","setFetched","defaultOpts","useMemo","opts","description","push","_f","options","setOptions","useEffect","undefined","newOptions","length","forEach","r","find","o","isEqual","onChange","React","InlineField","labelWidth","tooltip","hidden","title","Select","e","className","onOpenMenu","fetch","saveOptions","resources_1","menuShouldPortal","SelectableFillValueOptions","Previous","Null","Value","interpolateVariable","map","v","String","replace","quoteLiteral","join","jsonData","commonProps","defaultRegion","assumeRoleArn","authType","endpoint","externalId","profile","concat","disabled","allowCustomValue","autoFocus","backspaceRemovesValue","invalid","isClearable","isMulti","inputId","showAllSelectedWhenOpen","maxMenuHeight","minMenuHeight","maxVisibleValues","menuPlacement","menuPosition","noOptionsMessage","onBlur","onCreateOption","onInputChange","placeholder","width","isOptionDisabled","_k","regions","setRegions","loadRegions","onOptionsChange","_l","skipHeader","_m","skipEndpoint","database","settings","window","grafanaBootData","awsAllowedAuthProviders","awsAssumeRoleEnabled","currentProvider","p","then","FieldSet","filter","opt","includes","defaultValue","option","onUpdateDatasourceJsonDataOptionSelect","Input","onUpdateDatasourceJsonDataOption","secureJsonFields","accessKey","ButtonGroup","ToolbarButton","icon","type","onClick","onUpdateDatasourceResetOption","secureJsonData","onUpdateDatasourceSecureJsonDataOption","secretKey","defaultEndpoint","region","formatCreateLabel","children","query","fillMode","mode","onRunQuery","currentTarget","valueAsNumber","format","getSuggestions","rawSQL","defaults","suggestionsRef","useRef","current","CodeEditor","language","showMiniMap","showLineNumbers","height","editorProps","getTemplateSrv","sugs","templateSrv","templateSugs","getVariables","variable","name","val","kind","CodeEditorSuggestionItemKind","Text","detail","scopedVars"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';
|
|
2
|
+
import { InputActionMeta } from '@grafana/ui/components/Select/types';
|
|
2
3
|
import { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';
|
|
3
4
|
export interface ConfigSelectProps extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {
|
|
4
5
|
value: string;
|
|
@@ -9,6 +10,27 @@ export interface ConfigSelectProps extends DataSourcePluginOptionsEditorProps<Aw
|
|
|
9
10
|
'data-testid'?: string;
|
|
10
11
|
hidden?: boolean;
|
|
11
12
|
disabled?: boolean;
|
|
13
|
+
allowCustomValue?: boolean;
|
|
12
14
|
saveOptions: () => Promise<void>;
|
|
15
|
+
autoFocus?: boolean;
|
|
16
|
+
backspaceRemovesValue?: boolean;
|
|
17
|
+
className?: string;
|
|
18
|
+
invalid?: boolean;
|
|
19
|
+
isClearable?: boolean;
|
|
20
|
+
isMulti?: boolean;
|
|
21
|
+
inputId?: string;
|
|
22
|
+
showAllSelectedWhenOpen?: boolean;
|
|
23
|
+
maxMenuHeight?: number;
|
|
24
|
+
minMenuHeight?: number;
|
|
25
|
+
maxVisibleValues?: number;
|
|
26
|
+
menuPlacement?: 'auto' | 'bottom' | 'top';
|
|
27
|
+
menuPosition?: 'fixed' | 'absolute';
|
|
28
|
+
noOptionsMessage?: string;
|
|
29
|
+
onBlur?: () => void;
|
|
30
|
+
onCreateOption?: (value: string) => void;
|
|
31
|
+
onInputChange?: (value: string, actionMeta: InputActionMeta) => void;
|
|
32
|
+
placeholder?: string;
|
|
33
|
+
width?: number;
|
|
34
|
+
isOptionDisabled?: () => boolean;
|
|
13
35
|
}
|
|
14
36
|
export declare function ConfigSelect(props: ConfigSelectProps): JSX.Element;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { SelectableValue } from '@grafana/data';
|
|
2
|
-
|
|
2
|
+
import { SelectCommonProps } from '@grafana/ui/components/Select/types';
|
|
3
|
+
export interface ResourceSelectorProps extends SelectCommonProps<string> {
|
|
3
4
|
value: string | null;
|
|
4
|
-
fetch: () => Promise<Array<string | SelectableValue<string>>>;
|
|
5
|
-
onChange: (e: SelectableValue<string> | null) => void;
|
|
6
5
|
dependencies?: Array<string | null | undefined>;
|
|
7
6
|
tooltip?: string;
|
|
8
7
|
label?: string;
|
|
@@ -10,9 +9,9 @@ export declare type ResourceSelectorProps = {
|
|
|
10
9
|
hidden?: boolean;
|
|
11
10
|
default?: string;
|
|
12
11
|
title?: string;
|
|
13
|
-
disabled?: boolean;
|
|
14
12
|
labelWidth?: number;
|
|
15
|
-
className?: string;
|
|
16
13
|
saveOptions?: () => Promise<void>;
|
|
17
|
-
|
|
14
|
+
fetch?: () => Promise<Array<string | SelectableValue<string>>>;
|
|
15
|
+
resources?: string[];
|
|
16
|
+
}
|
|
18
17
|
export declare function ResourceSelector(props: ResourceSelectorProps): JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grafana/aws-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"description": "Common AWS features for grafana",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"clean": "rimraf ./dist ./compiled",
|
|
11
11
|
"typecheck": "tsc --noEmit",
|
|
12
12
|
"test": "jest --notify --watch",
|
|
13
|
+
"test:coverage": "jest --coverage",
|
|
13
14
|
"test-ci": "grafana-toolkit plugin:test"
|
|
14
15
|
},
|
|
15
16
|
"files": [
|