From dd28b28174f1db1a743987886ded6ee3e3de3f88 Mon Sep 17 00:00:00 2001 From: Mark Reibert Date: Sat, 11 Jan 2020 10:28:32 -0700 Subject: [PATCH 01/15] Fix percentile() function, closes #862 (#863) Like the other aggregation functions, the datapoints need to be sorted in time before calling groupBy_perf(). --- src/datasource-zabbix/dataProcessor.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/datasource-zabbix/dataProcessor.js b/src/datasource-zabbix/dataProcessor.js index e69ceda..eb5d1a1 100644 --- a/src/datasource-zabbix/dataProcessor.js +++ b/src/datasource-zabbix/dataProcessor.js @@ -121,9 +121,11 @@ function aggregateWrapper(groupByCallback, interval, datapoints) { } function percentile(interval, n, datapoints) { - var flattenedPoints = ts.flattenDatapoints(datapoints); - var groupByCallback = _.partial(PERCENTILE, n); - return groupBy(flattenedPoints, interval, groupByCallback); + const flattenedPoints = ts.flattenDatapoints(datapoints); + // groupBy_perf works with sorted series only + const sortedPoints = ts.sortByTime(flattenedPoints); + let groupByCallback = _.partial(PERCENTILE, n); + return groupBy(sortedPoints, interval, groupByCallback); } function timeShift(interval, range) { From fe0c5cf1fd2bd6573f2fc65687a89327f0a270d9 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Sat, 11 Jan 2020 20:31:00 +0300 Subject: [PATCH 02/15] Update copyright, happy New Year! --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39687eb..bdeb701 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,6 @@ First, [configure](https://alexanderzobnin.github.io/grafana-zabbix/configuratio - Need additional support? Contact me for details [alexanderzobnin@gmail.com](mailto:alexanderzobnin@gmail.com) --- -:copyright: 2015-2019 Alexander Zobnin alexanderzobnin@gmail.com +:copyright: 2015-2020 Alexander Zobnin alexanderzobnin@gmail.com Licensed under the Apache 2.0 License From 4f24b2bf23339ce2667489eab1beda1dd37aa5f5 Mon Sep 17 00:00:00 2001 From: memfiz Date: Mon, 13 Jan 2020 09:58:01 +0200 Subject: [PATCH 03/15] fix not acknowledged problem color with a message (#858) * fix not acknowledged problem color with a message * fix not acknowledged problem color with a message, closes #857 --- src/panel-triggers/components/AlertList/AlertCard.tsx | 2 +- src/panel-triggers/components/Problems/Problems.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/panel-triggers/components/AlertList/AlertCard.tsx b/src/panel-triggers/components/AlertList/AlertCard.tsx index b893ac8..87eaf9d 100644 --- a/src/panel-triggers/components/AlertList/AlertCard.tsx +++ b/src/panel-triggers/components/AlertList/AlertCard.tsx @@ -72,7 +72,7 @@ export default class AlertCard extends PureComponent, problemSeverityDesc: TriggerSev color = severityDesc.color; // Mark acknowledged triggers with different color - if (markAckEvents && problem.acknowledges && problem.acknowledges.length) { + if (markAckEvents && problem.lastEvent.acknowledged === "1") { color = ackEventColor; } From 82cfda652418162eb50d1b1568c58b91218f8c06 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 13 Jan 2020 11:31:40 +0300 Subject: [PATCH 04/15] Variable query editor (#856) * refactor: convert module to typescript * refactor: covert utils to typescript * variable query editor WIP * variable editor: fix type error after grafana/ui update * variable editor: use FormLabel from grafana/ui * variable editor: refactor * variable editor: input validation and highlights * variable editor: fix tests * variable query: fix backward compatibility with empty queries * fix linter errors * variable editor: fix variable replacement in queries --- package.json | 1 + .../components/VariableQueryEditor.tsx | 157 ++++++++++++++++++ .../components/ZabbixInput.tsx | 69 ++++++++ src/datasource-zabbix/datasource.js | 66 ++++---- .../{module.js => module.ts} | 14 +- .../specs/datasource.spec.js | 13 +- src/datasource-zabbix/types.ts | 30 ++++ src/datasource-zabbix/{utils.js => utils.ts} | 116 +++++++++---- src/test-setup/jest-setup.js | 6 +- webpack/webpack.base.conf.js | 4 +- yarn.lock | 121 +++++++++++++- 11 files changed, 519 insertions(+), 78 deletions(-) create mode 100644 src/datasource-zabbix/components/VariableQueryEditor.tsx create mode 100644 src/datasource-zabbix/components/ZabbixInput.tsx rename src/datasource-zabbix/{module.js => module.ts} (67%) create mode 100644 src/datasource-zabbix/types.ts rename src/datasource-zabbix/{utils.js => utils.ts} (67%) diff --git a/package.json b/package.json index e510d91..64b90d2 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@babel/core": "^7.7.7", "@babel/preset-env": "^7.7.7", "@babel/preset-react": "^7.6.3", + "@emotion/core": "^10.0.27", "@grafana/data": "^6.4.2", "@grafana/ui": "^6.4.2", "@types/classnames": "^2.2.6", diff --git a/src/datasource-zabbix/components/VariableQueryEditor.tsx b/src/datasource-zabbix/components/VariableQueryEditor.tsx new file mode 100644 index 0000000..a9b5616 --- /dev/null +++ b/src/datasource-zabbix/components/VariableQueryEditor.tsx @@ -0,0 +1,157 @@ +import React, { PureComponent } from 'react'; +import { parseLegacyVariableQuery } from '../utils'; +import { Select, Input, AsyncSelect, FormLabel } from '@grafana/ui'; +import { SelectableValue } from '@grafana/data'; +import { VariableQuery, VariableQueryTypes, VariableQueryProps, VariableQueryData } from '../types'; +import { ZabbixInput } from './ZabbixInput'; + +export class ZabbixVariableQueryEditor extends PureComponent { + queryTypes: Array> = [ + { value: VariableQueryTypes.Group, label: 'Group'}, + { value: VariableQueryTypes.Host, label: 'Host' }, + { value: VariableQueryTypes.Application, label: 'Application' }, + { value: VariableQueryTypes.Item, label: 'Item' }, + ]; + + defaults: VariableQueryData = { + selectedQueryType: { value: VariableQueryTypes.Group, label: 'Group' }, + queryType: VariableQueryTypes.Group, + group: '/.*/', + host: '', + application: '', + item: '', + }; + + constructor(props: VariableQueryProps) { + super(props); + + if (this.props.query && typeof this.props.query === 'string') { + // Backward compatibility + const query = parseLegacyVariableQuery(this.props.query); + const selectedQueryType = this.getSelectedQueryType(query.queryType); + this.state = { + selectedQueryType, + legacyQuery: this.props.query, + ...query + }; + } else if (this.props.query) { + const query = (this.props.query as VariableQuery); + const selectedQueryType = this.getSelectedQueryType(query.queryType); + this.state = { + ...this.defaults, + ...query, + selectedQueryType, + }; + } else { + this.state = this.defaults; + } + } + + getSelectedQueryType(queryType: VariableQueryTypes) { + return this.queryTypes.find(q => q.value === queryType); + } + + handleQueryUpdate = (evt: React.ChangeEvent, prop: string) => { + const value = evt.currentTarget.value; + this.setState((prevState: VariableQueryData) => { + const newQuery = { + ...prevState, + }; + newQuery[prop] = value; + + return { + ...newQuery, + }; + }); + } + + handleQueryChange = () => { + const { queryType, group, host, application, item } = this.state; + const queryModel = { queryType, group, host, application, item }; + this.props.onChange(queryModel, `Zabbix - ${queryType}`); + } + + handleQueryTypeChange = (selectedItem: SelectableValue) => { + this.setState({ + ...this.state, + selectedQueryType: selectedItem, + queryType: selectedItem.value, + }); + + const { group, host, application, item } = this.state; + const queryType = selectedItem.value; + const queryModel = { queryType, group, host, application, item }; + this.props.onChange(queryModel, `Zabbix - ${queryType}`); + } + + render() { + const { selectedQueryType, legacyQuery, group, host, application, item } = this.state; + + return ( + <> +
+ Query Type + +
+ } + + ); + } +} diff --git a/src/datasource-zabbix/components/ZabbixInput.tsx b/src/datasource-zabbix/components/ZabbixInput.tsx new file mode 100644 index 0000000..35ae31b --- /dev/null +++ b/src/datasource-zabbix/components/ZabbixInput.tsx @@ -0,0 +1,69 @@ +import React, { FC } from 'react'; +import { css, cx } from 'emotion'; +import { Themeable, withTheme, Input, GrafanaTheme, EventsWithValidation, ValidationEvents } from '@grafana/ui'; +import { isRegex, variableRegex } from '../utils'; + +const variablePattern = RegExp(`^${variableRegex.source}`); + +const getStyles = (theme: GrafanaTheme) => ({ + inputRegex: css` + color: ${theme.colors.orange} + `, + inputVariable: css` + color: ${theme.colors.variable} + `, +}); + +const zabbixInputValidationEvents: ValidationEvents = { + [EventsWithValidation.onBlur]: [ + { + rule: value => { + if (!value) { + return true; + } + if (value.length > 1 && value[0] === '/') { + if (value[value.length - 1] !== '/') { + return false; + } + } + return true; + }, + errorMessage: 'Not a valid regex', + }, + { + rule: value => { + if (value === '*') { + return false; + } + return true; + }, + errorMessage: 'Wildcards not supported. Use /.*/ instead', + }, + ], +}; + +interface Props extends React.ComponentProps, Themeable { +} + +const UnthemedZabbixInput: FC = ({ theme, value, ref, validationEvents, ...restProps }) => { + const styles = getStyles(theme); + + let inputClass; + if (variablePattern.test(value as string)) { + inputClass = styles.inputVariable; + } + if (isRegex(value)) { + inputClass = styles.inputRegex; + } + + return ( + + ); +}; + +export const ZabbixInput = withTheme(UnthemedZabbixInput); diff --git a/src/datasource-zabbix/datasource.js b/src/datasource-zabbix/datasource.js index 94c29c8..d89e68c 100644 --- a/src/datasource-zabbix/datasource.js +++ b/src/datasource-zabbix/datasource.js @@ -9,6 +9,7 @@ import dataProcessor from './dataProcessor'; import responseHandler from './responseHandler'; import { Zabbix } from './zabbix/zabbix'; import { ZabbixAPIError } from './zabbix/connectors/zabbix_api/zabbixAPICore'; +import { VariableQueryTypes } from './types'; const DEFAULT_ZABBIX_VERSION = 3; @@ -432,42 +433,41 @@ export class ZabbixDatasource { * of metrics in "{metric1,metcic2,...,metricN}" format. */ metricFindQuery(query) { - let result; - let parts = []; + let resultPromise; + let queryModel = _.cloneDeep(query); - // Split query. Query structure: group.host.app.item - _.each(utils.splitTemplateQuery(query), part => { - part = this.replaceTemplateVars(part, {}); - - // Replace wildcard to regex - if (part === '*') { - part = '/.*/'; - } - parts.push(part); - }); - let template = _.zipObject(['group', 'host', 'app', 'item'], parts); - - // Get items - if (parts.length === 4) { - // Search for all items, even it's not belong to any application - if (template.app === '/.*/') { - template.app = ''; - } - result = this.zabbix.getItems(template.group, template.host, template.app, template.item); - } else if (parts.length === 3) { - // Get applications - result = this.zabbix.getApps(template.group, template.host, template.app); - } else if (parts.length === 2) { - // Get hosts - result = this.zabbix.getHosts(template.group, template.host); - } else if (parts.length === 1) { - // Get groups - result = this.zabbix.getGroups(template.group); - } else { - result = Promise.resolve([]); + if (!query) { + return Promise.resolve([]); } - return result.then(metrics => { + if (typeof query === 'string') { + // Backward compatibility + queryModel = utils.parseLegacyVariableQuery(query); + } + + for (const prop of ['group', 'host', 'application', 'item']) { + queryModel[prop] = this.replaceTemplateVars(queryModel[prop], {}); + } + + switch (queryModel.queryType) { + case VariableQueryTypes.Group: + resultPromise = this.zabbix.getGroups(queryModel.group); + break; + case VariableQueryTypes.Host: + resultPromise = this.zabbix.getHosts(queryModel.group, queryModel.host); + break; + case VariableQueryTypes.Application: + resultPromise = this.zabbix.getApps(queryModel.group, queryModel.host, queryModel.application); + break; + case VariableQueryTypes.Item: + resultPromise = this.zabbix.getItems(queryModel.group, queryModel.host, queryModel.application, queryModel.item); + break; + default: + resultPromise = Promise.resolve([]); + break; + } + + return resultPromise.then(metrics => { return _.map(metrics, formatMetric); }); } diff --git a/src/datasource-zabbix/module.js b/src/datasource-zabbix/module.ts similarity index 67% rename from src/datasource-zabbix/module.js rename to src/datasource-zabbix/module.ts index edddcdf..0ed81bd 100644 --- a/src/datasource-zabbix/module.js +++ b/src/datasource-zabbix/module.ts @@ -2,15 +2,18 @@ import { loadPluginCss } from 'grafana/app/plugins/sdk'; import { ZabbixDatasource } from './datasource'; import { ZabbixQueryController } from './query.controller'; import { ZabbixDSConfigController } from './config.controller'; +import { ZabbixVariableQueryEditor } from './components/VariableQueryEditor'; import './zabbixAlerting.service.js'; import './add-metric-function.directive'; import './metric-function-editor.directive'; -class ZabbixQueryOptionsController {} -ZabbixQueryOptionsController.templateUrl = 'datasource-zabbix/partials/query.options.html'; +class ZabbixQueryOptionsController { + static templateUrl = 'datasource-zabbix/partials/query.options.html'; +} -class ZabbixAnnotationsQueryController {} -ZabbixAnnotationsQueryController.templateUrl = 'datasource-zabbix/partials/annotations.editor.html'; +class ZabbixAnnotationsQueryController { + static templateUrl = 'datasource-zabbix/partials/annotations.editor.html'; +} ZabbixQueryController.templateUrl = 'datasource-zabbix/partials/query.editor.html'; ZabbixDSConfigController.templateUrl = 'datasource-zabbix/partials/config.html'; @@ -25,5 +28,6 @@ export { ZabbixDSConfigController as ConfigCtrl, ZabbixQueryController as QueryCtrl, ZabbixQueryOptionsController as QueryOptionsCtrl, - ZabbixAnnotationsQueryController as AnnotationsQueryCtrl + ZabbixAnnotationsQueryController as AnnotationsQueryCtrl, + ZabbixVariableQueryEditor as VariableQueryEditor, }; diff --git a/src/datasource-zabbix/specs/datasource.spec.js b/src/datasource-zabbix/specs/datasource.spec.js index dd99f26..a51a06b 100644 --- a/src/datasource-zabbix/specs/datasource.spec.js +++ b/src/datasource-zabbix/specs/datasource.spec.js @@ -231,7 +231,7 @@ describe('ZabbixDatasource', () => { }); }); - describe('When invoking metricFindQuery()', () => { + describe('When invoking metricFindQuery() with legacy query', () => { beforeEach(() => { ctx.ds.replaceTemplateVars = (str) => str; ctx.ds.zabbix = { @@ -245,7 +245,6 @@ describe('ZabbixDatasource', () => { it('should return groups', (done) => { const tests = [ {query: '*', expect: '/.*/'}, - {query: '', expect: ''}, {query: 'Backend', expect: 'Backend'}, {query: 'Back*', expect: 'Back*'}, ]; @@ -258,6 +257,16 @@ describe('ZabbixDatasource', () => { done(); }); + it('should return empty list for empty query', (done) => { + ctx.ds.metricFindQuery('').then(result => { + expect(ctx.ds.zabbix.getGroups).toBeCalledTimes(0); + ctx.ds.zabbix.getGroups.mockClear(); + + expect(result).toEqual([]); + done(); + }); + }); + it('should return hosts', (done) => { const tests = [ {query: '*.*', expect: ['/.*/', '/.*/']}, diff --git a/src/datasource-zabbix/types.ts b/src/datasource-zabbix/types.ts new file mode 100644 index 0000000..739e25f --- /dev/null +++ b/src/datasource-zabbix/types.ts @@ -0,0 +1,30 @@ +import { SelectableValue } from "@grafana/data"; + +export interface VariableQueryProps { + query: LegacyVariableQuery; + onChange: (query: VariableQuery, definition: string) => void; + datasource: any; + templateSrv: any; +} + +export interface VariableQueryData extends VariableQuery { + selectedQueryType: SelectableValue; + legacyQuery?: string; +} + +export interface VariableQuery { + queryType: VariableQueryTypes; + group?: string; + host?: string; + application?: string; + item?: string; +} + +export type LegacyVariableQuery = VariableQuery | string; + +export enum VariableQueryTypes { + Group = 'group', + Host = 'host', + Application = 'application', + Item = 'item', +} diff --git a/src/datasource-zabbix/utils.js b/src/datasource-zabbix/utils.ts similarity index 67% rename from src/datasource-zabbix/utils.js rename to src/datasource-zabbix/utils.ts index 454ebaa..44bc5a5 100644 --- a/src/datasource-zabbix/utils.js +++ b/src/datasource-zabbix/utils.ts @@ -2,6 +2,15 @@ import _ from 'lodash'; import moment from 'moment'; import kbn from 'grafana/app/core/utils/kbn'; import * as c from './constants'; +import { VariableQuery, VariableQueryTypes } from './types'; + +/* + * This regex matches 3 types of variable reference with an optional format specifier + * \$(\w+) $var1 + * \[\[([\s\S]+?)(?::(\w+))?\]\] [[var2]] or [[var2:fmt2]] + * \${(\w+)(?::(\w+))?} ${var3} or ${var3:fmt3} + */ +export const variableRegex = /\$(\w+)|\[\[([\s\S]+?)(?::(\w+))?\]\]|\${(\w+)(?:\.([^:^\}]+))?(?::(\w+))?}/g; /** * Expand Zabbix item name @@ -14,8 +23,8 @@ export function expandItemName(name, key) { // extract params from key: // "system.cpu.util[,system,avg1]" --> ["", "system", "avg1"] - let key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')); - let key_params = splitKeyParams(key_params_str); + const key_params_str = key.substring(key.indexOf('[') + 1, key.lastIndexOf(']')); + const key_params = splitKeyParams(key_params_str); // replace item parameters for (let i = key_params.length; i >= 1; i--) { @@ -34,10 +43,10 @@ export function expandItems(items) { } function splitKeyParams(paramStr) { - let params = []; + const params = []; let quoted = false; let in_array = false; - let split_symbol = ','; + const split_symbol = ','; let param = ''; _.forEach(paramStr, symbol => { @@ -71,9 +80,9 @@ export function containsMacro(itemName) { export function replaceMacro(item, macros) { let itemName = item.name; - let item_macros = itemName.match(MACRO_PATTERN); + const item_macros = itemName.match(MACRO_PATTERN); _.forEach(item_macros, macro => { - let host_macros = _.filter(macros, m => { + const host_macros = _.filter(macros, m => { if (m.hostid) { return m.hostid === item.hostid; } else { @@ -82,10 +91,10 @@ export function replaceMacro(item, macros) { } }); - let macro_def = _.find(host_macros, { macro: macro }); + const macro_def = _.find(host_macros, { macro: macro }); if (macro_def && macro_def.value) { - let macro_value = macro_def.value; - let macro_regex = new RegExp(escapeMacro(macro)); + const macro_value = macro_def.value; + const macro_regex = new RegExp(escapeMacro(macro)); itemName = itemName.replace(macro_regex, macro_value); } }); @@ -98,17 +107,62 @@ function escapeMacro(macro) { return macro; } +export function parseLegacyVariableQuery(query: string): VariableQuery { + let queryType: VariableQueryTypes; + const parts = []; + + // Split query. Query structure: group.host.app.item + _.each(splitTemplateQuery(query), part => { + // Replace wildcard to regex + if (part === '*') { + part = '/.*/'; + } + parts.push(part); + }); + const template = _.zipObject(['group', 'host', 'app', 'item'], parts); + + if (parts.length === 4 && template.app === '/.*/') { + // Search for all items, even it's not belong to any application + template.app = ''; + } + + switch (parts.length) { + case 1: + queryType = VariableQueryTypes.Group; + break; + case 2: + queryType = VariableQueryTypes.Host; + break; + case 3: + queryType = VariableQueryTypes.Application; + break; + case 4: + queryType = VariableQueryTypes.Item; + break; + } + + const variableQuery: VariableQuery = { + queryType, + group: template.group || '', + host: template.host || '', + application: template.app || '', + item: template.item || '', + }; + + return variableQuery; +} + /** * Split template query to parts of zabbix entities * group.host.app.item -> [group, host, app, item] * {group}{host.com} -> [group, host.com] */ export function splitTemplateQuery(query) { - let splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g; + const splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g; let split; if (isContainsBraces(query)) { - let result = query.match(splitPattern); + const result = query.match(splitPattern); split = _.map(result, part => { return _.trim(part, '{}'); }); @@ -120,7 +174,7 @@ export function splitTemplateQuery(query) { } function isContainsBraces(query) { - let bracesPattern = /^\{.+\}$/; + const bracesPattern = /^\{.+\}$/; return bracesPattern.test(query); } @@ -132,9 +186,9 @@ export function isRegex(str) { } export function isTemplateVariable(str, templateVariables) { - var variablePattern = /^\$\w+/; + const variablePattern = /^\$\w+/; if (variablePattern.test(str)) { - var variables = _.map(templateVariables, variable => { + const variables = _.map(templateVariables, variable => { return '$' + variable.name; }); return _.includes(variables, str); @@ -156,9 +210,9 @@ export function getRangeScopedVars(range) { } export function buildRegex(str) { - var matches = str.match(regexPattern); - var pattern = matches[1]; - var flags = matches[2] !== "" ? matches[2] : undefined; + const matches = str.match(regexPattern); + const pattern = matches[1]; + const flags = matches[2] !== "" ? matches[2] : undefined; return new RegExp(pattern, flags); } @@ -169,18 +223,18 @@ export function escapeRegex(value) { } export function parseInterval(interval) { - var intervalPattern = /(^[\d]+)(y|M|w|d|h|m|s)/g; - var momentInterval = intervalPattern.exec(interval); + const intervalPattern = /(^[\d]+)(y|M|w|d|h|m|s)/g; + const momentInterval: any[] = intervalPattern.exec(interval); return moment.duration(Number(momentInterval[1]), momentInterval[2]).valueOf(); } export function parseTimeShiftInterval(interval) { - let intervalPattern = /^([\+\-]*)([\d]+)(y|M|w|d|h|m|s)/g; - let momentInterval = intervalPattern.exec(interval); - let duration = 0; + const intervalPattern = /^([\+\-]*)([\d]+)(y|M|w|d|h|m|s)/g; + const momentInterval: any[] = intervalPattern.exec(interval); + let duration: any = 0; if (momentInterval[1] === '+') { - duration = 0 - moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf(); + duration = 0 - (moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf() as any); } else { duration = moment.duration(Number(momentInterval[2]), momentInterval[3]).valueOf(); } @@ -196,13 +250,13 @@ export function parseTimeShiftInterval(interval) { */ export function formatAcknowledges(acknowledges) { if (acknowledges.length) { - var formatted_acknowledges = '

Acknowledges:
' + let formatted_acknowledges = '

Acknowledges:
Time
' + ''; - _.each(_.map(acknowledges, function (ack) { - var timestamp = moment.unix(ack.clock); + _.each(_.map(acknowledges, ack => { + const timestamp = moment.unix(ack.clock); return ''; - }), function (ack) { + }), ack => { formatted_acknowledges = formatted_acknowledges.concat(ack); }); formatted_acknowledges = formatted_acknowledges.concat('
TimeUserComments
' + timestamp.format("DD MMM YYYY HH:mm:ss") + '' + ack.alias + ' (' + ack.name + ' ' + ack.surname + ')' + '' + ack.message + '
'); @@ -213,8 +267,8 @@ export function formatAcknowledges(acknowledges) { } export function convertToZabbixAPIUrl(url) { - var zabbixAPIUrlPattern = /.*api_jsonrpc.php$/; - var trimSlashPattern = /(.*?)[\/]*$/; + const zabbixAPIUrlPattern = /.*api_jsonrpc.php$/; + const trimSlashPattern = /(.*?)[\/]*$/; if (url.match(zabbixAPIUrlPattern)) { return url; } else { @@ -247,7 +301,7 @@ export function callOnce(func, promiseKeeper) { */ export function sequence(funcsArray) { return function(result) { - for (var i = 0; i < funcsArray.length; i++) { + for (let i = 0; i < funcsArray.length; i++) { result = funcsArray[i].call(this, result); } return result; @@ -292,5 +346,5 @@ export function getArrayDepth(a, level = 0) { // Fix for backward compatibility with lodash 2.4 if (!_.includes) { - _.includes = _.contains; + _.includes = (_ as any).contains; } diff --git a/src/test-setup/jest-setup.js b/src/test-setup/jest-setup.js index 6d9ae49..9e4b81c 100644 --- a/src/test-setup/jest-setup.js +++ b/src/test-setup/jest-setup.js @@ -75,9 +75,9 @@ jest.mock('grafana/app/core/config', () => { jest.mock('jquery', () => 'module not found', {virtual: true}); -jest.mock('@grafana/ui', () => { - return {}; -}, {virtual: true}); +// jest.mock('@grafana/ui', () => { +// return {}; +// }, {virtual: true}); // Required for loading angularjs let dom = new JSDOM(''); diff --git a/webpack/webpack.base.conf.js b/webpack/webpack.base.conf.js index dc61c8d..ded1c67 100644 --- a/webpack/webpack.base.conf.js +++ b/webpack/webpack.base.conf.js @@ -17,7 +17,7 @@ module.exports = { entry: { './module': './module.js', 'components/config': './components/config.js', - 'datasource-zabbix/module': './datasource-zabbix/module.js', + 'datasource-zabbix/module': './datasource-zabbix/module.ts', 'panel-triggers/module': './panel-triggers/module.js', }, output: { @@ -27,7 +27,7 @@ module.exports = { }, externals: [ // remove the line below if you don't want to use builtin versions - 'jquery', 'lodash', 'moment', 'angular', + 'jquery', 'lodash', 'moment', 'angular', 'emotion', 'react', 'react-dom', '@grafana/ui', '@grafana/data', function (context, request, callback) { var prefix = 'grafana/'; diff --git a/yarn.lock b/yarn.lock index 00ba26b..e626092 100644 --- a/yarn.lock +++ b/yarn.lock @@ -696,6 +696,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.5.5": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.7.tgz#194769ca8d6d7790ec23605af9ee3e42a0aa79cf" + integrity sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.4.0", "@babel/template@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" @@ -758,16 +765,68 @@ find-root "^1.1.0" source-map "^0.7.2" +"@emotion/cache@^10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.27.tgz#7895db204e2c1a991ae33d51262a3a44f6737303" + integrity sha512-Zp8BEpbMunFsTcqAK4D7YTm3MvCp1SekflSLJH8lze2fCcSZ/yMkXHo8kb3t1/1Tdd3hAqf3Fb7z9VZ+FMiC9w== + dependencies: + "@emotion/sheet" "0.9.4" + "@emotion/stylis" "0.8.5" + "@emotion/utils" "0.11.3" + "@emotion/weak-memoize" "0.2.5" + +"@emotion/core@^10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.27.tgz#7c3f78be681ab2273f3bf11ca3e2edc4a9dd1fdc" + integrity sha512-XbD5R36pVbohQMnKfajHv43g8EbN4NHdF6Zh9zg/C0nr0jqwOw3gYnC07Xj3yG43OYSRyrGsoQ5qPwc8ycvLZw== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/cache" "^10.0.27" + "@emotion/css" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" + +"@emotion/css@^10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" + integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== + dependencies: + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" + babel-plugin-emotion "^10.0.27" + +"@emotion/hash@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831" + integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A== + "@emotion/hash@^0.6.2", "@emotion/hash@^0.6.6": version "0.6.6" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.6.6.tgz#62266c5f0eac6941fece302abad69f2ee7e25e44" integrity sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ== +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + "@emotion/memoize@^0.6.1", "@emotion/memoize@^0.6.6": version "0.6.6" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.6.6.tgz#004b98298d04c7ca3b4f50ca2035d4f60d2eed1b" integrity sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ== +"@emotion/serialize@^0.11.15": + version "0.11.15" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.15.tgz#9a0f5873fb458d87d4f23e034413c12ed60a705a" + integrity sha512-YE+qnrmGwyR+XB5j7Bi+0GT1JWsdcjM/d4POu+TXkcnrRs4RFCCsi3d/Ebf+wSStHqAlTT2+dfd+b9N9EO2KBg== + dependencies: + "@emotion/hash" "0.7.4" + "@emotion/memoize" "0.7.4" + "@emotion/unitless" "0.7.5" + "@emotion/utils" "0.11.3" + csstype "^2.5.7" + "@emotion/serialize@^0.9.1": version "0.9.1" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.9.1.tgz#a494982a6920730dba6303eb018220a2b629c145" @@ -778,21 +837,46 @@ "@emotion/unitless" "^0.6.7" "@emotion/utils" "^0.8.2" +"@emotion/sheet@0.9.4": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" + integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== + +"@emotion/stylis@0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + "@emotion/stylis@^0.7.0": version "0.7.1" resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.7.1.tgz#50f63225e712d99e2b2b39c19c70fff023793ca5" integrity sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ== +"@emotion/unitless@0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + "@emotion/unitless@^0.6.2", "@emotion/unitless@^0.6.7": version "0.6.7" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.6.7.tgz#53e9f1892f725b194d5e6a1684a7b394df592397" integrity sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg== +"@emotion/utils@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" + integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== + "@emotion/utils@^0.8.2": version "0.8.2" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.8.2.tgz#576ff7fb1230185b619a75d258cbc98f0867a8dc" integrity sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw== +"@emotion/weak-memoize@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== + "@grafana/data@6.4.2", "@grafana/data@^6.4.2": version "6.4.2" resolved "https://registry.yarnpkg.com/@grafana/data/-/data-6.4.2.tgz#1ce4687757c609a6b12b39b04cd37e20e08fee8f" @@ -1745,6 +1829,22 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" +babel-plugin-emotion@^10.0.27: + version "10.0.27" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.27.tgz#59001cf5de847c1d61f2079cd906a90a00d3184f" + integrity sha512-SUNYcT4FqhOqvwv0z1oeYhqgheU8qrceLojuHyX17ngo7WtWqN5I9l3IGHzf21Xraj465CVzF4IvOlAF+3ed0A== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@emotion/hash" "0.7.4" + "@emotion/memoize" "0.7.4" + "@emotion/serialize" "^0.11.15" + babel-plugin-macros "^2.0.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" + find-root "^1.1.0" + source-map "^0.5.7" + babel-plugin-emotion@^9.2.11: version "9.2.11" resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz#319c005a9ee1d15bb447f59fe504c35fd5807728" @@ -2810,6 +2910,11 @@ csstype@^2.5.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== +csstype@^2.5.7: + version "2.6.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431" + integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA== + cst@^0.4.3: version "0.4.10" resolved "https://registry.yarnpkg.com/cst/-/cst-0.4.10.tgz#9c05c825290a762f0a85c0aabb8c0fe035ae8516" @@ -7333,11 +7438,16 @@ react-input-autosize@^2.2.1: dependencies: prop-types "^15.5.8" -react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.7.0, react-is@^16.8.4: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== +react-is@^16.8.1: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -7765,13 +7875,20 @@ resolve@1.x: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: version "1.14.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg== dependencies: path-parse "^1.0.6" +resolve@^1.10.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + restructured@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/restructured/-/restructured-0.0.11.tgz#f914f6b6f358b8e45d6d8ee268926cf1a783f710" From 376183e8e4a2a9896c19b5bf31eba27575ddf857 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 15 Jan 2020 11:02:17 +0300 Subject: [PATCH 05/15] Transform percentile function, closes #868 --- src/datasource-zabbix/dataProcessor.js | 22 ++++++++++++---------- src/datasource-zabbix/metricFunctions.js | 12 +++++++++++- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/datasource-zabbix/dataProcessor.js b/src/datasource-zabbix/dataProcessor.js index eb5d1a1..a8ecdb6 100644 --- a/src/datasource-zabbix/dataProcessor.js +++ b/src/datasource-zabbix/dataProcessor.js @@ -2,6 +2,14 @@ import _ from 'lodash'; import * as utils from './utils'; import ts, { groupBy_perf as groupBy } from './timeseries'; +let SUM = ts.SUM; +let COUNT = ts.COUNT; +let AVERAGE = ts.AVERAGE; +let MIN = ts.MIN; +let MAX = ts.MAX; +let MEDIAN = ts.MEDIAN; +let PERCENTILE = ts.PERCENTILE; + let downsampleSeries = ts.downsample; let groupBy_exported = (interval, groupFunc, datapoints) => groupBy(datapoints, interval, groupFunc); let sumSeries = ts.sumSeries; @@ -11,14 +19,7 @@ let scale = (factor, datapoints) => ts.scale_perf(datapoints, factor); let offset = (delta, datapoints) => ts.offset(datapoints, delta); let simpleMovingAverage = (n, datapoints) => ts.simpleMovingAverage(datapoints, n); let expMovingAverage = (a, datapoints) => ts.expMovingAverage(datapoints, a); - -let SUM = ts.SUM; -let COUNT = ts.COUNT; -let AVERAGE = ts.AVERAGE; -let MIN = ts.MIN; -let MAX = ts.MAX; -let MEDIAN = ts.MEDIAN; -let PERCENTILE = ts.PERCENTILE; +let percentile = (interval, n, datapoints) => groupBy(datapoints, interval, _.partial(PERCENTILE, n)); function limit(order, n, orderByFunc, timeseries) { let orderByCallback = aggregationFunctions[orderByFunc]; @@ -120,7 +121,7 @@ function aggregateWrapper(groupByCallback, interval, datapoints) { return groupBy(sortedPoints, interval, groupByCallback); } -function percentile(interval, n, datapoints) { +function percentileAgg(interval, n, datapoints) { const flattenedPoints = ts.flattenDatapoints(datapoints); // groupBy_perf works with sorted series only const sortedPoints = ts.sortByTime(flattenedPoints); @@ -153,10 +154,11 @@ let metricFunctions = { rate: rate, movingAverage: simpleMovingAverage, exponentialMovingAverage: expMovingAverage, + percentile: percentile, transformNull: transformNull, aggregateBy: aggregateByWrapper, // Predefined aggs - percentile: percentile, + percentileAgg: percentileAgg, average: _.partial(aggregateWrapper, AVERAGE), min: _.partial(aggregateWrapper, MIN), max: _.partial(aggregateWrapper, MAX), diff --git a/src/datasource-zabbix/metricFunctions.js b/src/datasource-zabbix/metricFunctions.js index 891e271..150e03a 100644 --- a/src/datasource-zabbix/metricFunctions.js +++ b/src/datasource-zabbix/metricFunctions.js @@ -85,6 +85,16 @@ addFuncDef({ defaultParams: [0.2], }); +addFuncDef({ + name: 'percentile', + category: 'Transform', + params: [ + { name: 'interval', type: 'string' }, + { name: 'percent', type: 'float', options: [25, 50, 75, 90, 95, 99, 99.9] } + ], + defaultParams: ['1m', 95], +}); + addFuncDef({ name: 'removeAboveValue', category: 'Transform', @@ -140,7 +150,7 @@ addFuncDef({ }); addFuncDef({ - name: 'percentile', + name: 'percentileAgg', category: 'Aggregate', params: [ { name: 'interval', type: 'string' }, From 5b211d80a90a8ef170c6f3967afc7444ef0c6f7b Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 15 Jan 2020 11:06:01 +0300 Subject: [PATCH 06/15] docs for percentile and percentileAgg, #868 --- docs/sources/reference/functions.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/sources/reference/functions.md b/docs/sources/reference/functions.md index fe7e580..22622bc 100644 --- a/docs/sources/reference/functions.md +++ b/docs/sources/reference/functions.md @@ -105,6 +105,19 @@ calculates moving average over 60 points (if metric has 1 second resolution it m ``` --- +### _percentile_ +``` +percentile(interval, N) +``` +Takes a series of values and a window size and consolidate all its points fallen in the given _interval_ into one point by Nth percentile. + +Examples: +``` +percentile(1h, 99) +percentile($__range_series, 95) - 95th percentile over all series values +``` +--- + ### _removeAboveValue_ ``` removeAboveValue(N) @@ -159,16 +172,16 @@ This will add metrics together and return the sum at each datapoint. This method --- -### _percentile_ +### _percentileAgg_ ``` -percentile(interval, N) +percentileAgg(interval, N) ``` Takes all timeseries and consolidate all its points fallen in the given _interval_ into one point by Nth percentile. Examples: ``` -percentile(1h, 99) -percentile($__range_series, 95) - 95th percentile over all values +percentileAgg(1h, 99) +percentileAgg($__range_series, 95) - 95th percentile over all values ``` --- From 94c5059fb1d21f481678b9dc275a3533c39e7c71 Mon Sep 17 00:00:00 2001 From: memfiz Date: Fri, 24 Jan 2020 15:39:15 +0200 Subject: [PATCH 07/15] fix event severity change (#872) * fixed panel trigger severity if it is changed in event * fixed panel trigger severity if it is changed in event * fixed lastEvent check * removed a comment * fixed lastEvent check not empty --- src/panel-triggers/components/AlertList/AlertCard.tsx | 10 ++++++++-- src/panel-triggers/components/Problems/Problems.tsx | 8 +++++++- src/panel-triggers/triggers_panel_ctrl.js | 6 +++++- src/panel-triggers/types.ts | 1 + 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/panel-triggers/components/AlertList/AlertCard.tsx b/src/panel-triggers/components/AlertList/AlertCard.tsx index 87eaf9d..495ed20 100644 --- a/src/panel-triggers/components/AlertList/AlertCard.tsx +++ b/src/panel-triggers/components/AlertList/AlertCard.tsx @@ -3,7 +3,7 @@ import classNames from 'classnames'; import _ from 'lodash'; import moment from 'moment'; import { isNewProblem, formatLastChange } from '../../utils'; -import { ProblemsPanelOptions, ZBXTrigger, ZBXTag } from '../../types'; +import { ProblemsPanelOptions, ZBXTrigger, TriggerSeverity, ZBXTag } from '../../types'; import { AckProblemData, Modal } from '.././Modal'; import EventTag from '../EventTag'; import Tooltip from '.././Tooltip/Tooltip'; @@ -59,7 +59,13 @@ export default class AlertCard extends PureComponent 1; const cardClass = classNames('alert-rule-item', 'zbx-trigger-card', { 'zbx-trigger-highlighted': panelOptions.highlightBackground }); const descriptionClass = classNames('alert-rule-item__text', { 'zbx-description--newline': panelOptions.descriptionAtNewLine }); - const severityDesc = _.find(panelOptions.triggerSeverity, s => s.priority === Number(problem.priority)); + + let severityDesc: TriggerSeverity; + severityDesc = _.find(panelOptions.triggerSeverity, s => s.priority === Number(problem.priority)); + if (problem.lastEvent && problem.lastEvent.severity) { + severityDesc = _.find(panelOptions.triggerSeverity, s => s.priority === Number(problem.lastEvent.severity)); + } + const lastchange = formatLastChange(problem.lastchangeUnix, panelOptions.customLastChangeFormat && panelOptions.lastChangeFormat); const age = moment.unix(problem.lastchangeUnix).fromNow(true); diff --git a/src/panel-triggers/components/Problems/Problems.tsx b/src/panel-triggers/components/Problems/Problems.tsx index 627d99b..d603671 100644 --- a/src/panel-triggers/components/Problems/Problems.tsx +++ b/src/panel-triggers/components/Problems/Problems.tsx @@ -179,7 +179,13 @@ export default class ProblemList extends PureComponent, problemSeverityDesc: TriggerSeverity[], markAckEvents?: boolean, ackEventColor?: string) { const problem = props.original; let color: string; - const severityDesc = _.find(problemSeverityDesc, s => s.priority === Number(props.original.priority)); + + let severityDesc: TriggerSeverity; + severityDesc = _.find(problemSeverityDesc, s => s.priority === Number(props.original.priority)); + if (problem.lastEvent && problem.lastEvent.severity) { + severityDesc = _.find(problemSeverityDesc, s => s.priority === Number(problem.lastEvent.severity)); + } + color = severityDesc.color; // Mark acknowledged triggers with different color diff --git a/src/panel-triggers/triggers_panel_ctrl.js b/src/panel-triggers/triggers_panel_ctrl.js index 23c6011..103d918 100644 --- a/src/panel-triggers/triggers_panel_ctrl.js +++ b/src/panel-triggers/triggers_panel_ctrl.js @@ -398,7 +398,11 @@ export class TriggerPanelCtrl extends PanelCtrl { // Filter triggers by severity triggerList = _.filter(triggerList, trigger => { - return this.panel.triggerSeverity[trigger.priority].show; + if (trigger.lastEvent && trigger.lastEvent.severity) { + return this.panel.triggerSeverity[trigger.lastEvent.severity].show; + } else { + return this.panel.triggerSeverity[trigger.priority].show; + } }); return triggerList; diff --git a/src/panel-triggers/types.ts b/src/panel-triggers/types.ts index ffa9e65..26dd38b 100644 --- a/src/panel-triggers/types.ts +++ b/src/panel-triggers/types.ts @@ -140,6 +140,7 @@ export interface ZBXEvent { object?: string; objectid?: string; acknowledged?: string; + severity?: string; hosts?: ZBXHost[]; acknowledges?: ZBXAcknowledge[]; } From 9fd386a6ee5b88414ba246410a76a01632fa1f2e Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 20 Mar 2020 09:26:23 +0300 Subject: [PATCH 08/15] Problems: fix panel rendering in 6.7, fixes #907 --- src/panel-triggers/triggers_panel_ctrl.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/panel-triggers/triggers_panel_ctrl.js b/src/panel-triggers/triggers_panel_ctrl.js index 103d918..e6b03b7 100644 --- a/src/panel-triggers/triggers_panel_ctrl.js +++ b/src/panel-triggers/triggers_panel_ctrl.js @@ -709,7 +709,13 @@ export class TriggerPanelCtrl extends PanelCtrl { } else { problemsReactElem = React.createElement(ProblemList, problemsListProps); } - ReactDOM.render(problemsReactElem, elem.find('.panel-content')[0]); + + const panelContainerElem = elem.find('.panel-content'); + if (panelContainerElem && panelContainerElem.length) { + ReactDOM.render(problemsReactElem, panelContainerElem[0]); + } else { + ReactDOM.render(problemsReactElem, elem[0]); + } } } } From 71d7aa4d57c5fae51faddc181c431ff888a2914e Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 20 Mar 2020 16:25:05 +0300 Subject: [PATCH 09/15] Update change log --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d76c30..a3270fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## Unreleased +## [3.11] - 2020-03-20 +### Added +- Improve variable query editor, [#705](https://github.com/alexanderzobnin/grafana-zabbix/issues/705) +- Transform/percentile function, [#868](https://github.com/alexanderzobnin/grafana-zabbix/issues/868) + +### Fixed +- Problems panel: stopped working in Grafana 6.7.0, [#907](https://github.com/alexanderzobnin/grafana-zabbix/issues/907) +- Problems panel: event severity change, [#870](https://github.com/alexanderzobnin/grafana-zabbix/issues/870) +- Problems panel: color is changed to acknowleged even if there is only message without acknowlegement, [#857](https://github.com/alexanderzobnin/grafana-zabbix/issues/857) +- Percentile function returns incorrect results, [#862](https://github.com/alexanderzobnin/grafana-zabbix/issues/862) ## [3.10.5] - 2019-12-26 ### Added From 4daee5768182db3b0a11b2c929ee8d327917c805 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 20 Mar 2020 16:27:11 +0300 Subject: [PATCH 10/15] Bump version to 3.11.0 --- CHANGELOG.md | 2 +- package.json | 2 +- src/plugin.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3270fa..f65831f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [3.11] - 2020-03-20 +## [3.11.0] - 2020-03-20 ### Added - Improve variable query editor, [#705](https://github.com/alexanderzobnin/grafana-zabbix/issues/705) - Transform/percentile function, [#868](https://github.com/alexanderzobnin/grafana-zabbix/issues/868) diff --git a/package.json b/package.json index 64b90d2..8b8d371 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "grafana-zabbix", "private": false, - "version": "3.10.5", + "version": "3.11.0", "description": "Zabbix plugin for Grafana", "homepage": "http://grafana-zabbix.org", "scripts": { diff --git a/src/plugin.json b/src/plugin.json index 59d75a3..66179ec 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -26,8 +26,8 @@ {"name": "Metric Editor", "path": "img/screenshot-metric_editor.png"}, {"name": "Triggers", "path": "img/screenshot-triggers.png"} ], - "version": "3.10.5", - "updated": "2019-12-26" + "version": "3.11.0", + "updated": "2020-03-20" }, "includes": [ From 58949be25ea7cb888c5293608b56c71b458a8105 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 20 Mar 2020 16:30:12 +0300 Subject: [PATCH 11/15] Change log: fix typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f65831f..8ce1f9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Problems panel: stopped working in Grafana 6.7.0, [#907](https://github.com/alexanderzobnin/grafana-zabbix/issues/907) - Problems panel: event severity change, [#870](https://github.com/alexanderzobnin/grafana-zabbix/issues/870) -- Problems panel: color is changed to acknowleged even if there is only message without acknowlegement, [#857](https://github.com/alexanderzobnin/grafana-zabbix/issues/857) +- Problems panel: color is changed to acknowledged even if there is only message without acknowledgment, [#857](https://github.com/alexanderzobnin/grafana-zabbix/issues/857) - Percentile function returns incorrect results, [#862](https://github.com/alexanderzobnin/grafana-zabbix/issues/862) ## [3.10.5] - 2019-12-26 From dad0fd965deb11d817e7369dab2a0a03f9d13401 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 20 Mar 2020 17:03:49 +0300 Subject: [PATCH 12/15] Migrate backendSrv to getBackendSrv, fix direct DB connection --- package.json | 7 +- .../components/ZabbixInput.tsx | 3 +- src/datasource-zabbix/datasource.js | 4 +- .../specs/datasource.spec.js | 4 +- .../zabbix/connectors/sql/sqlConnector.js | 6 +- .../zabbix_api/zabbixAPIConnector.js | 4 +- .../connectors/zabbix_api/zabbixAPICore.js | 6 +- src/datasource-zabbix/zabbix/zabbix.js | 4 +- src/datasource-zabbix/zabbix/zabbix.test.js | 4 +- .../components/Problems/Problems.tsx | 9 +- src/panel-triggers/utils.ts | 2 +- src/sass/grafana-zabbix.scss | 2 +- webpack/webpack.base.conf.js | 2 +- yarn.lock | 1158 ++++++++++++++--- 14 files changed, 975 insertions(+), 240 deletions(-) diff --git a/package.json b/package.json index 8b8d371..1330dcb 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,9 @@ "@babel/preset-env": "^7.7.7", "@babel/preset-react": "^7.6.3", "@emotion/core": "^10.0.27", - "@grafana/data": "^6.4.2", - "@grafana/ui": "^6.4.2", + "@grafana/data": "^6.7.0", + "@grafana/ui": "^6.7.0", + "@grafana/runtime": "^6.7.0", "@types/classnames": "^2.2.6", "@types/grafana": "github:CorpGlory/types-grafana", "@types/jest": "^23.1.1", @@ -70,7 +71,7 @@ "react": "^16.7.0", "react-dom": "^16.7.0", "react-popper": "^1.3.2", - "react-table": "^6.8.6", + "react-table-6": "^6.8.6", "react-test-renderer": "^16.7.0", "react-transition-group": "^2.5.2", "rst2html": "github:thoward/rst2html#990cb89", diff --git a/src/datasource-zabbix/components/ZabbixInput.tsx b/src/datasource-zabbix/components/ZabbixInput.tsx index 35ae31b..ab9ec72 100644 --- a/src/datasource-zabbix/components/ZabbixInput.tsx +++ b/src/datasource-zabbix/components/ZabbixInput.tsx @@ -1,7 +1,8 @@ import React, { FC } from 'react'; import { css, cx } from 'emotion'; -import { Themeable, withTheme, Input, GrafanaTheme, EventsWithValidation, ValidationEvents } from '@grafana/ui'; +import { Themeable, withTheme, Input, EventsWithValidation, ValidationEvents } from '@grafana/ui'; import { isRegex, variableRegex } from '../utils'; +import { GrafanaTheme } from '@grafana/data'; const variablePattern = RegExp(`^${variableRegex.source}`); diff --git a/src/datasource-zabbix/datasource.js b/src/datasource-zabbix/datasource.js index d89e68c..f30e45a 100644 --- a/src/datasource-zabbix/datasource.js +++ b/src/datasource-zabbix/datasource.js @@ -16,7 +16,7 @@ const DEFAULT_ZABBIX_VERSION = 3; export class ZabbixDatasource { /** @ngInject */ - constructor(instanceSettings, templateSrv, backendSrv, datasourceSrv, zabbixAlertingSrv) { + constructor(instanceSettings, templateSrv, datasourceSrv, zabbixAlertingSrv) { this.templateSrv = templateSrv; this.zabbixAlertingSrv = zabbixAlertingSrv; @@ -75,7 +75,7 @@ export class ZabbixDatasource { dbConnectionRetentionPolicy: this.dbConnectionRetentionPolicy, }; - this.zabbix = new Zabbix(zabbixOptions, datasourceSrv, backendSrv); + this.zabbix = new Zabbix(zabbixOptions, datasourceSrv); } //////////////////////// diff --git a/src/datasource-zabbix/specs/datasource.spec.js b/src/datasource-zabbix/specs/datasource.spec.js index a51a06b..896e05f 100644 --- a/src/datasource-zabbix/specs/datasource.spec.js +++ b/src/datasource-zabbix/specs/datasource.spec.js @@ -21,11 +21,11 @@ describe('ZabbixDatasource', () => { }; ctx.templateSrv = mocks.templateSrvMock; - ctx.backendSrv = mocks.backendSrvMock; + // ctx.backendSrv = mocks.backendSrvMock; ctx.datasourceSrv = mocks.datasourceSrvMock; ctx.zabbixAlertingSrv = mocks.zabbixAlertingSrvMock; - ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.backendSrv, ctx.datasourceSrv, ctx.zabbixAlertingSrv); + ctx.ds = new Datasource(ctx.instanceSettings, ctx.templateSrv, ctx.datasourceSrv, ctx.zabbixAlertingSrv); }); describe('When querying data', () => { diff --git a/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js b/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js index 0ec5dc6..3377ec1 100644 --- a/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js +++ b/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js @@ -1,4 +1,5 @@ import _ from 'lodash'; +import { getBackendSrv } from '@grafana/runtime'; import { compactQuery } from '../../../utils'; import mysql from './mysql'; import postgres from './postgres'; @@ -17,8 +18,7 @@ export class SQLConnector extends DBConnector { this.sqlDialect = null; super.loadDBDataSource() - .then(ds => { - this.backendSrv = ds.backendSrv; + .then(() => { this.loadSQLDialect(); }); } @@ -96,7 +96,7 @@ export class SQLConnector extends DBConnector { maxDataPoints: this.limit }; - return this.backendSrv.datasourceRequest({ + return getBackendSrv().datasourceRequest({ url: '/api/tsdb/query', method: 'POST', data: { diff --git a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js index f3a9a9b..57a2a84 100644 --- a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js +++ b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPIConnector.js @@ -10,7 +10,7 @@ import { ZBX_ACK_ACTION_NONE, ZBX_ACK_ACTION_ACK, ZBX_ACK_ACTION_ADD_MESSAGE, MI * Wraps API calls and provides high-level methods. */ export class ZabbixAPIConnector { - constructor(api_url, username, password, version, basicAuth, withCredentials, backendSrv) { + constructor(api_url, username, password, version, basicAuth, withCredentials) { this.url = api_url; this.username = username; this.password = password; @@ -26,7 +26,7 @@ export class ZabbixAPIConnector { this.loginErrorCount = 0; this.maxLoginAttempts = 3; - this.zabbixAPICore = new ZabbixAPICore(backendSrv); + this.zabbixAPICore = new ZabbixAPICore(); this.getTrend = this.getTrend_ZBXNEXT1193; //getTrend = getTrend_30; diff --git a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js index 97b6c7b..f8b3aa9 100644 --- a/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js +++ b/src/datasource-zabbix/zabbix/connectors/zabbix_api/zabbixAPICore.js @@ -1,12 +1,12 @@ /** * General Zabbix API methods */ +import { getBackendSrv } from '@grafana/runtime'; export class ZabbixAPICore { /** @ngInject */ - constructor(backendSrv) { - this.backendSrv = backendSrv; + constructor() { } /** @@ -50,7 +50,7 @@ export class ZabbixAPICore { } datasourceRequest(requestOptions) { - return this.backendSrv.datasourceRequest(requestOptions) + return getBackendSrv().datasourceRequest(requestOptions) .then((response) => { if (!response.data) { return Promise.reject(new ZabbixAPIError({data: "General Error, no data"})); diff --git a/src/datasource-zabbix/zabbix/zabbix.js b/src/datasource-zabbix/zabbix/zabbix.js index 74139a4..39a4f80 100644 --- a/src/datasource-zabbix/zabbix/zabbix.js +++ b/src/datasource-zabbix/zabbix/zabbix.js @@ -25,7 +25,7 @@ const REQUESTS_TO_BIND = [ ]; export class Zabbix { - constructor(options, datasourceSrv, backendSrv) { + constructor(options, datasourceSrv) { let { url, username, @@ -49,7 +49,7 @@ export class Zabbix { }; this.cachingProxy = new CachingProxy(cacheOptions); - this.zabbixAPI = new ZabbixAPIConnector(url, username, password, zabbixVersion, basicAuth, withCredentials, backendSrv); + this.zabbixAPI = new ZabbixAPIConnector(url, username, password, zabbixVersion, basicAuth, withCredentials); this.proxyfyRequests(); this.cacheRequests(); diff --git a/src/datasource-zabbix/zabbix/zabbix.test.js b/src/datasource-zabbix/zabbix/zabbix.test.js index 44b27c1..71c74e3 100644 --- a/src/datasource-zabbix/zabbix/zabbix.test.js +++ b/src/datasource-zabbix/zabbix/zabbix.test.js @@ -13,9 +13,9 @@ describe('Zabbix', () => { beforeEach(() => { ctx.options = options; - ctx.backendSrv = mocks.backendSrvMock; + // ctx.backendSrv = mocks.backendSrvMock; ctx.datasourceSrv = mocks.datasourceSrvMock; - zabbix = new Zabbix(ctx.options, ctx.backendSrvMock, ctx.datasourceSrvMock); + zabbix = new Zabbix(ctx.options, ctx.datasourceSrvMock); }); describe('When querying proxies', () => { diff --git a/src/panel-triggers/components/Problems/Problems.tsx b/src/panel-triggers/components/Problems/Problems.tsx index d603671..557a40b 100644 --- a/src/panel-triggers/components/Problems/Problems.tsx +++ b/src/panel-triggers/components/Problems/Problems.tsx @@ -1,5 +1,5 @@ import React, { PureComponent } from 'react'; -import ReactTable from 'react-table'; +import ReactTable from 'react-table-6'; import classNames from 'classnames'; import _ from 'lodash'; import moment from 'moment'; @@ -18,8 +18,8 @@ export interface ProblemListProps { timeRange?: GFTimeRange; pageSize?: number; fontSize?: number; - getProblemEvents: (problem: ZBXTrigger) => ZBXEvent[]; - getProblemAlerts: (problem: ZBXTrigger) => ZBXAlert[]; + getProblemEvents: (problem: ZBXTrigger) => Promise; + getProblemAlerts: (problem: ZBXTrigger) => Promise; onProblemAck?: (problem: ZBXTrigger, data: AckProblemData) => void; onTagClick?: (tag: ZBXTag, datasource: string, ctrlKey?: boolean, shiftKey?: boolean) => void; onPageSizeChange?: (pageSize: number, pageIndex: number) => void; @@ -163,6 +163,7 @@ export default class ProblemList extends PureComponent } expanded={this.getExpandedPage(this.state.page)} @@ -179,7 +180,7 @@ export default class ProblemList extends PureComponent, problemSeverityDesc: TriggerSeverity[], markAckEvents?: boolean, ackEventColor?: string) { const problem = props.original; let color: string; - + let severityDesc: TriggerSeverity; severityDesc = _.find(problemSeverityDesc, s => s.priority === Number(props.original.priority)); if (problem.lastEvent && problem.lastEvent.severity) { diff --git a/src/panel-triggers/utils.ts b/src/panel-triggers/utils.ts index d9e2124..6976c3a 100644 --- a/src/panel-triggers/utils.ts +++ b/src/panel-triggers/utils.ts @@ -1,6 +1,6 @@ import _ from 'lodash'; import moment from 'moment'; -import { DataQuery } from '@grafana/ui/'; +import { DataQuery } from '@grafana/data'; import * as utils from '../datasource-zabbix/utils'; import { ZBXTrigger } from './types'; diff --git a/src/sass/grafana-zabbix.scss b/src/sass/grafana-zabbix.scss index 708c9fa..58c9da1 100644 --- a/src/sass/grafana-zabbix.scss +++ b/src/sass/grafana-zabbix.scss @@ -1,5 +1,5 @@ // DEPENDENCIES -@import '../../node_modules/react-table/react-table.css'; +@import '../../node_modules/react-table-6/react-table.css'; @import 'variables'; @import 'panel-triggers'; diff --git a/webpack/webpack.base.conf.js b/webpack/webpack.base.conf.js index ded1c67..9526fd9 100644 --- a/webpack/webpack.base.conf.js +++ b/webpack/webpack.base.conf.js @@ -28,7 +28,7 @@ module.exports = { externals: [ // remove the line below if you don't want to use builtin versions 'jquery', 'lodash', 'moment', 'angular', 'emotion', - 'react', 'react-dom', '@grafana/ui', '@grafana/data', + 'react', 'react-dom', '@grafana/ui', '@grafana/data', '@grafana/runtime', function (context, request, callback) { var prefix = 'grafana/'; if (request.indexOf(prefix) === 0) { diff --git a/yarn.lock b/yarn.lock index e626092..5afc154 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,84 @@ # yarn lockfile v1 +"@antv/adjust@~0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@antv/adjust/-/adjust-0.1.1.tgz#e263ab0e1a1941a648842fc086cf65a7e3b75e98" + integrity sha512-9FaMOyBlM4AgoRL0b5o0VhEKAYkexBNUrxV8XmpHU/9NBPJONBOB/NZUlQDqxtLItrt91tCfbAuMQmF529UX2Q== + dependencies: + "@antv/util" "~1.3.1" + +"@antv/attr@~0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@antv/attr/-/attr-0.1.2.tgz#2eeb122fcaaf851a2d8749abc7c60519d3f77e37" + integrity sha512-QXjP+T2I+pJQcwZx1oCA4tipG43vgeCeKcGGKahlcxb71OBAzjJZm1QbF4frKXcnOqRkxVXtCr70X9TRair3Ew== + dependencies: + "@antv/util" "~1.3.1" + +"@antv/component@~0.3.3": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@antv/component/-/component-0.3.8.tgz#677ecd3b5026907d4cb70d9082951d7c3c2b5434" + integrity sha512-1WN3FzeRyJ1jraS/2og5gnm2ragnwtRMVQMiLolztWaUgC++F/B1CcSrPYfV1WvYrfuwbpX/QQxo3HL9aS+YJA== + dependencies: + "@antv/attr" "~0.1.2" + "@antv/g" "~3.3.5" + "@antv/util" "~1.3.1" + wolfy87-eventemitter "~5.1.0" + +"@antv/coord@~0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@antv/coord/-/coord-0.1.0.tgz#48a80ae36d07552f96657e7f8095227c63f0c0a9" + integrity sha512-W1R8h3Jfb3AfMBVfCreFPMVetgEYuwHBIGn0+d3EgYXe2ckOF8XWjkpGF1fZhOMHREMr+Gt27NGiQh8yBdLUgg== + dependencies: + "@antv/util" "~1.3.1" + +"@antv/g2@3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-3.5.13.tgz#2b0365406e89855e6af34cd374bcb307a0edad42" + integrity sha512-Ok1hA4GyXWrYEAfDo54um4XCz2QNgwe4i45xNsVKHx+HXY0lwzkLp+LLa0QoFVW3gcxrBCrsGww3rp6GafEJGg== + dependencies: + "@antv/adjust" "~0.1.0" + "@antv/attr" "~0.1.2" + "@antv/component" "~0.3.3" + "@antv/coord" "~0.1.0" + "@antv/g" "~3.3.6" + "@antv/scale" "~0.1.1" + "@antv/util" "~1.3.1" + venn.js "~0.2.20" + wolfy87-eventemitter "~5.1.0" + +"@antv/g@~3.3.5", "@antv/g@~3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@antv/g/-/g-3.3.6.tgz#11fed9ddc9ed4e5a2aa244b7c8abb982a003f201" + integrity sha512-2GtyTz++s0BbN6s0ZL2/nrqGYCkd52pVoNH92YkrTdTOvpO6Z4DNoo6jGVgZdPX6Nzwli6yduC8MinVAhE8X6g== + dependencies: + "@antv/gl-matrix" "~2.7.1" + "@antv/util" "~1.3.1" + d3-ease "~1.0.3" + d3-interpolate "~1.1.5" + d3-timer "~1.0.6" + wolfy87-eventemitter "~5.1.0" + +"@antv/gl-matrix@^2.7.1", "@antv/gl-matrix@~2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@antv/gl-matrix/-/gl-matrix-2.7.1.tgz#acb8e37f7ab3df01345aba4372d7942be42eba14" + integrity sha512-oOWcVNlpELIKi9x+Mm1Vwbz8pXfkbJKykoCIOJ/dNK79hSIANbpXJ5d3Rra9/wZqK6MC961B7sybFhPlLraT3Q== + +"@antv/scale@~0.1.1": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@antv/scale/-/scale-0.1.5.tgz#243266e8b9047cf64b2fdfc40f9834cf0846496e" + integrity sha512-7RAu4iH5+Hk21h6+aBMiDTfmLf4IibK2SWjx/+E4f4AXRpqucO+8u7IbZdFkakAWxvqhJtN3oePJuTKqOMcmlg== + dependencies: + "@antv/util" "~1.3.1" + fecha "~2.3.3" + +"@antv/util@~1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@antv/util/-/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd" + integrity sha512-cbUta0hIJrKEaW3eKoGarz3Ita+9qUPF2YzTj8A6wds/nNiy20G26ztIWHU+5ThLc13B1n5Ik52LbaCaeg9enA== + dependencies: + "@antv/gl-matrix" "^2.7.1" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" @@ -696,6 +774,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.4.4", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.6": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" + integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.5.5": version "7.7.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.7.tgz#194769ca8d6d7790ec23605af9ee3e42a0aa79cf" @@ -753,18 +838,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@emotion/babel-utils@^0.6.4": - version "0.6.10" - resolved "https://registry.yarnpkg.com/@emotion/babel-utils/-/babel-utils-0.6.10.tgz#83dbf3dfa933fae9fc566e54fbb45f14674c6ccc" - integrity sha512-/fnkM/LTEp3jKe++T0KyTszVGWNKPNOUJfjNKLO17BzQ6QPxgbg3whayom1Qr2oLFH3V92tDymU+dT5q676uow== - dependencies: - "@emotion/hash" "^0.6.6" - "@emotion/memoize" "^0.6.6" - "@emotion/serialize" "^0.9.1" - convert-source-map "^1.5.1" - find-root "^1.1.0" - source-map "^0.7.2" - "@emotion/cache@^10.0.27": version "10.0.27" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.27.tgz#7895db204e2c1a991ae33d51262a3a44f6737303" @@ -775,6 +848,16 @@ "@emotion/utils" "0.11.3" "@emotion/weak-memoize" "0.2.5" +"@emotion/cache@^10.0.9": + version "10.0.29" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" + integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== + dependencies: + "@emotion/sheet" "0.9.4" + "@emotion/stylis" "0.8.5" + "@emotion/utils" "0.11.3" + "@emotion/weak-memoize" "0.2.5" + "@emotion/core@^10.0.27": version "10.0.27" resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.27.tgz#7c3f78be681ab2273f3bf11ca3e2edc4a9dd1fdc" @@ -787,7 +870,19 @@ "@emotion/sheet" "0.9.4" "@emotion/utils" "0.11.3" -"@emotion/css@^10.0.27": +"@emotion/core@^10.0.9": + version "10.0.28" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.28.tgz#bb65af7262a234593a9e952c041d0f1c9b9bef3d" + integrity sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/cache" "^10.0.27" + "@emotion/css" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" + +"@emotion/css@^10.0.27", "@emotion/css@^10.0.9": version "10.0.27" resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== @@ -801,21 +896,11 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831" integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A== -"@emotion/hash@^0.6.2", "@emotion/hash@^0.6.6": - version "0.6.6" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.6.6.tgz#62266c5f0eac6941fece302abad69f2ee7e25e44" - integrity sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ== - "@emotion/memoize@0.7.4": version "0.7.4" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@emotion/memoize@^0.6.1", "@emotion/memoize@^0.6.6": - version "0.6.6" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.6.6.tgz#004b98298d04c7ca3b4f50ca2035d4f60d2eed1b" - integrity sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ== - "@emotion/serialize@^0.11.15": version "0.11.15" resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.15.tgz#9a0f5873fb458d87d4f23e034413c12ed60a705a" @@ -827,16 +912,6 @@ "@emotion/utils" "0.11.3" csstype "^2.5.7" -"@emotion/serialize@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.9.1.tgz#a494982a6920730dba6303eb018220a2b629c145" - integrity sha512-zTuAFtyPvCctHBEL8KZ5lJuwBanGSutFEncqLn/m9T1a6a93smBStK+bZzcNPgj4QS8Rkw9VTwJGhRIUVO8zsQ== - dependencies: - "@emotion/hash" "^0.6.6" - "@emotion/memoize" "^0.6.6" - "@emotion/unitless" "^0.6.7" - "@emotion/utils" "^0.8.2" - "@emotion/sheet@0.9.4": version "0.9.4" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" @@ -847,40 +922,39 @@ resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== -"@emotion/stylis@^0.7.0": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.7.1.tgz#50f63225e712d99e2b2b39c19c70fff023793ca5" - integrity sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ== - "@emotion/unitless@0.7.5": version "0.7.5" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/unitless@^0.6.2", "@emotion/unitless@^0.6.7": - version "0.6.7" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.6.7.tgz#53e9f1892f725b194d5e6a1684a7b394df592397" - integrity sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg== - "@emotion/utils@0.11.3": version "0.11.3" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== -"@emotion/utils@^0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.8.2.tgz#576ff7fb1230185b619a75d258cbc98f0867a8dc" - integrity sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw== - "@emotion/weak-memoize@0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@grafana/data@6.4.2", "@grafana/data@^6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@grafana/data/-/data-6.4.2.tgz#1ce4687757c609a6b12b39b04cd37e20e08fee8f" - integrity sha512-Vb8IBl1VtX+jAMOzVb6s1klPWpMwWSdrPrG0CSoI62F/Hs5Cun3nOWVjDEkfPnvMMycEuD1nMBePK/gM3W53Iw== +"@grafana/data@6.7.0", "@grafana/data@^6.7.0": + version "6.7.0" + resolved "https://registry.yarnpkg.com/@grafana/data/-/data-6.7.0.tgz#c413ea0f4ec623a3a5e6a03eb14ba9209a2983fc" + integrity sha512-qhEtiLGNVvFqazjihkUiNRVQzhgxXNeQEIk4cLCxDaNPcocrIWtsXcTpsKCABzseKfRuH4gm+mPlk11FF7QnqQ== + dependencies: + apache-arrow "0.15.1" + lodash "4.17.15" + rxjs "6.5.4" + +"@grafana/runtime@^6.7.0": + version "6.7.0" + resolved "https://registry.yarnpkg.com/@grafana/runtime/-/runtime-6.7.0.tgz#5b6f6233b5186fcfe2aaac8911b6944d2665366f" + integrity sha512-lE1spLKqalIGysqzIJdknSwhUORciYxIWaTNxu9InVnuH6nlw8sTY9pQ49C5sffzid8DLP4ihH4B3KUVlB9c9A== + dependencies: + "@grafana/data" "6.7.0" + "@grafana/ui" "6.7.0" + systemjs "0.20.19" + systemjs-plugin-css "0.1.37" "@grafana/slate-react@0.22.9-grafana": version "0.22.9-grafana" @@ -904,33 +978,50 @@ tiny-invariant "^1.0.1" tiny-warning "^0.0.3" -"@grafana/ui@^6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-6.4.2.tgz#bd1550798e4e959edf7e72efce9fe12beedd7adb" - integrity sha512-O1Ux23D1mmRNsWlmrMkIsqOX/FaBIQ6n1jVySvFdf7Bsy51DHjf7m76RXs++LcBjKgJOJeCDZeRyNV67rYVHzw== +"@grafana/tsconfig@^1.0.0-rc1": + version "1.0.0-rc1" + resolved "https://registry.yarnpkg.com/@grafana/tsconfig/-/tsconfig-1.0.0-rc1.tgz#d07ea16755a50cae21000113f30546b61647a200" + integrity sha512-nucKPGyzlSKYSiJk5RA8GzMdVWhdYNdF+Hh65AXxjD9PlY69JKr5wANj8bVdQboag6dgg0BFKqgKPyY+YtV4Iw== + +"@grafana/ui@6.7.0", "@grafana/ui@^6.7.0": + version "6.7.0" + resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-6.7.0.tgz#22ab8c242814591ddcb6f4ba22a7587e2f4b96ab" + integrity sha512-y1NrMYH24VTM5Tg8Lm3PMM99i9/7MaOJSDjzrWUaUxdljzsDpaN7T8qUvr9pLwP+N5yGvS7A7ZMZ943ihjDfgg== dependencies: - "@grafana/data" "6.4.2" + "@emotion/core" "^10.0.27" + "@grafana/data" "6.7.0" "@grafana/slate-react" "0.22.9-grafana" - "@torkelo/react-select" "2.1.1" + "@grafana/tsconfig" "^1.0.0-rc1" + "@torkelo/react-select" "3.0.8" "@types/react-color" "2.17.0" + "@types/react-select" "3.0.8" + "@types/react-table" "7.0.2" + "@types/slate" "0.47.1" + "@types/slate-react" "0.22.5" + bizcharts "^3.5.5" classnames "2.2.6" - d3 "5.9.1" + d3 "5.15.0" + emotion "10.0.27" immutable "3.8.2" jquery "3.4.1" lodash "4.17.15" moment "2.24.0" papaparse "4.6.3" + rc-cascader "0.17.5" + rc-drawer "3.0.2" + rc-slider "8.7.1" rc-time-picker "^3.7.2" - react "16.8.6" - react-calendar "2.18.1" + react "16.12.0" + react-calendar "2.19.2" react-color "2.17.0" react-custom-scrollbars "4.2.1" - react-dom "16.8.6" + react-dom "16.12.0" react-highlight-words "0.11.0" + react-hook-form "4.5.3" react-popper "1.3.3" react-storybook-addon-props-combinations "1.1.0" + react-table "7.0.0-rc.15" react-transition-group "2.6.1" - react-virtualized "9.21.0" slate "0.47.8" tinycolor2 "1.4.1" @@ -1087,18 +1178,19 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@torkelo/react-select@2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@torkelo/react-select/-/react-select-2.1.1.tgz#0ca7027b4429816178df81e33ad0894699e262f1" - integrity sha512-dt+S8Myn+1Wo/UJ/kQJzDa7ztd7dpL4ueT0eMFqsGRdvMobl9xathBUZu5YMNpz7byFltrYJaPMotnPHd13rtg== +"@torkelo/react-select@3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@torkelo/react-select/-/react-select-3.0.8.tgz#04bfc877118af425f97eac2b471b66705484ee4a" + integrity sha512-becmEGnaOQpUcZS7kjQLaxjY0WKJcFFvAOTWIiU1XfwBV1sdCSgYFGWT+QhkCdRlP2Ux5U4cKhTUsWSeI9FsIA== dependencies: - classnames "^2.2.5" - emotion "^9.1.2" - memoize-one "^4.0.0" + "@babel/runtime" "^7.4.4" + "@emotion/cache" "^10.0.9" + "@emotion/core" "^10.0.9" + "@emotion/css" "^10.0.9" + memoize-one "^5.0.0" prop-types "^15.6.0" - raf "^3.4.0" - react-input-autosize "^2.2.1" - react-transition-group "^2.2.1" + react-input-autosize "^2.2.2" + react-transition-group "^4.3.0" "@types/babel__core@^7.1.0": version "7.1.3" @@ -1138,6 +1230,11 @@ resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.6.tgz#dbe8a666156d556ed018e15a4c65f08937c3f628" integrity sha512-XHcYvVdbtAxVstjKxuULYqYaWIzHR15yr1pZj4fnGChuBVJlIAp9StJna0ZJNSgxPh4Nac2FL4JM3M11Tm6fqQ== +"@types/flatbuffers@^1.9.1": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@types/flatbuffers/-/flatbuffers-1.10.0.tgz#aa74e30ffdc86445f2f060e1808fc9d56b5603ba" + integrity sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA== + "@types/grafana@github:CorpGlory/types-grafana": version "4.6.3" resolved "https://codeload.github.com/CorpGlory/types-grafana/tar.gz/2ce6e54491a247b9dbfe6b809e43daf2002e8260" @@ -1191,6 +1288,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.2.tgz#f0ab8dced5cd6c56b26765e1c0d9e4fdcc9f2a00" integrity sha512-pwZnkVyCGJ3LsQ0/3flQK5lCFao4esIzwUVzzk5NvL9vnkEyDhNf4fhHzUMHvyr56gNZywWTS2MR0euabMSz4A== +"@types/node@^12.0.4": + version "12.12.30" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.30.tgz#3501e6f09b954de9c404671cefdbcc5d9d7c45f6" + integrity sha512-sz9MF/zk6qVr3pAnM0BSQvYIBK44tS75QC5N+VbWSE4DjCV/pJ+UzCW/F+vVnl7TkOPcuwQureKNtSSwjBTaMg== + "@types/prop-types@*": version "15.5.6" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.6.tgz#9c03d3fed70a8d517c191b7734da2879b50ca26c" @@ -1203,6 +1305,13 @@ dependencies: "@types/react" "*" +"@types/react-dom@*": + version "16.9.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.5.tgz#5de610b04a35d07ffd8f44edad93a71032d9aaa7" + integrity sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg== + dependencies: + "@types/react" "*" + "@types/react-dom@^16.0.11": version "16.0.11" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.11.tgz#bd10ccb0d9260343f4b9a49d4f7a8330a5c1f081" @@ -1210,6 +1319,29 @@ dependencies: "@types/react" "*" +"@types/react-select@3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.8.tgz#b824a12d438dd493c30ffff49a805f797602a837" + integrity sha512-0763TXYZc8bTiHM+DUnWoy9Rg5mk6PxYWBrEe6Fkjgc0Kv0r1RqjZk9/BrK4wdM0RNjYjixlFPnUhOJb76sMGg== + dependencies: + "@types/react" "*" + "@types/react-dom" "*" + "@types/react-transition-group" "*" + +"@types/react-table@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/react-table/-/react-table-7.0.2.tgz#184de5ad5a7c5aced08b49812002a4d2e8918cc0" + integrity sha512-sxvjV0JCk/ijCzENejXth99cFMnmucATaC31gz1bMk8iQwUDE2VYaw2QQTcDrzBxzastBQGdcLpcFIN61RvgIA== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@*": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.4.tgz#c7416225987ccdb719262766c1483da8f826838d" + integrity sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA== + dependencies: + "@types/react" "*" + "@types/react-transition-group@^2.0.15": version "2.0.15" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.0.15.tgz#e5ee3fe558832e141cc6041bdd54caea7b787af8" @@ -1238,11 +1370,41 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== +"@types/slate-react@0.22.5": + version "0.22.5" + resolved "https://registry.yarnpkg.com/@types/slate-react/-/slate-react-0.22.5.tgz#a10796758aa6b3133e1c777959facbf8806959f7" + integrity sha512-WKJic5LlNRNUCnD6lEdlOZCcXWoDN8Ais2CmwVMn8pdt5Kh8hJsTYhXawNxOShPIOLVB+G+aVZNAXAAubEOpaw== + dependencies: + "@types/react" "*" + "@types/slate" "*" + immutable "^3.8.2" + +"@types/slate@*": + version "0.47.5" + resolved "https://registry.yarnpkg.com/@types/slate/-/slate-0.47.5.tgz#9e6bc71ef06c0e00c9f895eeebb7c7b51be43556" + integrity sha512-l1BkMvYKEY0XrWbScoPurgJQqmncLipxNXqNv/Tvl6X5Vhut+ucE+Wey36Tu2LcUsMzLaQ4WUoO1DcOLZR7kUA== + dependencies: + "@types/react" "*" + immutable "^3.8.2" + +"@types/slate@0.47.1": + version "0.47.1" + resolved "https://registry.yarnpkg.com/@types/slate/-/slate-0.47.1.tgz#6c66f82df085c764039eea2229be763f7e1906fd" + integrity sha512-2ZlnWI6/RYMXxeGFIeZtvmaXAeYAJh4ZVumziqVl77/liNEi9hOwkUTU2zFu+j/z21v385I2WVPl8sgadxfzXg== + dependencies: + "@types/react" "*" + immutable "^3.8.2" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/text-encoding-utf-8@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.1.tgz#908d884af1114e5d8df47597b1e04f833383d23d" + integrity sha512-GpIEYaS+yNfYqpowLLziiY42pyaL+lThd/wMh6tTubaKuG4IRkXqqyxK7Nddn3BvpUg2+go3Gv/jbXvAFMRjiQ== + "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -1505,6 +1667,15 @@ ajv@^6.1.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + alter@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd" @@ -1567,6 +1738,22 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +apache-arrow@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/apache-arrow/-/apache-arrow-0.15.1.tgz#136c03e18c3fa2617b41999608e7e685b0966147" + integrity sha512-3H+sC789nWn8JDnMwfd2j19NJ4gMcdtbpp2Haa22wBoDGUbbA5FgD2OqfE9Mr4yPlJZFWVJDw7C1hgJo2UolxA== + dependencies: + "@types/flatbuffers" "^1.9.1" + "@types/node" "^12.0.4" + "@types/text-encoding-utf-8" "^1.0.1" + command-line-args "5.0.2" + command-line-usage "5.0.5" + flatbuffers "1.11.0" + json-bignum "^0.0.3" + pad-left "^2.1.0" + text-encoding-utf-8 "^1.0.2" + tslib "^1.9.3" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1587,6 +1774,14 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argv-tools@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/argv-tools/-/argv-tools-0.1.2.tgz#fc4918a70775b8cc5f8296fa0cfea137bd8a8229" + integrity sha512-wxqoymY0BEu9NblZVQiOTOAiJUjPhaa/kbNMjC2h6bnrmUSgnxKgWJo3lzXvi3bHJRwXyqK/dHzMlZVRT89Cxg== + dependencies: + array-back "^2.0.0" + find-replace "^2.0.1" + argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" @@ -1607,6 +1802,13 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-back@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" + integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw== + dependencies: + typical "^2.6.1" + array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" @@ -1637,6 +1839,11 @@ array-slice@^1.0.0: resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -1845,24 +2052,6 @@ babel-plugin-emotion@^10.0.27: find-root "^1.1.0" source-map "^0.5.7" -babel-plugin-emotion@^9.2.11: - version "9.2.11" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz#319c005a9ee1d15bb447f59fe504c35fd5807728" - integrity sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@emotion/babel-utils" "^0.6.4" - "@emotion/hash" "^0.6.2" - "@emotion/memoize" "^0.6.1" - "@emotion/stylis" "^0.7.0" - babel-plugin-macros "^2.0.0" - babel-plugin-syntax-jsx "^6.18.0" - convert-source-map "^1.5.0" - find-root "^1.1.0" - mkdirp "^0.5.1" - source-map "^0.5.7" - touch "^2.0.1" - babel-plugin-istanbul@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" @@ -2049,6 +2238,19 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bizcharts@^3.5.5: + version "3.5.8" + resolved "https://registry.yarnpkg.com/bizcharts/-/bizcharts-3.5.8.tgz#50abcb4960891aada6ca35318af791dd68d85825" + integrity sha512-s/Nt66HLQXD8oyN8yE26inh5ZGkoIr1eFE+/2TBln6lpyATm51LrqCXJPOTgOSyEp3dSNVZ7rOFCKFMMVcdOwA== + dependencies: + "@antv/g2" "3.5.13" + "@babel/runtime" "^7.7.6" + invariant "^2.2.2" + lodash.debounce "^4.0.8" + prop-types "^15.6.0" + resize-observer-polyfill "^1.5.1" + warning "^3.0.0" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -2299,6 +2501,11 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -2336,6 +2543,14 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2429,7 +2644,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@2.2.6, classnames@2.x, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6: +classnames@2.2.6, classnames@2.x, classnames@^2.2.5, classnames@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== @@ -2463,6 +2678,15 @@ cli@~1.0.0: exit "0.1.2" glob "^7.1.1" +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -2568,6 +2792,27 @@ combined-stream@1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +command-line-args@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.0.2.tgz#c4e56b016636af1323cf485aa25c3cb203dfbbe4" + integrity sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA== + dependencies: + argv-tools "^0.1.1" + array-back "^2.0.0" + find-replace "^2.0.1" + lodash.camelcase "^4.3.0" + typical "^2.6.1" + +command-line-usage@5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-5.0.5.tgz#5f25933ffe6dedd983c635d38a21d7e623fda357" + integrity sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA== + dependencies: + array-back "^2.0.0" + chalk "^2.4.1" + table-layout "^0.4.3" + typical "^2.6.1" + commander@2: version "2.20.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.1.tgz#3863ce3ca92d0831dcf2a102f5fb4b5926afd0f9" @@ -2666,7 +2911,12 @@ content-type-parser@^1.0.1: resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" integrity sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ== -convert-source-map@^1.4.0, convert-source-map@^1.5.1: +contour_plot@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/contour_plot/-/contour_plot-0.0.1.tgz#475870f032b8e338412aa5fc507880f0bf495c77" + integrity sha1-R1hw8DK44zhBKqX8UHiA8L9JXHc= + +convert-source-map@^1.4.0: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" integrity sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU= @@ -2771,18 +3021,15 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-emotion@^9.2.12: - version "9.2.12" - resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-9.2.12.tgz#0fc8e7f92c4f8bb924b0fef6781f66b1d07cb26f" - integrity sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA== +create-emotion@^10.0.27: + version "10.0.27" + resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503" + integrity sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg== dependencies: - "@emotion/hash" "^0.6.2" - "@emotion/memoize" "^0.6.1" - "@emotion/stylis" "^0.7.0" - "@emotion/unitless" "^0.6.2" - csstype "^2.5.2" - stylis "^3.5.0" - stylis-rule-sheet "^0.0.10" + "@emotion/cache" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" @@ -2905,16 +3152,16 @@ csstype@^2.2.0: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff" integrity sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw== -csstype@^2.5.2: - version "2.6.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" - integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== - csstype@^2.5.7: version "2.6.8" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431" integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA== +csstype@^2.6.7: + version "2.6.9" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" + integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== + cst@^0.4.3: version "0.4.10" resolved "https://registry.yarnpkg.com/cst/-/cst-0.4.10.tgz#9c05c825290a762f0a85c0aabb8c0fe035ae8516" @@ -3014,6 +3261,11 @@ d3-ease@1: resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb" integrity sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ== +d3-ease@~1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" + integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== + d3-fetch@1: version "1.1.2" resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.1.2.tgz#957c8fbc6d4480599ba191b1b2518bf86b3e1be2" @@ -3055,6 +3307,13 @@ d3-interpolate@1: dependencies: d3-color "1" +d3-interpolate@~1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" + integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A== + dependencies: + d3-color "1" + d3-path@1: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.8.tgz#4a0606a794d104513ec4a8af43525f374b278719" @@ -3100,6 +3359,11 @@ d3-selection@1, d3-selection@^1.1.0: resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.0.tgz#ab9ac1e664cf967ebf1b479cc07e28ce9908c474" integrity sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg== +d3-selection@^1.0.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98" + integrity sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA== + d3-shape@1: version "1.3.5" resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.5.tgz#e81aea5940f59f0a79cfccac012232a8987c6033" @@ -3124,6 +3388,11 @@ d3-timer@1: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba" integrity sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg== +d3-timer@~1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" + integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== + d3-transition@1: version "1.2.0" resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.2.0.tgz#f538c0e21b2aa1f05f3e965f8567e81284b3b2b8" @@ -3136,6 +3405,18 @@ d3-transition@1: d3-selection "^1.1.0" d3-timer "1" +d3-transition@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398" + integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA== + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "^1.1.0" + d3-timer "1" + d3-voronoi@1: version "1.1.4" resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" @@ -3152,10 +3433,10 @@ d3-zoom@1: d3-selection "1" d3-transition "1" -d3@5.9.1: - version "5.9.1" - resolved "https://registry.yarnpkg.com/d3/-/d3-5.9.1.tgz#fde73fa9af7281d2ff0d2a32aa8f306e93a6d1cd" - integrity sha512-JceuBn5VVWySPQc9EA0gfq0xQVgEQXGokHhe+359bmgGeUITLK2r2b9idMzquQne9DKxb7JDCE1gDRXe9OIF2Q== +d3@5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.15.0.tgz#ffd44958e6a3cb8a59a84429c45429b8bca5677a" + integrity sha512-C+E80SL2nLLtmykZ6klwYj5rPqB5nlfN5LdWEAVdWPppqTD8taoJi2PxLZjPeYT8FFRR2yucXq+kBlOnnvZeLg== dependencies: d3-array "1" d3-axis "1" @@ -3239,7 +3520,7 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -3254,12 +3535,29 @@ deep-equal@*: resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= +deep-equal@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -3288,6 +3586,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -3367,13 +3670,21 @@ dom-css@^2.0.0: prefix-style "2.0.1" to-camel-case "1.0.0" -"dom-helpers@^2.4.0 || ^3.0.0", dom-helpers@^3.3.1, dom-helpers@^3.4.0: +dom-helpers@^3.3.1: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== dependencies: "@babel/runtime" "^7.1.2" +dom-helpers@^5.0.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" + integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== + dependencies: + "@babel/runtime" "^7.6.3" + csstype "^2.6.7" + dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -3419,6 +3730,13 @@ domutils@1.5: dom-serializer "0" domelementtype "1" +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + duplexify@^3.4.2, duplexify@^3.6.0: version "3.6.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" @@ -3470,13 +3788,13 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -emotion@^9.1.2: - version "9.2.12" - resolved "https://registry.yarnpkg.com/emotion/-/emotion-9.2.12.tgz#53925aaa005614e65c6e43db8243c843574d1ea9" - integrity sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ== +emotion@10.0.27: + version "10.0.27" + resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.27.tgz#f9ca5df98630980a23c819a56262560562e5d75e" + integrity sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g== dependencies: - babel-plugin-emotion "^9.2.11" - create-emotion "^9.2.12" + babel-plugin-emotion "^10.0.27" + create-emotion "^10.0.27" empower-core@^1.2.0: version "1.2.0" @@ -3541,6 +3859,23 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.17.0-next.1: + version "1.17.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + es-abstract@^1.5.1: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" @@ -3561,6 +3896,15 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -3837,6 +4181,11 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" +fecha@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" + integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg== + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -3866,6 +4215,14 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-replace@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-2.0.1.tgz#6d9683a7ca20f8f9aabeabad07e4e2580f528550" + integrity sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ== + dependencies: + array-back "^2.0.0" + test-value "^3.0.0" + find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -3926,6 +4283,11 @@ flagged-respawn@^1.0.0: resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" integrity sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c= +flatbuffers@1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.11.0.tgz#90a47e584dd7851ad7a913f5a0ee99c1d76ce59f" + integrity sha512-0PqFKtXI4MjxomI7jO4g5XfLPm/15g2R+5WGCHBGYGh0ihQiypnHlJ6bMmkkrAe0GzZ4d7PDAfCONKIPUxNF+A== + flush-write-stream@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" @@ -3934,6 +4296,24 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" +fmin@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/fmin/-/fmin-0.0.2.tgz#59bbb40d43ffdc1c94cd00a568c41f95f1973017" + integrity sha1-Wbu0DUP/3ByUzQClaMQflfGXMBc= + dependencies: + contour_plot "^0.0.1" + json2module "^0.0.3" + rollup "^0.25.8" + tape "^4.5.1" + uglify-js "^2.6.2" + +for-each@~0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" @@ -4022,7 +4402,7 @@ fstream@^1.0.0, fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.1.1: +function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -4075,10 +4455,10 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-user-locale@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-user-locale/-/get-user-locale-1.2.0.tgz#e4940db90a6694a512455af3f756903a01410eb7" - integrity sha512-yodJVDMWnM4ZOGa+n1ofebE8u+yjd8FIZMqthUK+xcOQcmfU2ECaP5gLiTMt6j0R/e67QsEelES0fQYLy/oHPg== +get-user-locale@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-user-locale/-/get-user-locale-1.3.0.tgz#21ea740e413541281ae7b2b42e70ee523b7725b2" + integrity sha512-c5N8P0upjxCF9unIC2vTA+B+8nN7kU/D/TeItMAVYhWIIksyoULM1aflKflXM3w+Ij6vF/JZys+QcwIoDuy3Ag== dependencies: lodash.once "^4.1.1" @@ -4137,7 +4517,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, gl once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.4: +glob@^7.1.4, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4422,7 +4802,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: +has@^1.0.1, has@^1.0.3, has@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -4598,7 +4978,7 @@ ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== -immutable@3.8.2: +immutable@3.8.2, immutable@^3.8.2: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= @@ -4669,6 +5049,11 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= +inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -4733,6 +5118,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4757,7 +5147,7 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: +is-callable@^1.1.1, is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== @@ -4904,6 +5294,13 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regex@^1.0.5, is-regex@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -4916,7 +5313,7 @@ is-stream@^1.0.1, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-symbol@^1.0.1: +is-symbol@^1.0.1, is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== @@ -5589,6 +5986,11 @@ jshint@^2.9.6: phantom "~4.0.1" phantomjs-prebuilt "~2.1.7" +json-bignum@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/json-bignum/-/json-bignum-0.0.3.tgz#41163b50436c773d82424dbc20ed70db7604b8d7" + integrity sha1-QRY7UENsdz2CQk28IO1w23YEuNc= + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -5614,6 +6016,13 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json2module@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/json2module/-/json2module-0.0.3.tgz#00fb5f4a9b7adfc3f0647c29cb17bcd1979be9b2" + integrity sha1-APtfSpt638PwZHwpyxe80Zeb6bI= + dependencies: + rw "^1.3.2" + json5@2.x: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -5706,6 +6115,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -5817,6 +6231,11 @@ lodash._getnative@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -5851,6 +6270,11 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= +lodash.padend@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -5873,7 +6297,12 @@ log-symbols@^1.0.0: dependencies: chalk "^1.0.0" -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -5992,6 +6421,11 @@ memoize-one@^4.0.0: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906" integrity sha512-2GApq0yI/b22J2j9rhbrAlsHb0Qcz+7yWxeLG8h+95sl1XPUgeLimQSOdur4Vw7cUhrBHwaUZxWFZueojqNRzA== +memoize-one@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -6102,6 +6536,11 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +minimist@~1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -6394,13 +6833,6 @@ nomnom@^1.5.x: dependencies: abbrev "1" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -6487,7 +6919,17 @@ object-hash@^1.1.8: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-keys@^1.0.0, object-keys@^1.0.11: +object-inspect@^1.7.0, object-inspect@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" + integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + +object-keys@^1.0.0, object-keys@^1.0.11, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -6678,6 +7120,13 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== +pad-left@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pad-left/-/pad-left-2.1.0.tgz#16e6a3b2d44a8e138cb0838cc7cb403a4fc9e994" + integrity sha1-FuajstRKjhOMsIOMx8tAOk/J6ZQ= + dependencies: + repeat-string "^1.5.4" + pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -7187,7 +7636,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.3" -prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0: +prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -7331,6 +7780,43 @@ rc-animate@2.x: rc-util "^4.8.0" react-lifecycles-compat "^3.0.4" +rc-cascader@0.17.5: + version "0.17.5" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-0.17.5.tgz#4fde91d23b7608c420263c38eee9c0687f80f7dc" + integrity sha512-WYMVcxU0+Lj+xLr4YYH0+yXODumvNXDcVEs5i7L1mtpWwYkubPV/zbQpn+jGKFCIW/hOhjkU4J1db8/P/UKE7A== + dependencies: + array-tree-filter "^2.1.0" + prop-types "^15.5.8" + rc-trigger "^2.2.0" + rc-util "^4.0.4" + react-lifecycles-compat "^3.0.4" + shallow-equal "^1.0.0" + warning "^4.0.1" + +rc-drawer@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-3.0.2.tgz#1c42b2b7790040344f8f05f1d132b1ef0e97b783" + integrity sha512-oPScGXB/8/ov9gEFLxPH8RBv/9jLTZboZtyF/GgrrnCAvbFwUxXdELH6n6XIowmuDKKvTGIMgZdnao0T46Yv3A== + dependencies: + babel-runtime "^6.26.0" + classnames "^2.2.6" + rc-util "^4.11.2" + react-lifecycles-compat "^3.0.4" + +rc-slider@8.7.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.7.1.tgz#9ed07362dc93489a38e654b21b8122ad70fd3c42" + integrity sha512-WMT5mRFUEcrLWwTxsyS8jYmlaMsTVCZIGENLikHsNv+tE8ThU2lCoPfi/xFNUfJFNFSBFP3MwPez9ZsJmNp13g== + dependencies: + babel-runtime "6.x" + classnames "^2.2.5" + prop-types "^15.5.4" + rc-tooltip "^3.7.0" + rc-util "^4.0.4" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + warning "^4.0.3" + rc-time-picker@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/rc-time-picker/-/rc-time-picker-3.7.2.tgz#fabe5501adf1374d31a2d3b47f1ba89fc2dc2467" @@ -7343,7 +7829,16 @@ rc-time-picker@^3.7.2: rc-trigger "^2.2.0" react-lifecycles-compat "^3.0.4" -rc-trigger@^2.2.0: +rc-tooltip@^3.7.0: + version "3.7.3" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-3.7.3.tgz#280aec6afcaa44e8dff0480fbaff9e87fc00aecc" + integrity sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww== + dependencies: + babel-runtime "6.x" + prop-types "^15.5.8" + rc-trigger "^2.2.2" + +rc-trigger@^2.2.0, rc-trigger@^2.2.2: version "2.6.5" resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-2.6.5.tgz#140a857cf28bd0fa01b9aecb1e26a50a700e9885" integrity sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw== @@ -7367,12 +7862,24 @@ rc-util@^4.0.4, rc-util@^4.4.0, rc-util@^4.8.0: react-lifecycles-compat "^3.0.4" shallowequal "^0.2.2" -react-calendar@2.18.1: - version "2.18.1" - resolved "https://registry.yarnpkg.com/react-calendar/-/react-calendar-2.18.1.tgz#f8ef9468d8566aa0d47d9d70c88917bb2030bcb9" - integrity sha512-J3tVim1gLpnsCOaeez+z4QJB5oK6UYLJj5TSMOStSJBvkWMEcTzj7bq7yCJJCNLUg2Vd3i11gJXish0LUFhXaw== +rc-util@^4.11.2: + version "4.20.1" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.20.1.tgz#a5976eabfc3198ed9b8e79ffb8c53c231db36e77" + integrity sha512-EGlDg9KPN0POzmAR2hk9ZyFc3DmJIrXwlC8NoDxJguX2LTINnVqwadLIVauLfYgYISMiFYFrSHiFW+cqUhZ5dA== dependencies: - get-user-locale "^1.1.1" + add-dom-event-listener "^1.1.0" + babel-runtime "6.x" + prop-types "^15.5.10" + react-is "^16.12.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + +react-calendar@2.19.2: + version "2.19.2" + resolved "https://registry.yarnpkg.com/react-calendar/-/react-calendar-2.19.2.tgz#496e78eb11a00aee1ae6b5d02d221ed1ca2db952" + integrity sha512-zKbWxwmYEg84grFsCJz9EYpnGqsZy0iV67dHzkVE0EhBdXMg2eISBQYvw4+t8zdy5ySxQkDhUW8X8ERbSyZPVw== + dependencies: + get-user-locale "^1.2.0" merge-class-names "^1.1.1" prop-types "^15.6.0" react-lifecycles-compat "^3.0.4" @@ -7398,15 +7905,15 @@ react-custom-scrollbars@4.2.1: prop-types "^15.5.10" raf "^3.1.0" -react-dom@16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" - integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== +react-dom@16.12.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" + integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.6" + scheduler "^0.18.0" react-dom@^16.7.0: version "16.7.0" @@ -7426,18 +7933,28 @@ react-highlight-words@0.11.0: highlight-words-core "^1.2.0" prop-types "^15.5.8" +react-hook-form@4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-4.5.3.tgz#3f9abac7bd78eedf0624d02aa9e1f8487d729e18" + integrity sha512-oQB6s3zzXbFwM8xaWEkZJZR+5KD2LwUUYTexQbpdUuFzrfs41Qg0UE3kzfzxG8shvVlzADdkYKLMXqOLWQSS/Q== + react-immutable-proptypes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz#023d6f39bb15c97c071e9e60d00d136eac5fa0b4" integrity sha1-Aj1vObsVyXwHHp5g0A0TbqxfoLQ= -react-input-autosize@^2.2.1: +react-input-autosize@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw== dependencies: prop-types "^15.5.8" +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^16.7.0, react-is@^16.8.4: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" @@ -7485,13 +8002,18 @@ react-storybook-addon-props-combinations@1.1.0: object-hash "^1.1.8" pretty-format "^21.2.1" -react-table@^6.8.6: - version "6.8.6" - resolved "https://registry.yarnpkg.com/react-table/-/react-table-6.8.6.tgz#a0ad8b4839319052d5befc012603fb161e52ede3" - integrity sha1-oK2LSDkxkFLVvvwBJgP7Fh5S7eM= +react-table-6@^6.8.6: + version "6.11.0" + resolved "https://registry.yarnpkg.com/react-table-6/-/react-table-6-6.11.0.tgz#727de5d9f0357a35816a1bbc2e9c9868f8c5b2c4" + integrity sha512-zO24J+1Qg2AHxtSNMfHeGW1dxFcmLJQrAeLJyCAENdNdwJt+YolDDtJEBdZlukon7rZeAdB3d5gUH6eb9Dn5Ug== dependencies: classnames "^2.2.5" +react-table@7.0.0-rc.15: + version "7.0.0-rc.15" + resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.0.0-rc.15.tgz#bb855e4e2abbb4aaf0ed2334404a41f3ada8e13a" + integrity sha512-ofMOlgrioHhhvHjvjsQkxvfQzU98cqwy6BjPGNwhLN1vhgXeWi0mUGreaCPvRenEbTiXsQbMl4k3Xmx3Mut8Rw== + react-test-renderer@^16.7.0: version "16.7.0" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.7.0.tgz#1ca96c2b450ab47c36ba92cd8c03fcefc52ea01c" @@ -7512,16 +8034,6 @@ react-transition-group@2.6.1: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react-transition-group@^2.2.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - react-transition-group@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.5.2.tgz#9457166a9ba6ce697a3e1b076b3c049b9fb2c408" @@ -7532,27 +8044,24 @@ react-transition-group@^2.5.2: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react-virtualized@9.21.0: - version "9.21.0" - resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.21.0.tgz#8267c40ffb48db35b242a36dea85edcf280a6506" - integrity sha512-duKD2HvO33mqld4EtQKm9H9H0p+xce1c++2D5xn59Ma7P8VT7CprfAe5hwjd1OGkyhqzOZiTMlTal7LxjH5yBQ== +react-transition-group@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" + integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== dependencies: - babel-runtime "^6.26.0" - classnames "^2.2.3" - dom-helpers "^2.4.0 || ^3.0.0" - loose-envify "^1.3.0" - prop-types "^15.6.0" - react-lifecycles-compat "^3.0.4" + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" -react@16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" - integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== +react@16.12.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" + integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.6" react@^16.7.0: version "16.7.0" @@ -7676,6 +8185,11 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +reduce-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327" + integrity sha1-JYx479FT3fk8tWEjf2EYTzaW4yc= + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -7703,6 +8217,11 @@ regenerator-runtime@^0.13.2: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + regenerator-transform@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" @@ -7718,6 +8237,14 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpu-core@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" @@ -7757,7 +8284,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.6.1: +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -7838,6 +8365,11 @@ reserved-words@^0.1.1: resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -7889,6 +8421,13 @@ resolve@^1.10.0: dependencies: path-parse "^1.0.6" +resolve@~1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + restructured@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/restructured/-/restructured-0.0.11.tgz#f914f6b6f358b8e45d6d8ee268926cf1a783f710" @@ -7899,6 +8438,13 @@ restructured@0.0.11: power-assert "^1.2.0" unist-util-map "^1.0.2" +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -7909,6 +8455,13 @@ revalidator@0.1.x: resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs= +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + rimraf@2, rimraf@2.x.x, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -7931,6 +8484,15 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rollup@^0.25.8: + version "0.25.8" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.25.8.tgz#bf6ce83b87510d163446eeaa577ed6a6fc5835e0" + integrity sha1-v2zoO4dRDRY0Ru6qV37WpvxYNeA= + dependencies: + chalk "^1.1.1" + minimist "^1.2.0" + source-map-support "^0.3.2" + "rst2html@github:thoward/rst2html#990cb89": version "1.0.4" resolved "https://codeload.github.com/thoward/rst2html/tar.gz/990cb89f2a300cdd9151790be377c4c0840df809" @@ -7949,11 +8511,18 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rw@1: +rw@1, rw@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= +rxjs@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + dependencies: + tslib "^1.9.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" @@ -8026,10 +8595,10 @@ scheduler@^0.12.0: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" - integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== +scheduler@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" + integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -8136,6 +8705,11 @@ shallow-clone@^1.0.0: kind-of "^5.0.0" mixin-object "^2.0.1" +shallow-equal@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + shallowequal@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-0.2.2.tgz#1e32fd5bcab6ad688a4812cb0cc04efc75c7014e" @@ -8143,6 +8717,11 @@ shallowequal@^0.2.2: dependencies: lodash.keys "^3.1.2" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8297,6 +8876,13 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f" + integrity sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8= + dependencies: + source-map "0.1.32" + source-map-support@^0.4.0: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -8325,6 +8911,13 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= +source-map@0.1.32: + version "0.1.32" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" + integrity sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY= + dependencies: + amdefine ">=0.0.4" + source-map@^0.4.2, source-map@~0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -8332,7 +8925,7 @@ source-map@^0.4.2, source-map@~0.4.1: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.3: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -8342,11 +8935,6 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" @@ -8528,6 +9116,31 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string.prototype.trim@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" + integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -8629,16 +9242,6 @@ style-loader@^0.23.1: loader-utils "^1.1.0" schema-utils "^1.0.0" -stylis-rule-sheet@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" - integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== - -stylis@^3.5.0: - version "3.5.4" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" - integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -8663,11 +9266,53 @@ symbol-tree@^3.2.1, symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= +systemjs-plugin-css@0.1.37: + version "0.1.37" + resolved "https://registry.yarnpkg.com/systemjs-plugin-css/-/systemjs-plugin-css-0.1.37.tgz#684847252ca69b7da24a1201094c86274324e82f" + integrity sha512-wCGG62zYXuOlNji5FlBjeMFAnLeAO/HQmFg+8UBX/mlHoAKLHlGFYRstlhGKibRU2oxk/BH9DaihOuhhNLi7Kg== + +systemjs@0.20.19: + version "0.20.19" + resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.20.19.tgz#c2b9e79c19f4bea53a19b1ed3f974ffb463be949" + integrity sha512-H/rKwNEEyej/+IhkmFNmKFyJul8tbH/muiPq5TyNoVTwsGhUjRsN3NlFnFQUvFXA3+GQmsXkCNXU6QKPl779aw== + +table-layout@^0.4.3: + version "0.4.5" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.4.5.tgz#d906de6a25fa09c0c90d1d08ecd833ecedcb7378" + integrity sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw== + dependencies: + array-back "^2.0.0" + deep-extend "~0.6.0" + lodash.padend "^4.6.1" + typical "^2.6.1" + wordwrapjs "^3.0.0" + tapable@^1.0.0, tapable@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tape@^4.5.1: + version "4.13.2" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.2.tgz#eb419b9d9bc004025b1a81a5b63093e07f425629" + integrity sha512-waWwC/OqYVE9TS6r1IynlP2sEdk4Lfo6jazlgkuNkPTHIbuG2BTABIaKdlQWwPeB6Oo4ksZ1j33Yt0NTOAlYMQ== + dependencies: + deep-equal "~1.1.1" + defined "~1.0.0" + dotignore "~0.1.2" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.6" + has "~1.0.3" + inherits "~2.0.4" + is-regex "~1.0.5" + minimist "~1.2.0" + object-inspect "~1.7.0" + resolve "~1.15.1" + resumer "~0.0.0" + string.prototype.trim "~1.2.1" + through "~2.3.8" + tar@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -8711,6 +9356,14 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" +test-value@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/test-value/-/test-value-3.0.0.tgz#9168c062fab11a86b8d444dd968bb4b73851ce92" + integrity sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ== + dependencies: + array-back "^2.0.0" + typical "^2.6.1" + tether-drop@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/tether-drop/-/tether-drop-1.4.2.tgz#28e240cce077f4ae1d8e5990a03b71e0cd6fbfec" @@ -8723,6 +9376,11 @@ tether@^1.1.0: resolved "https://registry.yarnpkg.com/tether/-/tether-1.4.4.tgz#9dc6eb2b3e601da2098fd264e7f7a8b264de1125" integrity sha512-bagKeRRo3vEynHnO3GB7/jB3Q4YIf0mN7gXM/nR0wZvNHkPrwmZemg1w0C32JZP0prHZUwxGwoX5CdA7tuIDEw== +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -8746,7 +9404,7 @@ through2@^2.0.0: readable-stream "^2.1.5" xtend "~4.0.1" -through@2, through@~2.3.6: +through@2, through@~2.3.4, through@~2.3.6, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -8847,13 +9505,6 @@ to-space-case@^1.0.0: dependencies: to-no-case "^1.0.0" -touch@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/touch/-/touch-2.0.2.tgz#ca0b2a3ae3211246a61b16ba9e6cbf1596287164" - integrity sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A== - dependencies: - nopt "~1.0.10" - tough-cookie@>=2.3.3: version "3.0.1" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" @@ -8940,6 +9591,11 @@ tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslib@^1.9.3: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + tslint@5.20.1: version "5.20.1" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" @@ -9015,6 +9671,11 @@ typescript@3.7.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== +typical@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" + integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= + ua-parser-js@^0.7.18: version "0.7.20" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" @@ -9028,6 +9689,16 @@ uglify-js@3.4.x: commander "~2.17.1" source-map "~0.6.1" +uglify-js@^2.6.2: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + uglify-js@^3.1.4: version "3.6.2" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.2.tgz#fd8048c86d990ddd29fe99d3300e0cb329103f4d" @@ -9036,6 +9707,11 @@ uglify-js@^3.1.4: commander "2.20.0" source-map "~0.6.1" +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -9244,6 +9920,15 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +venn.js@~0.2.20: + version "0.2.20" + resolved "https://registry.yarnpkg.com/venn.js/-/venn.js-0.2.20.tgz#3f0e50cc75cba1f58692a8a32f67bd7aaf1aa6fa" + integrity sha512-bb5SYq/wamY9fvcuErb9a0FJkgIFHJjkLZWonQ+DoKKuDX3WPH2B4ouI1ce4K2iejBklQy6r1ly8nOGIyOCO6w== + dependencies: + d3-selection "^1.0.2" + d3-transition "^1.0.1" + fmin "0.0.2" + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -9294,6 +9979,20 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= + dependencies: + loose-envify "^1.0.0" + +warning@^4.0.1, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + warning@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.2.tgz#aa6876480872116fa3e11d434b0d0d8d91e44607" @@ -9445,6 +10144,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + winston@0.8.x: version "0.8.3" resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" @@ -9470,6 +10174,16 @@ winston@^2.4.0: isstream "0.1.x" stack-trace "0.0.x" +wolfy87-eventemitter@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz#35c1ac0dd1ac0c15e35d981508fc22084a13a011" + integrity sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE= + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -9480,6 +10194,14 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +wordwrapjs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-3.0.0.tgz#c94c372894cadc6feb1a66bff64e1d9af92c5d1e" + integrity sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw== + dependencies: + reduce-flatten "^1.0.1" + typical "^2.6.1" + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -9650,6 +10372,16 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + yauzl@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" From 2761b4d9663ea9aec3f0a3a06fb51ce191392ddf Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 23 Mar 2020 16:05:31 +0300 Subject: [PATCH 13/15] Migrate dataSourceSrv to getDataSourceSrv --- src/datasource-zabbix/config.controller.js | 11 +++--- src/datasource-zabbix/datasource.js | 4 +- ...bConnector.test.js => dbConnector.test.ts} | 38 +++++++++++-------- .../specs/influxdbConnector.test.js | 15 +++++--- .../zabbix/connectors/dbConnector.js | 12 +++--- .../connectors/influxdb/influxdbConnector.js | 4 +- .../zabbix/connectors/sql/sqlConnector.js | 4 +- src/datasource-zabbix/zabbix/zabbix.js | 12 +++--- src/panel-triggers/specs/migrations.spec.ts | 19 ++++++---- src/panel-triggers/specs/panel_ctrl.spec.ts | 12 +++++- src/panel-triggers/triggers_panel_ctrl.js | 16 ++++---- 11 files changed, 84 insertions(+), 63 deletions(-) rename src/datasource-zabbix/specs/{dbConnector.test.js => dbConnector.test.ts} (51%) diff --git a/src/datasource-zabbix/config.controller.js b/src/datasource-zabbix/config.controller.js index 926d5b0..68b692e 100644 --- a/src/datasource-zabbix/config.controller.js +++ b/src/datasource-zabbix/config.controller.js @@ -1,4 +1,5 @@ import _ from 'lodash'; +import { getDataSourceSrv } from '@grafana/runtime'; import { migrateDSConfig } from './migrations'; const SUPPORTED_SQL_DS = ['mysql', 'postgres', 'influxdb']; @@ -23,9 +24,7 @@ const defaultConfig = { export class ZabbixDSConfigController { /** @ngInject */ - constructor($scope, $injector, datasourceSrv) { - this.datasourceSrv = datasourceSrv; - + constructor() { this.current.jsonData = migrateDSConfig(this.current.jsonData); _.defaults(this.current.jsonData, defaultConfig); @@ -39,7 +38,7 @@ export class ZabbixDSConfigController { } getSupportedDBDataSources() { - let datasources = this.datasourceSrv.getAll(); + let datasources = getDataSourceSrv().getAll(); return _.filter(datasources, ds => { return _.includes(SUPPORTED_SQL_DS, ds.type); }); @@ -53,7 +52,7 @@ export class ZabbixDSConfigController { loadCurrentDBDatasource() { const dsName= this.current.jsonData.dbConnectionDatasourceName; - this.datasourceSrv.loadDatasource(dsName) + getDataSourceSrv().loadDatasource(dsName) .then(ds => { if (ds) { this.dbConnectionDatasourceId = ds.id; @@ -66,7 +65,7 @@ export class ZabbixDSConfigController { return; } - this.datasourceSrv.loadDatasource(this.current.name) + getDataSourceSrv().loadDatasource(this.current.name) .then(ds => { return ds.getVersion(); }) diff --git a/src/datasource-zabbix/datasource.js b/src/datasource-zabbix/datasource.js index f30e45a..6a9def4 100644 --- a/src/datasource-zabbix/datasource.js +++ b/src/datasource-zabbix/datasource.js @@ -16,7 +16,7 @@ const DEFAULT_ZABBIX_VERSION = 3; export class ZabbixDatasource { /** @ngInject */ - constructor(instanceSettings, templateSrv, datasourceSrv, zabbixAlertingSrv) { + constructor(instanceSettings, templateSrv, zabbixAlertingSrv) { this.templateSrv = templateSrv; this.zabbixAlertingSrv = zabbixAlertingSrv; @@ -75,7 +75,7 @@ export class ZabbixDatasource { dbConnectionRetentionPolicy: this.dbConnectionRetentionPolicy, }; - this.zabbix = new Zabbix(zabbixOptions, datasourceSrv); + this.zabbix = new Zabbix(zabbixOptions); } //////////////////////// diff --git a/src/datasource-zabbix/specs/dbConnector.test.js b/src/datasource-zabbix/specs/dbConnector.test.ts similarity index 51% rename from src/datasource-zabbix/specs/dbConnector.test.js rename to src/datasource-zabbix/specs/dbConnector.test.ts index b41276c..8233708 100644 --- a/src/datasource-zabbix/specs/dbConnector.test.js +++ b/src/datasource-zabbix/specs/dbConnector.test.ts @@ -1,11 +1,17 @@ -import mocks from '../../test-setup/mocks'; import { DBConnector } from '../zabbix/connectors/dbConnector'; +const loadDatasourceMock = jest.fn().mockResolvedValue({ id: 42, name: 'foo', meta: {} }); +const getAllMock = jest.fn().mockReturnValue([{ id: 42, name: 'foo', meta: {} }]); + +jest.mock('@grafana/runtime', () => ({ + getDataSourceSrv: () => ({ + loadDatasource: loadDatasourceMock, + getAll: getAllMock + }), +})); + describe('DBConnector', () => { - let ctx = {}; - const datasourceSrv = mocks.datasourceSrvMock; - datasourceSrv.loadDatasource.mockResolvedValue({ id: 42, name: 'foo', meta: {} }); - datasourceSrv.getAll.mockReturnValue([{ id: 42, name: 'foo' }]); + const ctx: any = {}; describe('When init DB connector', () => { beforeEach(() => { @@ -13,34 +19,34 @@ describe('DBConnector', () => { datasourceId: 42, datasourceName: undefined }; + + loadDatasourceMock.mockClear(); + getAllMock.mockClear(); }); it('should try to load datasource by name first', () => { - ctx.options = { - datasourceName: 'bar' - }; - const dbConnector = new DBConnector(ctx.options, datasourceSrv); + const dbConnector = new DBConnector({ datasourceName: 'bar' }); dbConnector.loadDBDataSource(); - expect(datasourceSrv.getAll).not.toHaveBeenCalled(); - expect(datasourceSrv.loadDatasource).toHaveBeenCalledWith('bar'); + expect(getAllMock).not.toHaveBeenCalled(); + expect(loadDatasourceMock).toHaveBeenCalledWith('bar'); }); it('should load datasource by id if name not present', () => { - const dbConnector = new DBConnector(ctx.options, datasourceSrv); + const dbConnector = new DBConnector({ datasourceId: 42 }); dbConnector.loadDBDataSource(); - expect(datasourceSrv.getAll).toHaveBeenCalled(); - expect(datasourceSrv.loadDatasource).toHaveBeenCalledWith('foo'); + expect(getAllMock).toHaveBeenCalled(); + expect(loadDatasourceMock).toHaveBeenCalledWith('foo'); }); it('should throw error if no name and id specified', () => { ctx.options = {}; - const dbConnector = new DBConnector(ctx.options, datasourceSrv); + const dbConnector = new DBConnector(ctx.options); return expect(dbConnector.loadDBDataSource()).rejects.toBe('Data Source name should be specified'); }); it('should throw error if datasource with given id is not found', () => { ctx.options.datasourceId = 45; - const dbConnector = new DBConnector(ctx.options, datasourceSrv); + const dbConnector = new DBConnector(ctx.options); return expect(dbConnector.loadDBDataSource()).rejects.toBe('Data Source with ID 45 not found'); }); }); diff --git a/src/datasource-zabbix/specs/influxdbConnector.test.js b/src/datasource-zabbix/specs/influxdbConnector.test.js index a259b6a..6e39913 100644 --- a/src/datasource-zabbix/specs/influxdbConnector.test.js +++ b/src/datasource-zabbix/specs/influxdbConnector.test.js @@ -1,17 +1,20 @@ import { InfluxDBConnector } from '../zabbix/connectors/influxdb/influxdbConnector'; import { compactQuery } from '../utils'; +jest.mock('@grafana/runtime', () => ({ + getDataSourceSrv: jest.fn(() => ({ + loadDatasource: jest.fn().mockResolvedValue( + { id: 42, name: 'InfluxDB DS', meta: {} } + ), + })), +})); + describe('InfluxDBConnector', () => { let ctx = {}; beforeEach(() => { ctx.options = { datasourceName: 'InfluxDB DS', retentionPolicy: 'longterm' }; - ctx.datasourceSrvMock = { - loadDatasource: jest.fn().mockResolvedValue( - { id: 42, name: 'InfluxDB DS', meta: {} } - ), - }; - ctx.influxDBConnector = new InfluxDBConnector(ctx.options, ctx.datasourceSrvMock); + ctx.influxDBConnector = new InfluxDBConnector(ctx.options); ctx.influxDBConnector.invokeInfluxDBQuery = jest.fn().mockResolvedValue([]); ctx.defaultQueryParams = { itemids: ['123', '234'], diff --git a/src/datasource-zabbix/zabbix/connectors/dbConnector.js b/src/datasource-zabbix/zabbix/connectors/dbConnector.js index c4039a1..7b9a235 100644 --- a/src/datasource-zabbix/zabbix/connectors/dbConnector.js +++ b/src/datasource-zabbix/zabbix/connectors/dbConnector.js @@ -1,4 +1,5 @@ import _ from 'lodash'; +import { getDataSourceSrv } from '@grafana/runtime'; export const DEFAULT_QUERY_LIMIT = 10000; export const HISTORY_TO_TABLE_MAP = { @@ -34,31 +35,30 @@ export const consolidateByTrendColumns = { * `testDataSource()` methods, which describe how to fetch data from source other than Zabbix API. */ export class DBConnector { - constructor(options, datasourceSrv) { - this.datasourceSrv = datasourceSrv; + constructor(options) { this.datasourceId = options.datasourceId; this.datasourceName = options.datasourceName; this.datasourceTypeId = null; this.datasourceTypeName = null; } - static loadDatasource(dsId, dsName, datasourceSrv) { + static loadDatasource(dsId, dsName) { if (!dsName && dsId !== undefined) { - let ds = _.find(datasourceSrv.getAll(), {'id': dsId}); + let ds = _.find(getDataSourceSrv().getAll(), {'id': dsId}); if (!ds) { return Promise.reject(`Data Source with ID ${dsId} not found`); } dsName = ds.name; } if (dsName) { - return datasourceSrv.loadDatasource(dsName); + return getDataSourceSrv().loadDatasource(dsName); } else { return Promise.reject(`Data Source name should be specified`); } } loadDBDataSource() { - return DBConnector.loadDatasource(this.datasourceId, this.datasourceName, this.datasourceSrv) + return DBConnector.loadDatasource(this.datasourceId, this.datasourceName) .then(ds => { this.datasourceTypeId = ds.meta.id; this.datasourceTypeName = ds.meta.name; diff --git a/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js b/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js index 512f2da..94068d3 100644 --- a/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js +++ b/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js @@ -11,8 +11,8 @@ const consolidateByFunc = { }; export class InfluxDBConnector extends DBConnector { - constructor(options, datasourceSrv) { - super(options, datasourceSrv); + constructor(options) { + super(options); this.retentionPolicy = options.retentionPolicy; super.loadDBDataSource().then(ds => { this.influxDS = ds; diff --git a/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js b/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js index 3377ec1..9b38bdc 100644 --- a/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js +++ b/src/datasource-zabbix/zabbix/connectors/sql/sqlConnector.js @@ -11,8 +11,8 @@ const supportedDatabases = { }; export class SQLConnector extends DBConnector { - constructor(options, datasourceSrv) { - super(options, datasourceSrv); + constructor(options) { + super(options); this.limit = options.limit || DEFAULT_QUERY_LIMIT; this.sqlDialect = null; diff --git a/src/datasource-zabbix/zabbix/zabbix.js b/src/datasource-zabbix/zabbix/zabbix.js index 39a4f80..2176649 100644 --- a/src/datasource-zabbix/zabbix/zabbix.js +++ b/src/datasource-zabbix/zabbix/zabbix.js @@ -25,7 +25,7 @@ const REQUESTS_TO_BIND = [ ]; export class Zabbix { - constructor(options, datasourceSrv) { + constructor(options) { let { url, username, @@ -57,7 +57,7 @@ export class Zabbix { if (enableDirectDBConnection) { const connectorOptions = { dbConnectionRetentionPolicy }; - this.initDBConnector(dbConnectionDatasourceId, dbConnectionDatasourceName, datasourceSrv, connectorOptions) + this.initDBConnector(dbConnectionDatasourceId, dbConnectionDatasourceName, connectorOptions) .then(() => { this.getHistoryDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getHistory, 'getHistory', this.dbConnector); this.getTrendsDB = this.cachingProxy.proxyfyWithCache(this.dbConnector.getTrends, 'getTrends', this.dbConnector); @@ -65,15 +65,15 @@ export class Zabbix { } } - initDBConnector(datasourceId, datasourceName, datasourceSrv, options) { - return DBConnector.loadDatasource(datasourceId, datasourceName, datasourceSrv) + initDBConnector(datasourceId, datasourceName, options) { + return DBConnector.loadDatasource(datasourceId, datasourceName) .then(ds => { let connectorOptions = { datasourceId, datasourceName }; if (ds.type === 'influxdb') { connectorOptions.retentionPolicy = options.dbConnectionRetentionPolicy; - this.dbConnector = new InfluxDBConnector(connectorOptions, datasourceSrv); + this.dbConnector = new InfluxDBConnector(connectorOptions); } else { - this.dbConnector = new SQLConnector(connectorOptions, datasourceSrv); + this.dbConnector = new SQLConnector(connectorOptions); } return this.dbConnector; }); diff --git a/src/panel-triggers/specs/migrations.spec.ts b/src/panel-triggers/specs/migrations.spec.ts index bd916e8..a309907 100644 --- a/src/panel-triggers/specs/migrations.spec.ts +++ b/src/panel-triggers/specs/migrations.spec.ts @@ -4,15 +4,20 @@ import {TriggerPanelCtrl} from '../triggers_panel_ctrl'; import {DEFAULT_TARGET, DEFAULT_SEVERITY, PANEL_DEFAULTS} from '../triggers_panel_ctrl'; import {CURRENT_SCHEMA_VERSION} from '../migrations'; +jest.mock('@grafana/runtime', () => { + return { + getDataSourceSrv: () => ({ + getMetricSources: () => { + return [{ meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix_default' }]; + }, + get: () => Promise.resolve({}) + }), + }; +}, {virtual: true}); + describe('Triggers Panel schema migration', () => { let ctx: any = {}; let updatePanelCtrl; - const datasourceSrvMock = { - getMetricSources: () => { - return [{ meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix_default' }]; - }, - get: () => Promise.resolve({}) - }; const timeoutMock = () => {}; @@ -43,7 +48,7 @@ describe('Triggers Panel schema migration', () => { } }; - updatePanelCtrl = (scope) => new TriggerPanelCtrl(scope, {}, timeoutMock, datasourceSrvMock, {}, {}, {}, mocks.timeSrvMock); + updatePanelCtrl = (scope) => new TriggerPanelCtrl(scope, {}, timeoutMock, {}, {}, {}, mocks.timeSrvMock); }); it('should update old panel schema', () => { diff --git a/src/panel-triggers/specs/panel_ctrl.spec.ts b/src/panel-triggers/specs/panel_ctrl.spec.ts index 67283c9..a52707d 100644 --- a/src/panel-triggers/specs/panel_ctrl.spec.ts +++ b/src/panel-triggers/specs/panel_ctrl.spec.ts @@ -4,9 +4,16 @@ import {TriggerPanelCtrl} from '../triggers_panel_ctrl'; import {PANEL_DEFAULTS, DEFAULT_TARGET} from '../triggers_panel_ctrl'; // import { create } from 'domain'; +let datasourceSrvMock, zabbixDSMock; + +jest.mock('@grafana/runtime', () => { + return { + getDataSourceSrv: () => datasourceSrvMock, + }; +}, {virtual: true}); + describe('TriggerPanelCtrl', () => { let ctx: any = {}; - let datasourceSrvMock, zabbixDSMock; const timeoutMock = () => {}; let createPanelCtrl; @@ -31,7 +38,8 @@ describe('TriggerPanelCtrl', () => { }, get: () => Promise.resolve(zabbixDSMock) }; - createPanelCtrl = () => new TriggerPanelCtrl(ctx.scope, {}, timeoutMock, datasourceSrvMock, {}, {}, {}, mocks.timeSrvMock); + + createPanelCtrl = () => new TriggerPanelCtrl(ctx.scope, {}, timeoutMock, {}, {}, {}, mocks.timeSrvMock); const getTriggersResp = [ [ diff --git a/src/panel-triggers/triggers_panel_ctrl.js b/src/panel-triggers/triggers_panel_ctrl.js index e6b03b7..25d86a9 100644 --- a/src/panel-triggers/triggers_panel_ctrl.js +++ b/src/panel-triggers/triggers_panel_ctrl.js @@ -2,6 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import _ from 'lodash'; import moment from 'moment'; +import { getDataSourceSrv } from '@grafana/runtime'; import * as dateMath from 'grafana/app/core/utils/datemath'; import * as utils from '../datasource-zabbix/utils'; import { PanelCtrl } from 'grafana/app/plugins/sdk'; @@ -96,9 +97,8 @@ const triggerStatusMap = { export class TriggerPanelCtrl extends PanelCtrl { /** @ngInject */ - constructor($scope, $injector, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv, timeSrv) { + constructor($scope, $injector, $timeout, templateSrv, contextSrv, dashboardSrv, timeSrv) { super($scope, $injector); - this.datasourceSrv = datasourceSrv; this.templateSrv = templateSrv; this.contextSrv = contextSrv; this.dashboardSrv = dashboardSrv; @@ -151,7 +151,7 @@ export class TriggerPanelCtrl extends PanelCtrl { const targetDatasources = _.compact(this.panel.targets.map(target => target.datasource)); let promises = targetDatasources.map(ds => { // Load datasource - return this.datasourceSrv.get(ds) + return getDataSourceSrv().get(ds) .then(datasource => { this.datasources[ds] = datasource; return datasource; @@ -161,7 +161,7 @@ export class TriggerPanelCtrl extends PanelCtrl { } getZabbixDataSources() { - return _.filter(this.datasourceSrv.getMetricSources(), datasource => { + return _.filter(getDataSourceSrv().getMetricSources(), datasource => { return datasource.meta.id === ZABBIX_DS_ID && datasource.value; }); } @@ -251,7 +251,7 @@ export class TriggerPanelCtrl extends PanelCtrl { const ds = target.datasource; let proxies; let showAckButton = true; - return this.datasourceSrv.get(ds) + return getDataSourceSrv().get(ds) .then(datasource => { const zabbix = datasource.zabbix; const showEvents = this.panel.showEvents.value; @@ -524,7 +524,7 @@ export class TriggerPanelCtrl extends PanelCtrl { const triggerids = [problem.triggerid]; const timeFrom = Math.ceil(dateMath.parse(this.range.from) / 1000); const timeTo = Math.ceil(dateMath.parse(this.range.to) / 1000); - return this.datasourceSrv.get(problem.datasource) + return getDataSourceSrv().get(problem.datasource) .then(datasource => { return datasource.zabbix.getEvents(triggerids, timeFrom, timeTo, [0, 1], PROBLEM_EVENTS_LIMIT); }); @@ -535,7 +535,7 @@ export class TriggerPanelCtrl extends PanelCtrl { return Promise.resolve([]); } const eventids = [problem.lastEvent.eventid]; - return this.datasourceSrv.get(problem.datasource) + return getDataSourceSrv().get(problem.datasource) .then(datasource => { return datasource.zabbix.getEventAlerts(eventids); }); @@ -622,7 +622,7 @@ export class TriggerPanelCtrl extends PanelCtrl { let eventid = trigger.lastEvent ? trigger.lastEvent.eventid : null; let grafana_user = this.contextSrv.user.name; let ack_message = grafana_user + ' (Grafana): ' + message; - return this.datasourceSrv.get(trigger.datasource) + return getDataSourceSrv().get(trigger.datasource) .then(datasource => { const userIsEditor = this.contextSrv.isEditor || this.contextSrv.isGrafanaAdmin; if (datasource.disableReadOnlyUsersAck && !userIsEditor) { From 4adfb12d5912bba6dd58efbb216b49df39c726f9 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 23 Mar 2020 16:15:58 +0300 Subject: [PATCH 14/15] Update release date --- CHANGELOG.md | 2 +- src/plugin.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ce1f9f..50e5c0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [3.11.0] - 2020-03-20 +## [3.11.0] - 2020-03-23 ### Added - Improve variable query editor, [#705](https://github.com/alexanderzobnin/grafana-zabbix/issues/705) - Transform/percentile function, [#868](https://github.com/alexanderzobnin/grafana-zabbix/issues/868) diff --git a/src/plugin.json b/src/plugin.json index 66179ec..028f323 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -27,7 +27,7 @@ {"name": "Triggers", "path": "img/screenshot-triggers.png"} ], "version": "3.11.0", - "updated": "2020-03-20" + "updated": "2020-03-23" }, "includes": [ From 3dfe29816b2eac57f583a775eaeb4acdec6da584 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 10 Apr 2020 19:56:08 +0300 Subject: [PATCH 15/15] DB Connection: return detailed connection error for InfluxDB --- .../zabbix/connectors/influxdb/influxdbConnector.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js b/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js index 94068d3..4bd5012 100644 --- a/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js +++ b/src/datasource-zabbix/zabbix/connectors/influxdb/influxdbConnector.js @@ -24,7 +24,14 @@ export class InfluxDBConnector extends DBConnector { * Try to invoke test query for one of Zabbix database tables. */ testDataSource() { - return this.influxDS.testDatasource(); + return this.influxDS.testDatasource().then(result => { + if (result.status && result.status === 'error') { + return Promise.reject({ data: { + message: `InfluxDB connection error: ${result.message}` + }}); + } + return result; + }); } getHistory(items, timeFrom, timeTill, options) {