diff --git a/public/app/features/styleguide/styleguide.ts b/public/app/features/styleguide/styleguide.ts
index 1337e28d8e5..e348f963cd9 100644
--- a/public/app/features/styleguide/styleguide.ts
+++ b/public/app/features/styleguide/styleguide.ts
@@ -1,51 +1,17 @@
import coreModule from 'app/core/core_module';
import config from 'app/core/config';
-import _ from 'lodash';
class StyleGuideCtrl {
- colors: any = [];
theme: string;
buttonNames = ['primary', 'secondary', 'inverse', 'success', 'warning', 'danger'];
buttonSizes = ['btn-small', '', 'btn-large'];
buttonVariants = ['-'];
- icons: any = [];
- page: any;
- pages = ['colors', 'buttons', 'icons', 'plugins'];
navModel: any;
/** @ngInject **/
- constructor(private $http, private $routeParams, private backendSrv, navModelSrv) {
+ constructor(private $routeParams, private backendSrv, navModelSrv) {
this.navModel = navModelSrv.getNav('cfg', 'admin', 'styleguide', 1);
this.theme = config.bootData.user.lightTheme ? 'light' : 'dark';
- this.page = {};
-
- if ($routeParams.page) {
- this.page[$routeParams.page] = 1;
- } else {
- this.page.colors = true;
- }
-
- if (this.page.colors) {
- this.loadColors();
- }
-
- if (this.page.icons) {
- this.loadIcons();
- }
- }
-
- loadColors() {
- this.$http.get('public/build/styleguide.json').then(res => {
- this.colors = _.map(res.data[this.theme], (value, key) => {
- return { name: key, value: value };
- });
- });
- }
-
- loadIcons() {
- this.$http.get('public/sass/icons.json').then(res => {
- this.icons = res.data;
- });
}
switchTheme() {
diff --git a/public/app/routes/ReactContainer.tsx b/public/app/routes/ReactContainer.tsx
new file mode 100644
index 00000000000..72993661ec4
--- /dev/null
+++ b/public/app/routes/ReactContainer.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import coreModule from 'app/core/core_module';
+import { store } from 'app/stores/store';
+import { Provider } from 'mobx-react';
+
+function WrapInProvider(store, Component, props) {
+ return (
+
+
+
+ );
+}
+
+/** @ngInject */
+export function reactContainer($route, $location) {
+ return {
+ restrict: 'E',
+ template: '',
+ link(scope, elem) {
+ let component = $route.current.locals.component;
+ let props = {};
+
+ ReactDOM.render(WrapInProvider(store, component, props), elem[0]);
+
+ scope.$on('$destroy', function() {
+ ReactDOM.unmountComponentAtNode(elem[0]);
+ });
+ },
+ };
+}
+
+coreModule.directive('reactContainer', reactContainer);
diff --git a/public/app/core/routes/dashboard_loaders.ts b/public/app/routes/dashboard_loaders.ts
similarity index 96%
rename from public/app/core/routes/dashboard_loaders.ts
rename to public/app/routes/dashboard_loaders.ts
index 8aad65bd02f..f4f0b36ac72 100644
--- a/public/app/core/routes/dashboard_loaders.ts
+++ b/public/app/routes/dashboard_loaders.ts
@@ -1,4 +1,4 @@
-import coreModule from '../core_module';
+import coreModule from 'app/core/core_module';
export class LoadDashboardCtrl {
/** @ngInject */
diff --git a/public/app/core/routes/routes.ts b/public/app/routes/routes.ts
similarity index 83%
rename from public/app/core/routes/routes.ts
rename to public/app/routes/routes.ts
index b4d3290bc45..ec65e4ec25a 100644
--- a/public/app/core/routes/routes.ts
+++ b/public/app/routes/routes.ts
@@ -1,43 +1,12 @@
import './dashboard_loaders';
-import coreModule from 'app/core/core_module';
+import './ReactContainer';
+import { ServerStats } from 'app/containers/ServerStats/ServerStats';
+import { AlertRuleList } from 'app/containers/AlertRuleList/AlertRuleList';
/** @ngInject **/
-function setupAngularRoutes($routeProvider, $locationProvider) {
+export function setupAngularRoutes($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
- var loadOrgBundle = {
- lazy: [
- '$q',
- '$route',
- '$rootScope',
- ($q, $route, $rootScope) => {
- return System.import('app/features/org/all');
- },
- ],
- };
-
- var loadAdminBundle = {
- lazy: [
- '$q',
- '$route',
- '$rootScope',
- ($q, $route, $rootScope) => {
- return System.import('app/features/admin/admin');
- },
- ],
- };
-
- var loadAlertingBundle = {
- lazy: [
- '$q',
- '$route',
- '$rootScope',
- ($q, $route, $rootScope) => {
- return System.import('app/features/alerting/all');
- },
- ],
- };
-
$routeProvider
.when('/', {
templateUrl: 'public/app/partials/dashboard.html',
@@ -111,110 +80,92 @@ function setupAngularRoutes($routeProvider, $locationProvider) {
.when('/org', {
templateUrl: 'public/app/features/org/partials/orgDetails.html',
controller: 'OrgDetailsCtrl',
- resolve: loadOrgBundle,
})
.when('/org/new', {
templateUrl: 'public/app/features/org/partials/newOrg.html',
controller: 'NewOrgCtrl',
- resolve: loadOrgBundle,
})
.when('/org/users', {
templateUrl: 'public/app/features/org/partials/orgUsers.html',
controller: 'OrgUsersCtrl',
controllerAs: 'ctrl',
- resolve: loadOrgBundle,
})
.when('/org/users/invite', {
templateUrl: 'public/app/features/org/partials/invite.html',
controller: 'UserInviteCtrl',
controllerAs: 'ctrl',
- resolve: loadOrgBundle,
})
.when('/org/apikeys', {
templateUrl: 'public/app/features/org/partials/orgApiKeys.html',
controller: 'OrgApiKeysCtrl',
- resolve: loadOrgBundle,
})
.when('/org/teams', {
templateUrl: 'public/app/features/org/partials/teams.html',
controller: 'TeamsCtrl',
controllerAs: 'ctrl',
- resolve: loadOrgBundle,
})
.when('/org/teams/new', {
templateUrl: 'public/app/features/org/partials/create_team.html',
controller: 'CreateTeamCtrl',
controllerAs: 'ctrl',
- resolve: loadOrgBundle,
})
.when('/org/teams/edit/:id', {
templateUrl: 'public/app/features/org/partials/team_details.html',
controller: 'TeamDetailsCtrl',
controllerAs: 'ctrl',
- resolve: loadOrgBundle,
})
.when('/profile', {
templateUrl: 'public/app/features/org/partials/profile.html',
controller: 'ProfileCtrl',
controllerAs: 'ctrl',
- resolve: loadOrgBundle,
})
.when('/profile/password', {
templateUrl: 'public/app/features/org/partials/change_password.html',
controller: 'ChangePasswordCtrl',
- resolve: loadOrgBundle,
})
.when('/profile/select-org', {
templateUrl: 'public/app/features/org/partials/select_org.html',
controller: 'SelectOrgCtrl',
- resolve: loadOrgBundle,
})
// ADMIN
.when('/admin', {
templateUrl: 'public/app/features/admin/partials/admin_home.html',
controller: 'AdminHomeCtrl',
controllerAs: 'ctrl',
- resolve: loadAdminBundle,
})
.when('/admin/settings', {
templateUrl: 'public/app/features/admin/partials/settings.html',
controller: 'AdminSettingsCtrl',
controllerAs: 'ctrl',
- resolve: loadAdminBundle,
})
.when('/admin/users', {
templateUrl: 'public/app/features/admin/partials/users.html',
controller: 'AdminListUsersCtrl',
controllerAs: 'ctrl',
- resolve: loadAdminBundle,
})
.when('/admin/users/create', {
templateUrl: 'public/app/features/admin/partials/new_user.html',
controller: 'AdminEditUserCtrl',
- resolve: loadAdminBundle,
})
.when('/admin/users/edit/:id', {
templateUrl: 'public/app/features/admin/partials/edit_user.html',
controller: 'AdminEditUserCtrl',
- resolve: loadAdminBundle,
})
.when('/admin/orgs', {
templateUrl: 'public/app/features/admin/partials/orgs.html',
controller: 'AdminListOrgsCtrl',
controllerAs: 'ctrl',
- resolve: loadAdminBundle,
})
.when('/admin/orgs/edit/:id', {
templateUrl: 'public/app/features/admin/partials/edit_org.html',
controller: 'AdminEditOrgCtrl',
controllerAs: 'ctrl',
- resolve: loadAdminBundle,
})
.when('/admin/stats', {
- templateUrl: 'public/app/features/admin/partials/stats.html',
- controller: 'AdminStatsCtrl',
- controllerAs: 'ctrl',
- resolve: loadAdminBundle,
+ template: '
',
+ resolve: {
+ component: () => ServerStats,
+ },
})
// LOGIN / SIGNUP
.when('/login', {
@@ -274,30 +225,31 @@ function setupAngularRoutes($routeProvider, $locationProvider) {
templateUrl: 'public/app/features/alerting/partials/alert_list.html',
controller: 'AlertListCtrl',
controllerAs: 'ctrl',
- resolve: loadAlertingBundle,
+ })
+ .when('/alerting/list', {
+ template: '
',
+ reloadOnSearch: false,
+ resolve: {
+ component: () => AlertRuleList,
+ },
})
.when('/alerting/notifications', {
templateUrl: 'public/app/features/alerting/partials/notifications_list.html',
controller: 'AlertNotificationsListCtrl',
controllerAs: 'ctrl',
- resolve: loadAlertingBundle,
})
.when('/alerting/notification/new', {
templateUrl: 'public/app/features/alerting/partials/notification_edit.html',
controller: 'AlertNotificationEditCtrl',
controllerAs: 'ctrl',
- resolve: loadAlertingBundle,
})
.when('/alerting/notification/:id/edit', {
templateUrl: 'public/app/features/alerting/partials/notification_edit.html',
controller: 'AlertNotificationEditCtrl',
controllerAs: 'ctrl',
- resolve: loadAlertingBundle,
})
.otherwise({
templateUrl: 'public/app/partials/error.html',
controller: 'ErrorCtrl',
});
}
-
-coreModule.config(setupAngularRoutes);
diff --git a/public/app/stores/AlertListStore/AlertListStore.ts b/public/app/stores/AlertListStore/AlertListStore.ts
new file mode 100644
index 00000000000..78799f6dfd8
--- /dev/null
+++ b/public/app/stores/AlertListStore/AlertListStore.ts
@@ -0,0 +1,34 @@
+import { types, getEnv, flow } from 'mobx-state-tree';
+import { AlertRule } from './AlertRule';
+import { setStateFields } from './helpers';
+
+type IAlertRuleType = typeof AlertRule.Type;
+export interface IAlertRule extends IAlertRuleType {}
+
+export const AlertListStore = types
+ .model('AlertListStore', {
+ rules: types.array(AlertRule),
+ stateFilter: types.optional(types.string, 'all'),
+ })
+ .actions(self => ({
+ loadRules: flow(function* load(filters) {
+ const backendSrv = getEnv(self).backendSrv;
+ self.stateFilter = filters.state; // store state filter used in api query
+ const apiRules = yield backendSrv.get('/api/alerts', filters);
+ self.rules.clear();
+
+ for (let rule of apiRules) {
+ setStateFields(rule, rule.state);
+
+ if (rule.executionError) {
+ rule.info = 'Execution Error: ' + rule.executionError;
+ }
+
+ if (rule.evalData && rule.evalData.noData) {
+ rule.info = 'Query returned no data';
+ }
+
+ self.rules.push(AlertRule.create(rule));
+ }
+ }),
+ }));
diff --git a/public/app/stores/AlertListStore/AlertRule.ts b/public/app/stores/AlertListStore/AlertRule.ts
new file mode 100644
index 00000000000..63b572555cb
--- /dev/null
+++ b/public/app/stores/AlertListStore/AlertRule.ts
@@ -0,0 +1,34 @@
+import { types, getEnv, flow } from 'mobx-state-tree';
+import { setStateFields } from './helpers';
+
+export const AlertRule = types
+ .model('AlertRule', {
+ id: types.identifier(types.number),
+ dashboardId: types.number,
+ panelId: types.number,
+ name: types.string,
+ state: types.string,
+ stateText: types.string,
+ stateIcon: types.string,
+ stateClass: types.string,
+ stateAge: types.string,
+ info: types.optional(types.string, ''),
+ dashboardUri: types.string,
+ })
+ .views(self => ({
+ get isPaused() {
+ return self.state === 'paused';
+ },
+ }))
+ .actions(self => ({
+ /**
+ * will toggle alert rule paused state
+ */
+ togglePaused: flow(function* togglePaused() {
+ const backendSrv = getEnv(self).backendSrv;
+ const payload = { paused: self.isPaused };
+ const res = yield backendSrv.post(`/api/alerts/${self.id}/pause`, payload);
+ setStateFields(self, res.state);
+ self.info = '';
+ }),
+ }));
diff --git a/public/app/stores/AlertListStore/helpers.ts b/public/app/stores/AlertListStore/helpers.ts
new file mode 100644
index 00000000000..bf3c81ca11c
--- /dev/null
+++ b/public/app/stores/AlertListStore/helpers.ts
@@ -0,0 +1,13 @@
+import moment from 'moment';
+import alertDef from 'app/features/alerting/alert_def';
+
+export function setStateFields(rule, state) {
+ const stateModel = alertDef.getStateDisplayModel(state);
+ rule.state = state;
+ rule.stateText = stateModel.text;
+ rule.stateIcon = stateModel.iconClass;
+ rule.stateClass = stateModel.stateClass;
+ rule.stateAge = moment(rule.newStateDate)
+ .fromNow()
+ .replace(' ago', '');
+}
diff --git a/public/app/stores/NavStore/NavItem.ts b/public/app/stores/NavStore/NavItem.ts
new file mode 100644
index 00000000000..cbd0f269f01
--- /dev/null
+++ b/public/app/stores/NavStore/NavItem.ts
@@ -0,0 +1,12 @@
+import { types } from 'mobx-state-tree';
+
+export const NavItem = types.model('NavItem', {
+ id: types.identifier(types.string),
+ text: types.string,
+ url: types.optional(types.string, ''),
+ subTitle: types.optional(types.string, ''),
+ icon: types.optional(types.string, ''),
+ img: types.optional(types.string, ''),
+ active: types.optional(types.boolean, false),
+ children: types.optional(types.array(types.late(() => NavItem)), []),
+});
diff --git a/public/app/stores/NavStore/NavStore.ts b/public/app/stores/NavStore/NavStore.ts
new file mode 100644
index 00000000000..1cf622fc3df
--- /dev/null
+++ b/public/app/stores/NavStore/NavStore.ts
@@ -0,0 +1,41 @@
+import { types, getEnv } from 'mobx-state-tree';
+import { NavItem } from './NavItem';
+
+export const NavStore = types
+ .model('NavStore', {
+ main: types.maybe(NavItem),
+ node: types.maybe(NavItem),
+ })
+ .actions(self => ({
+ load(...args) {
+ let children = getEnv(self).navTree;
+ let main, node;
+ let parents = [];
+
+ for (let id of args) {
+ node = children.find(el => el.id === id);
+
+ if (!node) {
+ throw new Error(`NavItem with id ${id} not found`);
+ }
+
+ children = node.children;
+ parents.push(node);
+ }
+
+ main = parents[parents.length - 2];
+
+ if (main.children) {
+ for (let item of main.children) {
+ item.active = false;
+
+ if (item.url === node.url) {
+ item.active = true;
+ }
+ }
+ }
+
+ self.main = NavItem.create(main);
+ self.node = NavItem.create(node);
+ },
+ }));
diff --git a/public/app/stores/RootStore/RootStore.ts b/public/app/stores/RootStore/RootStore.ts
new file mode 100644
index 00000000000..88221c0ebd5
--- /dev/null
+++ b/public/app/stores/RootStore/RootStore.ts
@@ -0,0 +1,26 @@
+import { types } from 'mobx-state-tree';
+import { SearchStore } from './../SearchStore/SearchStore';
+import { ServerStatsStore } from './../ServerStatsStore/ServerStatsStore';
+import { NavStore } from './../NavStore/NavStore';
+import { AlertListStore } from './../AlertListStore/AlertListStore';
+import { ViewStore } from './../ViewStore/ViewStore';
+
+export const RootStore = types.model({
+ search: types.optional(SearchStore, {
+ sections: [],
+ }),
+ serverStats: types.optional(ServerStatsStore, {
+ stats: [],
+ }),
+ nav: types.optional(NavStore, {}),
+ alertList: types.optional(AlertListStore, {
+ rules: [],
+ }),
+ view: types.optional(ViewStore, {
+ path: '',
+ query: {},
+ }),
+});
+
+type IRootStoreType = typeof RootStore.Type;
+export interface IRootStore extends IRootStoreType {}
diff --git a/public/app/stores/SearchStore/ResultItem.ts b/public/app/stores/SearchStore/ResultItem.ts
new file mode 100644
index 00000000000..eb0ff021526
--- /dev/null
+++ b/public/app/stores/SearchStore/ResultItem.ts
@@ -0,0 +1,10 @@
+import { types } from 'mobx-state-tree';
+
+export const ResultItem = types.model('ResultItem', {
+ id: types.identifier(types.number),
+ folderId: types.optional(types.number, 0),
+ title: types.string,
+ url: types.string,
+ icon: types.string,
+ folderTitle: types.optional(types.string, ''),
+});
diff --git a/public/app/stores/SearchStore/SearchResultSection.ts b/public/app/stores/SearchStore/SearchResultSection.ts
new file mode 100644
index 00000000000..70b3ad48e96
--- /dev/null
+++ b/public/app/stores/SearchStore/SearchResultSection.ts
@@ -0,0 +1,27 @@
+import { types } from 'mobx-state-tree';
+import { ResultItem } from './ResultItem';
+
+export const SearchResultSection = types
+ .model('SearchResultSection', {
+ id: types.identifier(),
+ title: types.string,
+ icon: types.string,
+ expanded: types.boolean,
+ items: types.array(ResultItem),
+ })
+ .actions(self => ({
+ toggle() {
+ self.expanded = !self.expanded;
+
+ for (let i = 0; i < 100; i++) {
+ self.items.push(
+ ResultItem.create({
+ id: i,
+ title: 'Dashboard ' + self.items.length,
+ icon: 'gicon gicon-dashboard',
+ url: 'asd',
+ })
+ );
+ }
+ },
+ }));
diff --git a/public/app/stores/SearchStore/SearchStore.ts b/public/app/stores/SearchStore/SearchStore.ts
new file mode 100644
index 00000000000..36897f05f38
--- /dev/null
+++ b/public/app/stores/SearchStore/SearchStore.ts
@@ -0,0 +1,22 @@
+import { types } from 'mobx-state-tree';
+import { SearchResultSection } from './SearchResultSection';
+
+export const SearchStore = types
+ .model('SearchStore', {
+ sections: types.array(SearchResultSection),
+ })
+ .actions(self => ({
+ query() {
+ for (let i = 0; i < 100; i++) {
+ self.sections.push(
+ SearchResultSection.create({
+ id: 'starred' + i,
+ title: 'starred',
+ icon: 'fa fa-fw fa-star-o',
+ expanded: false,
+ items: [],
+ })
+ );
+ }
+ },
+ }));
diff --git a/public/app/stores/ServerStatsStore/ServerStat.ts b/public/app/stores/ServerStatsStore/ServerStat.ts
new file mode 100644
index 00000000000..bd819a51e76
--- /dev/null
+++ b/public/app/stores/ServerStatsStore/ServerStat.ts
@@ -0,0 +1,6 @@
+import { types } from 'mobx-state-tree';
+
+export const ServerStat = types.model('ServerStat', {
+ name: types.string,
+ value: types.optional(types.number, 0),
+});
diff --git a/public/app/stores/ServerStatsStore/ServerStatsStore.ts b/public/app/stores/ServerStatsStore/ServerStatsStore.ts
new file mode 100644
index 00000000000..d27285d7a3b
--- /dev/null
+++ b/public/app/stores/ServerStatsStore/ServerStatsStore.ts
@@ -0,0 +1,24 @@
+import { types, getEnv, flow } from 'mobx-state-tree';
+import { ServerStat } from './ServerStat';
+
+export const ServerStatsStore = types
+ .model('ServerStatsStore', {
+ stats: types.array(ServerStat),
+ error: types.optional(types.string, ''),
+ })
+ .actions(self => ({
+ load: flow(function* load() {
+ const backendSrv = getEnv(self).backendSrv;
+ const res = yield backendSrv.get('/api/admin/stats');
+ self.stats.clear();
+ self.stats.push(ServerStat.create({ name: 'Total dashboards', value: res.dashboards }));
+ self.stats.push(ServerStat.create({ name: 'Total users', value: res.users }));
+ self.stats.push(ServerStat.create({ name: 'Active users (seen last 30 days)', value: res.activeUsers }));
+ self.stats.push(ServerStat.create({ name: 'Total orgs', value: res.orgs }));
+ self.stats.push(ServerStat.create({ name: 'Total playlists', value: res.playlists }));
+ self.stats.push(ServerStat.create({ name: 'Total snapshots', value: res.snapshots }));
+ self.stats.push(ServerStat.create({ name: 'Total dashboard tags', value: res.tags }));
+ self.stats.push(ServerStat.create({ name: 'Total starred dashboards', value: res.stars }));
+ self.stats.push(ServerStat.create({ name: 'Total alerts', value: res.alerts }));
+ }),
+ }));
diff --git a/public/app/stores/ViewStore/ViewStore.ts b/public/app/stores/ViewStore/ViewStore.ts
new file mode 100644
index 00000000000..fb1111cf108
--- /dev/null
+++ b/public/app/stores/ViewStore/ViewStore.ts
@@ -0,0 +1,46 @@
+import { types } from 'mobx-state-tree';
+
+const QueryValueType = types.union(types.string, types.boolean, types.number);
+const urlParameterize = queryObj => {
+ const keys = Object.keys(queryObj);
+ const newQuery = keys.reduce((acc: string, key: string, idx: number) => {
+ const preChar = idx === 0 ? '?' : '&';
+ return acc + preChar + key + '=' + queryObj[key];
+ }, '');
+
+ return newQuery;
+};
+
+export const ViewStore = types
+ .model({
+ path: types.string,
+ query: types.map(QueryValueType),
+ })
+ .views(self => ({
+ get currentUrl() {
+ let path = self.path;
+
+ if (self.query.size) {
+ path += urlParameterize(self.query.toJS());
+ }
+ return path;
+ },
+ }))
+ .actions(self => {
+ function updateQuery(query: any) {
+ self.query.clear();
+ for (let key of Object.keys(query)) {
+ self.query.set(key, query[key]);
+ }
+ }
+
+ function updatePathAndQuery(path: string, query: any) {
+ self.path = path;
+ updateQuery(query);
+ }
+
+ return {
+ updateQuery,
+ updatePathAndQuery,
+ };
+ });
diff --git a/public/app/stores/store.ts b/public/app/stores/store.ts
new file mode 100644
index 00000000000..8ad53607ac2
--- /dev/null
+++ b/public/app/stores/store.ts
@@ -0,0 +1,16 @@
+import { RootStore, IRootStore } from './RootStore/RootStore';
+import config from 'app/core/config';
+
+export let store: IRootStore;
+
+export function createStore(backendSrv) {
+ store = RootStore.create(
+ {},
+ {
+ backendSrv: backendSrv,
+ navTree: config.bootData.navTree,
+ }
+ );
+
+ return store;
+}
diff --git a/public/sass/components/_gf-form.scss b/public/sass/components/_gf-form.scss
index 6058e10dab3..46c68a692fa 100644
--- a/public/sass/components/_gf-form.scss
+++ b/public/sass/components/_gf-form.scss
@@ -217,7 +217,7 @@ $input-border: 1px solid $input-border-color;
background-color: transparent;
color: $text-color;
font: normal normal normal $font-size-sm/1 FontAwesome;
- content: "\f0d7";
+ content: '\f0d7';
pointer-events: none;
}
}
@@ -270,7 +270,7 @@ $input-border: 1px solid $input-border-color;
select.gf-form-input {
text-indent: 0.01px;
- text-overflow: "";
+ text-overflow: '';
padding-right: $input-padding-x*3;
appearance: none;
@@ -292,7 +292,7 @@ $input-border: 1px solid $input-border-color;
background-color: transparent;
color: $text-color;
font: normal normal normal $font-size-sm/1 FontAwesome;
- content: "\f0d7";
+ content: '\f0d7';
pointer-events: none;
font-size: 11px;
}
@@ -319,7 +319,7 @@ $input-border: 1px solid $input-border-color;
}
.natural-language-input {
- &input[type="number"] {
+ &input[type='number'] {
font-size: $font-size-base;
line-height: $input-line-height;
margin: -6px -5px 0 5px;
@@ -342,7 +342,7 @@ $input-border: 1px solid $input-border-color;
background-color: transparent;
color: $input-color;
font: normal normal normal $font-size-sm/1 FontAwesome;
- content: "\f0d7";
+ content: '\f0d7';
pointer-events: none;
}
diff --git a/public/sass/components/_page_header.scss b/public/sass/components/_page_header.scss
index 947aad11326..a7380327bd0 100644
--- a/public/sass/components/_page_header.scss
+++ b/public/sass/components/_page_header.scss
@@ -140,7 +140,7 @@
}
&::after {
- content: "";
+ content: '';
position: absolute;
top: 0;
right: -14px; // half of square's length
@@ -157,8 +157,7 @@
background: linear-gradient(135deg, $btn-inverse-bg, $btn-inverse-bg-hl);
// stylish arrow design using box shadow
- box-shadow: 2px -2px 0 2px rgb(35, 31, 31),
- 3px -3px 0 2px rgba(255, 255, 255, 0.1);
+ box-shadow: 2px -2px 0 2px rgb(35, 31, 31), 3px -3px 0 2px rgba(255, 255, 255, 0.1);
// 5px - for rounded arrows and
// 50px - to prevent hover glitches on the border created using shadows*/
diff --git a/public/sass/pages/_alerting.scss b/public/sass/pages/_alerting.scss
index 44c4fabbd5b..b20c90cda1c 100644
--- a/public/sass/pages/_alerting.scss
+++ b/public/sass/pages/_alerting.scss
@@ -29,7 +29,6 @@
}
// Alert List
-
.alert-list {
display: flex;
flex-direction: row;
@@ -94,7 +93,7 @@
.panel-has-alert {
.panel-alert-icon:before {
- content: "\e611";
+ content: '\e611';
position: relative;
top: 1px;
left: -3px;
@@ -108,12 +107,12 @@
.panel-alert-icon:before {
color: $critical;
- content: "\e610";
+ content: '\e610';
}
}
&--alerting::after {
- content: "";
+ content: '';
position: absolute;
top: 0;
z-index: -1;
@@ -121,14 +120,13 @@
height: 100%;
box-shadow: 0 0 10px rgba($critical, 1);
opacity: 0;
- animation: alerting-panel 1.6s cubic-bezier(1, 0.1, 0.73, 1) 0s infinite
- alternate;
+ animation: alerting-panel 1.6s cubic-bezier(1, 0.1, 0.73, 1) 0s infinite alternate;
}
&--ok {
.panel-alert-icon:before {
color: $online;
- content: "\e611";
+ content: '\e611';
}
}
}
diff --git a/public/test/mocks/common.ts b/public/test/mocks/common.ts
new file mode 100644
index 00000000000..0c0ae0aea6b
--- /dev/null
+++ b/public/test/mocks/common.ts
@@ -0,0 +1,15 @@
+export const backendSrv = {
+ get: jest.fn(),
+ post: jest.fn(),
+};
+
+export function createNavTree(...args) {
+ let root = [];
+ let node = root;
+ for (let arg of args) {
+ let child = { id: arg, url: `/url/${arg}`, text: `${arg}-Text`, children: [] };
+ node.push(child);
+ node = child.children;
+ }
+ return root;
+}
diff --git a/tsconfig.json b/tsconfig.json
index bc9222ac87d..3596930a62f 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -13,7 +13,7 @@
"sourceMap": true,
"noEmitOnError": false,
"emitDecoratorMetadata": false,
- "experimentalDecorators": false,
+ "experimentalDecorators": true,
"noImplicitReturns": true,
"noImplicitThis": false,
"noImplicitUseStrict":false,
diff --git a/yarn.lock b/yarn.lock
index a419e1020c9..2c54a93aed8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,14 @@
# yarn lockfile v1
+"@babel/code-frame@^7.0.0-beta.35":
+ version "7.0.0-beta.36"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
"@types/cheerio@*":
version "0.22.5"
resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.5.tgz#db749e8470d98f103d51407db9bee5a8b9d20d45"
@@ -197,7 +205,11 @@
version "21.1.8"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-21.1.8.tgz#d497213725684f1e5a37900b17a47c9c018f1a97"
-"@types/node@*", "@types/node@^8.0.31":
+"@types/node@*":
+ version "8.5.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5"
+
+"@types/node@^8.0.31":
version "8.0.53"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8"
@@ -251,11 +263,11 @@ acorn-dynamic-import@^2.0.0:
dependencies:
acorn "^4.0.3"
-acorn-globals@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
+acorn-globals@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538"
dependencies:
- acorn "^4.0.4"
+ acorn "^5.0.0"
acorn-jsx@^3.0.0:
version "3.0.1"
@@ -267,7 +279,7 @@ acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-acorn@^4.0.3, acorn@^4.0.4:
+acorn@^4.0.3:
version "4.0.13"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
@@ -275,6 +287,10 @@ acorn@^5.0.0, acorn@^5.1.1, acorn@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
+acorn@^5.1.2:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
+
acorn@~2.6.4:
version "2.6.4"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.6.4.tgz#eb1f45b4a43fa31d03701a5ec46f3b52673e90ee"
@@ -795,12 +811,12 @@ babel-helpers@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
-babel-jest@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e"
+babel-jest@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.4.tgz#533c46de37d7c9d7612f408c76314be9277e0c26"
dependencies:
- babel-plugin-istanbul "^4.0.0"
- babel-preset-jest "^21.2.0"
+ babel-plugin-istanbul "^4.1.5"
+ babel-preset-jest "^22.0.3"
babel-loader@^7.1.2:
version "7.1.2"
@@ -822,7 +838,7 @@ babel-plugin-check-es2015-constants@^6.22.0:
dependencies:
babel-runtime "^6.22.0"
-babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.4:
+babel-plugin-istanbul@^4.1.4, babel-plugin-istanbul@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
dependencies:
@@ -830,9 +846,9 @@ babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.4:
istanbul-lib-instrument "^1.7.5"
test-exclude "^4.1.1"
-babel-plugin-jest-hoist@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006"
+babel-plugin-jest-hoist@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.3.tgz#62cde5fe962fd41ae89c119f481ca5cd7dd48bb4"
babel-plugin-syntax-object-rest-spread@^6.13.0:
version "6.13.0"
@@ -1056,11 +1072,11 @@ babel-preset-es2015@^6.24.1:
babel-plugin-transform-es2015-unicode-regex "^6.24.1"
babel-plugin-transform-regenerator "^6.24.1"
-babel-preset-jest@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638"
+babel-preset-jest@^22.0.1, babel-preset-jest@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.3.tgz#e2bb6f6b4a509d3ea0931f013db78c5a84856693"
dependencies:
- babel-plugin-jest-hoist "^21.2.0"
+ babel-plugin-jest-hoist "^22.0.3"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-register@^6.26.0:
@@ -1183,6 +1199,10 @@ binary-extensions@^1.0.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
+bindings@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
+
bl@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
@@ -1303,6 +1323,10 @@ brorand@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+browser-process-hrtime@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e"
+
browser-resolve@^1.11.2:
version "1.11.2"
resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
@@ -1578,7 +1602,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.0, chalk@~1.1.1:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
dependencies:
@@ -2705,6 +2729,10 @@ detect-libc@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+detect-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+
dezalgo@^1.0.0, dezalgo@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
@@ -2781,6 +2809,10 @@ domelementtype@~1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+domexception@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.0.tgz#81fe5df81b3f057052cde3a9fa9bf536a85b9ab0"
+
domhandler@2.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
@@ -3011,17 +3043,28 @@ enzyme-adapter-utils@^1.1.0:
object.assign "^4.0.4"
prop-types "^15.5.10"
+enzyme-to-json@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.3.0.tgz#553e23a09ffb4b0cf09287e2edf9c6539fddaa84"
+ dependencies:
+ lodash "^4.17.4"
+
enzyme@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a"
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479"
dependencies:
cheerio "^1.0.0-rc.2"
function.prototype.name "^1.0.3"
has "^1.0.1"
+ is-boolean-object "^1.0.0"
+ is-callable "^1.1.3"
+ is-number-object "^1.0.3"
+ is-string "^1.0.4"
is-subset "^0.1.1"
lodash "^4.17.4"
+ object-inspect "^1.5.0"
object-is "^1.0.1"
- object.assign "^4.0.4"
+ object.assign "^4.1.0"
object.entries "^1.0.4"
object.values "^1.0.4"
raf "^3.4.0"
@@ -3043,7 +3086,7 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.6.1:
+es-abstract@^1.5.1, es-abstract@^1.6.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
dependencies:
@@ -3146,7 +3189,7 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-escodegen@^1.6.1:
+escodegen@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
dependencies:
@@ -3361,16 +3404,16 @@ expect.js@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/expect.js/-/expect.js-0.2.0.tgz#1028533d2c1c363f74a6796ff57ec0520ded2be1"
-expect@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b"
+expect@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.3.tgz#bb486de7d41bf3eb60d3b16dfd1c158a4d91ddfa"
dependencies:
ansi-styles "^3.2.0"
- jest-diff "^21.2.1"
- jest-get-type "^21.2.0"
- jest-matcher-utils "^21.2.1"
- jest-message-util "^21.2.1"
- jest-regex-util "^21.2.0"
+ jest-diff "^22.0.3"
+ jest-get-type "^22.0.3"
+ jest-matcher-utils "^22.0.3"
+ jest-message-util "^22.0.3"
+ jest-regex-util "^22.0.3"
expose-loader@^0.7.3:
version "0.7.4"
@@ -3743,6 +3786,14 @@ fs-access@^1.0.0:
dependencies:
null-check "^1.0.0"
+fs-extra@4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
fs-extra@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
@@ -3759,14 +3810,6 @@ fs-extra@^3.0.1:
jsonfile "^3.0.0"
universalify "^0.1.0"
-fs-extra@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
fs-vacuum@~1.2.10:
version "1.2.10"
resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36"
@@ -3817,11 +3860,11 @@ function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
function.prototype.name@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327"
dependencies:
define-properties "^1.1.2"
- function-bind "^1.1.0"
+ function-bind "^1.1.1"
is-callable "^1.1.3"
gauge@~2.7.3:
@@ -4290,6 +4333,10 @@ has-flag@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+
has-unicode@^2.0.0, has-unicode@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
@@ -4399,6 +4446,10 @@ hoek@4.x.x:
version "4.2.0"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
+hoist-non-react-statics@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
+
home-or-tmp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
@@ -4743,6 +4794,10 @@ is-binary-path@^1.0.0:
dependencies:
binary-extensions "^1.0.0"
+is-boolean-object@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
+
is-buffer@^1.0.2, is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -4881,6 +4936,10 @@ is-npm@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+is-number-object@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
+
is-number@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
@@ -4983,6 +5042,10 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+is-string@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
+
is-subset@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
@@ -5048,7 +5111,7 @@ isstream@0.1.x, isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-istanbul-api@^1.1.1:
+istanbul-api@^1.1.14:
version "1.2.1"
resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620"
dependencies:
@@ -5064,7 +5127,7 @@ istanbul-api@^1.1.1:
mkdirp "^0.5.1"
once "^1.4.0"
-istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1:
+istanbul-lib-coverage@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
@@ -5074,7 +5137,7 @@ istanbul-lib-hook@^1.1.0:
dependencies:
append-transform "^0.4.0"
-istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1:
+istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
dependencies:
@@ -5095,7 +5158,7 @@ istanbul-lib-report@^1.1.2:
path-parse "^1.0.5"
supports-color "^3.1.2"
-istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2:
+istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
dependencies:
@@ -5111,217 +5174,236 @@ istanbul-reports@^1.1.3:
dependencies:
handlebars "^4.0.3"
-jest-changed-files@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29"
+jest-changed-files@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.3.tgz#3771315acfa24a0ed7e6c545de620db6f1b2d164"
dependencies:
throat "^4.0.0"
-jest-cli@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.2.1.tgz#9c528b6629d651911138d228bdb033c157ec8c00"
+jest-cli@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.4.tgz#0052abaad45c57861c05da8ab5d27bad13ad224d"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
glob "^7.1.2"
graceful-fs "^4.1.11"
is-ci "^1.0.10"
- istanbul-api "^1.1.1"
- istanbul-lib-coverage "^1.0.1"
- istanbul-lib-instrument "^1.4.2"
- istanbul-lib-source-maps "^1.1.0"
- jest-changed-files "^21.2.0"
- jest-config "^21.2.1"
- jest-environment-jsdom "^21.2.1"
- jest-haste-map "^21.2.0"
- jest-message-util "^21.2.1"
- jest-regex-util "^21.2.0"
- jest-resolve-dependencies "^21.2.0"
- jest-runner "^21.2.1"
- jest-runtime "^21.2.1"
- jest-snapshot "^21.2.1"
- jest-util "^21.2.1"
+ istanbul-api "^1.1.14"
+ istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-instrument "^1.8.0"
+ istanbul-lib-source-maps "^1.2.1"
+ jest-changed-files "^22.0.3"
+ jest-config "^22.0.4"
+ jest-environment-jsdom "^22.0.4"
+ jest-get-type "^22.0.3"
+ jest-haste-map "^22.0.3"
+ jest-message-util "^22.0.3"
+ jest-regex-util "^22.0.3"
+ jest-resolve-dependencies "^22.0.3"
+ jest-runner "^22.0.4"
+ jest-runtime "^22.0.4"
+ jest-snapshot "^22.0.3"
+ jest-util "^22.0.4"
+ jest-worker "^22.0.3"
micromatch "^2.3.11"
- node-notifier "^5.0.2"
- pify "^3.0.0"
+ node-notifier "^5.1.2"
+ realpath-native "^1.0.0"
+ rimraf "^2.5.4"
slash "^1.0.0"
string-length "^2.0.0"
strip-ansi "^4.0.0"
which "^1.2.12"
- worker-farm "^1.3.1"
- yargs "^9.0.0"
+ yargs "^10.0.3"
-jest-config@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.2.1.tgz#c7586c79ead0bcc1f38c401e55f964f13bf2a480"
+jest-config@^22.0.1, jest-config@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.4.tgz#9c2a46c0907b1a1af54d9cdbf18e99b447034e11"
dependencies:
chalk "^2.0.1"
glob "^7.1.1"
- jest-environment-jsdom "^21.2.1"
- jest-environment-node "^21.2.1"
- jest-get-type "^21.2.0"
- jest-jasmine2 "^21.2.1"
- jest-regex-util "^21.2.0"
- jest-resolve "^21.2.0"
- jest-util "^21.2.1"
- jest-validate "^21.2.1"
- pretty-format "^21.2.1"
+ jest-environment-jsdom "^22.0.4"
+ jest-environment-node "^22.0.4"
+ jest-get-type "^22.0.3"
+ jest-jasmine2 "^22.0.4"
+ jest-regex-util "^22.0.3"
+ jest-resolve "^22.0.4"
+ jest-util "^22.0.4"
+ jest-validate "^22.0.3"
+ pretty-format "^22.0.3"
-jest-diff@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f"
+jest-diff@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.3.tgz#ffed5aba6beaf63bb77819ba44dd520168986321"
dependencies:
chalk "^2.0.1"
diff "^3.2.0"
- jest-get-type "^21.2.0"
- pretty-format "^21.2.1"
+ jest-get-type "^22.0.3"
+ pretty-format "^22.0.3"
-jest-docblock@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
-
-jest-environment-jsdom@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz#38d9980c8259b2a608ec232deee6289a60d9d5b4"
+jest-docblock@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.3.tgz#c33aa22682b9fc68a5373f5f82994428a2ded601"
dependencies:
- jest-mock "^21.2.0"
- jest-util "^21.2.1"
- jsdom "^9.12.0"
+ detect-newline "^2.1.0"
-jest-environment-node@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8"
+jest-environment-jsdom@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.4.tgz#5723d4e724775ed38948de792e62f2d6a7f452df"
dependencies:
- jest-mock "^21.2.0"
- jest-util "^21.2.1"
+ jest-mock "^22.0.3"
+ jest-util "^22.0.4"
+ jsdom "^11.5.1"
+
+jest-environment-node@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.4.tgz#068671f85a545f96a5469be3a3dd228fca79c709"
+ dependencies:
+ jest-mock "^22.0.3"
+ jest-util "^22.0.4"
jest-get-type@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23"
-jest-haste-map@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8"
+jest-get-type@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.3.tgz#fa894b677c0fcd55eff3fd8ee28c7be942e32d36"
+
+jest-haste-map@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.3.tgz#c9ecb5c871c5465d4bde4139e527fa0dc784aa2d"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
- jest-docblock "^21.2.0"
+ jest-docblock "^22.0.3"
+ jest-worker "^22.0.3"
micromatch "^2.3.11"
sane "^2.0.0"
- worker-farm "^1.3.1"
-jest-jasmine2@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz#9cc6fc108accfa97efebce10c4308548a4ea7592"
+jest-jasmine2@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.4.tgz#f7c0965116efe831ec674dc954b0134639b3dcee"
dependencies:
+ callsites "^2.0.0"
chalk "^2.0.1"
- expect "^21.2.1"
+ expect "^22.0.3"
graceful-fs "^4.1.11"
- jest-diff "^21.2.1"
- jest-matcher-utils "^21.2.1"
- jest-message-util "^21.2.1"
- jest-snapshot "^21.2.1"
- p-cancelable "^0.3.0"
+ jest-diff "^22.0.3"
+ jest-matcher-utils "^22.0.3"
+ jest-message-util "^22.0.3"
+ jest-snapshot "^22.0.3"
+ source-map-support "^0.5.0"
-jest-matcher-utils@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64"
+jest-leak-detector@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.3.tgz#b64904f0e8954a11edb79b0809ff4717fa762d99"
+ dependencies:
+ pretty-format "^22.0.3"
+ optionalDependencies:
+ weak "^1.0.1"
+
+jest-matcher-utils@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.3.tgz#2ec15ca1af7dcabf4daddc894ccce224b948674e"
dependencies:
chalk "^2.0.1"
- jest-get-type "^21.2.0"
- pretty-format "^21.2.1"
+ jest-get-type "^22.0.3"
+ pretty-format "^22.0.3"
-jest-message-util@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe"
+jest-message-util@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.3.tgz#bf674b2762ef2dd53facf2136423fcca264976df"
dependencies:
+ "@babel/code-frame" "^7.0.0-beta.35"
chalk "^2.0.1"
micromatch "^2.3.11"
slash "^1.0.0"
+ stack-utils "^1.0.1"
-jest-mock@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f"
+jest-mock@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.3.tgz#c875e47b5b729c6c020a2fab317b275c0cf88961"
-jest-regex-util@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530"
+jest-regex-util@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.0.3.tgz#c5c10229de5ce2b27bf4347916d95b802ae9aa4d"
-jest-resolve-dependencies@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09"
+jest-resolve-dependencies@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.3.tgz#202ddf370069702cd1865a1952fcc7e52c92720e"
dependencies:
- jest-regex-util "^21.2.0"
+ jest-regex-util "^22.0.3"
-jest-resolve@^21.2.0:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.2.0.tgz#068913ad2ba6a20218e5fd32471f3874005de3a6"
+jest-resolve@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.4.tgz#a6e47f55e9388c7341b5e9732aedc6fe30906121"
dependencies:
browser-resolve "^1.11.2"
chalk "^2.0.1"
- is-builtin-module "^1.0.0"
-jest-runner@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467"
+jest-runner@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.4.tgz#3aa43a31b05ce8271539df580c2eb916023d3367"
dependencies:
- jest-config "^21.2.1"
- jest-docblock "^21.2.0"
- jest-haste-map "^21.2.0"
- jest-jasmine2 "^21.2.1"
- jest-message-util "^21.2.1"
- jest-runtime "^21.2.1"
- jest-util "^21.2.1"
- pify "^3.0.0"
+ jest-config "^22.0.4"
+ jest-docblock "^22.0.3"
+ jest-haste-map "^22.0.3"
+ jest-jasmine2 "^22.0.4"
+ jest-leak-detector "^22.0.3"
+ jest-message-util "^22.0.3"
+ jest-runtime "^22.0.4"
+ jest-util "^22.0.4"
+ jest-worker "^22.0.3"
throat "^4.0.0"
- worker-farm "^1.3.1"
-jest-runtime@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.2.1.tgz#99dce15309c670442eee2ebe1ff53a3cbdbbb73e"
+jest-runtime@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.4.tgz#8f69aa7b5fbb3acd35dc262cbf654e563f69b7b4"
dependencies:
babel-core "^6.0.0"
- babel-jest "^21.2.0"
- babel-plugin-istanbul "^4.0.0"
+ babel-jest "^22.0.4"
+ babel-plugin-istanbul "^4.1.5"
chalk "^2.0.1"
convert-source-map "^1.4.0"
graceful-fs "^4.1.11"
- jest-config "^21.2.1"
- jest-haste-map "^21.2.0"
- jest-regex-util "^21.2.0"
- jest-resolve "^21.2.0"
- jest-util "^21.2.1"
+ jest-config "^22.0.4"
+ jest-haste-map "^22.0.3"
+ jest-regex-util "^22.0.3"
+ jest-resolve "^22.0.4"
+ jest-util "^22.0.4"
json-stable-stringify "^1.0.1"
micromatch "^2.3.11"
+ realpath-native "^1.0.0"
slash "^1.0.0"
strip-bom "3.0.0"
write-file-atomic "^2.1.0"
- yargs "^9.0.0"
+ yargs "^10.0.3"
-jest-snapshot@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.2.1.tgz#29e49f16202416e47343e757e5eff948c07fd7b0"
+jest-snapshot@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.3.tgz#a949b393781d2fdb4773f6ea765dd67ad1da291e"
dependencies:
chalk "^2.0.1"
- jest-diff "^21.2.1"
- jest-matcher-utils "^21.2.1"
+ jest-diff "^22.0.3"
+ jest-matcher-utils "^22.0.3"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
- pretty-format "^21.2.1"
+ pretty-format "^22.0.3"
-jest-util@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78"
+jest-util@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.4.tgz#d920a513e0645aaab030cee38e4fe7d5bed8bb6d"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.11"
- jest-message-util "^21.2.1"
- jest-mock "^21.2.0"
- jest-validate "^21.2.1"
+ is-ci "^1.0.10"
+ jest-message-util "^22.0.3"
+ jest-validate "^22.0.3"
mkdirp "^0.5.1"
-jest-validate@^21.1.0, jest-validate@^21.2.1:
+jest-validate@^21.1.0:
version "21.2.1"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7"
dependencies:
@@ -5330,11 +5412,26 @@ jest-validate@^21.1.0, jest-validate@^21.2.1:
leven "^2.1.0"
pretty-format "^21.2.1"
-jest@^21.2.1:
- version "21.2.1"
- resolved "https://registry.yarnpkg.com/jest/-/jest-21.2.1.tgz#c964e0b47383768a1438e3ccf3c3d470327604e1"
+jest-validate@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.3.tgz#2850d949a36c48b1a40f7eebae1d8539126f7829"
dependencies:
- jest-cli "^21.2.1"
+ chalk "^2.0.1"
+ jest-get-type "^22.0.3"
+ leven "^2.1.0"
+ pretty-format "^22.0.3"
+
+jest-worker@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.3.tgz#30433faca67814a8f80559f75ab2ceaa61332fd2"
+ dependencies:
+ merge-stream "^1.0.1"
+
+jest@^22.0.4:
+ version "22.0.4"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-22.0.4.tgz#d3cf560ece6b825b115dce80b9826ceb40f87961"
+ dependencies:
+ jest-cli "^22.0.4"
jquery@^3.2.1:
version "3.2.1"
@@ -5429,28 +5526,33 @@ jsdoctypeparser@~1.2.0:
dependencies:
lodash "^3.7.0"
-jsdom@^9.12.0:
- version "9.12.0"
- resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4"
+jsdom@^11.5.1:
+ version "11.5.1"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.5.1.tgz#5df753b8d0bca20142ce21f4f6c039f99a992929"
dependencies:
abab "^1.0.3"
- acorn "^4.0.4"
- acorn-globals "^3.1.0"
+ acorn "^5.1.2"
+ acorn-globals "^4.0.0"
array-equal "^1.0.0"
+ browser-process-hrtime "^0.1.2"
content-type-parser "^1.0.1"
cssom ">= 0.3.2 < 0.4.0"
cssstyle ">= 0.2.37 < 0.3.0"
- escodegen "^1.6.1"
+ domexception "^1.0.0"
+ escodegen "^1.9.0"
html-encoding-sniffer "^1.0.1"
- nwmatcher ">= 1.3.9 < 2.0.0"
- parse5 "^1.5.1"
- request "^2.79.0"
+ left-pad "^1.2.0"
+ nwmatcher "^1.4.3"
+ parse5 "^3.0.2"
+ pn "^1.0.0"
+ request "^2.83.0"
+ request-promise-native "^1.0.3"
sax "^1.2.1"
symbol-tree "^3.2.1"
- tough-cookie "^2.3.2"
- webidl-conversions "^4.0.0"
+ tough-cookie "^2.3.3"
+ webidl-conversions "^4.0.2"
whatwg-encoding "^1.0.1"
- whatwg-url "^4.3.0"
+ whatwg-url "^6.3.0"
xml-name-validator "^2.0.1"
jsesc@^0.5.0, jsesc@~0.5.0:
@@ -5719,6 +5821,10 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
+left-pad@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee"
+
leven@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
@@ -5927,6 +6033,10 @@ lodash.mergewith@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+
lodash.tail@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
@@ -5951,7 +6061,7 @@ lodash@^3.10.1, lodash@^3.5.0, lodash@^3.6.0, lodash@^3.7.0, lodash@^3.8.0, loda
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
-lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.7.0, lodash@^4.8.0, lodash@~4.17.4:
+lodash@^4.0.0, lodash@^4.0.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.7.0, lodash@^4.8.0, lodash@~4.17.4:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -6141,6 +6251,12 @@ merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ dependencies:
+ readable-stream "^2.0.1"
+
merge@^1.1.3, merge@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
@@ -6303,6 +6419,20 @@ mkdirp@0.5.1, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi
dependencies:
minimist "0.0.8"
+mobx-react@^4.3.5:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-4.3.5.tgz#76853f2f2ef4a6f960c374bcd9f01e875929c04c"
+ dependencies:
+ hoist-non-react-statics "^2.3.1"
+
+mobx-state-tree@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mobx-state-tree/-/mobx-state-tree-1.3.1.tgz#9e1ba9b8b6ea183f1a4a2ae1f67bfa8f2bcae4fe"
+
+mobx@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/mobx/-/mobx-3.4.1.tgz#37abe5ee882d401828d9f26c6c1a2f47614bbbef"
+
mocha@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b"
@@ -6366,7 +6496,7 @@ mute-stream@~0.0.4:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-nan@^2.3.0, nan@^2.3.2, nan@^2.6.2:
+nan@^2.0.5, nan@^2.3.0, nan@^2.3.2, nan@^2.6.2:
version "2.8.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
@@ -6551,7 +6681,7 @@ node-libs-browser@^2.0.0:
util "^0.10.3"
vm-browserify "0.0.4"
-node-notifier@^5.0.2:
+node-notifier@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff"
dependencies:
@@ -6888,7 +7018,7 @@ number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-"nwmatcher@>= 1.3.9 < 2.0.0":
+nwmatcher@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
@@ -6916,11 +7046,15 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
+object-inspect@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3"
+
object-is@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
-object-keys@^1.0.10, object-keys@^1.0.8:
+object-keys@^1.0.11, object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
@@ -6930,13 +7064,14 @@ object-visit@^1.0.0:
dependencies:
isobject "^3.0.0"
-object.assign@^4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
+object.assign@^4.0.4, object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
dependencies:
define-properties "^1.1.2"
- function-bind "^1.1.0"
- object-keys "^1.0.10"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
object.entries@^1.0.4:
version "1.0.4"
@@ -6947,6 +7082,13 @@ object.entries@^1.0.4:
function-bind "^1.1.0"
has "^1.0.1"
+object.getownpropertydescriptors@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.5.1"
+
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
@@ -7063,10 +7205,6 @@ osenv@0, osenv@^0.1.4, osenv@~0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
-p-cancelable@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
-
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -7173,11 +7311,7 @@ parse-json@^3.0.0:
dependencies:
error-ex "^1.3.1"
-parse5@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
-
-parse5@^3.0.1:
+parse5@^3.0.1, parse5@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
dependencies:
@@ -7366,6 +7500,10 @@ pluralize@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+pn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.0.0.tgz#1cf5a30b0d806cd18f88fc41a6b5d4ad615b3ba9"
+
posix-character-classes@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@@ -7723,6 +7861,13 @@ pretty-format@^21.2.1:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
+pretty-format@^22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.3.tgz#a2bfa59fc33ad24aa4429981bb52524b41ba5dd7"
+ dependencies:
+ ansi-regex "^3.0.0"
+ ansi-styles "^3.2.0"
+
private@^0.1.6, private@^0.1.7, private@~0.1.5:
version "0.1.8"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
@@ -7838,6 +7983,10 @@ punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+punycode@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
+
q@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -7948,9 +8097,9 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-dom@^16.1.1:
- version "16.1.1"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.1.1.tgz#b2e331b6d752faf1a2d31399969399a41d8d45f8"
+react-dom@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
dependencies:
fbjs "^0.8.16"
loose-envify "^1.1.0"
@@ -7997,9 +8146,9 @@ react-test-renderer@^16.0.0, react-test-renderer@^16.0.0-0:
object-assign "^4.1.1"
prop-types "^15.6.0"
-react@^16.1.1:
- version "16.1.1"
- resolved "https://registry.yarnpkg.com/react/-/react-16.1.1.tgz#d5c4ef795507e3012282dd51261ff9c0e824fe1f"
+react@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
dependencies:
fbjs "^0.8.16"
loose-envify "^1.1.0"
@@ -8147,6 +8296,12 @@ readline2@^1.0.1:
is-fullwidth-code-point "^1.0.0"
mute-stream "0.0.5"
+realpath-native@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0"
+ dependencies:
+ util.promisify "^1.0.0"
+
recast@~0.11.12:
version "0.11.23"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
@@ -8301,7 +8456,21 @@ request-progress@^2.0.1:
dependencies:
throttleit "^1.0.0"
-request@2, request@^2.74.0, request@^2.79.0, request@^2.81.0, request@~2.83.0:
+request-promise-core@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6"
+ dependencies:
+ lodash "^4.13.1"
+
+request-promise-native@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5"
+ dependencies:
+ request-promise-core "1.1.1"
+ stealthy-require "^1.1.0"
+ tough-cookie ">=2.3.3"
+
+request@2, request@^2.74.0, request@^2.81.0, request@^2.83.0, request@~2.83.0:
version "2.83.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
dependencies:
@@ -9034,6 +9203,10 @@ stack-trace@0.0.x:
version "0.0.10"
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+stack-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
+
staged-git-files@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35"
@@ -9059,6 +9232,10 @@ stdout-stream@^1.4.0:
dependencies:
readable-stream "^2.0.1"
+stealthy-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+
stream-browserify@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
@@ -9488,15 +9665,17 @@ toposort@^1.0.0:
version "1.0.6"
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
-tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
+tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
dependencies:
punycode "^1.4.1"
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+tr46@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ dependencies:
+ punycode "^2.1.0"
trim-newlines@^1.0.0:
version "1.0.0"
@@ -9520,27 +9699,26 @@ tryor@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b"
-ts-jest@^21.1.3:
- version "21.2.3"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-21.2.3.tgz#d90cd143c433e8dfd9b8df54921c7f3f1d8b9819"
+ts-jest@^22.0.0:
+ version "22.0.0"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-22.0.0.tgz#cce1a5f1106150ca002d09f7e85913355ceb5e8d"
dependencies:
babel-core "^6.24.1"
babel-plugin-istanbul "^4.1.4"
babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
- babel-preset-jest "^21.2.0"
+ babel-preset-jest "^22.0.1"
cpx "^1.5.0"
- fs-extra "^4.0.2"
- jest-config "^21.2.1"
- jest-util "^21.2.1"
+ fs-extra "4.0.3"
+ jest-config "^22.0.1"
pkg-dir "^2.0.0"
source-map-support "^0.5.0"
yargs "^10.0.3"
-ts-loader@^2.3.7:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-2.3.7.tgz#a9028ced473bee12f28a75f9c5b139979d33f2fc"
+ts-loader@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-3.2.0.tgz#23211922179b81f7448754b7fdfca45b8374a15a"
dependencies:
- chalk "^2.0.1"
+ chalk "^2.3.0"
enhanced-resolve "^3.0.0"
loader-utils "^1.0.2"
semver "^5.0.1"
@@ -9559,7 +9737,7 @@ tslint-loader@^3.5.3:
rimraf "^2.4.4"
semver "^5.3.0"
-tslint@^5.7.0:
+tslint@^5.8.0:
version "5.8.0"
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.8.0.tgz#1f49ad5b2e77c76c3af4ddcae552ae4e3612eb13"
dependencies:
@@ -9616,9 +9794,9 @@ typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-typescript@^2.5.2:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631"
+typescript@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4"
ua-parser-js@^0.7.9:
version "0.7.17"
@@ -9844,6 +10022,13 @@ util-extend@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f"
+util.promisify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
util@0.10.3, "util@>=0.10.3 <1", util@^0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
@@ -9974,11 +10159,14 @@ wcwidth@^1.0.0:
dependencies:
defaults "^1.0.3"
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+weak@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/weak/-/weak-1.0.1.tgz#ab99aab30706959aa0200cb8cf545bb9cb33b99e"
+ dependencies:
+ bindings "^1.2.1"
+ nan "^2.0.5"
-webidl-conversions@^4.0.0:
+webidl-conversions@^4.0.1, webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -10036,9 +10224,9 @@ webpack-sources@^1.0.1:
source-list-map "^2.0.0"
source-map "~0.6.1"
-webpack@^3.6.0:
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
+webpack@^3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725"
dependencies:
acorn "^5.0.0"
acorn-dynamic-import "^2.0.0"
@@ -10073,12 +10261,13 @@ whatwg-fetch@>=0.10.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
-whatwg-url@^4.3.0:
- version "4.8.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0"
+whatwg-url@^6.3.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08"
dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.0"
+ webidl-conversions "^4.0.1"
whet.extend@~0.9.9:
version "0.9.9"
@@ -10144,7 +10333,7 @@ wordwrap@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-worker-farm@^1.3.1, worker-farm@~1.5.0:
+worker-farm@~1.5.0:
version "1.5.2"
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
dependencies:
@@ -10316,24 +10505,6 @@ yargs@^8.0.2:
y18n "^3.2.1"
yargs-parser "^7.0.0"
-yargs@^9.0.0:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
- dependencies:
- camelcase "^4.1.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^2.0.0"
- read-pkg-up "^2.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1"
- yargs-parser "^7.0.0"
-
yargs@~3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"