From 198fc3579e6e72a3393cdc470641e7b06f2507e5 Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 21 Mar 2019 16:16:17 +0700 Subject: [PATCH 001/320] fixed overwriting of deleted route --- backend/routes/route/post.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/routes/route/post.js b/backend/routes/route/post.js index b6b1ce2..cc92c0a 100644 --- a/backend/routes/route/post.js +++ b/backend/routes/route/post.js @@ -9,7 +9,7 @@ module.exports = async (req, res) => { if (!owner) return res.send({ success: false, reason: 'unauthorized', id, token }); const title = parseString(body.title, 64); - const address = parseAddress(body.address, 32) + const address = parseAddress(body.address, 32); const route = parseRoute(body.route); const stickers = parseStickers(body.stickers); const logo = parseString(body.logo, 16); @@ -21,7 +21,7 @@ module.exports = async (req, res) => { return res.send({ success: false, mode: 'empty' }); } - const exists = await Route.findOne({ _id: address, is_deleted: false }).populate('owner', '_id'); + const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'exists' }); if (exists && !force) return res.send({ success: false, mode: 'overwriting' }); From a920217959aae0aac3d5ee5ff202a5818709c3d3 Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 21 Mar 2019 16:21:16 +0700 Subject: [PATCH 002/320] clearing search string on search tab change --- src/redux/user/sagas.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index be287fb..d9cdfa6 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -32,7 +32,7 @@ import { setProvider, changeProvider, setSaveLoading, - mapsSetShift, searchChangeDistance, clearAll, setFeature, + mapsSetShift, searchChangeDistance, clearAll, setFeature, searchSetTitle, } from '$redux/user/actions'; import { getUrlData, parseQuery, pushLoaderState, pushNetworkInitError, pushPath, replacePath } from '$utils/history'; import { editor } from '$modules/Editor'; @@ -568,7 +568,7 @@ function* searchSetTabSaga() { yield put(searchChangeDistance([0, 10000])); yield put(searchPutRoutes({ list: [], min: 0, max: 10000, step: 20, shift: 0 })); - yield call(searchSetSaga); + yield put(searchSetTitle('')); } function* setSaveSuccessSaga({ From baa41f707d0cfd5aaa334b75bd2e9153a5e3c152 Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 21 Mar 2019 17:58:38 +0700 Subject: [PATCH 003/320] starred content --- backend/models/Route.js | 1 + backend/routes/route.js | 2 ++ backend/routes/route/list.js | 16 +++++++++++++--- backend/routes/route/patch.js | 2 +- backend/routes/route/post.js | 2 +- backend/routes/route/star.js | 19 +++++++++++++++++++ src/components/dialogs/MapListDialog.tsx | 22 ++++++++++++++++++---- src/components/maps/RouteRowView.tsx | 19 +++++++++++++++++-- src/components/maps/RouteRowWrapper.tsx | 8 +++++++- src/constants/api.ts | 1 + src/constants/auth.ts | 2 ++ src/constants/dialogs.ts | 4 +++- src/redux/user/actions.ts | 2 ++ src/redux/user/constants.ts | 2 ++ src/redux/user/reducer.ts | 15 +++++++++++++++ src/redux/user/sagas.ts | 24 +++++++++++++++++------- src/sprites/icon.svg | 10 ++++++++++ src/styles/dialogs.less | 18 +++++++++++++++++- src/utils/api.ts | 12 +++++++++++- 19 files changed, 159 insertions(+), 22 deletions(-) create mode 100644 backend/routes/route/star.js diff --git a/backend/models/Route.js b/backend/models/Route.js index 9be11cf..32c3696 100644 --- a/backend/models/Route.js +++ b/backend/models/Route.js @@ -13,6 +13,7 @@ const RouteSchema = new Schema( owner: { type: Schema.Types.ObjectId, ref: 'User' }, distance: { type: Number, default: 0 }, is_public: { type: Boolean, default: false }, + is_starred: { type: Boolean, default: false }, is_deleted: { type: Boolean, default: false }, created_at: { type: Date, default: Date.now() }, updated_at: { type: Date, default: Date.now() }, diff --git a/backend/routes/route.js b/backend/routes/route.js index 65c49a3..c340d14 100644 --- a/backend/routes/route.js +++ b/backend/routes/route.js @@ -4,9 +4,11 @@ const get = require('./route/get'); const list = require('./route/list'); const drop = require('./route/drop'); const patch = require('./route/patch'); +const star = require('./route/star'); const router = express.Router(); +router.post('/star', star); router.post('/', post); router.get('/', get); router.patch('/', patch); diff --git a/backend/routes/route/list.js b/backend/routes/route/list.js index 12f559e..50198ab 100644 --- a/backend/routes/route/list.js +++ b/backend/routes/route/list.js @@ -3,10 +3,12 @@ const { Route, User } = require('../../models'); module.exports = async (req, res) => { const { query: { - id, token, title, distance, author, step = 20, shift = 0, + id, token, title, distance, author, step = 20, shift = 0, starred, } } = req; + const is_starred = parseInt(starred, 10) === 1; + const user = await User.findOne({ _id: id, token }); let criteria = { is_deleted: false }; @@ -14,13 +16,21 @@ module.exports = async (req, res) => { if (title) { criteria = { ...criteria, - $or: [ + $and: [ { title: new RegExp(title.trim(), 'ig') }, { _id: new RegExp(title.trim(), 'ig') }, ], }; } + console.log('is starred?', starred); + if (is_starred) { + criteria = { + ...criteria, + is_starred: true, + }; + } + if (!author || !user || (user._id !== author)) { criteria = { ...criteria, @@ -32,7 +42,7 @@ module.exports = async (req, res) => { { ...criteria, }, - '_id title distance owner updated_at is_public is_deleted', + '_id title distance owner updated_at is_public is_deleted is_starred', { limit: 9000, sort: { updated_at: -1 }, diff --git a/backend/routes/route/patch.js b/backend/routes/route/patch.js index 47eeecb..3abbdb1 100644 --- a/backend/routes/route/patch.js +++ b/backend/routes/route/patch.js @@ -17,7 +17,7 @@ module.exports = async (req, res) => { if (!exists) return res.send({ success: false, mode: 'not_exists' }); if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'not_yours' }); - exists.set({ title, is_public }).save(); + await exists.set({ title, is_public }).save(); return res.send({ success: true, ...exists }); }; diff --git a/backend/routes/route/post.js b/backend/routes/route/post.js index cc92c0a..f2ac8af 100644 --- a/backend/routes/route/post.js +++ b/backend/routes/route/post.js @@ -27,7 +27,7 @@ module.exports = async (req, res) => { if (exists && !force) return res.send({ success: false, mode: 'overwriting' }); if (exists) { - exists.set({ + await exists.set({ title, route, stickers, logo, distance, updated_at: Date.now(), provider, is_public, }).save(); diff --git a/backend/routes/route/star.js b/backend/routes/route/star.js new file mode 100644 index 0000000..aa96fce --- /dev/null +++ b/backend/routes/route/star.js @@ -0,0 +1,19 @@ +const { User, Route } = require('../../models'); + +module.exports = async (req, res) => { + const { body, body: { id, token, address } } = req; + + const owner = await User.findOne({ _id: id, token }).populate('routes'); + + if (!owner || owner.role !== 'admin') return res.send({ success: false, reason: 'unauthorized' }); + + const is_starred = !!body.is_starred; + + const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); + if (!exists) return res.send({ success: false, mode: 'not_exists' }); + + await exists.set({ is_starred }).save(); + + return res.send({ success: true, ...exists }); +}; + diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index c6b8b88..968a233 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -10,7 +10,7 @@ import { setDialogActive, mapsLoadMore, dropRoute, - modifyRoute, + modifyRoute, toggleRouteStarred, } from '$redux/user/actions'; import { isMobile } from '$utils/window'; import classnames from 'classnames'; @@ -21,12 +21,14 @@ import { TABS } from '$constants/dialogs'; import { Icon } from '$components/panels/Icon'; import { pushPath } from '$utils/history'; import { IRootState, IRouteListItem } from '$redux/user/reducer'; +import { ROLES } from "$constants/auth"; export interface IMapListDialogProps extends IRootState { marks: { [x: number]: string }, routes_sorted: Array, routes: IRootState['routes'], ready: IRootState['ready'], + role: IRootState['user']['role'], mapsLoadMore: typeof mapsLoadMore, searchSetDistance: typeof searchSetDistance, @@ -35,6 +37,7 @@ export interface IMapListDialogProps extends IRootState { setDialogActive: typeof setDialogActive, dropRoute: typeof dropRoute, modifyRoute: typeof modifyRoute, + toggleRouteStarred: typeof toggleRouteStarred, } export interface IMapListDialogState { @@ -117,9 +120,12 @@ class Component extends React.Component this.props.toggleRouteStarred(id); + render() { const { ready, + role, routes: { list, loading, @@ -136,6 +142,8 @@ class Component extends React.Component { list.length === 0 && loading && @@ -156,7 +164,7 @@ class Component extends React.Component { - Object.keys(TABS).map(item => ( + Object.keys(TABS).map(item => (role === ROLES.admin || item !== 'all') && (
this.props.searchSetTab(item)} @@ -208,6 +216,7 @@ class Component extends React.Component )) } @@ -233,13 +244,15 @@ class Component extends React.Component { +const mapStateToProps = ({ user: { editing, routes, user: { role } } }: { user: IRootState }) => { if (routes.filter.max >= 9999) { return { - routes, editing, marks: {}, ready: false, + routes, editing, marks: {}, ready: false, role, }; } + return ({ + role, routes, editing, ready: true, @@ -260,6 +273,7 @@ const mapDispatchToProps = dispatch => bindActionCreators({ mapsLoadMore, dropRoute, modifyRoute, + toggleRouteStarred, }, dispatch); export const MapListDialog = connect(mapStateToProps, mapDispatchToProps)(Component); diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 703b720..8c00093 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -5,15 +5,20 @@ import { MapListDialog } from "$components/dialogs/MapListDialog"; import { Tooltip } from "$components/panels/Tooltip"; import { ReactElement } from "react"; import classnames from 'classnames'; +import { toggleRouteStarred } from "$redux/user/actions"; interface Props { - _id: string, tab: string, + + _id: string, title: string, distance: number, is_public: boolean, + is_admin: boolean, + is_starred: boolean, openRoute: typeof MapListDialog.openRoute, + toggleStarred: typeof MapListDialog.toggleStarred, startEditing: typeof MapListDialog.startEditing, stopEditing: typeof MapListDialog.stopEditing, showMenu: typeof MapListDialog.showMenu, @@ -22,11 +27,21 @@ interface Props { } export const RouteRowView = ({ - title, distance, _id, openRoute, tab, startEditing, showMenu, showDropCard, hideMenu, + title, distance, _id, openRoute, tab, startEditing, showMenu, showDropCard, hideMenu, is_admin, is_starred, toggleStarred, }: Props): ReactElement => (
+ { + (tab === 'all' || tab === 'starred') && is_admin && +
+ { + is_starred + ? + : + } +
+ }
openRoute(_id)} diff --git a/src/components/maps/RouteRowWrapper.tsx b/src/components/maps/RouteRowWrapper.tsx index a2cc981..a8379d4 100644 --- a/src/components/maps/RouteRowWrapper.tsx +++ b/src/components/maps/RouteRowWrapper.tsx @@ -12,7 +12,9 @@ interface Props { title: string, distance: number, is_public: boolean, + is_starred: boolean, + is_admin: boolean, is_editing_target: boolean, is_menu_target: boolean, @@ -24,6 +26,7 @@ interface Props { showDropCard: typeof MapListDialog.showDropCard, dropRoute: typeof MapListDialog.dropRoute, modifyRoute: typeof MapListDialog.modifyRoute, + toggleStarred: typeof MapListDialog.toggleStarred, is_editing_mode: 'edit' | 'drop', } @@ -31,7 +34,7 @@ interface Props { export const RouteRowWrapper = ({ title, distance, _id, openRoute, tab, startEditing, showMenu, showDropCard, is_public, is_editing_target, is_menu_target, is_editing_mode, - dropRoute, stopEditing, modifyRoute, hideMenu, + dropRoute, stopEditing, modifyRoute, hideMenu, is_admin, is_starred, toggleStarred, }: Props): ReactElement => (
}
diff --git a/src/constants/api.ts b/src/constants/api.ts index f8b8b05..f2aafdc 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -10,4 +10,5 @@ export const API: { [x: string]: string } = { DROP_ROUTE: `${CLIENT.API_ADDR}/route`, MODIFY_ROUTE: `${CLIENT.API_ADDR}/route/modify`, + SET_STARRED: `${CLIENT.API_ADDR}/route/star`, }; diff --git a/src/constants/auth.ts b/src/constants/auth.ts index 32fcb90..2b1e41e 100644 --- a/src/constants/auth.ts +++ b/src/constants/auth.ts @@ -1,6 +1,7 @@ export interface IRoles { guest: string, vk: string, + admin: string, } export interface IUser { @@ -24,6 +25,7 @@ export interface IUser { export const ROLES: IRoles = { guest: 'guest', vk: 'vk', + admin: 'admin', }; export const DEFAULT_USER: IUser = { diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts index 5c8fc6b..8f10cc8 100644 --- a/src/constants/dialogs.ts +++ b/src/constants/dialogs.ts @@ -7,6 +7,7 @@ export interface IDialogs { export interface IMapTabs { mine: string, all: string, + starred: string, } export const DIALOGS: IDialogs = ({ @@ -17,5 +18,6 @@ export const DIALOGS: IDialogs = ({ export const TABS: IMapTabs = ({ mine: 'Мои', - all: 'Общие', + starred: 'Общие', + all: 'ВСЕ', }); diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 60ab5f2..9dd9a00 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -76,3 +76,5 @@ export const dropRoute = (_id: string) => ({ type: ACTIONS.DROP_ROUTE, _id }); export const modifyRoute = (_id: string, { title, is_public }: { title: string, is_public: boolean }) => ({ type: ACTIONS.MODIFY_ROUTE, _id, title, is_public }); +export const toggleRouteStarred = (_id: string) => ({ type: ACTIONS.TOGGLE_ROUTE_STARRED, _id }); +export const setRouteStarred = (_id: string, is_starred: boolean) => ({ type: ACTIONS.SET_ROUTE_STARRED, _id, is_starred }); diff --git a/src/redux/user/constants.ts b/src/redux/user/constants.ts index d5dfad9..2429a38 100644 --- a/src/redux/user/constants.ts +++ b/src/redux/user/constants.ts @@ -81,4 +81,6 @@ export const ACTIONS: IActions = { DROP_ROUTE: 'DROP_ROUTE', MODIFY_ROUTE: 'MODIFY_ROUTE', + SET_ROUTE_STARRED: 'SET_ROUTE_STARRED', + TOGGLE_ROUTE_STARRED: 'TOGGLE_ROUTE_STARRED', }; diff --git a/src/redux/user/reducer.ts b/src/redux/user/reducer.ts index 1c0deaf..137d49b 100644 --- a/src/redux/user/reducer.ts +++ b/src/redux/user/reducer.ts @@ -14,6 +14,7 @@ export interface IRouteListItem { title: string, distance: number, is_public: boolean, + is_starred: boolean, updated_at: string, } @@ -304,6 +305,18 @@ const setIsRouting: ActionHandler = (state, is_routing, }); +const setRouteStarred: ActionHandler = (state, { _id, is_starred }) => ({ + ...state, + routes: { + ...state.routes, + list: ( + state.routes.list + .map(el => el._id === _id ? { ...el, is_starred } : el) + .filter(el => state.routes.filter.tab !== 'starred' || el.is_starred) + ) + } +}); + const HANDLERS = ({ [ACTIONS.SET_USER]: setUser, [ACTIONS.SET_EDITING]: setEditing, @@ -348,6 +361,8 @@ const HANDLERS = ({ [ACTIONS.SET_FEATURE]: setFeature, [ACTIONS.SET_IS_ROUTING]: setIsRouting, + + [ACTIONS.SET_ROUTE_STARRED]: setRouteStarred, }); export const INITIAL_STATE: IRootReducer = { diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index d9cdfa6..90d1489 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -6,7 +6,7 @@ import { checkUserToken, dropRoute, getGuestToken, getRouteList, getStoredMap, modifyRoute, - postMap + postMap, sendRouteStarred } from '$utils/api'; import { hideRenderer, @@ -32,7 +32,7 @@ import { setProvider, changeProvider, setSaveLoading, - mapsSetShift, searchChangeDistance, clearAll, setFeature, searchSetTitle, + mapsSetShift, searchChangeDistance, clearAll, setFeature, searchSetTitle, setRouteStarred, } from '$redux/user/actions'; import { getUrlData, parseQuery, pushLoaderState, pushNetworkInitError, pushPath, replacePath } from '$utils/history'; import { editor } from '$modules/Editor'; @@ -51,7 +51,7 @@ import { } from '$utils/renderer'; import { ILogos, LOGOS } from '$constants/logos'; import { DEFAULT_PROVIDER } from '$constants/providers'; -import { DIALOGS } from '$constants/dialogs'; +import { DIALOGS, TABS } from '$constants/dialogs'; import * as ActionCreators from '$redux/user/actions'; import { IRootState } from "$redux/user/reducer"; @@ -501,7 +501,7 @@ function* searchGetRoutes() { const { routes: { step, shift, filter: { title, distance, tab } } } = yield select(getState); - const result = yield call(getRouteList, { + return yield call(getRouteList, { id, token, title, @@ -509,10 +509,8 @@ function* searchGetRoutes() { step, shift, author: tab === 'mine' ? id : '', - starred: tab === 'starred', + starred: tab === 'starred' ? 1 : 0, }); - - return result; } function* searchSetSagaWorker() { @@ -697,6 +695,17 @@ function* modifyRouteSaga({ _id, title, is_public }: ReturnType) { + const { routes: { list } } = yield select(getState); + const route = list.find(el => el._id === _id); + const { id, token } = yield select(getUser); + + yield put(setRouteStarred(_id, !route.is_starred)); + const result = yield sendRouteStarred({ id, token, _id, is_starred: !route.is_starred }); + + if (!result) return yield put(setRouteStarred(_id, route.is_starred)); +} + export function* userSaga() { yield takeLatest(REHYDRATE, authCheckSaga); yield takeEvery(ACTIONS.SET_MODE, setModeSaga); @@ -744,4 +753,5 @@ export function* userSaga() { yield takeLatest(ACTIONS.DROP_ROUTE, dropRouteSaga); yield takeLatest(ACTIONS.MODIFY_ROUTE, modifyRouteSaga); + yield takeLatest(ACTIONS.TOGGLE_ROUTE_STARRED, toggleRouteStarredSaga); } diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index 96b9fa0..41e267a 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -384,6 +384,16 @@ + + + + + + + + + + diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 4bc4f51..66203a3 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -196,7 +196,7 @@ } &.is_menu_target { - .route-row { + .route-row, .route-row-fav { transform: translateX(-120px); } @@ -222,6 +222,7 @@ overflow: hidden; transition: height 500ms; position: relative; + display: flex; &.has_menu { padding-right: 32px; @@ -285,6 +286,21 @@ } } +.route-row-fav { + width: 32px; + display: flex; + align-items: center; + justify-content: center; + fill: fade(white, 30%); + background: fade(white, 5%); + cursor: pointer; + transition: background 250ms, transform 500ms; + + &:hover { + background: fade(white, 10%); + } +} + .route-row-edit-menu { width: 0; height: 100%; diff --git a/src/utils/api.ts b/src/utils/api.ts index 8f2f53f..66650c1 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -29,7 +29,7 @@ interface IGetRouteList { author: IRootState['routes']['filter']['author'], step: IRootState['routes']['step'], shift: IRootState['routes']['step'], - starred: IRootState['routes']['filter']['starred'], + starred: number, id: IRootState['user']['id'], token: IRootState['user']['token'], } @@ -112,3 +112,13 @@ export const modifyRoute = ( ): AxiosPromise => ( axios.patch(API.DROP_ROUTE, { address, id, token, title, is_public }) ); + +export const sendRouteStarred = ( + { id, token, _id, is_starred }: + { id: string, token: string, _id: string, is_starred: boolean } +): Promise => ( + axios.post(API.SET_STARRED, { id, token, address: _id, is_starred }) + .then(() => true) + .catch(() => true) +); + From 56f5c66c79c8dbd121d9ee3683aa2f886d2007e7 Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 21 Mar 2019 18:17:22 +0700 Subject: [PATCH 004/320] fixed css-loader --- webpack.config.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 2c7f1d1..8e83560 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -71,13 +71,19 @@ module.exports = () => { test: /\.css$/, use: [ { loader: 'style-loader' }, - { loader: 'css-loader' } + { loader: 'css-loader' }, ] }, { test: /\.less$/, use: [ - { loader: isDevelopment ? 'style-loader' : MiniCssExtractPlugin.loader }, + { + loader: isDevelopment ? 'style-loader' : MiniCssExtractPlugin.loader, + options: { + filename: isDevelopment ? '[name].css' : '[name].[hash].css', + chunkFilename: isDevelopment ? '[id].css' : '[id].[hash].css', + } + }, // { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'less-loader' } From d2beab09769ffe845eebcc05e2957f96dd9e41cc Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 21 Mar 2019 18:19:40 +0700 Subject: [PATCH 005/320] fixed css-loader hashing --- webpack.config.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 8e83560..6078850 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -20,12 +20,13 @@ const htmlPlugin = new HtmlWebPackPlugin({ favicon: 'src/sprites/favicon.png', }); +const isDevelopment = process.env.NODE_ENV !== 'production'; + const miniCssExractPlugin = new MiniCssExtractPlugin({ - filename: '[name].css', - chunkFilename: '[id].css' + filename: isDevelopment ? '[name].css' : '[name].[hash].css', + chunkFilename: isDevelopment ? '[id].css' : '[id].[hash].css', }); -const isDevelopment = process.env.NODE_ENV !== 'production'; const devtool = isDevelopment ? 'cheap-module-eval-source-map' : 'source-map'; // const flowPlugin = new FlowWebpackPlugin(); @@ -77,13 +78,7 @@ module.exports = () => { { test: /\.less$/, use: [ - { - loader: isDevelopment ? 'style-loader' : MiniCssExtractPlugin.loader, - options: { - filename: isDevelopment ? '[name].css' : '[name].[hash].css', - chunkFilename: isDevelopment ? '[id].css' : '[id].[hash].css', - } - }, + { loader: isDevelopment ? 'style-loader' : MiniCssExtractPlugin.loader }, // { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'less-loader' } From fd7404e56569cf654176c77709eeef8beaef427b Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 21 Mar 2019 18:27:12 +0700 Subject: [PATCH 006/320] starred premoderation --- backend/routes/route/list.js | 7 +++---- src/components/dialogs/MapListDialog.tsx | 1 - src/components/panels/UserPanel.tsx | 1 - src/constants/dialogs.ts | 2 +- src/redux/user/reducer.ts | 5 ++++- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/routes/route/list.js b/backend/routes/route/list.js index 50198ab..7d2d6ea 100644 --- a/backend/routes/route/list.js +++ b/backend/routes/route/list.js @@ -23,17 +23,16 @@ module.exports = async (req, res) => { }; } - console.log('is starred?', starred); if (is_starred) { criteria = { ...criteria, is_starred: true, + is_public: true, }; - } - - if (!author || !user || (user._id !== author)) { + } else if (!author || !user || (user._id !== author)) { criteria = { ...criteria, + is_starred: false, is_public: true, }; } diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index 968a233..b8af1e1 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -15,7 +15,6 @@ import { import { isMobile } from '$utils/window'; import classnames from 'classnames'; -// import { Range } from 'rc-slider'; import * as Range from 'rc-slider/lib/Range'; import { TABS } from '$constants/dialogs'; import { Icon } from '$components/panels/Icon'; diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index a17a099..25665f4 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -14,7 +14,6 @@ import { CLIENT } from '$config/frontend'; import { DIALOGS } from '$constants/dialogs'; import { IRootState } from "$redux/user/reducer"; import { Tooltip } from "$components/panels/Tooltip"; -import { TitleDialog } from "$components/dialogs/TitleDialog"; interface Props extends IRootState { userLogout: typeof userLogout, diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts index 8f10cc8..6532a98 100644 --- a/src/constants/dialogs.ts +++ b/src/constants/dialogs.ts @@ -18,6 +18,6 @@ export const DIALOGS: IDialogs = ({ export const TABS: IMapTabs = ({ mine: 'Мои', + all: 'Разное', starred: 'Общие', - all: 'ВСЕ', }); diff --git a/src/redux/user/reducer.ts b/src/redux/user/reducer.ts index 137d49b..d356f23 100644 --- a/src/redux/user/reducer.ts +++ b/src/redux/user/reducer.ts @@ -312,7 +312,10 @@ const setRouteStarred: ActionHandler = (s list: ( state.routes.list .map(el => el._id === _id ? { ...el, is_starred } : el) - .filter(el => state.routes.filter.tab !== 'starred' || el.is_starred) + .filter(el => ( + (state.routes.filter.tab === 'starred' && el.is_starred) || + (state.routes.filter.tab === 'all' && !el.is_starred) + )) ) } }); From aca177aa6d0f409447156782e9664644610789ec Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 21 Mar 2019 18:27:56 +0700 Subject: [PATCH 007/320] removed role console.log --- src/components/dialogs/MapListDialog.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index b8af1e1..e5a1a36 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -141,8 +141,6 @@ class Component extends React.Component { list.length === 0 && loading && From f88bedd600480f64274572bf2496dec21779b1f7 Mon Sep 17 00:00:00 2001 From: muerwre Date: Wed, 27 Mar 2019 17:05:35 +0700 Subject: [PATCH 008/320] Cleared up InteractivePoly --- src/modules/InteractivePoly.ts | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index 2ee587f..e477229 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -484,36 +484,6 @@ export class Component extends Polyline { this.fire('distancechange', { distance: this.distance }); }; - // - // recalcKmMarks = () => { - // if (!this.kmMarksEnabled) return; - // - // const latlngs = this.getLatLngs() as LatLngLiteral[]; - // - // this.kmMarks = { }; - // - // let last_km_mark = 0; - // - // latlngs.reduce((dist, latlng, index) => { - // if (index >= latlngs.length - 1) return; - // - // const next = latlngs[index + 1]; - // const sum = dist + distKm(latlng, next); - // const rounded = Math.floor(dist / this.kmMarksStep) * this.kmMarksStep; - // - // if (rounded > last_km_mark) { - // last_km_mark = rounded; - // this.kmMarks[rounded] = latlng; - // } - // - // return sum; - // }, 0); - // }; - - // kmMarksEnabled?: InteractivePolylineOptions['kmMarksEnabled'] = true; - // kmMarksStep?: InteractivePolylineOptions['kmMarksStep'] = 5; - // kmMarks?: { [x: number]: LatLngLiteral }; - // kmMarksLayer?: LayerGroup = new LayerGroup(); markers: Marker[] = []; maxMarkers: InteractivePolylineOptions['maxMarkers'] = 2; @@ -531,7 +501,6 @@ export class Component extends Polyline { weight: 24, smoothFactor: 3, className: 'touch-hinter-poly' - // bubblingMouseEvents: false, }); hintMarker: Marker = this.createHintMarker(latLng({ lat: 0, lng: 0 })); From ea688c363bca11be03f7f048a9f5493173d6559d Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 28 Mar 2019 12:09:09 +0700 Subject: [PATCH 009/320] short cleanup --- src/index.tsx | 2 +- src/modules/Editor.ts | 2 -- src/modules/Stickers.ts | 10 ---------- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 10a0f87..82c2ccf 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -7,7 +7,7 @@ todo tower sticker todo route description - todo polyline editing only in manual mode (or by click) + skip polyline editing only in manual mode (or by click) todo selecting logo on crop todo network operations notify diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 02a1165..16fab94 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -371,8 +371,6 @@ export class Editor { this.setInitialData(); this.owner = { id }; - // todo: implement - // if (this.poly.latlngs && this.poly.latlngs.length > 1) this.poly.poly.editor.enable(); this.poly.enableEditor(); this.stickers.startEditing(); }; diff --git a/src/modules/Stickers.ts b/src/modules/Stickers.ts index 6989352..907344e 100644 --- a/src/modules/Stickers.ts +++ b/src/modules/Stickers.ts @@ -81,16 +81,6 @@ export class Stickers { dumpData = (): Array => this.stickers.map(sticker => sticker.dumpData()); - // onSpiderify = (): void => { - // console.log('spider?'); - // // todo: it has markers passed as argument. Update only them. - // if (this.editor.getEditing()) { - // this.startEditing(); - // } else { - // this.stopEditing(); - // } - // }; - startEditing = (): void => { this.stickers.map(sticker => sticker.startEditing()); }; From 3a874583bce620dbb0448f4daec1a501a0e4e9cc Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 28 Mar 2019 14:12:00 +0700 Subject: [PATCH 010/320] sliding up title dialog --- src/components/dialogs/TitleDialog.tsx | 70 +++++++++++++++++++++++--- src/components/panels/UserPanel.tsx | 3 +- src/styles/panel.less | 20 ++++++-- src/utils/dom.ts | 9 ++++ src/utils/geom.ts | 17 ++----- 5 files changed, 92 insertions(+), 27 deletions(-) create mode 100644 src/utils/dom.ts diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index 91291c0..b7cd30e 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -3,36 +3,90 @@ import { bindActionCreators } from "redux"; import { connect } from 'react-redux'; import classnames from 'classnames'; +import { getStyle } from "$utils/dom"; +import { nearestInt } from "$utils/geom"; interface ITitleDialogProps { editing: boolean, title?: string, + minLines?: number, + maxLines?: number, } interface ITitleDialogState { raised: boolean; + height: number; + height_raised: number; } export class Component extends React.PureComponent { state = { raised: false, + height: 0, + height_raised: 0, }; onHover = () => this.setState({ raised: true }); onLeave = () => this.setState({ raised: false }); + componentDidMount() { + this.getMaxHeight(); + } + + getMaxHeight = (): number => { + if (!this.ref_sizer || !this.ref_title || !this.ref_text) return 0; + + const { height: sizer_height } = this.ref_sizer.getBoundingClientRect(); + const { height: title_height } = this.ref_title.getBoundingClientRect(); + const { height: text_height } = this.ref_text.getBoundingClientRect(); + + const title_margin = parseInt(getStyle(this.ref_title, 'margin-bottom'), 10) || 0; + const text_margins = (parseInt(getStyle(this.ref_text, 'margin-top'), 10) || 0) + + parseInt(getStyle(this.ref_text, 'margin-bottom'), 10) || 0;; + const text_line = parseInt(getStyle(this.ref_text, 'line-height'), 10) || 0; + + const container_height = sizer_height - title_height - title_margin - text_margins; + + console.log(this.ref_text.getBoundingClientRect()); + + const min_height = (this.props.minLines || 3) * text_line; + const max_height = (this.props.maxLines || 20) * text_line; + + const height = nearestInt(Math.min(container_height, Math.min(text_height, min_height)), text_line) + text_margins; + const height_raised = nearestInt(Math.min(container_height, Math.min(text_height, max_height)), text_line) + text_margins; + + console.log({ height, height_raised }); + this.setState({ height, height_raised }); + }; + render() { const { editing, title } = this.props; + const { raised, height, height_raised } = this.state; return (
-
{ this.sizer = el; }}> -
-
+
{ this.ref_sizer = el; }}> +
+
{ this.ref_title = el; }} + >

{title}

-
- Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться. Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь ваш текст.. Здесь ваш текст.. Здесь ваш текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию, так что поиск по +
{ this.ref_overflow = el; }} + > +
{ this.ref_text = el; }} + > + Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться. Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь ваш текст.. Здесь ваш текст.. Здесь ваш текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию, так что поиск по +
@@ -40,8 +94,10 @@ export class Component extends React.PureComponent ({ editing, title }); diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 25665f4..b3ad9dd 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -14,6 +14,7 @@ import { CLIENT } from '$config/frontend'; import { DIALOGS } from '$constants/dialogs'; import { IRootState } from "$redux/user/reducer"; import { Tooltip } from "$components/panels/Tooltip"; +import { TitleDialog } from "$components/dialogs/TitleDialog"; interface Props extends IRootState { userLogout: typeof userLogout, @@ -95,7 +96,7 @@ export class Component extends React.PureComponent { return (
{ - // + }
diff --git a/src/styles/panel.less b/src/styles/panel.less index ade2a81..a9b9654 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -641,19 +641,16 @@ .title-dialog { z-index: 2; - opacity: 0; transition: opacity 500ms, transform 1s; transform: translate(0, 68px); user-select: none; pointer-events: all; touch-action: auto; + display: flex; + flex-direction: column; &.active { - opacity: 0.5; transform: translate(0, 0); - &:hover { - opacity: 1; - } } .title-dialog-pane { @@ -662,6 +659,7 @@ background: #111111; color: fade(white, 50%); font-size: 13px; + box-sizing: border-box; h2 { margin: 0; @@ -671,4 +669,16 @@ color: white; } } + + .title-dialog-text { + overflow: hidden; + //display: flex; + transition: height 500ms; + line-height: 14px; + padding: 0; + + > div { + margin: 10px; + } + } } diff --git a/src/utils/dom.ts b/src/utils/dom.ts new file mode 100644 index 0000000..25eb73a --- /dev/null +++ b/src/utils/dom.ts @@ -0,0 +1,9 @@ +export const getStyle = (oElm: any, strCssRule: string): string => { + if(document.defaultView && document.defaultView.getComputedStyle){ + return document.defaultView.getComputedStyle(oElm, '').getPropertyValue(strCssRule); + } else if(oElm.currentStyle){ + return oElm.currentStyle[strCssRule.replace(/\-(\w)/g, (strMatch, p1) => p1.toUpperCase())]; + } + + return ''; +}; diff --git a/src/utils/geom.ts b/src/utils/geom.ts index 7c21275..6517084 100644 --- a/src/utils/geom.ts +++ b/src/utils/geom.ts @@ -90,25 +90,14 @@ const distToSegmentSquared = (A: LatLng, B: LatLng, C: LatLng): number => { }; export const distToSegment = (A: LatLng, B: LatLng, C: LatLng): number => Math.sqrt(distToSegmentSquared(A, B, C)); -// if C between A and B + export const pointBetweenPoints = (A: LatLng, B: LatLng, C: LatLng): boolean => (distToSegment(A, B, C) < 0.01); export const angleBetweenPoints = (A: Point, B: Point): number => parseFloat(((Math.atan2(B.y - A.y, B.x - A.x))* 180 / Math.PI).toFixed()); export const angleBetweenPointsRad = (A: Point, B: Point): number => ((Math.atan2(B.x - A.x, B.y - A.y))); -// export const pointOnDistance = (A: Point, B: Point, shift: number): Point => { -// const c = Math.sqrt((((B.x - A.x) ** 2) + ((B.y - A.y) ** 2))); -// const angle = angleBetweenPointsRad(A, B); -// -// // console.log({ angle, c, shift }); -// const x = Math.floor(B.x - c * Math.sin(angle) * shift); -// const y = Math.floor(B.y - c * Math.cos(angle) * shift); -// -// // console.log({ x, y }); -// -// return new Point(x, y); -// }; - export const allwaysPositiveAngleDeg = (angle: number): number => ( (angle >= -90 && angle <= 90) ? angle : (180 + angle) ); + +export const nearestInt = (value: number, parts: number): number => (value - (value % parts)); From 41f40a783f21dce47f7c751484e312fecb2caf22 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 10:24:29 +0700 Subject: [PATCH 011/320] handling empty text --- src/components/dialogs/TitleDialog.tsx | 15 ++++++++----- src/styles/panel.less | 29 ++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index b7cd30e..d8d8949 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -40,6 +40,11 @@ export class Component extends React.PureComponent
{ this.ref_overflow = el; }} >
{ this.ref_text = el; }} > - Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться. Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь ваш текст.. Здесь ваш текст.. Здесь ваш текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию, так что поиск по +
diff --git a/src/styles/panel.less b/src/styles/panel.less index a9b9654..4c24f79 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -648,15 +648,21 @@ touch-action: auto; display: flex; flex-direction: column; + opacity: 0; + + @media(max-width: @mobile_breakpoint) { + display: none; + } &.active { + opacity: 1; transform: translate(0, 0); } .title-dialog-pane { margin-bottom: 10px; padding: 10px; - background: #111111; + background: @dialog_background; color: fade(white, 50%); font-size: 13px; box-sizing: border-box; @@ -672,13 +678,32 @@ .title-dialog-text { overflow: hidden; - //display: flex; transition: height 500ms; line-height: 14px; padding: 0; + position: relative; > div { margin: 10px; } + + ::after { + content: ' '; + width: 100%; + height: 40px; + background: linear-gradient(fade(@dialog_background, 0), @dialog_background); + position: absolute; + bottom: 0; + left: 0; + transition: opacity 250ms; + pointer-events: none; + touch-action: none; + } + + &:hover { + ::after { + opacity: 0; + } + } } } From a4b620471a8c625c602a7f8f48aa7ed9203c8a6b Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 10:26:26 +0700 Subject: [PATCH 012/320] conditional dialog rendering --- src/components/dialogs/TitleDialog.tsx | 37 +++++++++++++++----------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index d8d8949..018d211 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -73,26 +73,31 @@ export class Component extends React.PureComponent -
{ this.ref_title = el; }} - > -

{title}

-
-
{ this.ref_overflow = el; }} - > + { + title && +
{ this.ref_title = el; }} + > +

{title}

+
+ } + {
{ this.ref_text = el; }} + className="title-dialog-pane title-dialog-text" + style={{ + height: (raised ? height_raised : height), + display: height === 0 ? 'none' : 'block' + }} + ref={el => { this.ref_overflow = el; }} > +
{ this.ref_text = el; }} + > +
-
+ }
From c040e33a8aecb0436f600ef5178e9d8f44af08d2 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 10:54:20 +0700 Subject: [PATCH 013/320] frontend is_starred and description support --- package-lock.json | 7 +++++ package.json | 1 + src/components/dialogs/SaveDialog.tsx | 32 +++++++++++++++------ src/components/panels/EditorDialog.tsx | 2 +- src/modules/Editor.ts | 40 +++++++++++++++++++------- src/redux/user/actions.ts | 15 +++++++++- src/redux/user/constants.ts | 2 ++ src/redux/user/reducer.ts | 14 +++++++++ src/redux/user/sagas.ts | 4 +-- src/styles/save.less | 8 ++++-- src/utils/api.ts | 4 ++- 11 files changed, 103 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 098fac2..6d5716b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10749,6 +10749,13 @@ "scheduler": "^0.13.1" } }, + "react-expandable-textarea": { + "version": "github:muerwre/react-expandable-textarea#9a3b826abd5203c5d6adf77cf4bfdd10131de417", + "from": "github:muerwre/react-expandable-textarea", + "requires": { + "classnames": "^2.2.6" + } + }, "react-hot-loader": { "version": "4.6.5", "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.6.5.tgz", diff --git a/package.json b/package.json index df3a790..6c21f09 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "rc-slider": "8.5.0", "react": "16.8.1", "react-dom": "16.8.1", + "react-expandable-textarea": "github:muerwre/react-expandable-textarea", "react-hot-loader": "^4.1.1", "react-infinite-scroller": "^1.2.2", "react-rangeslider": "^2.2.0", diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index ff81319..5ce7e31 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -7,10 +7,14 @@ import { Icon } from '$components/panels/Icon'; import { Switch } from '$components/Switch'; import classnames from 'classnames'; -import { IRootState } from "$redux/user/reducer"; import { sendSaveRequest, setMode } from "$redux/user/actions"; +import ExpandableTextarea from 'react-expandable-textarea'; + +interface Props { + address: string, + title: string, + is_public: boolean, -interface Props extends IRootState { width: number, setMode: typeof setMode, sendSaveRequest: typeof sendSaveRequest, @@ -25,6 +29,7 @@ interface State { address: string, title: string, is_public: boolean, + description: string, } export class SaveDialog extends React.Component { @@ -35,6 +40,7 @@ export class SaveDialog extends React.Component { address: props.address || '', title: props.title || '', is_public: props.is_public || false, + description: props.description || '', }; } @@ -46,22 +52,23 @@ export class SaveDialog extends React.Component { }; setTitle = ({ target: { value } }) => this.setState({ title: ((value && value.substr(0, 64)) || '') }); - setAddress = ({ target: { value } }) => this.setState({ address: (value && value.substr(0, 32) || '') }); + setDescription = ({ target: { value } }) => this.setState({ description: (value && value.substr(0, 256) || '') }); + - cancelSaving = () => this.props.setMode(MODES.NONE); sendSaveRequest = (e, force = false) => { - const { title, is_public } = this.state; + const { title, is_public, description } = this.state; const address = this.getAddress(); this.props.sendSaveRequest({ - title, address, force, is_public + title, address, force, is_public, description, }); }; - forceSaveRequest = e => this.sendSaveRequest(e, true); + cancelSaving = () => this.props.setMode(MODES.NONE); + onCopy = e => { e.preventDefault(); const { host, protocol } = getUrlData(); @@ -73,7 +80,7 @@ export class SaveDialog extends React.Component { }; render() { - const { title, is_public } = this.state; + const { title, is_public, description } = this.state; const { save_error, save_finished, save_overwriting, width, save_loading } = this.props; const { host, protocol } = getUrlData(); @@ -104,6 +111,15 @@ export class SaveDialog extends React.Component {
+
+ +
{ save_error || TIPS.SAVE_INFO }
diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index c1e3b8d..d4b2b45 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { IModes, MODES } from '$constants/modes'; +import { MODES } from '$constants/modes'; import { RouterDialog } from '$components/dialogs/RouterDialog'; import { StickersDialog } from '$components/dialogs/StickersDialog'; diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 16fab94..00fcb5d 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -12,14 +12,14 @@ import { resetSaveDialog, setActiveSticker, setAddress, - setChanged, + setChanged, setDescription, setDistance, setIsEmpty, setIsRouting, setLogo, setMarkersShown, setMode, setPublic, - setRouterPoints, + setRouterPoints, setStarred, setTitle, } from '$redux/user/actions'; import { DEFAULT_PROVIDER, IProvider, PROVIDERS } from '$constants/providers'; @@ -37,15 +37,17 @@ interface IEditor { owner: { id: string }; initialData: { version: number, - title: string, + title: IRootState['title'], owner: { id: string }, - address: string, + address: IRootState['address'], path: any, route: any, stickers: any, - provider: string, - is_public: boolean, - logo: string, + provider: IRootState['provider'], + is_public: IRootState['is_public'], + is_starred: IRootState['is_starred'], + description: IRootState['description'], + logo: IRootState['logo'], }; activeSticker: IRootState['activeSticker']; mode: IRootState['mode']; @@ -156,7 +158,9 @@ export class Editor { route: null, stickers: null, provider: null, - is_public: null, + is_public: false, + is_starred: false, + description: '', logo: null, }; activeSticker: IEditor['activeSticker']; @@ -183,8 +187,10 @@ export class Editor { setRouterPoints: typeof setRouterPoints = value => store.dispatch(setRouterPoints(value)); setActiveSticker: typeof setActiveSticker = value => store.dispatch(setActiveSticker(value)); setTitle: typeof setTitle = value => store.dispatch(setTitle(value)); + setDescription: typeof setDescription = value => store.dispatch(setDescription(value)); setAddress: typeof setAddress = value => store.dispatch(setAddress(value)); setPublic: typeof setPublic = value => store.dispatch(setPublic(value)); + setStarred: typeof setStarred = value => store.dispatch(setStarred(value)); setIsEmpty: typeof setIsEmpty = value => store.dispatch(setIsEmpty(value)); setIsRouting: typeof setIsRouting = value => store.dispatch(setIsRouting(value)); @@ -305,7 +311,16 @@ export class Editor { }; setData = ({ - route = [], stickers = [], owner, title, address, provider = DEFAULT_PROVIDER, logo = DEFAULT_LOGO, is_public, + route = [], + stickers = [], + owner, + title, + address, + provider = DEFAULT_PROVIDER, + logo = DEFAULT_LOGO, + is_public, + is_starred, + description, }: IEditor['initialData']): void => { this.setTitle(title || ''); const { id } = this.getUser(); @@ -332,6 +347,9 @@ export class Editor { } this.setPublic(is_public); + this.setStarred(is_starred); + this.setDescription(description); + this.setLogo((logo && LOGOS[DEFAULT_LOGO] && logo) || DEFAULT_LOGO); this.setProvider((provider && PROVIDERS[provider] && provider) || DEFAULT_PROVIDER); @@ -348,7 +366,7 @@ export class Editor { setInitialData = (): void => { const { path } = getUrlData(); const { id } = this.getUser(); - const { is_public, logo } = this.getState(); + const { is_public, logo, is_starred , description} = this.getState(); const { route, stickers, provider } = this.dumpData(); this.initialData = { @@ -362,6 +380,8 @@ export class Editor { provider, is_public, logo, + is_starred, + description, }; }; diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 9dd9a00..88417d3 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,5 +1,6 @@ import { ACTIONS } from '$redux/user/constants'; import { IUser } from "$constants/auth"; +import { IRootState } from "$redux/user/reducer"; export const setUser = (user: IUser) => ({ type: ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: ACTIONS.USER_LOGOUT }); @@ -12,9 +13,11 @@ export const setRouterPoints = routerPoints => ({ type: ACTIONS.SET_ROUTER_POINT export const setActiveSticker = activeSticker => ({ type: ACTIONS.SET_ACTIVE_STICKER, activeSticker }); export const setLogo = logo => ({ type: ACTIONS.SET_LOGO, logo }); export const setTitle = title => ({ type: ACTIONS.SET_TITLE, title }); +export const setDescription = description => ({ type: ACTIONS.SET_DESCRIPTION, description }); export const setAddress = address => ({ type: ACTIONS.SET_ADDRESS, address }); export const setAddressOrigin = address_origin => ({ type: ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); export const setPublic = is_public => ({ type: ACTIONS.SET_PUBLIC, is_public }); +export const setStarred = is_starred => ({ type: ACTIONS.SET_STARRED, is_starred }); export const setSpeed = speed => ({ type: ACTIONS.SET_SPEED, speed }); export const startEditing = () => ({ type: ACTIONS.START_EDITING }); @@ -28,7 +31,17 @@ export const clearStickers = () => ({ type: ACTIONS.CLEAR_STICKERS }); export const clearAll = () => ({ type: ACTIONS.CLEAR_ALL }); export const clearCancel = () => ({ type: ACTIONS.CLEAR_CANCEL }); -export const sendSaveRequest = payload => ({ type: ACTIONS.SEND_SAVE_REQUEST, ...payload }); +export const sendSaveRequest = (payload: { + title: IRootState['title'], + address: IRootState['address'], + is_public: IRootState['is_public'], + description: IRootState['description'], + force: boolean, +}) => ({ + type: ACTIONS.SEND_SAVE_REQUEST, + ...payload, +}); + export const resetSaveDialog = () => ({ type: ACTIONS.RESET_SAVE_DIALOG }); export const setSaveLoading = save_loading => ({ type: ACTIONS.SET_SAVE_LOADING, save_loading }); diff --git a/src/redux/user/constants.ts b/src/redux/user/constants.ts index 2429a38..3dc2869 100644 --- a/src/redux/user/constants.ts +++ b/src/redux/user/constants.ts @@ -17,6 +17,8 @@ export const ACTIONS: IActions = { SET_ADDRESS: 'SET_ADDRESS', SET_ADDRESS_ORIGIN: 'SET_ADDRESS_ORIGIN', SET_PUBLIC: 'SET_PUBLIC', + SET_STARRED: 'SET_STARRED', + SET_DESCRIPTION: 'SET_DESCRIPTION', START_EDITING: 'START_EDITING', STOP_EDITING: 'STOP_EDITING', diff --git a/src/redux/user/reducer.ts b/src/redux/user/reducer.ts index d356f23..389e29d 100644 --- a/src/redux/user/reducer.ts +++ b/src/redux/user/reducer.ts @@ -26,6 +26,7 @@ export interface IRootReducer { logo: keyof typeof LOGOS, routerPoints: number, distance: number, + description: string, estimated: number, speed: number, activeSticker: { set?: keyof IStickers, sticker?: string }, @@ -36,6 +37,7 @@ export interface IRootReducer { provider: keyof typeof PROVIDERS, markers_shown: boolean, + is_starred: boolean, is_public: boolean, is_empty: boolean, is_routing: boolean, @@ -140,6 +142,11 @@ const setTitle: ActionHandler = (state, { title title }); +const setDescription: ActionHandler = (state, { description }) => ({ + ...state, + description +}); + const setAddress: ActionHandler = (state, { address }) => ({ ...state, address @@ -276,6 +283,8 @@ const searchSetLoading: ActionHandler = }); const setPublic: ActionHandler = (state, { is_public = false }) => ({ ...state, is_public }); +const setStarred: ActionHandler = (state, { is_starred = false }) => ({ ...state, is_starred }); + const setSpeed: ActionHandler = (state, { speed = 15 }) => ({ ...state, speed, @@ -330,6 +339,7 @@ const HANDLERS = ({ [ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, [ACTIONS.SET_LOGO]: setLogo, [ACTIONS.SET_TITLE]: setTitle, + [ACTIONS.SET_DESCRIPTION]: setDescription, [ACTIONS.SET_ADDRESS]: setAddress, [ACTIONS.SET_ADDRESS_ORIGIN]: setAddressOrigin, @@ -356,6 +366,7 @@ const HANDLERS = ({ [ACTIONS.SEARCH_PUT_ROUTES]: searchPutRoutes, [ACTIONS.SEARCH_SET_LOADING]: searchSetLoading, [ACTIONS.SET_PUBLIC]: setPublic, + [ACTIONS.SET_STARRED]: setStarred, [ACTIONS.SET_SPEED]: setSpeed, [ACTIONS.SET_MARKERS_SHOWN]: setMarkersShown, @@ -376,6 +387,7 @@ export const INITIAL_STATE: IRootReducer = { logo: DEFAULT_LOGO, routerPoints: 0, distance: 0, + description: '', estimated: 0, speed: 15, activeSticker: { set: null, sticker: null }, @@ -387,6 +399,8 @@ export const INITIAL_STATE: IRootReducer = { markers_shown: true, changed: false, editing: false, + + is_starred: false, is_public: false, is_empty: true, is_routing: false, diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 90d1489..51b1156 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -307,7 +307,7 @@ function* clearSaga({ type }) { } function* sendSaveRequestSaga({ - title, address, force, is_public + title, address, force, is_public, description, }: ReturnType) { if (editor.isEmpty) return yield put(setSaveError(TIPS.SAVE_EMPTY)); @@ -319,7 +319,7 @@ function* sendSaveRequestSaga({ const { result, timeout, cancel } = yield race({ result: postMap({ - id, token, route, stickers, title, force, address, logo, distance, provider, is_public + id, token, route, stickers, title, force, address, logo, distance, provider, is_public, description, }), timeout: delay(10000), cancel: take(ACTIONS.RESET_SAVE_DIALOG), diff --git a/src/styles/save.less b/src/styles/save.less index ef1cb06..fcdfcc4 100644 --- a/src/styles/save.less +++ b/src/styles/save.less @@ -46,7 +46,7 @@ &.active { opacity: 1; - touch-action: all; + touch-action: auto; pointer-events: all; svg { @@ -90,6 +90,7 @@ border-radius: 2px; display: flex; margin-bottom: 5px; + input { padding: 5px 5px 5px 2px; background: transparent; @@ -150,14 +151,15 @@ .save-description { textarea { background: rgba(0,0,0,0.3); + outline: none; border: none; border-radius: 3px; width: 100%; resize: none; color: inherit; font: inherit; - height: 5.5em; - padding: 0.25em; + padding: 5px 10px; + font-size: 14px; } } diff --git a/src/utils/api.ts b/src/utils/api.ts index 66650c1..d8528a6 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -21,6 +21,7 @@ interface IPostMap { distance: IRootState['distance'], provider: IRootState['provider'], is_public: IRootState['is_public'], + description: IRootState['description'], } interface IGetRouteList { @@ -67,7 +68,7 @@ export const getStoredMap = ( )); export const postMap = ({ - title, address, route, stickers, id, token, force, logo, distance, provider, is_public, + title, address, route, stickers, id, token, force, logo, distance, provider, is_public, description, }: IPostMap) => axios.post(API.POST_MAP, { title, address, @@ -80,6 +81,7 @@ export const postMap = ({ distance, provider, is_public, + description, }).then(result => (result && result.data && result.data)); export const checkIframeToken = ( From 8f60a5efd6abb69afd75a47a162411f70e958e84 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 11:31:04 +0700 Subject: [PATCH 014/320] complete setting and editing description --- backend/models/Route.js | 36 +++++++------- backend/routes/route/post.js | 19 +++++--- package-lock.json | 2 +- src/components/dialogs/SaveDialog.tsx | 4 +- src/components/dialogs/TitleDialog.tsx | 65 ++++++++++++++------------ src/redux/user/actions.ts | 23 ++++++--- src/redux/user/reducer.ts | 6 ++- src/redux/user/sagas.ts | 19 ++++---- src/styles/panel.less | 33 +++++++------ src/utils/format.ts | 2 + 10 files changed, 118 insertions(+), 91 deletions(-) diff --git a/backend/models/Route.js b/backend/models/Route.js index 32c3696..be39b3e 100644 --- a/backend/models/Route.js +++ b/backend/models/Route.js @@ -2,24 +2,22 @@ const mongoose = require('mongoose'); const { Schema } = mongoose; -const RouteSchema = new Schema( - { - _id: { type: String, required: true }, - title: { type: String, default: '' }, - // address: { type: String, required: true }, - version: { type: Number, default: 2 }, - route: { type: Array, default: [] }, - stickers: { type: Array, default: [] }, - owner: { type: Schema.Types.ObjectId, ref: 'User' }, - distance: { type: Number, default: 0 }, - is_public: { type: Boolean, default: false }, - is_starred: { type: Boolean, default: false }, - is_deleted: { type: Boolean, default: false }, - created_at: { type: Date, default: Date.now() }, - updated_at: { type: Date, default: Date.now() }, - logo: { type: String, default: 'DEFAULT' }, - provider: { type: String, default: 'DEFAULT' }, - }, -); +const RouteSchema = new Schema({ + _id: { type: String, required: true }, + title: { type: String, default: '' }, + version: { type: Number, default: 2 }, + route: { type: Array, default: [] }, + stickers: { type: Array, default: [] }, + owner: { type: Schema.Types.ObjectId, ref: 'User' }, + distance: { type: Number, default: 0 }, + is_public: { type: Boolean, default: false }, + is_starred: { type: Boolean, default: false }, + is_deleted: { type: Boolean, default: false }, + created_at: { type: Date, default: Date.now() }, + updated_at: { type: Date, default: Date.now() }, + logo: { type: String, default: 'DEFAULT' }, + provider: { type: String, default: 'DEFAULT' }, + description: { type: String, default: '' }, +}); module.exports.RouteSchema = RouteSchema; diff --git a/backend/routes/route/post.js b/backend/routes/route/post.js index f2ac8af..e1251f4 100644 --- a/backend/routes/route/post.js +++ b/backend/routes/route/post.js @@ -1,14 +1,21 @@ const { User, Route } = require('../../models'); -const { parseRoute, parseStickers, parseString, parseNumber, parseAddress } = require('../../utils/parse'); +const { + parseRoute, parseStickers, parseString, parseNumber, parseAddress +} = require('../../utils/parse'); module.exports = async (req, res) => { const { body, body: { id, token, force } } = req; const owner = await User.findOne({ _id: id, token }).populate('routes'); - if (!owner) return res.send({ success: false, reason: 'unauthorized', id, token }); + if (!owner) { + return res.send({ + success: false, reason: 'unauthorized', id, token + }); + } const title = parseString(body.title, 64); + const description = parseString(body.description, 256); const address = parseAddress(body.address, 32); const route = parseRoute(body.route); const stickers = parseStickers(body.stickers); @@ -28,23 +35,23 @@ module.exports = async (req, res) => { if (exists) { await exists.set({ - title, route, stickers, logo, distance, updated_at: Date.now(), provider, is_public, + title, route, stickers, logo, distance, updated_at: Date.now(), provider, is_public, description, }).save(); return res.send({ - success: true, title, address, route, stickers, mode: 'overwrited', is_public, + success: true, title, address, route, stickers, mode: 'overwrited', is_public, description, }); } const created = await Route.create({ - _id: address, title, route, stickers, owner, logo, distance, provider, is_public, + _id: address, title, route, stickers, owner, logo, distance, provider, is_public, description, }); await owner.routes.push(created); await owner.save(); return res.send({ - success: true, title, address, route, stickers, provider, is_public, + success: true, title, address, route, stickers, provider, is_public, description, }); }; diff --git a/package-lock.json b/package-lock.json index 6d5716b..c0a0544 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10750,7 +10750,7 @@ } }, "react-expandable-textarea": { - "version": "github:muerwre/react-expandable-textarea#9a3b826abd5203c5d6adf77cf4bfdd10131de417", + "version": "github:muerwre/react-expandable-textarea#0cbcbbd875439090a2d48e711da241f2a83dd6b2", "from": "github:muerwre/react-expandable-textarea", "requires": { "classnames": "^2.2.6" diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index 5ce7e31..aa1f521 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { copyToClipboard, getUrlData } from '$utils/history'; -import { toTranslit } from '$utils/format'; +import { toTranslit, parseDesc } from '$utils/format'; import { TIPS } from '$constants/tips'; import { MODES } from '$constants/modes'; import { Icon } from '$components/panels/Icon'; @@ -116,7 +116,7 @@ export class SaveDialog extends React.Component { minRows={2} maxRows={5} placeholder="Описание маршрута" - value={description} + value={parseDesc(description)} onChange={this.setDescription} />
diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index 018d211..3537c11 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -5,10 +5,13 @@ import { connect } from 'react-redux'; import classnames from 'classnames'; import { getStyle } from "$utils/dom"; import { nearestInt } from "$utils/geom"; +import { IRootState } from "$redux/user/reducer"; +import { parseDesc } from "$utils/format"; interface ITitleDialogProps { - editing: boolean, - title?: string, + editing: IRootState['editing'], + title?: IRootState['title'], + description?: IRootState['description'], minLines?: number, maxLines?: number, } @@ -30,10 +33,14 @@ export class Component extends React.PureComponent this.setState({ raised: false }); componentDidMount() { - this.getMaxHeight(); + this.setMaxHeight(); } - getMaxHeight = (): number => { + componentDidUpdate() { + this.setMaxHeight(); + } + + setMaxHeight = (): number => { if (!this.ref_sizer || !this.ref_title || !this.ref_text) return 0; const { height: sizer_height } = this.ref_sizer.getBoundingClientRect(); @@ -52,7 +59,7 @@ export class Component extends React.PureComponent - { - title && -
{ this.ref_title = el; }} - > -

{title}

-
- } - { -
{ this.ref_overflow = el; }} - > -
{ this.ref_text = el; }} - > +
{ this.ref_title = el; }} + > +

{title}

+
-
+
height })} + style={{ + height: (raised ? height_raised : height), + marginBottom: height === 0 ? 0 : 15, + }} + ref={el => { this.ref_overflow = el; }} + > +
{ this.ref_text = el; }} + > + { + parseDesc(description) + }
- } +
@@ -110,7 +115,7 @@ export class Component extends React.PureComponent ({ editing, title }); +const mapStateToProps = ({ user: { editing, title, description } }) => ({ editing, title, description }); const mapDispatchToProps = dispatch => bindActionCreators({ }, dispatch); export const TitleDialog = connect(mapStateToProps, mapDispatchToProps)(Component); diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 88417d3..ae42b87 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -5,10 +5,10 @@ import { IRootState } from "$redux/user/reducer"; export const setUser = (user: IUser) => ({ type: ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: ACTIONS.USER_LOGOUT }); -export const setEditing = editing => ({ type: ACTIONS.SET_EDITING, editing }); -export const setMode = mode => ({ type: ACTIONS.SET_MODE, mode }); -export const setDistance = distance => ({ type: ACTIONS.SET_DISTANCE, distance }); -export const setChanged = changed => ({ type: ACTIONS.SET_CHANGED, changed }); +export const setEditing = (editing: IRootState['editing']) => ({ type: ACTIONS.SET_EDITING, editing }); +export const setMode = (mode: IRootState['mode']) => ({ type: ACTIONS.SET_MODE, mode }); +export const setDistance = (distance: IRootState['distance']) => ({ type: ACTIONS.SET_DISTANCE, distance }); +export const setChanged = (changed: IRootState['changed']) => ({ type: ACTIONS.SET_CHANGED, changed }); export const setRouterPoints = routerPoints => ({ type: ACTIONS.SET_ROUTER_POINTS, routerPoints }); export const setActiveSticker = activeSticker => ({ type: ACTIONS.SET_ACTIVE_STICKER, activeSticker }); export const setLogo = logo => ({ type: ACTIONS.SET_LOGO, logo }); @@ -44,9 +44,18 @@ export const sendSaveRequest = (payload: { export const resetSaveDialog = () => ({ type: ACTIONS.RESET_SAVE_DIALOG }); -export const setSaveLoading = save_loading => ({ type: ACTIONS.SET_SAVE_LOADING, save_loading }); -export const setSaveSuccess = payload => ({ type: ACTIONS.SET_SAVE_SUCCESS, ...payload }); -export const setSaveError = save_error => ({ type: ACTIONS.SET_SAVE_ERROR, save_error }); +export const setSaveLoading = (save_loading: IRootState['save_loading']) => ({ type: ACTIONS.SET_SAVE_LOADING, save_loading }); + +export const setSaveSuccess = (payload: { + address: IRootState['address'], + title: IRootState['address'], + is_public: IRootState['is_public'], + description: IRootState['description'], + + save_error: string, +}) => ({ type: ACTIONS.SET_SAVE_SUCCESS, ...payload }); + +export const setSaveError = (save_error: IRootState['save_error']) => ({ type: ACTIONS.SET_SAVE_ERROR, save_error }); export const setSaveOverwrite = () => ({ type: ACTIONS.SET_SAVE_OVERWRITE }); export const hideRenderer = () => ({ type: ACTIONS.HIDE_RENDERER }); diff --git a/src/redux/user/reducer.ts b/src/redux/user/reducer.ts index 389e29d..00d2aaa 100644 --- a/src/redux/user/reducer.ts +++ b/src/redux/user/reducer.ts @@ -179,7 +179,11 @@ const setSaveOverwrite: ActionHandler = }); const setSaveSuccess: ActionHandler = (state, { save_error }) => ({ - ...state, save_overwriting: false, save_finished: true, save_processing: false, save_error + ...state, + save_overwriting: false, + save_finished: true, + save_processing: false, + save_error, }); const resetSaveDialog: ActionHandler = (state) => ({ diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 51b1156..b608a43 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -32,7 +32,7 @@ import { setProvider, changeProvider, setSaveLoading, - mapsSetShift, searchChangeDistance, clearAll, setFeature, searchSetTitle, setRouteStarred, + mapsSetShift, searchChangeDistance, clearAll, setFeature, searchSetTitle, setRouteStarred, setDescription, } from '$redux/user/actions'; import { getUrlData, parseQuery, pushLoaderState, pushNetworkInitError, pushPath, replacePath } from '$utils/history'; import { editor } from '$modules/Editor'; @@ -333,17 +333,15 @@ function* sendSaveRequestSaga({ if (timeout || !result || !result.success || !result.address) return yield put(setSaveError(TIPS.SAVE_TIMED_OUT)); return yield put(setSaveSuccess({ - address: result.address, save_error: TIPS.SAVE_SUCCESS, title, is_public: result.is_public + address: result.address, + title: result.title, + is_public: result.is_public, + description: result.description, + + save_error: TIPS.SAVE_SUCCESS, })); } -// function* refreshUserData() { -// const user = yield select(getUser); -// const data = yield call(checkUserToken, user); -// -// return yield put(setUser(data)); -// } - function* getRenderData() { yield put(setRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); @@ -570,7 +568,7 @@ function* searchSetTabSaga() { } function* setSaveSuccessSaga({ - address, title, is_public + address, title, is_public, description, }: ReturnType) { const { id } = yield select(getUser); const { dialog_active } = yield select(getState); @@ -580,6 +578,7 @@ function* setSaveSuccessSaga({ yield put(setTitle(title)); yield put(setAddress(address)); yield put(setPublic(is_public)); + yield put(setDescription(description)); yield put(setChanged(false)); yield editor.owner = { id }; diff --git a/src/styles/panel.less b/src/styles/panel.less index 4c24f79..ad555a3 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -685,24 +685,27 @@ > div { margin: 10px; + white-space: pre-line; } - ::after { - content: ' '; - width: 100%; - height: 40px; - background: linear-gradient(fade(@dialog_background, 0), @dialog_background); - position: absolute; - bottom: 0; - left: 0; - transition: opacity 250ms; - pointer-events: none; - touch-action: none; - } - - &:hover { + &.has_shade { ::after { - opacity: 0; + content: ' '; + width: 100%; + height: 40px; + background: linear-gradient(fade(@dialog_background, 0), @dialog_background); + position: absolute; + bottom: 0; + left: 0; + transition: opacity 250ms; + pointer-events: none; + touch-action: none; + } + + &:hover { + ::after { + opacity: 0; + } } } } diff --git a/src/utils/format.ts b/src/utils/format.ts index f0c55a5..5710576 100644 --- a/src/utils/format.ts +++ b/src/utils/format.ts @@ -13,3 +13,5 @@ export const toHours = (info: number): string => { export const toTranslit = (string: string): string => ( removeGarbage(ru.reduce((text, el, i) => (text.replace(new RegExp(ru[i], 'g'), en[i])), (String(string) || ''))) ); + +export const parseDesc = (text: string): string => text.replace(/(\n{2,})/ig, "\n\n"); From 2cf83e88edc04ca1e256b9d89ba5328e16fcbfe0 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 12:06:42 +0700 Subject: [PATCH 015/320] set min height for dialog --- src/components/dialogs/TitleDialog.tsx | 5 ++++- src/styles/panel.less | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index 3537c11..9d40364 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -65,7 +65,10 @@ export class Component extends React.PureComponent Date: Fri, 29 Mar 2019 12:11:27 +0700 Subject: [PATCH 016/320] changed title dialog styles --- src/styles/colors.less | 2 ++ src/styles/panel.less | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/styles/colors.less b/src/styles/colors.less index 39169f2..371e1d4 100644 --- a/src/styles/colors.less +++ b/src/styles/colors.less @@ -31,3 +31,5 @@ @loading_shade: darken(fade(@blue_secondary, 80%), 20%); @cluster_small: #0069a7; + +@title_dialog_color: fade(#111111, 85%); diff --git a/src/styles/panel.less b/src/styles/panel.less index eac9745..aa19ab7 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -663,10 +663,11 @@ .title-dialog-pane { margin-bottom: 10px; padding: 10px; - background: @dialog_background; + background: @title_dialog_color; color: fade(white, 50%); font-size: 13px; box-sizing: border-box; + border-radius: @panel_radius; h2 { margin: 0; @@ -694,7 +695,7 @@ content: ' '; width: 100%; height: 40px; - background: linear-gradient(fade(@dialog_background, 0), @dialog_background); + background: linear-gradient(fade(@title_dialog_color, 0), @title_dialog_color); position: absolute; bottom: 0; left: 0; From 4d9456610f36ac22093ede99403ad101475a164f Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 12:24:09 +0700 Subject: [PATCH 017/320] fixed backend filtering --- backend/routes/route/list.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/routes/route/list.js b/backend/routes/route/list.js index 7d2d6ea..59212e2 100644 --- a/backend/routes/route/list.js +++ b/backend/routes/route/list.js @@ -8,7 +8,6 @@ module.exports = async (req, res) => { } = req; const is_starred = parseInt(starred, 10) === 1; - const user = await User.findOne({ _id: id, token }); let criteria = { is_deleted: false }; @@ -16,7 +15,7 @@ module.exports = async (req, res) => { if (title) { criteria = { ...criteria, - $and: [ + $or: [ { title: new RegExp(title.trim(), 'ig') }, { _id: new RegExp(title.trim(), 'ig') }, ], @@ -48,6 +47,7 @@ module.exports = async (req, res) => { } ).populate('owner', '_id'); + list = list.filter(item => !author || (item.owner && item.owner._id === author)); let limits = list.reduce(({ min, max }, { distance: dist }) => ({ @@ -61,7 +61,7 @@ module.exports = async (req, res) => { // ? parseInt(distance[1], 10) // : 10000; - if (distance && distance.length === 2) { + if (distance && distance.length === 2 && !(minDist === maxDist && minDist === 0)) { list = list.filter(item => ( item.distance >= minDist && item.distance <= maxDist From 8dc3969906fa15bb8f15737bbd086c14158b5859 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 13:08:16 +0700 Subject: [PATCH 018/320] description color white --- src/styles/panel.less | 1 + 1 file changed, 1 insertion(+) diff --git a/src/styles/panel.less b/src/styles/panel.less index aa19ab7..b223025 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -684,6 +684,7 @@ line-height: 14px; padding: 0; position: relative; + color: white; > div { margin: 10px; From 6714721adf455b9555a4f6cbcc24f6111a421a97 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 17:22:34 +0700 Subject: [PATCH 019/320] stars at route-row-view --- .eslintrc | 4 +- src/components/maps/RouteRowView.tsx | 8 +++- src/styles/dialogs.less | 59 +++------------------------- tsconfig.json | 2 +- 4 files changed, 15 insertions(+), 58 deletions(-) diff --git a/.eslintrc b/.eslintrc index 1033b4c..9b5edb1 100755 --- a/.eslintrc +++ b/.eslintrc @@ -30,7 +30,7 @@ "prefer-promise-reject-errors": 0, "jsx-a11y/mouse-events-have-key-events": 0, "camelcase": 0, - "no-trailing-spaces": 0, + "no-trailing-spaces": 0 }, "globals": { "document": false, @@ -41,7 +41,7 @@ "FormData": false, "WebSocket": true, "Element": true, - "localStorage": true, + "localStorage": true }, "env": {}, "settings": { diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 8c00093..a9c943f 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -37,8 +37,8 @@ export const RouteRowView = ({
{ is_starred - ? - : + ? + : }
} @@ -47,6 +47,10 @@ export const RouteRowView = ({ onClick={() => openRoute(_id)} >
+ { + (tab === 'all' || tab === 'starred') && is_starred && !is_admin && + + } {(title || _id)}
diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 66203a3..a374b78 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -337,68 +337,21 @@ } -//.route-row-panel { -// position: absolute; -// top: 100%; -// height: 32px; -// width: 100%; -// left: 0; -// background: mix(@dialog_background, white, 80%); -// border-radius: 0 0 @panel_radius @panel_radius; -// z-index: 1; -// transform: scaleY(0); -// pointer-events: none; -// touch-action: none; -// transition: transform 250ms; -// transform-origin: 0 0; -// padding: 0 5px; -// box-sizing: border-box; -// // display: flex; -// align-items: center; -// fill: white; -// -// display: none; -// -// & > div { -// display: flex; -// align-items: center; -// -// svg { -// margin-right: 2px; -// } -// } -//} -// -//.route-row-edit { -// fill: rgba(255, 255, 255, 0.3); -// right: -48px; -// padding-left: 0px; -// stroke: none; -// position: absolute; -// top: 0; -// width: 58px; -// height: 100%; -// transition: all 500ms; -// display: flex; -// align-items: center; -// justify-content: center; -// cursor: pointer; -// -// &:hover { -// fill: @green_secondary; -// } -//} - .route-title { margin-bottom: 5px; font-weight: bold; text-overflow: ellipsis; overflow: hidden; - //white-space: nowrap; position: relative; max-height: 2.4em; word-break: break-word; + display: flex; + + svg { + fill: fade(white, 50%); + margin-right: 2px; + } } .route-description { diff --git a/tsconfig.json b/tsconfig.json index fe59e18..2e5ace5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,6 +28,6 @@ "include": [ "./src/**/*", "./backend/**/*", - "./custom.d.ts", + "./custom.d.ts" ] } From 644a15b782cc5eb675a3dee66bfe992126a54914 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 17:26:37 +0700 Subject: [PATCH 020/320] did nothing --- src/components/maps/RouteRowView.tsx | 4 +++- src/utils/format.ts | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index a9c943f..d69ef7b 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -51,7 +51,9 @@ export const RouteRowView = ({ (tab === 'all' || tab === 'starred') && is_starred && !is_admin && } - {(title || _id)} + + {(title || _id)} +
diff --git a/src/utils/format.ts b/src/utils/format.ts index 5710576..30d1868 100644 --- a/src/utils/format.ts +++ b/src/utils/format.ts @@ -15,3 +15,5 @@ export const toTranslit = (string: string): string => ( ); export const parseDesc = (text: string): string => text.replace(/(\n{2,})/ig, "\n\n"); + +// export const colorizeTitle = (text: string): string => text.replace(/(\[[^\]^]+\])/, ``) From d79eed6d70f5f86f45be16daf91011ec801718eb Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 17:29:10 +0700 Subject: [PATCH 021/320] show stars to everyone at mine tab --- src/components/maps/RouteRowView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index d69ef7b..0599edc 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -48,7 +48,7 @@ export const RouteRowView = ({ >
{ - (tab === 'all' || tab === 'starred') && is_starred && !is_admin && + (tab === 'mine' || !is_admin) && is_starred && } From c1dfa24f1bebe06e36f6dd414ab661af1b0ae966 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 17:31:27 +0700 Subject: [PATCH 022/320] better stars display --- src/constants/dialogs.ts | 4 ++-- src/styles/dialogs.less | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts index 6532a98..17b08bb 100644 --- a/src/constants/dialogs.ts +++ b/src/constants/dialogs.ts @@ -18,6 +18,6 @@ export const DIALOGS: IDialogs = ({ export const TABS: IMapTabs = ({ mine: 'Мои', - all: 'Разное', - starred: 'Общие', + all: 'Заявки', + starred: 'Каталог', }); diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index a374b78..c7be1e4 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -292,7 +292,7 @@ align-items: center; justify-content: center; fill: fade(white, 30%); - background: fade(white, 5%); + background: fade(white, 8%); cursor: pointer; transition: background 250ms, transform 500ms; @@ -391,6 +391,7 @@ height: 32px; user-select: none; flex-direction: row; + display: flex; .dialog-tab { display: inline-flex; From 8a232773116f0d24a4694a5b585bf9a27e9fba12 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 17:33:56 +0700 Subject: [PATCH 023/320] changed row corner --- src/components/maps/RouteRowView.tsx | 2 +- src/styles/dialogs.less | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 0599edc..8bbb75f 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -49,7 +49,7 @@ export const RouteRowView = ({
{ (tab === 'mine' || !is_admin) && is_starred && - +
} {(title || _id)} diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index c7be1e4..461d484 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -348,9 +348,11 @@ word-break: break-word; display: flex; - svg { - fill: fade(white, 50%); - margin-right: 2px; + .route-row-corner { + svg { + fill: fade(white, 50%); + margin-right: 2px; + } } } From 9edef64f9742399d345980a675ae6a50da10e3be Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 29 Mar 2019 17:37:38 +0700 Subject: [PATCH 024/320] fixed flex shrink --- src/styles/dialogs.less | 1 + 1 file changed, 1 insertion(+) diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 461d484..162e5dc 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -352,6 +352,7 @@ svg { fill: fade(white, 50%); margin-right: 2px; + flex-shrink: 0; } } } From a42f839d1fa8e39438240b52352aa014f208ce30 Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 17 May 2019 16:18:02 +0700 Subject: [PATCH 025/320] added satellite map --- src/constants/providers.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 203ef0b..45be696 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -14,6 +14,7 @@ export interface ITileMaps { YSAT: IProvider, YMAP: IProvider, SAT: IProvider, + ESAT: IProvider, } @@ -64,9 +65,14 @@ const TILEMAPS: ITileMaps = { url: 'https://sat0{s}.maps.yandex.net/tiles?l=sat&v=3.330.0&x={x}&y={y}&z={z}&lang=ru_RU', range: [1, 2, 3, 4], }, + ESAT: { + name: 'Sattelite', + url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + range: [1,2,3,4], + } }; -const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT']; +const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT']; export const DEFAULT_PROVIDER: keyof ITileMaps = ENABLED[0]; export const PROVIDERS: Partial = ENABLED.reduce((obj, provider) => ({ From fcea89b347281ab3b0a351f4fd59da58b3aecb6e Mon Sep 17 00:00:00 2001 From: muerwre Date: Fri, 24 May 2019 17:59:38 +0700 Subject: [PATCH 026/320] added bug to todo --- src/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.tsx b/src/index.tsx index 82c2ccf..fb9fd62 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -3,6 +3,7 @@ ## BUGS ## FEATURES + todo screenshots with dot losing .png extension todo refactor reducer to use is_ prefix for editing and etc (mb move them to status object) todo tower sticker todo route description From da67e10cd296cfe589da5b6795b10bcc2385adf5 Mon Sep 17 00:00:00 2001 From: muerwre Date: Wed, 24 Jul 2019 13:07:32 +0700 Subject: [PATCH 027/320] added prokatimsya logo --- src/constants/logos.ts | 1 + src/sprites/logos/prokatimsya.png | Bin 0 -> 262966 bytes 2 files changed, 1 insertion(+) create mode 100644 src/sprites/logos/prokatimsya.png diff --git a/src/constants/logos.ts b/src/constants/logos.ts index 4b00bbf..e7a6894 100644 --- a/src/constants/logos.ts +++ b/src/constants/logos.ts @@ -10,6 +10,7 @@ export const LOGOS = { pedals: ['Усталые Педальки', require('../sprites/logos/pedals.png'), 'bottom-right'], rider: ['Райдер', require('../sprites/logos/rider.png'), 'bottom-right'], rider_evening: ['Вечерние городские', require('../sprites/logos/rider_evening.png'), 'top-right'], + prokatimsya: ['PRO_КАТИМСЯ?!', require('../sprites/logos/prokatimsya.png.png'), 'top-right'], }; export const DEFAULT_LOGO = 'nvs'; diff --git a/src/sprites/logos/prokatimsya.png b/src/sprites/logos/prokatimsya.png new file mode 100644 index 0000000000000000000000000000000000000000..3f43a0c64cad4578ee1df473e5be44428b1ced8e GIT binary patch literal 262966 zcmbTebySpH+c&I;f}nIt2uMf^(kUf^g3{g6GxPu>B_JJ&(kUni35@M zQNX_j{v^JB7k23q(u6f&yt;!akjI2_UF%^tW{_0$B!RZdHnq9iIOmHxpdS} zTRX9dXoo6m^h83Po3-F47cY_f&UV4+-I8_lW9ffyu81GkZAilYD{DrUmb<(AkvqOF zzD~IIF{6AX_zoFKfgvlSzKPO3Ongys`9@KS2rAH zZXMq{f940o%wT6JP`yo(!|trcluNH1JNL|ci*@x3KHM$KsX(DLK9r>r>W1rttFJSw zi{4PE{P?VND< z_(tKz_=aP!4Iin2`}tqx2eEIfi3&GxMlWi@*C|oHN_6gLgXhI@`@ctQ=50%%wh`V9 zn)gFg#=M3{zkhyUHg*3T*(mT3PwqYQGf|<3{I2xehQB2CKpoB+zZvrHR}a$+n+C#6 zM1#ZI9lcF&E7_#1Sd$>V8CpfCD-9BJNl+x^Bq%$9hdr*@&+Z-2LuYNCFi-J1Yh((Y zSEJu#jL1{T9@!VNbfQMajB9jf@ibBoR4nB?zXY)gup!m>%n4l~hFmzF z3RYh=v)_bT*tJ7*8^sLb-fTeB!Mnnno^HTBe^-Gz*zK#D{FnXWBTVhmg0L6GLtJ$} zQzJt|4?bfJ*AVlNN9~NQLT9uCCS$PRyKah{pOiT97K=y_acd6YBgVbg4Du9mAdRd}WmPf`ZeoHAYM6sB>h#-HBkvXKLMH6JdQf0*q?C=qUusKio5u$EU4!G%K=L?J)=RExZx4{iUJaQp?nQ71}vaUO1Z zwA=rR2V+gzd8Pc5uME|S*H;w|IiBi)rD7@%|BHt95_ePqyxz6>obC9Fo;QiV)GC|> zQ=(UA47s9bk$m66j4x?sHPSIl%rmJ~MxXOjavonHk_6E~!~L8)!C*{{jN3+mw3B*> zq>!Xo2Dd0YR>KC0sHj@$Tv%EC^951reG`Y$$5$iA6<;7zKo^a{q1yUfLdatO5f(%M zd6O6M+`!N?{Ue{+yV1yGBvqLP#mQqwSDH}!%Aw)kKZiH=%X5>@f-V;Kf(y*Y%(}7$ zK5SusU~miD9o^mUqYJyILYU>5jdu-nX@s)>MvQ4dm2xRtE0@Ha-sCxjcXRI<*2^ds zX{r}hQkIi^I=E4kWWB*M+9$}C`6)r53Qvr>_%B@i@)W!FRe36oz!j8WhnmYJ0oPm{ zBhpGvTqyh74poC+hNM-lP5d80ktYWChwJV|C&5jFJQo^nrRCXAj*lnnE`M1#aHB1Q zaBgDGE_okb9ODc!F!Ex~8yst?Dd~@13$YstF^}kJgeVEFj!aKSdzwqmMe5Fr#R|+u z?pajJ^fWlk6Ii6_nIRCRriliZqY4pL(N|CoQ=#0v?Yi-icH?+c3xy*eSQ4_PQnIDe z&fe&7mF71rn6qaE3U@sCrplH7X0ldKhqN>yYti@hDi6kDSV(QPoJZbKAahX|l69Zm zWc^5Y&{BrVM{#S(shy-OCML#aZ+&8~K|jW%#K}4H#zjMN082MfdwDE&(XGcwf7~_Q zO`JDwkayJ0ah<+*13GnYGQ=pjmPma1v{oNI$E$f&{gy?fG2}xeHXeOm2$}NE(}`l)qB9p#BgrV&s<88LQh= zA!9RHQe+p4uj2p>Vsq@J?FHHx91TKr#4;cX7hMY(LYZ}U4aQ=1^m5~gQIVq-{3^%e zu=(8QN<98y4vs}dhOjuKReagVSoen+v`Um+xb`|UcVty9ce}xA&81T**u33Qw>4+y zFd$)qqP0pBCfqfR8qpOakyKB8u96cSWUm!eSmgNRh8*E9g3koIR=r(`@sVpW5%+FS zyV#Epf4s{GZX`NI zljggcAd;N2GruEe$04MMOfFAd+m$CavO_WXHT1p&)$?oZejo0BF^b%+vh3~hq(Bv+ zJ%ZW(mHozM#et-pe6J|3@UDzG&HzEqW<&uuqlV}29uc=UvatCYpH=pNscZrq=8 z9s=-ia*0Z)MMeL&Xt;3II-C?^seugntVMz=;?I#4g`_tEAW3yyqPY+L59*pc0BD(z zX@}(E&17X#ssTsRh^D9>x$qe?8$z#-ex8aCqScOX5&h!&?k>TC*xpwm9oJNXSA|~$ zzeJPfR@xz;!ZK0Ht5@aL#U5eezQJbDBe(7sa>=dSlNr`6Q2V8IN}ofnqhCSsp)OVL z`8(E#9bLZkZIjBXjn)GNMFOYPLyf5-1V`+Z z&#P0q^Q!H_b9$YarCnsVYy4UrS)wW|ii&>|pux$lnOgVili_sncDGt%;|e>CGo>i1 zk?N`{Rf5Y#R=ZM9SJ&3c2mChOv%XPA5gv(%gqqD-gs~Ypm-qRE$Xk4Qcyh=KtK?ge zAC;ien~dC5h44KeQilwC$44?-T5QML-4rnLe8>8bjj9|)QcBX}eS5*vFqkPQ99fLU zY@mfaS1ZqYz30y#?gQA2d-=;t?dMcxpJ^~QcrcQc{C~m*iKpw$dbwh7eK{d9Q6$iw2yX>{rA8jOfWW+YRLeeHP$iKm+y= z&s#lB2Cey8?QB+nK)hqZf2L9yBofJDPz6chF|2qbbNbgRMbtU-_)kdy)C?a9gAc2T z@)9#j{SB52zIFnQ;;s7YvlvRpC*Lll@;36*yN@|AqXr_3g~fvQghD<>p2}w|nZ$Bb zl>OBkwP7K}Y4sm)QbnHLjP0g=MFVpxt!1Ui7>VOQzh zHx;_u&8^7IRjOna^mdd4C6{O&m}DJDhDy*IgZZgw$qrBUcP^Za=!|*JM{;B)Rq~ij zZk-UzjJtIZ^85aLT5juncp7$lRN;+N<%n+C$)4HUlYQ9-O~=dpJ$Y$P4!224^1l{C z2-}`f@#r(%_WzsRaQ69Vr{nhA8){Q;IZS^B_iex5aVLL8rXc0sNhY2Loo_w|&rLip z@0;cSd;0aR%6btp!vKjt5qU*G5h)C5l~L2G*HaB)d<9WzaX_{;w0j2&#S|*>&_^O> zA`slD-f)wN$esO*Q@KV5V8I`#lDEwHD{s55U43&PLsIW^1t&hvCqN?FpfosC57kJr zNlLu`x~_*6)4gB4WzS&VPl;@+(xF+{*VP^*#B+kd-3i z*I7OL0%4YDO;lLOk?Ea7FMj-pwrro|=U7P=1%a5y7=)LXSGS=*U0jPX;Mf(u6sHVX zrlK6rRtWPKf{d3|SKSu+@w9lY3hg>g#hNBbUVVKsUo$2~7-Kf|B(vycOgsUzsYVE| zje&MCzCrl-s;6b-c(K7_#(%tQh8zsxeaDvj*oGQts_?#ibYAMUFm;IwU8sfDCf|+h zRWbFKqZYC~K{c9zFpWSMeQ%xNWk*DDczc1i8I&hhlW0d{k<~u=q+e1}_VCAtdMwqw z{gRkgP_bX;2tq62kq@b!@pQDlIVgDCFS*rKVL!aIS-+Ji?v5GXnsIJEk&$}wcU!M| z`o)^8J@T>2TQL%3ewQxBYF_Y0_53qh@~A~cuGqF3)fV}#YxcL~(UyEwFW9Mg+g;cn zvWeVKsG&>?yn<)r!fwO;%h2G3|Md$zK}`x&0+u&Y|IkMFb!|za4?9@aY{HiWE6{ec zI9L;l-GXP*Da8rf%TL|oDltf;ENn-JX}X{zjk!HgTXy5Pw&r875wp{sqz$mehM4&q ze}A$!RB!r&bpFB|M$gi2>AK9(7&<#NJazw}%a<0a4g_hB= zF(Zw1NpdZ8ad!K%#f8u?N(1(xaA+bP`?>Ct&;CZwEN-8mbN*m=g}Z`iY;3H4*=^#F z-(1~Ig&G#FPfK-GtA-?;&snZ&n`*@Lc~I3n{H*jvltsocl&wc zQ|Uk7{K?s$jEk#jNqcXb*RB>Kn8@_(Ght99qhU11lVm2V&e(+gxd5|UbaWq_eNWc- zH-x>n5tFbaHjP)!BL|QoD91x10UJ|hV{Q$}4HjL+Zts@y0-ZIIh05C)OFvmTZda84 z6M~SS!0;LSPZ?kH^77U{zEhX~_%u_mzKSnnPT}83%u2m`mFBQ&6c}clV zpW8D(lRA%rsFX2>w!9ZsIEu>;isTzCF(U+HJcQ5SNU9PM)lM4G*S&!+K?#mewgTo( zH+{CGm!1Y34nOoe{2k|5T>G$Jdf(Vlv!Th!4?nv?j{DD?Ss+MvQgzD89O9r zoDw12@o-r?O1~FfsQQQUsO%9fZ+koIbtA3>ec!wnj8vAgkyu@1s5etu@&orT2OfG^ z)eF+8izS_uy~kwd+-L?@qQ7ZxV~RRxL}i!)j@*cCt6Fts>c*^d2qa64X#UB%m^yu^MG#zH+j4Df?Pdd9>kpYcLY$X%-k3AR!1#pM04$L)fCg2o0-6GaxLi4e=?6JpjdD( zv@s)%TfCc~>RM`BAe49zrHGmbz88W@iv-ZT>eWkk zA7gvQdoPk7cGKU!e$BBEzA=aCk#06#D8(?_-Wf!X5F(SId{-+q!31Ql7WB`D)Mrby4*>u zniwA>m|#UA(GjC;{Az9EuFnMdu2Ak#?tY?4&`*{S77}8uVof{kTo^AFRBB zg_V~in$N+=3&Ow#7|m`mNr?u<&uLgqKq5TKZ%*RoiaX$bAug~O&MH6)t{4@x*sw67 z5i4R`kvUD|?CMfBtKSNy)=`~|qka2PX2%PK^C#O1aYjz|h?*Q}Zz!~WgWYY^faOyb zU)g*p;x}?YYBxIFbJAWg;M7-qIbLg43X}gKPZxdnc~OQVAfQIJ3qop0{dRY&C!EwJ z-ZyR3i`QDebDGw9*r(T%eIQIjq7fDJzT_9QQ37b%^+fZ#i1XLOL7rdSgeh(#DRZTt z>gIlu_GW)l`J=faLG~i9X)2Y#{;dxLYb^~b)PhK4SKo?h+)-iWC|3``YpLVy@UTx$ zXe-u=>$??*rCH7Xwo>cHQm{X1KF;lW9l#@K+uuFcoHvWwYGO$;<#Jm`A%5Q+kUeXl z4>CCX`xzxFWxjFUOAt*;c3t zr?fgYZeii-B*d|utgsK8_StF-27t#gMFO^3D1Ngo{%0h&BKuQQ+3mK^f9vNc59W!L zL?)i+t_VRVg~T^&7FpG_+`ka}Zy#lNO)Mwm8&_?j;UYY*iYQCF;}I(szYLees%}Nu zF(|How0BT@Z~o)?>(5;4s$(ym|1rdB;H!-B2KY;2U%>B2I1DjqK};^jW3cb^(XFO9ADrAl6glK|Aj4O*s?Odi4p1{VpgOdo8_}Oz-_YkbC9tnpu>w ze{I*%R>^Ur;}L_;Ca2rUAEWbseyUsCB=R`s){i2UX2sUE4_w$b16qLm_9rg82ETgnxanqs0gmsch zDu3N}E1vOyQL=Rk>X!ti^1>5Gy6j-Meg)a0_+-Rxt-iLoWEI&_6Y=GA5m8ZF0Ejds zUi|*?gtPLRF;e$MgzuH}O%5~#Rp9lAUc10yNn}5g4SA((nm4pQEyhakMTo_cezKbEOLx;-h%9*L_=Gz> zg84bOje4#znkuRtf1>oBr#xliM5!Yr1aAIMKgFKO)Jq4h7az~=ys0MI-D2bV^y?NSqSmW#|JFqw2=_QSw zdzOxI4`6HC)3xq8PSYPNJ$D-P26lsl)Ph;u%qpuw)e>mOC2EKy7bx5p*|kk8!)=Yi zr1>2k947b5diW$i(`YFc^~xNrYaOk=Sw6gd#_Tq%2ELIxV8p~L!uM#3Tk6Nj{v5w; zCY=375!KmtS&#qn;i=_2)@vP4x_l}((5eZ-hT+5CY}#}eyi~7->&3YtMwx9aKHP2f zNxJVL&n-}HQSWU67yDOoth{dc_pimp$Mgr4u3A=BcTStc9w+ftCg{1{yKI9JtzUIoGgW(gEH}LA-gvXzrQ~IIzFy{ zBoCM#uaU44*Avk>66EghVU{Upvt9XF@5P%~zVzIH%G7HH_D<&PV4yjPHR9pbDk~9) zX-Ej2>&xizNJ)Xh3U8r!)n8?G5^Ji{z?l00JKW!L{_$wKZ|hE`%z39{0@G63P5{n{ zZQP~B_#RYgR~GZ!YS&v~`i>ja?>_3gnS>AH^rjWwH#~7HvY&X@-V|LTE?&PDZX$ zEC4VV1FA907Uh5ya_!AQYA5DBLDZ-Pw`qAV@3)c9_WOfitN3hh&ntJwbH0w;S{%!O zbcCmSrgk|8Ozn;?PdZKsLL4E4)O_*M`_o#dd)3Wfz~6Od``vS@F;mYX;SnUBz+&_j zK@p9XIyV#@yBPl!JPVCDuk8=*yA*E|6BBVm)gf$~@M?;ZaBTOk;|5f1v(8P*8N0#t zpW-he+bF9o7?ge(Qt>t1Krj*Y;1S`D-lqO-Ux~Kc(WGw)6Wl&mCh#tyeO$^PtjD7A$DX4=k7&jr;Lx@3+2n2KzJtXcn;=h6C0TrHAO&0SQF0t&nZNJf**4|C#^s(m6f9xM zR<7okIwCzwH-dXkK|S}^CPGa455sfr<`|?8G`esI`Cd+H-DtSFiG$Avc=Wd^k9>g#?Az;f6?ZiD!s(n)0$sMyWsO~IJK_i zxIBd=awKBKYZA3<_a?()1aw;#=Ec-aG7nbGuj#G@X=BWi?mKC!Mrr!_`yXwXWdPO0 zM)u&#)1?JUrGy_6^*XpWvQmqYMP5{cv?2Gd9n`=10q$zZ~z8%mNE4gWB z<$mkdEs16a8c`FMz%FEUF`oA5SI+N-%||n-W+Jxz^t4jmrD)f5WA{E`V&}3i?CwCI z22yKDe#hiEy%;&2)+h_o!kV#)?9*_hG%jTBE&<>>37W2qh~eq!bRfhi{{-QT`?=ax ziN&dA|05kFf=r6@KLhuv+IxvzVPJ)=a;Jweo5u*u0_linw}I(_hkCo;I5i4K#8YR8 z^iyA4&4NTap+2%w(PI4Ukj_aA4zxDE+bPH4^a0ZZ(J7e$P0+nc+}k;(W!VXb6ShiK zlZBY8W?NA4q3WtxOhD6CjRSb+jfDsR$B|oiYrsdP#bx1JGE>&pd{>%hOvJX6B zlLnd`pjV5cYR6QKez|q1sn!;ct`>aClKH#ovq|f_5W&&?>N+_ZHq)ke0sWF*2Ekd@He zp=6|wKHJn3r9P( znXks)q+`jX@As~wKP7ju+wKuXk4Q zefjFz*WAY@&ztt_p?|24{9hW3O0DQr*4`MqnlPaUTAY~itJ-%k#^T7np<=ox>0-Z< zm2dlbd}m8CW*IXJ@Pk&|gGelq#7&g@ke@D>z|i<{D(@6=j;mh=%(UK%FY*6_*a3n- zPwh(P(ZcD`hN!eUnf4Pa(ug5d9s{Zf&E;jqB7xjzoODPn=O+d0a8DZm`vf{ZMp5&t z2Ql6I=ax<+3s?;r_Qsr(0np&Yu;O2Ave~)cC>?gGu%s>Y<}irU+(L;b`#_zXJf#MD z)RGB`*W}TY`{f!uu_{MID0j92re|Of$xpT;>BYGStUw;Vs8<>nB zC?%-N2jwVZKiI(KBZFdGcqw@Rx7&h>ux!keagb_yA~I?Bfy@$i_-Ac@pH)RMI%57w zI-P`E(JHIGBb#UX+c1KnN3;cxNJ_#-Fe;=LbD~(wuXF8FmvE?j!bhL1J+n1X`TDKDRla56Pd*5vo;fS6o?asS2XU3|t(5d%h+8ty!Ub&?ejSw{39Z!!8B*#3L);4>*yt5ME zu~B*FY$vJtHym`C=YO~7D+lm8l$7ZMsm2pB-AmwY9duC*+d*BPQzH#aX-;)2O=l-t zJ%iZ_vSRz|<+poD5LP^B{V2uokw9}KdZi*wT&{&Gn$tdRr>rV*;hvgSFPe`U5p2iM z-@2D78B2YxHLk^DHHP*9{__L-C#$8~(!DSvj5IBnRu5m_2ris=H&*MODy6_~oiRi` z_wW$??kS`H8Gk_S6s>JK^Ztxi787CBFfvyOcfqqG`p@mjNtw1SU*)BKNk{*+h4!co zp7pcSt+Q^xdH23K)vxck(RT(Jk54Cz>l!BzXsJAYYbY?~5G~i@WZ($pF7sOuGhPtO z9~acMg_a03zdk>aE$6w53-iBJ9!&CKEcIec)8a}f+I6Y)Rtgaw@QbMc%qw%$^Hhh) zp%T1780W*I(na`0YhE6dukm6a=}z)o?qCAapeXf(Kkosl!RY-hulXAyLFdo!iv;kd_2ABZpxMeyWj27 z7lwe(8mzkjIEQU-=rZ)5e4B@rZ#m1P_|D0}C9q(vv(uB2B7<^z8c|qupB$??;9$7~ zMq#QvHfGSPqsb2x8X~>(TODvaxt32BPR-KAHoThWUVO{faQhQ!93p$F|2)Y=QRcW5 z@0p20lFN^50Fu}>?|K|wb-68bu=LJ)XXy)2(rg=F{GAUw<0DeIDrzZ7%uU8=)!J_f zv+P7Aj5n|t@mkU%%0oxrg<;_a2;G2p&*OaKV)LqB_kb|;$D}>;gWB0`FNhI+6}m~1 zw#X3yqj?BX&pe6j9orjE=P9o(0nX`e0|ZEvn^HFGY8LaZoIKJWpIU=YOPPVq)Umc2o3;-H+iFzi;M1@6tAhvW+H_=;+J# zsDgd#qD1Lwjgq+M;o#uVO@k;e3t8B@z;7~GkUyXrn{|#y8P%CYow^bKz}%>B0a=`5~dO-t+kHFj&P#3=r-awQ(JXeNSL< zC;Qa)?KJGwlw?5EQ#AF{`G`Vcrpz(8TA!?9WnOHG_KR7$(R8{d=5a=+Fq!T`^wFyi z&^bGX42UZNg!ey5>EdmmftsLD1adAPva`vzv@Yr?4DhF?THLbhInYZZ2mLE8HC3pv z#D&4h-rm*ya?~ofrMn?F&M1(?J{PGJuoRZ)*4WTK$$(7VLnEku9m{|2O&72lA8@L* zZVo1rc*N+lE>KWXvX!oz7?JK<)}=rUb5C{r^}92c5_m|dW`9qQwt8lLws;Atc)E%i zB|W=6f#f=6#}=AR&Q+2!njFEa*SV^#h@dRDPsNZ*is;%Jn3!nuCA|v`4P|{jB1f6X z;>lYq-W-WNbT3Fj!A&d18?>>{qpyRL(T;iWG6zO8Bp%*pupri+BOs^ZXaqyX_K{je zk{~zw+meC2GypR(0FhaCy%lNwo`7j z`6rHK_`@l*jGwJd_tTEyEBv{FJ(O z-;{K0MhCg)!7|>Z`{u`jb%aabij+$J0beSyzPcl@bMgh+(Fpm zN=q1k7j|qIp7l>gB28)Meaw6rObEUH@GUG@3N%%EZ?#r>WhFDxmAtToq@;Gug)xm> zQk}sxc+CYlPCvHa2cXdJ+#bIAb=R_aWz`|O>ZfGy*I#wcnmCG=QVpUeKTT~_XHyX@K) zesNU|Ks%B{=lG4&+(wCy`ss7Bu25{%EXI=C_9mm+K{Yv&OkdbTcea|i1wHZ~X_4!# zl#`8nnZ?-;D<1wXfWI1kDrG%96Wzd&~` z82}=;%SI7n5hTc91N{o-FpFf2j(&fu|LE1F6)Zq_i7RmjYX@GKOf6*jlxe|*j-bhc zA+c#byHv+_BMssaOS1@KF1T`UPJZ=??%$I2Kb{Z1cJpnLnZLo|-iA@y@qQBrP-~4- zM%Y|dGFavg)cZa(0Ec;JnLogQzEh?1_3g944mxKkYB(xr_tCzzcQ=Sh zB{FWMQW>Ma%dSV+_=FllsSB(LUoj%9*PpxHD4-rEf5u*?OL{rYh24hhtBak!n*3(l zPazJF@x7()BECRq6)AkrAP!ko2>&Qx)zJkcmE~;(qJy;*+l)WqU&==J^fP#(AbdQ= z5lY<>D(mz-Pcm?n&E9Kp29VHT7rOK_jNvC9C8lv`=6}Zrl#y_KW+=)Mj zKc#^JBp285FovCHDul5c`pd?HhOQjgk0gepde2vb1@OJF>9>k93NsBOs z?fpx}s&Cr4>%N{_|$cZb|Hlb-+Q7 zS(6Y*bCd{)h)CRXntZW_bR0hW^;*e)`$}0pP-aJ5HO+ z3Rr}vvtk6?_9kq5OuS}7^fL@ZbUTxQe#Kw~dls`{_k%(_wlAzNga;Sm^dmmc{+5!4 zs=_DX%9?*bk`cQ~TO>ReyUJ%;4HzUyG+;*bl0~z5Yxz%V(9kgz`QxgBDpzbP^A9WTDP!88EPk}p`ZM((A+q`C+i6HUXs^G(YbS*i5Bl~7UF zJa6RNH{4%bKoY7l20CWNhS&IfWsT(zT#dr`An%w#u5?vH`68lBWfo*U`q0&w$fWuk zM{FBgEV%>Hs)AghMMOk|9aNGQOutdfU7vF{yn>Yt;f~$h*ufo`K=uGa6rHxS>d2Tj zJUIA$8HdWfB-yK7rl(Az;^s<9i5+bs4|huq=j%Q>EF*Fl>b&g?Z_n4@U{hI;Jv-hl z10!xsChKUETzsu4A(MY@Fa-C_XGyEjE}5fmQa?Zwu?E(rpxxm6kR-DgKZ7&3_~PiIuQhLOKH*gf_D< zy^TF_9!zf}iLqBt^ah&v49d_Yv3-FqeSK+6=FB$0LW0D?Zi}!Fl9Z`V^n!EffDAS} z*-7e@5r?gMf@xiA?6Xl>dBCsFR0b^fU5snYsK{kBrSz{?;cK3UeE_Mc0}%`Ky~yLK z=94Kz7~_i{TZ{LEQZ&0fl`3M9EuOuhAurq4*>=@ffY@a)zO0k-hw3D-R+O6(Xs2loxQYQy^iUEe{kZvvKNYrr6AW--mm zLQ*Coh_?mS-z_*s7zEi&7q5?HypQQZR!w%N2v~(enhr3P0~>`1#f})GW%m`j`s9|6 zcuMM01sFL{S~l_RmMgi=b4~N0ejL9yruO};dfiYGqcJr1OFLdAhs4A?+$^+&nXlqr zp5j;gU=4$5Fe2KxAk-yn#LCz*H-gLngx?Ti%5`35U}KNdFEz?HfXfq~%TzZV0j^wX z%7NBQ)~Gll)!u$PTTe7n2d2T;;T-4>J4k0ggvj>nRE5(#2So0a^aC zp@+iFr>#+Z@mVv+_pxaKOfnFh?kDJgw`Xh+$XPz+xDQH2bOKK@Dn_#f*?YfM z#5+JgcobT}wteuYn=~jyEc|r~YO=GLQ)C00EVy00n&94>=L>hj(t5hhW8HH`w1z8j zOVlrMoWA0wZ2|!gn)_7=qOu~fhwk+)VTYyTgWaPC4Oj=Xvc!2(2v{@5Yhwfa>#rVU z$*=$*U$#*t{A=2+ht~~g5G-Y9-LmlU3e0>_xzEt6!KyTo&d~>C* zt|tPRm&R&!hYPYP1qpB>FAbzwTtSKZXTN8EnknTAyrlYc|HGedTaEh!W#*DIBx%9D zV@YP4c@#e1?LUlw=HO^L4&p@+$~|QD?Asm?%lv8LHFu)4bZw=!6fO+tSll-PLr2Uj zzeMX?7F2l=upN7#XzpI@)-^h8um~m2vY<^T z$}I9po9lq2#6FdUtn=ZDb|*%^)1rcuj@*MR?Ok7%>=_}jo+rK(udM=Mm|=*!l62ZN ztV?{Q$T|GQ{sEKj%Fj(;3c#aMyEd$0FAKiVM-jX2IqF9>X#P55?`fQqs zLcAP?NleBTKPYrT1WrH0L4o6Wn?LY5IIUnW_K{tPb1h5<8}8zY|I2vZ2Rd-wF4uoy zPkX=WptKGY?Tu;BZLeHTV~yzZZEpa13#OpKeu<&FK>-oGjkbsAKPF@KyT$eD{$Scy z*Bq`QtbvwOsp7XCi1m;_gnTC1hFJQ~6=DiG$LiN8Ou)>7SfZA?xDwbh76%y7=7U2G zWk&HziqI|>rH}of2aupp0#!I`bmi$U`;>SL!{^nf1$4tg)un%*E?CE5&k{8j=gKEb zQDBdLku$DDk1uahkA#|*WOHPgX5sfbr|%pp0_2>p45@*>x013l@)-)~yd7O}Y#(qP z8+Q98eWGg*SMPuXvC*HM9{$HbwQ{`k(qQnrb=PW^WM*@+0Vi| z&3raqon{?Po4sQly5~lQ{GiGXdDYEL527ICot$v{NyCTMx*yl;oUX^B!$%C3>aqpc z0b&Qc^9j~RPfbk~v}xN(yx7kAKy}ccy?wq@g0C;3#7~a)^$ym7t< zB=LhOMFg7a%}555m}q^rR57f`=fYo&Eq!1!U!Gs)f3Hzkw{tOTo3h^FLVt%FA@m4NSD*n{|8`^C_&-<%t?f*(ct!q_9ykA>rS*5=VZEz8iFz%KV;CC`~kOgk2V z?l_zCsUL7-M#H6O@0q_0b=As#=5ka~bx6q2DM768G0)zR zC!E5vv%r1$TmR=0nfV6TF#^}5KBaGwe>?trb;*6Xdbt)bPR=-2m8er*> zsSnh|{JWPw70w;y$m3N#7U7&XhDJuqU3Xq9UNz+t+iIW&lSQJDUg<69$k7=PI@ipb zYjQ1-`c@qH<6!CF^0qw$@~S|qLw8}I%q+E2i^O>u}S(vF073g}v zs3t)%lv@lvyy3OhK=4?3fzL>T@jUqP;szkfjOFnSB-j>hcjx8m8c3}C2Hrrz))A3$ z7`QxKv8Av+o(x-=O#Ir!N z8Yv%;;r4UHrbwAb5iv7!~ zl!IY7#$(2qfgRqXT!FFWK+@K~OgIc;V;0jDy}Of^uF(bM^1A3v?vxVG%}NOoW$P3~ z{MY5Xs{ud~3V>}+*V0KJceS~-{^I!7RJD>tEq?4mDn{bImWeAe^<=4?TB&Nf40G^5 z9=iDY_u#V^V7`bO#5<_O2#oe#FGfRA5;fN+%Pp*s$d^h+uCO8^u4?c13Erp22LkjF zctrHc3?PtMpczSIKC{cWU~ta(l0cAq!|kIK)A_li!(lMO7TlwA)p3)@m?15g%JO)f z%lc-zL?sU+WWV6p|LGV`HT5%)D4(h`}?_$G$?=CsPWY~PD6W4j$OqA&_(nR_D z*T+i5^~IQ9*!xx!wpo54vOarX&jdE|jiKpx?%1Lj)$_K=yA0@6?aABau5R*Q#@?IjN=(t<>>s~ z$fB2hR_LZj+H3CzBD+du@{59W$@T3PEMLJrd z?L$x!aJH)cWKG1V1wo*ZPDq~>Y*1awXKy_k4DyB81tlyfZgIe7@N(#juS|c6{oJi2gTOuaz z8d3z<6~B4lg=N(yda)~N*s|+jk+L`la;dUaXJ>x~ztloxx6%p{n`I3fNdXD+%83%- zO_My|#q>@6>ITgY(llYy?>->S0j`*-LH8CrqmH-3jMFk7ns-ygmH6gjbeMHl-Uk!C z?Gu?QT8`u{PX1QyJQu*K!U8WMnhXc`d)}d|$be;lK}pndWA}4m4akAmi;|U`OM<#t zz$aL}zeIXY>N3bcFkA%WPoFnG{C|b+A3P#>7&Vg8Zr8|^Q4-|UkZ#Ac$EdJz`dsZc z5S;aI{lAhAaer$iApbXJA1}RQTZ_kQ_Pt3m4%3TU$t0g}X-mbEJz6hc2G_9^i~6U` zXayEPa(14bK58^BTroL+iR}#ehy*fwA=$Nfn&5z-I3w0wq-&q<1R|K0VEQbx=hdJ&Ss7dfmr<< z0QImAX7P-(=l!o@H>*mD_#r0)6U~5EFB3|?+x835Tz-J!Zt767*Nte*M<7? zk~XrI=8V%@MOT9e@(4CEfvg}KW8T&I{7t1G2TG?)0PXPH)NzcVTJpE*jFH^9efC%R z1f)j!+QNuS`o4QLlZ&t3jT8CYisT^sJH4WKx{VhHtwzFO0N;H8NijA-j~|1?;KtiJ zUV}4L$OLcmMZ}PkOd$7R+9x^D(vq~X&HpWJF~aLdZ@f)D0W6>9xdxWlYWaz&#WUDc`wa3 zB3qW5J70a~68LGab9r3tnhUoL@3RzxtHAhGZxYc0=?U`x@OhWia7W>*&8FeM!D6a1 z$_0v2x$^{o#yh4ys`drE`uT8+SpyJJ{1z~_ck#EeQc~x(u^gEzhxRa$8@GVkfHylz z-fKbY=KI00Q_E9s0_Me6<<*GmsikDV=6=J^tSKAY2hDID~Jq^qcEtMkyj&lFAq zZ(o>pX?N7{vW5!_#=v#S(9$w%zC;d+bm@T)y3#L(e(hH>VqfA8#Q!yqsbLR^DQsfC z=VdiPL`iZlS3=u$2#)PJf=jfAG)Ve=yTOSTQH;zD(EZ$8UUmvP0_x8{0(fPg+{#c>jEoHfy7>M%i$r7Q z=C%1)v*x$amkBCrE_6W=_VLjX1#Yvwaf<25AYwm!2u+`X$PI+^!1oIUB2v7b>2iIq ze~MX(o<=P@yG;?z@w9D!!;xM-#V|-NUvB;hBpA#$tY!W82;q9O`I?nSb5wtRJD>Ep z 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
    ES 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 Date: Wed, 24 Jul 2019 13:09:50 +0700 Subject: [PATCH 028/320] fixed logo --- src/constants/logos.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/logos.ts b/src/constants/logos.ts index e7a6894..ae6c076 100644 --- a/src/constants/logos.ts +++ b/src/constants/logos.ts @@ -10,7 +10,7 @@ export const LOGOS = { pedals: ['Усталые Педальки', require('../sprites/logos/pedals.png'), 'bottom-right'], rider: ['Райдер', require('../sprites/logos/rider.png'), 'bottom-right'], rider_evening: ['Вечерние городские', require('../sprites/logos/rider_evening.png'), 'top-right'], - prokatimsya: ['PRO_КАТИМСЯ?!', require('../sprites/logos/prokatimsya.png.png'), 'top-right'], + prokatimsya: ['PRO_КАТИМСЯ?!', require('../sprites/logos/prokatimsya.png'), 'top-right'], }; export const DEFAULT_LOGO = 'nvs'; From 293376ce0376dfb320b6f7632df3981147e211f9 Mon Sep 17 00:00:00 2001 From: muerwre Date: Wed, 24 Jul 2019 13:16:58 +0700 Subject: [PATCH 029/320] resized logo --- src/sprites/logos/prokatimsya.png | Bin 262966 -> 36140 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/sprites/logos/prokatimsya.png b/src/sprites/logos/prokatimsya.png index 3f43a0c64cad4578ee1df473e5be44428b1ced8e..975d767980672e1f3d6f9524bf22052f7aea871b 100644 GIT binary patch literal 36140 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%0D=?99{XoDD8%Q)!Vxg}iu!KE~bQcgU~ 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 nlQ9{SF&UFF8Iv*nB_JJ&(kUni35@M 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 z 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
      ES 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 Date: Wed, 24 Jul 2019 13:27:55 +0700 Subject: [PATCH 030/320] checking cache control --- custom.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/custom.d.ts b/custom.d.ts index 1a3dd3c..6a0db57 100644 --- a/custom.d.ts +++ b/custom.d.ts @@ -2,3 +2,8 @@ declare module "*.svg" { const content: any; export default content; } + +declare module "*.png" { + const content: any; + export default content; +} From 745d4f89c7dcb46f4768dfacfcb24ff72f444b12 Mon Sep 17 00:00:00 2001 From: muerwre Date: Wed, 24 Jul 2019 13:29:49 +0700 Subject: [PATCH 031/320] checking cache control --- custom.d.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/custom.d.ts b/custom.d.ts index 6a0db57..1a3dd3c 100644 --- a/custom.d.ts +++ b/custom.d.ts @@ -2,8 +2,3 @@ declare module "*.svg" { const content: any; export default content; } - -declare module "*.png" { - const content: any; - export default content; -} From a8df7c7c9e5d109e038ffada99b3789800f99354 Mon Sep 17 00:00:00 2001 From: muerwre Date: Wed, 24 Jul 2019 13:31:08 +0700 Subject: [PATCH 032/320] checking cache control --- custom.d.ts | 7 +++++++ src/index.tsx | 2 -- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/custom.d.ts b/custom.d.ts index 1a3dd3c..828502d 100644 --- a/custom.d.ts +++ b/custom.d.ts @@ -2,3 +2,10 @@ declare module "*.svg" { const content: any; export default content; } + +/* + leaflet.5e425a8efe3e37f1402e.js + vendor.67e1775f2eea6b36bbe9.js + app.1dad963d5029a2e6587f.css + app.5d709468e2fb08e2c32f.js + */ diff --git a/src/index.tsx b/src/index.tsx index fb9fd62..4456131 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -17,8 +17,6 @@ todo check canvas support at startup done check osrm is up - todo maybe: map preview on save (dont think so) - ## DONE done arrows on screenshot From dac68e744556198f2e3936298e5b4cb27cb4309f Mon Sep 17 00:00:00 2001 From: muerwre Date: Wed, 24 Jul 2019 14:32:16 +0700 Subject: [PATCH 033/320] cleanup --- custom.d.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/custom.d.ts b/custom.d.ts index 828502d..1a3dd3c 100644 --- a/custom.d.ts +++ b/custom.d.ts @@ -2,10 +2,3 @@ declare module "*.svg" { const content: any; export default content; } - -/* - leaflet.5e425a8efe3e37f1402e.js - vendor.67e1775f2eea6b36bbe9.js - app.1dad963d5029a2e6587f.css - app.5d709468e2fb08e2c32f.js - */ From 76affc56b5038a5e903ecb16e971726bcaf22184 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:18:51 +0700 Subject: [PATCH 034/320] fixed mobile spinning on zoom and vulnerabilities --- package-lock.json | 326 ++++++++++++++++++++++-------------------- package.json | 8 +- src/modules/Router.ts | 2 +- 3 files changed, 175 insertions(+), 161 deletions(-) diff --git a/package-lock.json b/package-lock.json index c0a0544..507baa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -776,14 +776,14 @@ "integrity": "sha1-biWYB0SqIjMflLZFpULALT/P7pc=" }, "@types/babel-types": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", - "integrity": "sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==" + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", + "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==" }, "@types/babylon": { - "version": "6.16.4", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.4.tgz", - "integrity": "sha512-8dZMcGPno3g7pJ/d0AyJERo+lXh9i1JhDuCUs+4lNIN9eUe5Yh6UCLrpgSEi05Ve2JMLauL2aozdvKwNL0px1Q==", + "version": "6.16.5", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", + "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", "requires": { "@types/babel-types": "*" } @@ -1109,11 +1109,6 @@ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -1319,7 +1314,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true }, "assign-symbols": { "version": "1.0.0", @@ -1414,12 +1410,35 @@ "optional": true }, "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } } }, "axobject-query": { @@ -2797,6 +2816,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "optional": true, "requires": { "hoek": "2.x.x" } @@ -3277,22 +3297,11 @@ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "requires": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } - } + "source-map": "~0.6.0" } }, "clean-webpack-plugin": { @@ -3436,6 +3445,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -3444,6 +3454,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, "requires": { "graceful-readlink": ">= 1.0.0" } @@ -3651,9 +3662,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4122,8 +4133,7 @@ }, "js-yaml": { "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "resolved": "", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4662,7 +4672,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "optional": true }, "depd": { "version": "1.1.2", @@ -5112,9 +5123,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -5651,7 +5662,8 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "optional": true }, "fast-deep-equal": { "version": "2.0.1", @@ -5875,6 +5887,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "dev": true, "requires": { "debug": "=3.1.0" }, @@ -5883,6 +5896,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -5984,7 +5998,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -6005,12 +6020,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6025,17 +6042,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -6152,7 +6172,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -6164,6 +6185,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6178,6 +6200,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -6185,12 +6208,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -6209,6 +6234,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6289,7 +6315,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6301,6 +6328,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6386,7 +6414,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6422,6 +6451,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6441,6 +6471,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6484,12 +6515,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -6636,7 +6669,8 @@ "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true }, "handle-thing": { "version": "2.0.0", @@ -6802,7 +6836,8 @@ "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "optional": true }, "hoist-non-react-statics": { "version": "2.5.5", @@ -7659,7 +7694,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true }, "jsesc": { "version": "2.5.2", @@ -7826,8 +7862,8 @@ } }, "leaflet-routing-machine": { - "version": "github:muerwre/leaflet-routing-machine#4be3c24db31b7c2e9750f5894e538969e953a093", - "from": "github:muerwre/leaflet-routing-machine#no-osrm-text", + "version": "git://github.com/muerwre/leaflet-routing-machine.git#25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b", + "from": "git://github.com/muerwre/leaflet-routing-machine.git#no-osrm-text", "requires": { "@mapbox/corslite": "0.0.7", "@mapbox/polyline": "^0.2.0", @@ -8138,9 +8174,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash._getnative": { "version": "3.9.1", @@ -8184,9 +8220,9 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "lodash.uniq": { "version": "4.5.0", @@ -8507,9 +8543,9 @@ } }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -10395,118 +10431,118 @@ } }, "pug": { - "version": "2.0.0-beta11", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta11.tgz", - "integrity": "sha1-Favmr1AEx+LPRhPksnRlyVRrXwE=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", + "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", "requires": { - "pug-code-gen": "^1.1.1", - "pug-filters": "^2.1.1", - "pug-lexer": "^3.0.0", - "pug-linker": "^2.0.2", - "pug-load": "^2.0.5", - "pug-parser": "^2.0.2", - "pug-runtime": "^2.0.3", - "pug-strip-comments": "^1.0.2" + "pug-code-gen": "^2.0.2", + "pug-filters": "^3.1.1", + "pug-lexer": "^4.1.0", + "pug-linker": "^3.0.6", + "pug-load": "^2.0.12", + "pug-parser": "^5.0.1", + "pug-runtime": "^2.0.5", + "pug-strip-comments": "^1.0.4" } }, "pug-attrs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", - "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", + "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", "requires": { "constantinople": "^3.0.1", "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.4" + "pug-runtime": "^2.0.5" } }, "pug-code-gen": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-1.1.1.tgz", - "integrity": "sha1-HPcnRO8qA56uajNAyqoRBYcSWOg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", + "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", "requires": { - "constantinople": "^3.0.1", + "constantinople": "^3.1.2", "doctypes": "^1.1.0", "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.2", - "pug-error": "^1.3.2", - "pug-runtime": "^2.0.3", + "pug-attrs": "^2.0.4", + "pug-error": "^1.3.3", + "pug-runtime": "^2.0.5", "void-elements": "^2.0.1", "with": "^5.0.0" } }, "pug-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", - "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", + "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" }, "pug-filters": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz", - "integrity": "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", + "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", "requires": { - "clean-css": "^3.3.0", + "clean-css": "^4.1.11", "constantinople": "^3.0.1", "jstransformer": "1.0.0", - "pug-error": "^1.3.2", - "pug-walk": "^1.1.5", + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8", "resolve": "^1.1.6", "uglify-js": "^2.6.1" } }, "pug-lexer": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-3.1.0.tgz", - "integrity": "sha1-/QhzdtSmdbT1n4/vQiiDQ06VgaI=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", + "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", "requires": { "character-parser": "^2.1.1", "is-expression": "^3.0.0", - "pug-error": "^1.3.2" + "pug-error": "^1.3.3" } }, "pug-linker": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-2.0.3.tgz", - "integrity": "sha1-szH/olc33eacEntWwQ/xf652bco=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", + "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", "requires": { - "pug-error": "^1.3.2", - "pug-walk": "^1.1.2" + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8" } }, "pug-load": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", - "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", + "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", "requires": { "object-assign": "^4.1.0", - "pug-walk": "^1.1.7" + "pug-walk": "^1.1.8" } }, "pug-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.2.tgz", - "integrity": "sha1-U6aAz9BQOdywwn0CkJS8SnkmibA=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", + "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", "requires": { - "pug-error": "^1.3.2", + "pug-error": "^1.3.3", "token-stream": "0.0.1" } }, "pug-runtime": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", - "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", + "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" }, "pug-strip-comments": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", - "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", + "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", "requires": { - "pug-error": "^1.3.2" + "pug-error": "^1.3.3" } }, "pug-walk": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", - "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", + "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, "pump": { "version": "3.0.0", @@ -11621,9 +11657,9 @@ "dev": true }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -12731,7 +12767,8 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true }, "type-check": { "version": "0.3.2", @@ -12870,38 +12907,15 @@ "dev": true }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "uniq": { diff --git a/package.json b/package.json index 6c21f09..5b25313 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@types/leaflet": "^1.4.3", "@types/node": "^11.9.0", "@types/react": "16.8.1", - "axios": "^0.18.0", + "axios": "^0.18.1", "babel-runtime": "^6.26.0", "bluebird": "^3.5.3", "body-parser": "^1.18.3", @@ -75,17 +75,17 @@ "leaflet-editable": "^1.1.0", "leaflet-editable-polyline": "muerwre/leaflet-editable-polyline#master", "leaflet-geometryutil": "^0.9.0", - "leaflet-routing-machine": "muerwre/leaflet-routing-machine#no-osrm-text", + "leaflet-routing-machine": "git://github.com/muerwre/leaflet-routing-machine.git#no-osrm-text", "leaflet.markercluster": "^1.4.1", "less": "^3.8.1", "less-middleware": "~2.2.1", - "lodash": "^4.17.10", + "lodash": "^4.17.15", "mongoose": "^5.3.14", "morgan": "~1.9.0", "mysql": "^2.16.0", "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", - "pug": "2.0.0-beta11", + "pug": "^2.0.4", "raleway-cyrillic": "^4.0.2", "rc-slider": "8.5.0", "react": "16.8.1", diff --git a/src/modules/Router.ts b/src/modules/Router.ts index 9262d9b..2148db8 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -62,7 +62,7 @@ export class Router { useHints: false, }) .on('routingstart', this.showSpinner) - .on('routesfound routingerror', this.hideSpinner) + .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); this.router.addTo(map); From 0d5f8f273f35cda567fe1cefec6cb7139d480fb9 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:27:46 +0700 Subject: [PATCH 035/320] moved back old packagejson dep --- package.json | 8 ++++---- src/index.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5b25313..6c21f09 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@types/leaflet": "^1.4.3", "@types/node": "^11.9.0", "@types/react": "16.8.1", - "axios": "^0.18.1", + "axios": "^0.18.0", "babel-runtime": "^6.26.0", "bluebird": "^3.5.3", "body-parser": "^1.18.3", @@ -75,17 +75,17 @@ "leaflet-editable": "^1.1.0", "leaflet-editable-polyline": "muerwre/leaflet-editable-polyline#master", "leaflet-geometryutil": "^0.9.0", - "leaflet-routing-machine": "git://github.com/muerwre/leaflet-routing-machine.git#no-osrm-text", + "leaflet-routing-machine": "muerwre/leaflet-routing-machine#no-osrm-text", "leaflet.markercluster": "^1.4.1", "less": "^3.8.1", "less-middleware": "~2.2.1", - "lodash": "^4.17.15", + "lodash": "^4.17.10", "mongoose": "^5.3.14", "morgan": "~1.9.0", "mysql": "^2.16.0", "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", - "pug": "^2.0.4", + "pug": "2.0.0-beta11", "raleway-cyrillic": "^4.0.2", "rc-slider": "8.5.0", "react": "16.8.1", diff --git a/src/index.tsx b/src/index.tsx index 4456131..9348567 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -6,7 +6,7 @@ todo screenshots with dot losing .png extension todo refactor reducer to use is_ prefix for editing and etc (mb move them to status object) todo tower sticker - todo route description + done route description skip polyline editing only in manual mode (or by click) todo selecting logo on crop From 15486043d3ed8c2d904a0c0bfee68e41e769d67a Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:41:33 +0700 Subject: [PATCH 036/320] deploy test --- src/modules/Router.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index 2148db8..5b3e3ee 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,6 +65,8 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); + // deploy + this.router.addTo(map); } From 30f10a7da97488a217e47a16a1d310d19ec2b450 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:42:57 +0700 Subject: [PATCH 037/320] test deploy --- src/modules/Router.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index 5b3e3ee..a1f6bbc 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,7 +65,7 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); - // deploy + // deploy x 2 this.router.addTo(map); } From 793c6440cabb02406e8b06704b9bb52724fb2f73 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:44:24 +0700 Subject: [PATCH 038/320] deploy --- src/modules/Router.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index a1f6bbc..692829f 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,7 +65,7 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); - // deploy x 2 + // deploy x 3 this.router.addTo(map); } From dffe378c0d0e1d8871d74df06fc3760efa0f5c46 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:49:11 +0700 Subject: [PATCH 039/320] deploy --- src/modules/Router.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index 692829f..daa7197 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,7 +65,7 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); - // deploy x 3 + // deploy x 4 this.router.addTo(map); } From 506589489421b0c7eb6c4313bf1bea5f8612d22c Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:55:20 +0700 Subject: [PATCH 040/320] deploy --- src/modules/Router.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index daa7197..2b7a229 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,7 +65,7 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); - // deploy x 4 + // deploy x 5 this.router.addTo(map); } From 3ed2e281613075c2678bfe7a1d53e930ad058cc0 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 10:58:06 +0700 Subject: [PATCH 041/320] removed styled from deps --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index 6c21f09..d42e4e3 100644 --- a/package.json +++ b/package.json @@ -103,8 +103,6 @@ "redux-saga": "^0.16.2", "reduxsauce": "^1.0.0", "scrypt": "^6.0.3", - "styled-components": "^3.2.6", - "styled-theming": "^2.2.0", "throttle-debounce": "^2.1.0", "tt-react-custom-scrollbars": "^4.2.1-tt2", "typeface-pt-sans": "0.0.54", From 1e57cf01aecad3d1c8db1ae7d625e125232ca745 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:03:21 +0700 Subject: [PATCH 042/320] deploy --- src/modules/Router.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index 2b7a229..ef33296 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,7 +65,7 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); - // deploy x 5 + // deploy x 6 this.router.addTo(map); } From 7b7377f7ce7f42e7c53aeb39e1076248e5cbc89e Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:11:52 +0700 Subject: [PATCH 043/320] deploy --- src/modules/Router.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index ef33296..3f0705f 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,7 +65,7 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); - // deploy x 6 + // deploy x 7 this.router.addTo(map); } From 99d287333c475ec5f68c337dbc2fa983874557f9 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:17:07 +0700 Subject: [PATCH 044/320] removed deploy test comment --- src/modules/Router.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/modules/Router.ts b/src/modules/Router.ts index 3f0705f..2148db8 100644 --- a/src/modules/Router.ts +++ b/src/modules/Router.ts @@ -65,8 +65,6 @@ export class Router { .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) .on('waypointschanged', this.updateWaypointsCount); - // deploy x 7 - this.router.addTo(map); } From e75fb2fb865e9a1f725c8ede8147e101fd88fb28 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:21:08 +0700 Subject: [PATCH 045/320] deploy --- src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index 9348567..c2d831a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -/* +/* deploy test ## BUGS From 9c75f3e7c93874ad4770b54a5c21f0cf6c1154fa Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:23:41 +0700 Subject: [PATCH 046/320] deploy --- src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index c2d831a..d2ebdf7 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -/* deploy test +/* deploy test x2 ## BUGS From 952ba32c1dbc8ee65bb2e65c01b55081b55e54e9 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:24:21 +0700 Subject: [PATCH 047/320] deploy --- src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index d2ebdf7..5cf5d8d 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -/* deploy test x2 +/* deploy test x3 ## BUGS From a837614e4cbc35b81cfc76b6d03f81fe940bd2aa Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:25:01 +0700 Subject: [PATCH 048/320] deploy --- src/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 5cf5d8d..c7655ee 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,5 +1,4 @@ -/* deploy test x3 - +/* ## BUGS ## FEATURES From 531a8ece259bdc140d0387a8578c9c2d1dc074a0 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:40:13 +0700 Subject: [PATCH 049/320] deploy --- src/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.tsx b/src/index.tsx index c7655ee..5ac05e8 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -6,6 +6,7 @@ todo refactor reducer to use is_ prefix for editing and etc (mb move them to status object) todo tower sticker done route description + done setup deploy skip polyline editing only in manual mode (or by click) todo selecting logo on crop From 18da8c9238bc1ca149d9bff1056e4a56c544c813 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 11:49:09 +0700 Subject: [PATCH 050/320] hide cursor tooltip on mobile devices --- src/styles/main.less | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/styles/main.less b/src/styles/main.less index f521dd8..5984829 100644 --- a/src/styles/main.less +++ b/src/styles/main.less @@ -71,6 +71,10 @@ body { stroke-width: 4; fill: black; } + + @media(hover: none) { + display: none; + } } .cursor-icon-sticker { From 017d2c75b6f7d6992b51779a38808837d54fd419 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 12:00:36 +0700 Subject: [PATCH 051/320] antoher icon for map catalogue --- src/containers/LeftDialog.tsx | 6 +++++- src/sprites/icon.svg | 8 +++++++- src/styles/dialogs.less | 2 +- src/styles/main.less | 3 +++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/containers/LeftDialog.tsx b/src/containers/LeftDialog.tsx index b10bf74..31ea341 100644 --- a/src/containers/LeftDialog.tsx +++ b/src/containers/LeftDialog.tsx @@ -25,9 +25,13 @@ export const LeftDialog = ({ dialog, dialog_active, setDialogActive }: Props) => Object.keys(LEFT_DIALOGS).map(item => (
      { dialog && LEFT_DIALOGS[item] && React.createElement(LEFT_DIALOGS[item]) } -
      setDialogActive(false)}> +
      setDialogActive(false)}>
      + +
      setDialogActive(false)}> + +
      )) } diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index 41e267a..3a01572 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -401,6 +401,12 @@ + + + + + + @@ -412,5 +418,5 @@ - + diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 162e5dc..8119adf 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -69,7 +69,7 @@ border-radius: @panel_radius; bottom: 0; right: 0; - width: 68px; + width: 100%; height: 68px; } } diff --git a/src/styles/main.less b/src/styles/main.less index 5984829..cfa1a49 100644 --- a/src/styles/main.less +++ b/src/styles/main.less @@ -125,6 +125,9 @@ body { .desktop-only { display: none; } } +@media (min-width: @mobile_breakpoint) { + .mobile-only { display: none; } +} h2 { font: inherit; From c1e3c6f383dc77c68ab70d8b0b4661ca6079b237 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 12:51:00 +0700 Subject: [PATCH 052/320] not showing sticker dialog after adding sticker --- package-lock.json | 242 +++++++++++++----------------------------- src/modules/Editor.ts | 2 +- 2 files changed, 74 insertions(+), 170 deletions(-) diff --git a/package-lock.json b/package-lock.json index 507baa1..f6fdee7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1109,6 +1109,11 @@ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -2716,7 +2721,8 @@ "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true }, "basic-auth": { "version": "2.0.1", @@ -2951,15 +2957,6 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -3072,11 +3069,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", @@ -3297,11 +3289,22 @@ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", "requires": { - "source-map": "~0.6.0" + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + } } }, "clean-webpack-plugin": { @@ -3454,7 +3457,6 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, "requires": { "graceful-readlink": ">= 1.0.0" } @@ -3773,11 +3775,6 @@ "component-classes": "^1.2.5" } }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" - }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -3901,16 +3898,6 @@ } } }, - "css-to-react-native": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.0.tgz", - "integrity": "sha512-IhR7bNIrCFwbJbKZOAjNDZdwpsbjTN6f1agXeELHDqg1wHPA8c2QLruttKOW7hgMGetkfraRJCIEMrptifBfVw==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" - } - }, "css-tree": { "version": "1.0.0-alpha.28", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", @@ -4133,7 +4120,8 @@ }, "js-yaml": { "version": "3.12.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4918,14 +4906,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -5695,27 +5675,6 @@ "websocket-driver": ">=0.5.1" } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - } - } - }, "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", @@ -6669,8 +6628,7 @@ "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, "handle-thing": { "version": "2.0.0", @@ -6728,7 +6686,8 @@ "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true }, "has-symbols": { "version": "1.0.0", @@ -7158,7 +7117,8 @@ "ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true }, "iferr": { "version": "0.1.5", @@ -7576,7 +7536,8 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-svg": { "version": "2.1.0", @@ -7639,15 +7600,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -7862,8 +7814,8 @@ } }, "leaflet-routing-machine": { - "version": "git://github.com/muerwre/leaflet-routing-machine.git#25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b", - "from": "git://github.com/muerwre/leaflet-routing-machine.git#no-osrm-text", + "version": "github:muerwre/leaflet-routing-machine#25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b", + "from": "github:muerwre/leaflet-routing-machine#no-osrm-text", "requires": { "@mapbox/corslite": "0.0.7", "@mapbox/polyline": "^0.2.0", @@ -8781,15 +8733,6 @@ "lower-case": "^1.1.1" } }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node-forge": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", @@ -10431,18 +10374,18 @@ } }, "pug": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", - "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", + "version": "2.0.0-beta11", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta11.tgz", + "integrity": "sha1-Favmr1AEx+LPRhPksnRlyVRrXwE=", "requires": { - "pug-code-gen": "^2.0.2", - "pug-filters": "^3.1.1", - "pug-lexer": "^4.1.0", - "pug-linker": "^3.0.6", - "pug-load": "^2.0.12", - "pug-parser": "^5.0.1", - "pug-runtime": "^2.0.5", - "pug-strip-comments": "^1.0.4" + "pug-code-gen": "^1.1.1", + "pug-filters": "^2.1.1", + "pug-lexer": "^3.0.0", + "pug-linker": "^2.0.2", + "pug-load": "^2.0.5", + "pug-parser": "^2.0.2", + "pug-runtime": "^2.0.3", + "pug-strip-comments": "^1.0.2" } }, "pug-attrs": { @@ -10456,16 +10399,16 @@ } }, "pug-code-gen": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", - "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-1.1.1.tgz", + "integrity": "sha1-HPcnRO8qA56uajNAyqoRBYcSWOg=", "requires": { - "constantinople": "^3.1.2", + "constantinople": "^3.0.1", "doctypes": "^1.1.0", "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.4", - "pug-error": "^1.3.3", - "pug-runtime": "^2.0.5", + "pug-attrs": "^2.0.2", + "pug-error": "^1.3.2", + "pug-runtime": "^2.0.3", "void-elements": "^2.0.1", "with": "^5.0.0" } @@ -10476,36 +10419,36 @@ "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" }, "pug-filters": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", - "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz", + "integrity": "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==", "requires": { - "clean-css": "^4.1.11", + "clean-css": "^3.3.0", "constantinople": "^3.0.1", "jstransformer": "1.0.0", - "pug-error": "^1.3.3", - "pug-walk": "^1.1.8", + "pug-error": "^1.3.2", + "pug-walk": "^1.1.5", "resolve": "^1.1.6", "uglify-js": "^2.6.1" } }, "pug-lexer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", - "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-3.1.0.tgz", + "integrity": "sha1-/QhzdtSmdbT1n4/vQiiDQ06VgaI=", "requires": { "character-parser": "^2.1.1", "is-expression": "^3.0.0", - "pug-error": "^1.3.3" + "pug-error": "^1.3.2" } }, "pug-linker": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", - "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-2.0.3.tgz", + "integrity": "sha1-szH/olc33eacEntWwQ/xf652bco=", "requires": { - "pug-error": "^1.3.3", - "pug-walk": "^1.1.8" + "pug-error": "^1.3.2", + "pug-walk": "^1.1.2" } }, "pug-load": { @@ -10518,11 +10461,11 @@ } }, "pug-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", - "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.2.tgz", + "integrity": "sha1-U6aAz9BQOdywwn0CkJS8SnkmibA=", "requires": { - "pug-error": "^1.3.3", + "pug-error": "^1.3.2", "token-stream": "0.0.1" } }, @@ -11682,7 +11625,8 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true }, "setprototypeof": { "version": "1.1.0", @@ -12270,27 +12214,6 @@ "schema-utils": "^0.4.5" } }, - "styled-components": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.4.10.tgz", - "integrity": "sha512-TA8ip8LoILgmSAFd3r326pKtXytUUGu5YWuqZcOQVwVVwB6XqUMn4MHW2IuYJ/HAD81jLrdQed8YWfLSG1LX4Q==", - "requires": { - "buffer": "^5.0.3", - "css-to-react-native": "^2.0.3", - "fbjs": "^0.8.16", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.5.4", - "react-is": "^16.3.1", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", - "supports-color": "^3.2.3" - } - }, - "styled-theming": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/styled-theming/-/styled-theming-2.2.0.tgz", - "integrity": "sha1-MITkPUDqq0vBHrr9PeBONiL+434=" - }, "stylehacks": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", @@ -12336,20 +12259,11 @@ } } }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" - }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, "requires": { "has-flag": "^1.0.0" } @@ -12810,11 +12724,6 @@ "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", "dev": true }, - "ua-parser-js": { - "version": "0.7.19", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", - "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" - }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -13569,11 +13478,6 @@ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 00fcb5d..c71d480 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -228,7 +228,7 @@ export class Editor { this.stickers.createSticker({ latlng, sticker: this.activeSticker.sticker, set: this.activeSticker.set }); this.setActiveSticker(null); this.setChanged(true); - this.setMode(MODES.STICKERS_SELECT); + // this.setMode(MODES.STICKERS_SELECT); }; changeMode = (mode: IRootState['mode']): void => { From 646c38c0eea5ac8b5f6f63a6776b86add1e732da Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 12:52:55 +0700 Subject: [PATCH 053/320] updated todo --- src/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.tsx b/src/index.tsx index 5ac05e8..a9ac8d0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,5 +1,6 @@ /* ## BUGS + todo catalogue minimum is 25km. Why? ## FEATURES todo screenshots with dot losing .png extension From dd2861fe5c449585253d0690f0dc9bbb7f40679d Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 12:57:55 +0700 Subject: [PATCH 054/320] fixed sticker desc touch handler --- src/components/StickerDesc.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/StickerDesc.tsx b/src/components/StickerDesc.tsx index 43a146b..b4da352 100644 --- a/src/components/StickerDesc.tsx +++ b/src/components/StickerDesc.tsx @@ -21,6 +21,7 @@ export class StickerDesc extends React.PureComponent { }; blockMouse = e => { + console.log('BM'); e.stopPropagation(); this.input.focus(); }; @@ -37,6 +38,7 @@ export class StickerDesc extends React.PureComponent { onMouseDown={this.blockMouse} onMouseUp={this.blockMouse} onDragStart={this.blockMouse} + onTouchStart={this.blockMouse} >
      Date: Wed, 11 Sep 2019 15:16:44 +0700 Subject: [PATCH 055/320] fixed loading error handling --- src/constants/api.ts | 2 + src/index.html | 82 ++++++++++++++++++++++++++++++----------- src/redux/user/sagas.ts | 4 +- src/utils/history.ts | 17 ++++++++- 4 files changed, 79 insertions(+), 26 deletions(-) diff --git a/src/constants/api.ts b/src/constants/api.ts index f2aafdc..4771533 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -12,3 +12,5 @@ export const API: { [x: string]: string } = { MODIFY_ROUTE: `${CLIENT.API_ADDR}/route/modify`, SET_STARRED: `${CLIENT.API_ADDR}/route/star`, }; + +export const API_RETRY_INTERVAL = 10; diff --git a/src/index.html b/src/index.html index 2942898..59e7bab 100644 --- a/src/index.html +++ b/src/index.html @@ -4,7 +4,7 @@ - + Редактор маршрутов @@ -13,7 +13,7 @@ @@ -98,13 +134,15 @@
      ЗАГРУЗКА
      + +
      +

      Хранилище недоступно

      +
      Мы работаем над решением проблемы
      +
      +
      -
      -

      Хранилище недоступно.

      - Повторите попытку позже. -
      diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index b608a43..c1e8e73 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -218,7 +218,7 @@ function* authCheckSaga() { if (user) { yield put(setUser(user)); - pushLoaderState(' ...готово'); + pushLoaderState(99); return yield call(mapInitSaga); } @@ -231,7 +231,7 @@ function* authCheckSaga() { if (user) { yield put(setUser(user)); - pushLoaderState(' ...готово'); + pushLoaderState(99); return yield call(mapInitSaga); } else if (!ready) { diff --git a/src/utils/history.ts b/src/utils/history.ts index d85a771..1db47a8 100644 --- a/src/utils/history.ts +++ b/src/utils/history.ts @@ -1,4 +1,5 @@ import { history } from '$redux/store'; +import {API_RETRY_INTERVAL} from "$constants/api"; interface IUrlData { path: string, @@ -34,12 +35,24 @@ export const parseQuery = (queryString: string) => { return params; }; -export const pushLoaderState = state => { +export const pushLoaderState = (state: number) => { document.getElementById('loader-bar').style.width = `${state}%`; }; +export const countDownToRefresh = (left: number = API_RETRY_INTERVAL): void => { + console.log('countdown'); + if (left <= 0) return document.location.reload(); + + document.getElementById('loader-bar').style.width = `${(left / API_RETRY_INTERVAL) * 100}%`; + setTimeout(() => countDownToRefresh(left - 0.25), 1000); +}; + export const pushNetworkInitError = () => { + document.getElementById('loader-bar').classList.add('is_failed'); + document.getElementById('loader-bar').style.width = '100%'; document.getElementById('loader-error').style.opacity = String(1); + + countDownToRefresh(); }; export const copyToClipboard = str => { @@ -52,4 +65,4 @@ export const copyToClipboard = str => { el.select(); document.execCommand('copy'); document.body.removeChild(el); -} +}; From d6fabfbb6f8d5687da57dea892a65ff49b5492f2 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 15:18:11 +0700 Subject: [PATCH 056/320] added blink to progress bar --- src/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.html b/src/index.html index 59e7bab..7c1707f 100644 --- a/src/index.html +++ b/src/index.html @@ -32,7 +32,7 @@ } @keyframes blink { - 0% { opacity: 1; } + 0% { opacity: 0.9; } 100% { opacity: 1; } } @@ -72,7 +72,7 @@ height: 100%; border-radius: 8px; transition: width 500ms; - animation: blink 0.3s infinite alternate linear; + animation: blink 0.5s infinite alternate linear; min-width: 16px; display: flex; align-items: center; From 92d50d4932fb2b9eebffd601a55ae97c38fb1b03 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 15:23:19 +0700 Subject: [PATCH 057/320] test deploy --- src/index.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/index.tsx b/src/index.tsx index a9ac8d0..ffb3c96 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -91,6 +91,8 @@ const { store, persistor } = configureStore(); pushLoaderState(10); +console.log('is this a new build?'); + export const Index = () => ( From edf819ab1a02a1fd19d1c5da0296f0d8397403df Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 15:25:40 +0700 Subject: [PATCH 058/320] test deploy --- src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index ffb3c96..68f7a57 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -91,7 +91,7 @@ const { store, persistor } = configureStore(); pushLoaderState(10); -console.log('is this a new build?'); +console.log('is this a new build? x2'); export const Index = () => ( From 284c840a93df67c73e35a9e5beaa8500cee9ffc2 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 15:28:36 +0700 Subject: [PATCH 059/320] test deploy --- src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index 68f7a57..052885e 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -91,7 +91,7 @@ const { store, persistor } = configureStore(); pushLoaderState(10); -console.log('is this a new build? x2'); +console.log('is this a new build? x3'); export const Index = () => ( From 45fe19256435bd29ed1e924d460afc986aca7750 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 15:37:01 +0700 Subject: [PATCH 060/320] fixed tabs and buttons on mobile --- src/styles/dialogs.less | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 8119adf..8ed74a5 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -71,6 +71,7 @@ right: 0; width: 100%; height: 68px; + background: transparent; } } @@ -411,6 +412,14 @@ background: rgba(255, 255, 255, 0.1); } } + + @media(max-width: @mobile_breakpoint) { + height: 48px; + + .dialog-tab { + height: 48px; + } + } } .dialog-head-title { From f62fce715dd6c16cd389bdbd7e5ec7b587a6f522 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 15:37:37 +0700 Subject: [PATCH 061/320] purple close button --- src/styles/dialogs.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 8ed74a5..a8b1d40 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -71,7 +71,7 @@ right: 0; width: 100%; height: 68px; - background: transparent; + background: @dialog_background; } } From acedb845af1fa283c3ea096ec62aa08db2a71514 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 15:39:59 +0700 Subject: [PATCH 062/320] disabled stickers clustering --- src/modules/Stickers.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/modules/Stickers.ts b/src/modules/Stickers.ts index 907344e..bd49557 100644 --- a/src/modules/Stickers.ts +++ b/src/modules/Stickers.ts @@ -89,15 +89,19 @@ export class Stickers { this.stickers.map(sticker => sticker.stopEditing()); }; - clusterLayer: MarkerClusterGroup = new MarkerClusterGroup({ - spiderfyOnMaxZoom: false, - showCoverageOnHover: false, - zoomToBoundsOnClick: true, - animate: false, - maxClusterRadius: 80, - // disableClusteringAtZoom: 13, - iconCreateFunction: clusterIcon, - }); + clusterLayer: LayerGroup = new LayerGroup(); + + // uncomment to enable clustering + + // clusterLayer: MarkerClusterGroup = new MarkerClusterGroup({ + // spiderfyOnMaxZoom: false, + // showCoverageOnHover: false, + // zoomToBoundsOnClick: true, + // animate: false, + // maxClusterRadius: 8, + // // disableClusteringAtZoom: 13, + // iconCreateFunction: clusterIcon, + // }); editor: Props['editor']; map: Props['map']; From 4416fa5d649797836eb97c8937ba15a8e23117cd Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 16:00:58 +0700 Subject: [PATCH 063/320] fixed bound fitting --- src/modules/Editor.ts | 21 ++++++++++++++++++--- src/modules/Stickers.ts | 18 ++++++++++-------- src/styles/colors.less | 4 ++-- src/styles/panel.less | 6 +++--- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index c71d480..82d4c8e 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -357,10 +357,25 @@ export class Editor { }; fitDrawing = (): void => { - if (this.poly.isEmpty) return; + if (!this.poly.isEmpty) { + const poly_bounds = this.poly.poly.getBounds(); - const bounds = this.poly.poly.getBounds(); - if (bounds && Object.values(bounds)) this.map.map.fitBounds(bounds); + if (poly_bounds && Object.values(poly_bounds).length) { + this.map.map.fitBounds(poly_bounds); + return; + } + } + + if (!this.stickers.isEmpty) { + const stickers_bounds = this.stickers.layer.getBounds(); + + if (stickers_bounds && Object.values(stickers_bounds).length) { + this.map.map.fitBounds(stickers_bounds); + return; + } + } + + // no bounds to fit. better do something later }; setInitialData = (): void => { diff --git a/src/modules/Stickers.ts b/src/modules/Stickers.ts index bd49557..595332e 100644 --- a/src/modules/Stickers.ts +++ b/src/modules/Stickers.ts @@ -1,4 +1,4 @@ -import { LayerGroup, layerGroup, Map } from 'leaflet'; +import {FeatureGroup, LayerGroup, layerGroup, Map} from 'leaflet'; import { IStickerDump, Sticker } from '$modules/Sticker'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; import { clusterIcon } from '$utils/clusterIcon'; @@ -24,8 +24,7 @@ export class Stickers { this.triggerOnChange = triggerOnChange; this.editor = editor; - this.clusterLayer.addTo(map); - + // this.clusterLayer.addTo(map); // this.clusterLayer.on('animationend', this.onSpiderify); this.lockMapClicks = lockMapClicks; @@ -55,7 +54,7 @@ export class Stickers { this.stickers.push(marker); - marker.marker.addTo(this.clusterLayer); + marker.marker.addTo(this.layer); this.triggerOnChange(); }; @@ -65,7 +64,8 @@ export class Stickers { if (index < 0) return; - this.clusterLayer.removeLayer(ref.marker); + // this.clusterLayer.removeLayer(ref.marker); + this.layer.removeLayer(ref.marker); this.stickers.splice(index, 1); this.triggerOnChange(); @@ -89,7 +89,10 @@ export class Stickers { this.stickers.map(sticker => sticker.stopEditing()); }; - clusterLayer: LayerGroup = new LayerGroup(); + get isEmpty(): boolean { + return !this.stickers || this.stickers.length === 0 + }; + // clusterLayer: LayerGroup = new LayerGroup(); // uncomment to enable clustering @@ -106,9 +109,8 @@ export class Stickers { editor: Props['editor']; map: Props['map']; - stickers: Array = []; - layer: LayerGroup = layerGroup(); + layer: FeatureGroup = new FeatureGroup(); triggerOnChange: Props['triggerOnChange']; lockMapClicks: Props['lockMapClicks']; diff --git a/src/styles/colors.less b/src/styles/colors.less index 371e1d4..5e25d6a 100644 --- a/src/styles/colors.less +++ b/src/styles/colors.less @@ -14,8 +14,8 @@ @red_primary: #ff7034; @red_secondary: #ff3344; -@panel_radius: 2px; -@button_radius: 2px; +@panel_radius: 6px; +@button_radius: 6px; @color_primary: #4597d0; @color_success: #7cd766; diff --git a/src/styles/panel.less b/src/styles/panel.less index b223025..2983280 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -14,14 +14,14 @@ } .control-sep { - height: 44px; + height: 36px; background: #222222; - width: 3px; + width: 6px; @media (max-width: @mobile_breakpoint) { margin-left: -1px; margin-right: -1px; - width: 4px; + width: 6px; } } From 6f40f29d8461a1b68d4461ccb08f19ee86820d1d Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 16:05:26 +0700 Subject: [PATCH 064/320] ceil to floor for map min and max --- backend/routes/route/list.js | 2 +- package-lock.json | 483 +++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 485 insertions(+), 1 deletion(-) diff --git a/backend/routes/route/list.js b/backend/routes/route/list.js index 59212e2..d97bfe2 100644 --- a/backend/routes/route/list.js +++ b/backend/routes/route/list.js @@ -51,7 +51,7 @@ module.exports = async (req, res) => { list = list.filter(item => !author || (item.owner && item.owner._id === author)); let limits = list.reduce(({ min, max }, { distance: dist }) => ({ - min: Math.ceil(Math.min(dist, min) / 25) * 25, + min: Math.floor(Math.min(dist, min) / 25) * 25, max: Math.ceil(Math.max(dist, max) / 25) * 25, }), { min: 999999, max: 0 }); diff --git a/package-lock.json b/package-lock.json index f6fdee7..bf45e52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1014,6 +1014,12 @@ "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -1114,6 +1120,15 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -2827,6 +2842,29 @@ "hoek": "2.x.x" } }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3104,6 +3142,12 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz", "integrity": "sha512-orX4IdpbFhdNO7bTBhSbahp1EBpqzBc+qrvTRVUFfZgA4zta7TdM6PN5ZxkEUgDnz36m+PfWGcdX7AVfFWItJw==" }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -3193,6 +3237,12 @@ "tslib": "^1.9.0" } }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -3315,6 +3365,12 @@ "rimraf": "^2.6.1" } }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -3540,6 +3596,20 @@ "json5": "^1.0.1" } }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -3693,6 +3763,15 @@ "elliptic": "^6.0.0" } }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -3766,6 +3845,12 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, "css-animation": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.5.0.tgz", @@ -4543,6 +4628,12 @@ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -4843,6 +4934,12 @@ "is-obj": "^1.0.0" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -6569,6 +6666,15 @@ "process": "~0.5.1" } }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -6620,6 +6726,33 @@ } } }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", @@ -7132,6 +7265,12 @@ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, "image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", @@ -7162,6 +7301,12 @@ } } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -7350,6 +7495,15 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -7453,6 +7607,22 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7511,6 +7681,12 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -7533,6 +7709,12 @@ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -7777,6 +7959,15 @@ "webpack-sources": "^1.1.0" } }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -8225,6 +8416,12 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", "dev": true }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -8812,6 +9009,91 @@ "is": "^3.2.1" } }, + "nodemon": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.2.tgz", + "integrity": "sha512-hRLYaw5Ihyw9zK7NF+9EUzVyS6Cvgc14yh8CAYr38tPxJa6UrOxwAQ351GwrgoanHCF0FalQFn6w5eoX/LGdJw==", + "dev": true, + "requires": { + "chokidar": "^2.1.5", + "debug": "^3.1.0", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.6", + "semver": "^5.5.0", + "supports-color": "^5.2.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "dependencies": { + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -9197,6 +9479,18 @@ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, "pako": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", @@ -10354,6 +10648,12 @@ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "optional": true }, + "pstree.remy": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", + "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", + "dev": true + }, "pt-sans-cyrillic": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/pt-sans-cyrillic/-/pt-sans-cyrillic-0.0.4.tgz", @@ -10624,6 +10924,26 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "rc-align": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.3.tgz", @@ -11141,6 +11461,25 @@ "unicode-match-property-value-ecmascript": "^1.0.2" } }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "regjsgen": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", @@ -11534,6 +11873,15 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -12342,6 +12690,49 @@ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", "dev": true }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, "terser": { "version": "3.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", @@ -12513,6 +12904,12 @@ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -12610,6 +13007,15 @@ "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", "dev": true }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -12787,6 +13193,15 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, + "undefsafe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -12855,6 +13270,15 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -12905,12 +13329,36 @@ } } }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -12959,6 +13407,15 @@ "requires-port": "^1.0.0" } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -13499,6 +13956,15 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -13588,6 +14054,23 @@ "mkdirp": "^0.5.1" } }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", diff --git a/package.json b/package.json index d42e4e3..7615e39 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "identity-obj-proxy": "^3.0.0", "less-loader": "^4.1.0", "mini-css-extract-plugin": "^0.5.0", + "nodemon": "^1.19.2", "style-loader": "^0.21.0", "ts-node": "^8.0.1", "typescript": "^3.2.4", From 1a5dfd29a05d30b759d8d552d6501af3c7c26595 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 16:07:37 +0700 Subject: [PATCH 065/320] hide range slider on insufficient ranges --- src/components/dialogs/MapListDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index e5a1a36..872db3c 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -182,7 +182,7 @@ class Component extends React.Component
      { - ready + ready && Object.keys(marks).length > 2 ? Date: Wed, 11 Sep 2019 16:24:10 +0700 Subject: [PATCH 066/320] tried to add manifest --- package-lock.json | 370 +++++++++++++++++++++++++++++++++++++++------- package.json | 4 +- src/manifest.json | 9 ++ webpack.config.js | 43 ++++-- 4 files changed, 359 insertions(+), 67 deletions(-) create mode 100644 src/manifest.json diff --git a/package-lock.json b/package-lock.json index bf45e52..169493a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1289,7 +1289,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "optional": true, "requires": { "safer-buffer": "~2.1.0" } @@ -1334,8 +1333,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assign-symbols": { "version": "1.0.0", @@ -1366,8 +1364,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "optional": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", @@ -1420,14 +1417,12 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "optional": true + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "optional": true + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { "version": "0.18.1", @@ -2757,7 +2752,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -2783,6 +2777,12 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, + "bmp-js": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz", + "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=", + "dev": true + }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -2995,6 +2995,12 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -3151,8 +3157,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "optional": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "center-align": { "version": "0.1.3", @@ -3504,7 +3509,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -4592,7 +4596,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "optional": true, "requires": { "assert-plus": "^1.0.0" } @@ -4751,8 +4754,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "optional": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "depd": { "version": "1.1.2", @@ -4956,7 +4958,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "optional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -5089,6 +5090,12 @@ "es6-symbol": "^3.1.1" } }, + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", @@ -5539,6 +5546,12 @@ "strip-eof": "^1.0.0" } }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -5630,8 +5643,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "optional": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -5739,8 +5751,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "optional": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "2.0.1", @@ -5812,6 +5823,12 @@ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.0.tgz", "integrity": "sha512-cYM1ic5DAkg25pHKgi5f10ziAM7RJU37gaH1XQlyNDrtUnzhC/dfoV9zf2OmF0RMKi42jG5B0JWBnPQqyj/G6g==" }, + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -5959,6 +5976,15 @@ } } }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -5968,14 +5994,12 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "optional": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -6011,6 +6035,17 @@ "readable-stream": "^2.0.0" } }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -6618,7 +6653,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "optional": true, "requires": { "assert-plus": "^1.0.0" } @@ -6772,14 +6806,12 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "optional": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "optional": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -7174,7 +7206,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "optional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -7598,6 +7629,12 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", + "dev": true + }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", @@ -7741,8 +7778,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "optional": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-unc-path": { "version": "0.1.2", @@ -7785,8 +7821,45 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "optional": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jimp": { + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", + "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", + "dev": true, + "requires": { + "bignumber.js": "^2.1.0", + "bmp-js": "0.0.3", + "es6-promise": "^3.0.2", + "exif-parser": "^0.1.9", + "file-type": "^3.1.0", + "jpeg-js": "^0.2.0", + "load-bmfont": "^1.2.3", + "mime": "^1.3.4", + "mkdirp": "0.5.1", + "pixelmatch": "^4.0.0", + "pngjs": "^3.0.0", + "read-chunk": "^1.0.1", + "request": "^2.65.0", + "stream-to-buffer": "^0.1.0", + "tinycolor2": "^1.1.2", + "url-regex": "^3.0.0" + }, + "dependencies": { + "bignumber.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", + "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=", + "dev": true + } + } + }, + "jpeg-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz", + "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=", + "dev": true }, "js-base64": { "version": "2.5.1", @@ -7828,8 +7901,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsesc": { "version": "2.5.2", @@ -7845,8 +7917,7 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "optional": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.4.1", @@ -7871,8 +7942,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "optional": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { "version": "3.3.2", @@ -7895,6 +7965,15 @@ } } }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -7905,7 +7984,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -8219,6 +8297,22 @@ "computed-style": "~0.1.3" } }, + "load-bmfont": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", + "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -9162,8 +9256,7 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "optional": true + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -9531,6 +9624,38 @@ "safe-buffer": "^5.1.1" } }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", + "dev": true + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", + "dev": true + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "dev": true, + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-headers": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", + "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", + "dev": true, + "requires": { + "for-each": "^0.3.3", + "string.prototype.trim": "^1.1.2" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -9637,6 +9762,12 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -9658,6 +9789,15 @@ "pinkie": "^2.0.0" } }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "dev": true, + "requires": { + "pngjs": "^3.0.0" + } + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -9772,6 +9912,12 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true + }, "portfinder": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", @@ -10645,8 +10791,7 @@ "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "optional": true + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" }, "pstree.remy": { "version": "1.1.7", @@ -11198,6 +11343,12 @@ "resolved": "https://registry.npmjs.org/reactrangeslider/-/reactrangeslider-3.0.6.tgz", "integrity": "sha1-Xz4c7yT9MGUyLUwBoAEBmZEPNzc=" }, + "read-chunk": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", + "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", + "dev": true + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -11569,7 +11720,6 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "optional": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -12403,7 +12553,6 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "optional": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -12495,6 +12644,21 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "stream-to": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz", + "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=", + "dev": true + }, + "stream-to-buffer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz", + "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", + "dev": true, + "requires": { + "stream-to": "~0.2.0" + } + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -12511,6 +12675,17 @@ "strip-ansi": "^4.0.0" } }, + "string.prototype.trim": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", + "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -12924,6 +13099,12 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13020,7 +13201,6 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "optional": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -13029,8 +13209,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "optional": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, @@ -13079,7 +13258,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -13087,8 +13265,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { "version": "0.3.2", @@ -13279,6 +13456,12 @@ "crypto-random-string": "^1.0.0" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -13416,6 +13599,23 @@ "prepend-http": "^1.0.1" } }, + "url-regex": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", + "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", + "dev": true, + "requires": { + "ip-regex": "^1.0.1" + }, + "dependencies": { + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "dev": true + } + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -13496,7 +13696,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "optional": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -13910,6 +14109,36 @@ "uuid": "^3.1.0" } }, + "webpack-manifest-plugin": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", + "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", + "dev": true, + "requires": { + "fs-extra": "^7.0.0", + "lodash": ">=3.5 <5", + "tapable": "^1.0.0" + } + }, + "webpack-pwa-manifest": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/webpack-pwa-manifest/-/webpack-pwa-manifest-4.0.0.tgz", + "integrity": "sha512-655TpvoOLGHI2hgx7AmmdgHLc+xDtAi6J5fz7bTnuhxWtEVH/NI2qGlDY40HErlblOV74VtVz5S/C0u7ZpPlvQ==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "jimp": "^0.2.28", + "mime": "^1.6.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + } + } + }, "webpack-sources": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", @@ -14071,6 +14300,41 @@ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "dev": true, + "requires": { + "global": "~4.3.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", + "dev": true + }, + "xml2js": { + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", + "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "util.promisify": "~1.0.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", diff --git a/package.json b/package.json index 7615e39..77d93de 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,9 @@ "uglifyjs-webpack-plugin": "^1.3.0", "webpack": "^4.6.0", "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14" + "webpack-dev-server": "^3.1.14", + "webpack-manifest-plugin": "^2.0.4", + "webpack-pwa-manifest": "^4.0.0" }, "dependencies": { "@types/classnames": "^2.2.7", diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..95f27b7 --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,9 @@ +{ + "name": "Редактор карт", + "short_name": "Маршруты", + "icons": [], + "start_url": "/index.html", + "display": "standalone", + "background_color": "#3E4EB8", + "theme_color": "#2F3BA2" +} diff --git a/webpack.config.js b/webpack.config.js index 6078850..4335edf 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,11 +4,12 @@ const HtmlWebPackPlugin = require('html-webpack-plugin'); // const FlowWebpackPlugin = require('flow-webpack-plugin'); // const { version } = require('./package.json'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); +const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); // const WebpackGitHash = require('webpack-git-hash'); -const { join } = require('path'); -const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); - +const path = require('path'); +const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); +const WebpackPwaManifest = require('webpack-pwa-manifest'); +// const ManifestPlugin = require('webpack-manifest-plugin'); /* Plugins */ // const concatPlugin = new webpack.optimize.ModuleConcatenationPlugin(); @@ -38,15 +39,15 @@ const devtool = isDevelopment ? 'cheap-module-eval-source-map' : 'source-map'; const resolve = { alias: { - $components: join(__dirname, 'src/components'), - $containers: join(__dirname, 'src/containers'), - $constants: join(__dirname, 'src/constants'), - $sprites: join(__dirname, 'src/sprites'), - $config: join(__dirname, './config'), - $styles: join(__dirname, 'src/styles'), - $redux: join(__dirname, 'src/redux'), - $utils: join(__dirname, 'src/utils'), - $modules: join(__dirname, 'src/modules'), + $components: path.join(__dirname, 'src/components'), + $containers: path.join(__dirname, 'src/containers'), + $constants: path.join(__dirname, 'src/constants'), + $sprites: path.join(__dirname, 'src/sprites'), + $config: path.join(__dirname, './config'), + $styles: path.join(__dirname, 'src/styles'), + $redux: path.join(__dirname, 'src/redux'), + $utils: path.join(__dirname, 'src/utils'), + $modules: path.join(__dirname, 'src/modules'), }, extensions: ['*', '.ts', '.tsx', '.js', '.jsx', '.json'] }; @@ -63,6 +64,22 @@ module.exports = () => { new webpack.IgnorePlugin(/^osrm-text-instructions$/, /leaflet-routing-machine$/), miniCssExractPlugin, new webpack.HashedModuleIdsPlugin(), + new WebpackPwaManifest({ + name: 'My Applications Friendly Name', + short_name: 'Application', + description: 'Description!', + background_color: '#01579b', + theme_color: '#01579b', + 'theme-color': '#01579b', + start_url: '/', + icons: [ + { + src: path.resolve('src/sprites/favicon.png'), + sizes: [96, 128, 192, 256, 384, 512], + destination: path.join('assets', 'icons') + } + ] + }) ]; return { From 9b4a6c45ee4e34068cfb0ad692bc8b42ff7e5120 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 16:25:00 +0700 Subject: [PATCH 067/320] changed manifest details --- webpack.config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 4335edf..b16392a 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -65,9 +65,9 @@ module.exports = () => { miniCssExractPlugin, new webpack.HashedModuleIdsPlugin(), new WebpackPwaManifest({ - name: 'My Applications Friendly Name', - short_name: 'Application', - description: 'Description!', + name: 'Редактор маршрутов', + short_name: 'Маршруты', + description: 'Велосипедные маршруты в новосибирске', background_color: '#01579b', theme_color: '#01579b', 'theme-color': '#01579b', From 8ba5d4d2388c5c005a59bff6f5b157f97043955f Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 16:33:56 +0700 Subject: [PATCH 068/320] display fullscreen --- webpack.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webpack.config.js b/webpack.config.js index b16392a..93e1232 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -70,6 +70,7 @@ module.exports = () => { description: 'Велосипедные маршруты в новосибирске', background_color: '#01579b', theme_color: '#01579b', + display: 'fullscreen', 'theme-color': '#01579b', start_url: '/', icons: [ From 3a74299ece469ac40f640f04ccce097ba38682a6 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 16:53:47 +0700 Subject: [PATCH 069/320] added pwa cacher --- .gitignore | 1 + config/frontend.example.js | 2 + config/pwa.example.js | 22 +++ package-lock.json | 340 +++++++++++++++++++++++++++++++++++++ package.json | 1 + src/sprites/app.png | Bin 0 -> 33321 bytes src/sprites/app.svg | 65 +++++++ webpack.config.js | 35 ++-- 8 files changed, 448 insertions(+), 18 deletions(-) create mode 100644 config/pwa.example.js create mode 100644 src/sprites/app.png create mode 100644 src/sprites/app.svg diff --git a/.gitignore b/.gitignore index 02f12a6..e1e09d8 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ yarn-error.log /config/frontend.js /config/backend.js +/config/pwa.js # Bundle *.js.map diff --git a/config/frontend.example.js b/config/frontend.example.js index ca59f89..4661dd9 100644 --- a/config/frontend.example.js +++ b/config/frontend.example.js @@ -1,6 +1,7 @@ import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; import { LatLngLiteral } from 'leaflet'; +const PUBLIC_PATH = ''; const API_ADDR = 'https://HOSTNAME.org:3000'; const OSRM_URL = 'https://HOSTNAME.org:5001/route/v1'; const OSRM_PROFILE = 'bike'; @@ -14,6 +15,7 @@ export const CLIENT = { OSRM_TEST_URL, OSRM_PROFILE, STROKE_WIDTH: 5, + PUBLIC_PATH, }; export const COLORS = { diff --git a/config/pwa.example.js b/config/pwa.example.js new file mode 100644 index 0000000..6e99f4f --- /dev/null +++ b/config/pwa.example.js @@ -0,0 +1,22 @@ +const path = require('path'); + +module.exports = { + MANIFEST: (src) => ({ + name: 'Редактор маршрутов', + short_name: 'Маршруты', + description: 'Велосипедные маршруты в новосибирске', + background_color: '#333333', + theme_color: '#01579b', + display: 'fullscreen', + 'theme-color': '#01579b', + start_url: '/', + icons: [ + { + src, // : path.resolve('./src/sprites/app.png') + sizes: [96, 128, 192, 256, 384, 512], + destination: path.join('assets', 'icons') + } + ] + }), + PUBLIC_PATH: 'https://alpha-map.vault48.org/', +}; diff --git a/package-lock.json b/package-lock.json index 169493a..5deaf3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1244,6 +1244,12 @@ "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", "dev": true }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -3113,6 +3119,24 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", @@ -4571,6 +4595,15 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.2.tgz", "integrity": "sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow==" }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", @@ -4893,6 +4926,15 @@ } } }, + "dom-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz", + "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=", + "dev": true, + "requires": { + "urijs": "^1.16.1" + } + }, "dom-walk": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", @@ -6634,6 +6676,12 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -7365,6 +7413,15 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -7789,6 +7846,12 @@ "unc-path-regex": "^0.1.0" } }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -8420,12 +8483,24 @@ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -8461,6 +8536,25 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -8504,6 +8598,16 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -8556,6 +8660,12 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -8619,6 +8729,111 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", "optional": true }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -10713,6 +10928,12 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", @@ -11440,6 +11661,16 @@ "readable-stream": "^2.0.2" } }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, "reduce-css-calc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", @@ -12091,6 +12322,12 @@ "send": "0.16.2" } }, + "serviceworker-cache-polyfill": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz", + "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -12721,6 +12958,15 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -12814,6 +13060,88 @@ } } }, + "sw-precache": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.1.tgz", + "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==", + "dev": true, + "requires": { + "dom-urls": "^1.1.0", + "es6-promise": "^4.0.5", + "glob": "^7.1.1", + "lodash.defaults": "^4.2.0", + "lodash.template": "^4.4.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "pretty-bytes": "^4.0.2", + "sw-toolbox": "^3.4.0", + "update-notifier": "^2.3.0" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + } + } + }, + "sw-precache-webpack-plugin": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.5.tgz", + "integrity": "sha512-K6E52DbYyzGNXGyv2LhI2Duomr3t/2FFMmnGdHZ1Ruk3ulFHDMASJtg3WpA3CXlWODZx189tTaOIO5mWkSKyVg==", + "dev": true, + "requires": { + "del": "^3.0.0", + "sw-precache": "^5.2.1", + "uglify-es": "^3.3.9" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "sw-toolbox": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz", + "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=", + "dev": true, + "requires": { + "path-to-regexp": "^1.0.1", + "serviceworker-cache-polyfill": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -13213,6 +13541,12 @@ } } }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -13556,6 +13890,12 @@ "punycode": "^2.1.0" } }, + "urijs": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", + "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==", + "dev": true + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", diff --git a/package.json b/package.json index 77d93de..e9fef76 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "mini-css-extract-plugin": "^0.5.0", "nodemon": "^1.19.2", "style-loader": "^0.21.0", + "sw-precache-webpack-plugin": "^0.11.5", "ts-node": "^8.0.1", "typescript": "^3.2.4", "uglifyjs-webpack-plugin": "^1.3.0", diff --git a/src/sprites/app.png b/src/sprites/app.png new file mode 100644 index 0000000000000000000000000000000000000000..2819b7bd79dbdbdc63b3d4c7958eff1990c2ff47 GIT binary patch literal 33321 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%0A^dZBcL7VJbkJ!EGybR;yCO`*8 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 + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/webpack.config.js b/webpack.config.js index 93e1232..d05fc22 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ -// import webpack from 'webpack'; +// import { CLIENT } from './config/frontend'; const webpack = require('webpack'); + const HtmlWebPackPlugin = require('html-webpack-plugin'); // const FlowWebpackPlugin = require('flow-webpack-plugin'); // const { version } = require('./package.json'); @@ -9,10 +10,14 @@ const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const path = require('path'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const WebpackPwaManifest = require('webpack-pwa-manifest'); +const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin'); +// import webpack from 'webpack'; +const PWA_CONFIG = require('./config/pwa'); // const ManifestPlugin = require('webpack-manifest-plugin'); /* Plugins */ // const concatPlugin = new webpack.optimize.ModuleConcatenationPlugin(); + const htmlPlugin = new HtmlWebPackPlugin({ template: './src/index.html', filename: './index.html', @@ -64,23 +69,17 @@ module.exports = () => { new webpack.IgnorePlugin(/^osrm-text-instructions$/, /leaflet-routing-machine$/), miniCssExractPlugin, new webpack.HashedModuleIdsPlugin(), - new WebpackPwaManifest({ - name: 'Редактор маршрутов', - short_name: 'Маршруты', - description: 'Велосипедные маршруты в новосибирске', - background_color: '#01579b', - theme_color: '#01579b', - display: 'fullscreen', - 'theme-color': '#01579b', - start_url: '/', - icons: [ - { - src: path.resolve('src/sprites/favicon.png'), - sizes: [96, 128, 192, 256, 384, 512], - destination: path.join('assets', 'icons') - } - ] - }) + new WebpackPwaManifest(PWA_CONFIG.MANIFEST(path.resolve('./src/sprites/app.png'))), + new SWPrecacheWebpackPlugin( + { + cacheId: 'my-domain-cache-id', + dontCacheBustUrlsMatching: /\.\w{8}\./, + filename: 'service-worker.js', + minify: true, + navigateFallback: `${PWA_CONFIG.PUBLIC_PATH}index.html`, + staticFileGlobsIgnorePatterns: [/\.map$/, /manifest\.json$/] + } + ), ]; return { From a8ddf1e7faa4b771cc9d819e96f19f4074fa5f9d Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:03:46 +0700 Subject: [PATCH 070/320] removed conlog --- src/index.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 052885e..a9ac8d0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -91,8 +91,6 @@ const { store, persistor } = configureStore(); pushLoaderState(10); -console.log('is this a new build? x3'); - export const Index = () => ( From 13c829e6cc45763c1597171ffc96591c7d634e79 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:08:05 +0700 Subject: [PATCH 071/320] removed sticker transform animation --- src/styles/stickers.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/stickers.less b/src/styles/stickers.less index affec21..0693a39 100644 --- a/src/styles/stickers.less +++ b/src/styles/stickers.less @@ -193,7 +193,7 @@ float: left; cursor: pointer; transform: scale(1); - transition: transform 250ms; + // transition: transform 250ms; width: 48px; height: 48px; background-size: cover; From 944be7f4b1eda0b1212ccf55b91aa58045af6723 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:13:53 +0700 Subject: [PATCH 072/320] changed trash icon --- src/components/dialogs/TrashDialog.tsx | 1 - src/components/panels/EditorPanel.tsx | 2 +- src/sprites/icon.svg | 9 ++++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index 42284b3..0b5b5bb 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -16,7 +16,6 @@ export const TrashDialog = ({

      -
      Удалить:
      diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index d2babca..5c3cb50 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -92,7 +92,7 @@ class Component extends React.PureComponent { onClick={this.startTrashMode} > Удаление элементов - +
      diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index 3a01572..4b93bea 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -344,6 +344,13 @@ + + + + + + + @@ -418,5 +425,5 @@ - + From 350a090ac3494c0bbf98fc75ff6d5e76a9d5055f Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:16:31 +0700 Subject: [PATCH 073/320] added service worker --- src/index.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/index.tsx b/src/index.tsx index a9ac8d0..ad0867d 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -100,3 +100,11 @@ export const Index = () => ( ); ReactDOM.render(, document.getElementById('index')); + +(function () { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('./service-worker.js', { scope: '/' }) + .then(() => console.log('Service Worker registered successfully.')) + .catch(error => console.log('Service Worker registration failed:', error)); + } +}()); From 17efbba1ff5c115daeac84679f9366c88dc3ee15 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:17:43 +0700 Subject: [PATCH 074/320] added navigator to globals --- .eslintrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc b/.eslintrc index 9b5edb1..85f5a51 100755 --- a/.eslintrc +++ b/.eslintrc @@ -41,7 +41,8 @@ "FormData": false, "WebSocket": true, "Element": true, - "localStorage": true + "localStorage": true, + "navigator": true }, "env": {}, "settings": { From 8b86b2c91c65ec9ace32a728cb3b5d3140a50591 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:23:48 +0700 Subject: [PATCH 075/320] disabled transform transition for mobile devices --- src/styles/stickers.less | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/styles/stickers.less b/src/styles/stickers.less index 0693a39..fc98bf4 100644 --- a/src/styles/stickers.less +++ b/src/styles/stickers.less @@ -51,6 +51,10 @@ display: none; } } + + @media(hover: none) { + transition: none; + } } .sticker-label { @@ -193,7 +197,7 @@ float: left; cursor: pointer; transform: scale(1); - // transition: transform 250ms; + transition: transform 250ms; width: 48px; height: 48px; background-size: cover; From dc66889a4218193424b0031f724070fd669648c4 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:26:24 +0700 Subject: [PATCH 076/320] removed touchend --- src/modules/Editor.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 82d4c8e..77af4c1 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -138,6 +138,7 @@ export class Editor { }; map.addEventListener('mouseup', this.onClick); + // map.addEventListener('touchend', this.onClick); map.addEventListener('dragstart', () => lockMapClicks(true)); map.addEventListener('dragstop', () => lockMapClicks(false)); } From 29dde732bd056aa8992e79c791da669dc1e098a4 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 17:34:55 +0700 Subject: [PATCH 077/320] fixed panel radiuses --- src/components/dialogs/TrashDialog.tsx | 2 +- src/redux/user/sagas.ts | 4 ++++ src/styles/panel.less | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index 0b5b5bb..c545a39 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -14,7 +14,7 @@ export const TrashDialog = ({ clearPoly, clearStickers, clearAll, clearCancel, width, }: Props) => (
      -
      +
      Удалить:
      diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index c1e8e73..ddc9b75 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -483,6 +483,10 @@ function* keyPressedSaga({ key, target }: ReturnType Date: Wed, 11 Sep 2019 17:53:03 +0700 Subject: [PATCH 078/320] added numeric stickers --- src/constants/stickers.ts | 14 + src/sprites/app.svg | 7 +- src/sprites/stickers/stickers-base.svg | 12415 +---------------------- 3 files changed, 272 insertions(+), 12164 deletions(-) diff --git a/src/constants/stickers.ts b/src/constants/stickers.ts index d58516f..44e02c9 100644 --- a/src/constants/stickers.ts +++ b/src/constants/stickers.ts @@ -19,6 +19,7 @@ export interface IStickers { base: IStickerPack, real: IStickerPack, pin: IStickerPack, + points: IStickerPack, } // export const stickers = ['green', 'basic', 'green-small']; @@ -83,4 +84,17 @@ export const STICKERS: IStickers = { question: { off: 30, title: 'Вопрос', title_long: 'Что тут?' }, } }, + points: { + title: 'Точки', + url: require('$sprites/stickers/stickers-base.svg'), + size: 72, + layers: { + pt1: { off: 40, title: '1', title_long: 'Первая точка' }, + pt2: { off: 41, title: '2', title_long: 'Вторая точка' }, + pt3: { off: 42, title: '3', title_long: 'Третья точка' }, + pt4: { off: 43, title: '4', title_long: 'Четвёртая точка' }, + pt5: { off: 44, title: '5', title_long: 'Пятая точка' }, + pt6: { off: 45, title: '7', title_long: 'Шестая точка' }, + } + } }; diff --git a/src/sprites/app.svg b/src/sprites/app.svg index ae78060..a616984 100644 --- a/src/sprites/app.svg +++ b/src/sprites/app.svg @@ -15,7 +15,10 @@ version="1.1" id="svg8" inkscape:version="0.92.4 (5da689c313, 2019-01-14)" - sodipodi:docname="app.svg"> + sodipodi:docname="app.svg" + inkscape:export-filename="/home/muerwre/Projects/orchidMap/src/sprites/app.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> @@ -1863,15 +1863,15 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="1" - inkscape:cx="2883.0427" - inkscape:cy="38.190464" + inkscape:cx="3131.7344" + inkscape:cy="10.234233" inkscape:document-units="px" - inkscape:current-layer="layer1" + inkscape:current-layer="g10380" showgrid="false" - inkscape:window-width="1920" - inkscape:window-height="1036" + inkscape:window-width="1862" + inkscape:window-height="1016" inkscape:window-x="0" - inkscape:window-y="0" + inkscape:window-y="27" inkscape:window-maximized="1" units="px" inkscape:showpageshadow="false" @@ -10526,7 +10526,7 @@ sodipodi:role="line" id="tspan2733" x="26.870058" - y="1097.6169">0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 + y="1097.6169">0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 - + + + + + + + + + 1 + + + + + + + + + 2 + + + + + + + + + 3 + + + + + + + + + 4 + + + + + + + + + + + 5 + + + + + + + + + 6 + + From 577398dc1759bb2ec86fdeb1509921f715321458 Mon Sep 17 00:00:00 2001 From: Integral Team Date: Wed, 11 Sep 2019 18:01:22 +0700 Subject: [PATCH 079/320] removed radius around dialog head --- src/styles/dialogs.less | 1 - 1 file changed, 1 deletion(-) diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index a8b1d40..262eee4 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -385,7 +385,6 @@ .dialog-head { background: rgba(255, 255, 255, 0.1); padding: 10px; - border-radius: @panel_radius @panel_radius 0 0; color: white; } From 8e860f327ac35d7dbf2d4e320e91ea756a7b0a59 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 17 Sep 2019 15:21:45 +0700 Subject: [PATCH 080/320] removed flow --- .flowconfig | 23 ----------------------- package.json | 13 ------------- 2 files changed, 36 deletions(-) delete mode 100644 .flowconfig diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index b44871f..0000000 --- a/.flowconfig +++ /dev/null @@ -1,23 +0,0 @@ -[options] -module.system.node.resolve_dirname=node_modules -module.system.node.resolve_dirname=src -module.name_mapper='^$redux/\([-a-zA-Z0-9$_/]+\)$' -> '/src/redux/\1' -module.name_mapper='^$config/\([-a-zA-Z0-9$_/]+\)$' -> '/config/\1' -module.name_mapper='^$components\/\(.*\)$' ->'/src/components/\1' -module.name_mapper='^$containers\/\(.*\)$' ->'/src/containers/\1' -module.name_mapper='^$constants\/\(.*\)$' ->'/src/constants/\1' -module.name_mapper='^$sprites\/\(.*\)$' ->'/src/sprites/\1' -module.name_mapper='^$config\/\(.*\)$' ->'/src/config/\1' -module.name_mapper='^$styles\/\(.*\)$' ->'/src/styles/\1' -module.name_mapper='^$utils\/\(.*\)$' ->'/src/utils/\1' - -[ignore] -.*/node_modules - -[include] -public -../node_modules/ - -[libs] -flow-libs/ - diff --git a/package.json b/package.json index e9fef76..635e200 100644 --- a/package.json +++ b/package.json @@ -34,12 +34,10 @@ "eslint-import-resolver-webpack": "^0.9.0", "eslint-loader": "^2.0.0", "eslint-plugin-babel": "^5.0.0", - "eslint-plugin-flowtype": "^2.46.2", "eslint-plugin-import": "^2.11.0", "eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-react": "^7.7.0", "file-loader": "^1.1.11", - "flow-bin": "^0.73.0", "html-webpack-plugin": "^3.2.0", "identity-obj-proxy": "^3.0.0", "less-loader": "^4.1.0", @@ -112,16 +110,5 @@ "typeface-pt-sans": "0.0.54", "typesafe-actions": "^3.0.0", "webpack-git-hash": "^1.0.2" - }, - "flow-coverage-report": { - "includeGlob": [ - "src/**/*.js", - "src/**/*.jsx" - ], - "type": [ - "text", - "html", - "json" - ] } } From 3ace7b157aa8ccd958d7665a590688ccdbb6812d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 8 Oct 2019 14:09:28 +0700 Subject: [PATCH 081/320] removed consolelog --- src/redux/user/sagas.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index ddc9b75..8249706 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -619,8 +619,6 @@ function* getGPXTrackSaga(): SagaIterator { const track = getGPXString({ route, stickers, title: (title || address) }); - console.log({ route, stickers }); - return downloadGPXTrack({ track, title }); } From f664eb53e7c811eabc68e9a34fffa1255030867d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 8 Oct 2019 14:12:45 +0700 Subject: [PATCH 082/320] fixed filename saving error --- src/redux/user/sagas.ts | 2 +- src/utils/gpx.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 8249706..43f8b7f 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -415,7 +415,7 @@ function* cropAShotSaga(params) { yield call(getCropData, params); const canvas = document.getElementById('renderer') as HTMLCanvasElement; - downloadCanvas(canvas, (title || address)); + downloadCanvas(canvas, (title || address).replace('.', '')); return yield put(hideRenderer()); } diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index db71a08..1a70c09 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -47,6 +47,6 @@ export const getGPXString = ({ route, title, stickers }: IGetGPXString): string export const downloadGPXTrack = ({ track, title }: { track: string, title?: string }): void => ( saveAs( new Blob([track], { type: 'application/gpx+xml;charset=utf-8' }), - `${title || 'track'}.gpx` + `${(title || 'track').replace('.', '')}.gpx` ) ); From 1f774a8299bf155779329f96911f6f933016a865 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 8 Oct 2019 14:19:32 +0700 Subject: [PATCH 083/320] fixing dl problem with regexp --- src/redux/user/sagas.ts | 2 +- src/utils/gpx.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 43f8b7f..c5717db 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -415,7 +415,7 @@ function* cropAShotSaga(params) { yield call(getCropData, params); const canvas = document.getElementById('renderer') as HTMLCanvasElement; - downloadCanvas(canvas, (title || address).replace('.', '')); + downloadCanvas(canvas, (title || address).replace(/\./ig, ' ')); return yield put(hideRenderer()); } diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index 1a70c09..28d4df2 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -47,6 +47,6 @@ export const getGPXString = ({ route, title, stickers }: IGetGPXString): string export const downloadGPXTrack = ({ track, title }: { track: string, title?: string }): void => ( saveAs( new Blob([track], { type: 'application/gpx+xml;charset=utf-8' }), - `${(title || 'track').replace('.', '')}.gpx` + `${(title || 'track').replace(/\./ig, ' ')}.gpx` ) ); From 62cb8d8e187b69d364fda72785361f0e22d93f01 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 12 Dec 2019 13:52:30 +0700 Subject: [PATCH 084/320] fixed loading route and maps --- backend/routes/auth.js | 2 +- backend/routes/auth/check.js | 8 - backend/routes/auth/social/vk.js | 2 +- src/components/dialogs/MapListDialog.tsx | 18 +- src/components/maps/RouteRowView.tsx | 6 +- src/components/panels/UserPanel.tsx | 4 +- src/components/user/UserButton.tsx | 18 +- src/constants/api.ts | 18 +- src/constants/auth.ts | 43 +- src/constants/dialogs.ts | 4 +- src/constants/stickers.ts | 11 + src/modules/Editor.ts | 12 +- src/redux/store.ts | 5 +- src/redux/user/actions.ts | 10 +- src/redux/user/reducer.ts | 25 +- src/redux/user/sagas.ts | 566 +++++++++++++++-------- src/utils/api.ts | 282 +++++++---- src/utils/middleware.ts | 50 ++ 18 files changed, 715 insertions(+), 369 deletions(-) create mode 100644 src/utils/middleware.ts diff --git a/backend/routes/auth.js b/backend/routes/auth.js index 7aa4aa0..356833c 100644 --- a/backend/routes/auth.js +++ b/backend/routes/auth.js @@ -8,7 +8,7 @@ const iframe_vk = require('./auth/iframe/vk'); const router = express.Router(); router.get('/', check); -router.get('/list', list); +// router.get('/list', list); router.get('/guest', guest); router.get('/social/vk', vk); router.get('/iframe/vk', iframe_vk); diff --git a/backend/routes/auth/check.js b/backend/routes/auth/check.js index 76c07f3..fe74a0a 100644 --- a/backend/routes/auth/check.js +++ b/backend/routes/auth/check.js @@ -5,14 +5,6 @@ module.exports = async (req, res) => { const { id, token } = req.query; const user = await User.findOne({ _id: id, token }); - // .populate({ - // path: 'routes', - // select: '_id title distance owner updated_at', - // options: { - // limit: 200, - // sort: { updated_at: -1 }, - // } - // }) const random_url = await generateRandomUrl(); diff --git a/backend/routes/auth/social/vk.js b/backend/routes/auth/social/vk.js index 2a518ba..47cfd61 100644 --- a/backend/routes/auth/social/vk.js +++ b/backend/routes/auth/social/vk.js @@ -16,7 +16,7 @@ const fetchUserData = async (req, res) => { client_id: CONFIG.SOCIAL.VK.APP_ID, client_secret: CONFIG.SOCIAL.VK.SECRET, code, - redirect_uri: `${proto}://${host}/auth/social/vk`, + redirect_uri: `${proto}://${host}/api/auth/social/vk`, } } ).catch(() => { diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index 872db3c..5a30c87 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -40,8 +40,8 @@ export interface IMapListDialogProps extends IRootState { } export interface IMapListDialogState { - menu_target: IRouteListItem['_id'], - editor_target: IRouteListItem['_id'], + menu_target: IRouteListItem['address'], + editor_target: IRouteListItem['address'], is_editing: boolean, is_dropping: boolean, @@ -56,14 +56,14 @@ class Component extends React.Component this.setState({ + startEditing = (editor_target: IRouteListItem['address']): void => this.setState({ editor_target, menu_target: null, is_editing: true, is_dropping: false, }); - showMenu = (menu_target: IRouteListItem['_id']): void => this.setState({ + showMenu = (menu_target: IRouteListItem['address']): void => this.setState({ menu_target, }); @@ -71,7 +71,7 @@ class Component extends React.Component this.setState({ + showDropCard = (editor_target: IRouteListItem['address']): void => this.setState({ editor_target, menu_target: null, is_editing: false, @@ -211,13 +211,13 @@ class Component extends React.Component )) diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 8bbb75f..42027dd 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -30,7 +30,7 @@ export const RouteRowView = ({ title, distance, _id, openRoute, tab, startEditing, showMenu, showDropCard, hideMenu, is_admin, is_starred, toggleStarred, }: Props): ReactElement => (
      { (tab === 'all' || tab === 'starred') && is_admin && @@ -48,7 +48,7 @@ export const RouteRowView = ({ >
      { - (tab === 'mine' || !is_admin) && is_starred && + (tab === 'my' || !is_admin) && is_starred &&
      } @@ -68,7 +68,7 @@ export const RouteRowView = ({
      { - tab === 'mine' && + tab === 'my' &&
      { setMenuOpened = () => this.setState({ menuOpened: !this.state.menuOpened }); openMapsDialog = () => { - this.props.openMapDialog('mine'); + this.props.openMapDialog('my'); }; openAppInfoDialog = () => { @@ -81,7 +81,7 @@ export class Component extends React.PureComponent { const left = (width - 700) / 2; window.open( - `https://oauth.vk.com/authorize?client_id=5987644&scope=&redirect_uri=${CLIENT.API_ADDR}/auth/social/vk`, + `https://oauth.vk.com/authorize?client_id=5987644&scope=&redirect_uri=${CLIENT.API_ADDR}/api/auth/vk`, 'socialPopupWindow', `location=no,width=700,height=370,scrollbars=no,top=${top},left=${left},resizable=no` ); diff --git a/src/components/user/UserButton.tsx b/src/components/user/UserButton.tsx index 2c5e26b..e444e00 100644 --- a/src/components/user/UserButton.tsx +++ b/src/components/user/UserButton.tsx @@ -1,28 +1,24 @@ // @flow -import * as React from 'react'; -import { UserPicture } from '$components/user/UserPicture'; +import * as React from "react"; +import { UserPicture } from "$components/user/UserPicture"; import { IUser } from "$constants/auth"; interface Props { - user: IUser, - setMenuOpened: () => void, + user: IUser; + setMenuOpened: () => void; } export const UserButton = ({ setMenuOpened, - user: { - id, - photo, - first_name, - } + user: { uid, photo, name } }: Props) => (
      -
      {(first_name || id || '...')}
      -
      {(id || 'пользователь')}
      +
      {name || uid || "..."}
      +
      {uid || "пользователь"}
      diff --git a/src/constants/api.ts b/src/constants/api.ts index 4771533..fa343c7 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -1,16 +1,16 @@ import { CLIENT } from '$config/frontend'; export const API: { [x: string]: string } = { - GET_GUEST: `${CLIENT.API_ADDR}/auth`, - CHECK_TOKEN: `${CLIENT.API_ADDR}/auth`, - IFRAME_LOGIN_VK: `${CLIENT.API_ADDR}/auth/iframe/vk`, - GET_MAP: `${CLIENT.API_ADDR}/route`, - POST_MAP: `${CLIENT.API_ADDR}/route`, - GET_ROUTE_LIST: `${CLIENT.API_ADDR}/route/list`, + GET_GUEST: `${CLIENT.API_ADDR}/api/auth/`, + CHECK_TOKEN: `${CLIENT.API_ADDR}/api/auth/`, + IFRAME_LOGIN_VK: `${CLIENT.API_ADDR}/api/auth/vk/`, + GET_MAP: `${CLIENT.API_ADDR}/api/route/`, + POST_MAP: `${CLIENT.API_ADDR}/api/route/`, + GET_ROUTE_LIST: `${CLIENT.API_ADDR}/api/route/list/`, - DROP_ROUTE: `${CLIENT.API_ADDR}/route`, - MODIFY_ROUTE: `${CLIENT.API_ADDR}/route/modify`, - SET_STARRED: `${CLIENT.API_ADDR}/route/star`, + DROP_ROUTE: `${CLIENT.API_ADDR}/api/route/`, + MODIFY_ROUTE: `${CLIENT.API_ADDR}/api/route/`, + SET_STARRED: `${CLIENT.API_ADDR}/api/route/publish/`, }; export const API_RETRY_INTERVAL = 10; diff --git a/src/constants/auth.ts b/src/constants/auth.ts index 2b1e41e..6f44ea0 100644 --- a/src/constants/auth.ts +++ b/src/constants/auth.ts @@ -1,42 +1,39 @@ export interface IRoles { - guest: string, - vk: string, - admin: string, + guest: string; + vk: string; + admin: string; } export interface IUser { - new_messages: number, - place_types: {}, - random_url: string, - role: IRoles[keyof IRoles], - routes: {}, - success: boolean, - id?: string, - token?: string, - photo: string, - first_name: string, - // userdata: { - // name: string, - // agent: string, - // ip: string, - // } + new_messages: number; + place_types: {}; + random_url: string; + role: IRoles[keyof IRoles]; + routes: {}; + success: boolean; + id?: number; + uid: string; + token?: string; + photo: string; + name: string; } export const ROLES: IRoles = { - guest: 'guest', - vk: 'vk', - admin: 'admin', + guest: "guest", + vk: "vk", + admin: "admin" }; export const DEFAULT_USER: IUser = { new_messages: 0, place_types: {}, - random_url: '', + random_url: "", role: ROLES.guest, routes: {}, success: false, id: null, token: null, photo: null, - first_name: null, + name: null, + uid: null, }; diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts index 17b08bb..93cec51 100644 --- a/src/constants/dialogs.ts +++ b/src/constants/dialogs.ts @@ -5,7 +5,7 @@ export interface IDialogs { } export interface IMapTabs { - mine: string, + my: string, all: string, starred: string, } @@ -17,7 +17,7 @@ export const DIALOGS: IDialogs = ({ }); export const TABS: IMapTabs = ({ - mine: 'Мои', + my: 'Мои', all: 'Заявки', starred: 'Каталог', }); diff --git a/src/constants/stickers.ts b/src/constants/stickers.ts index 44e02c9..0652928 100644 --- a/src/constants/stickers.ts +++ b/src/constants/stickers.ts @@ -15,6 +15,17 @@ export interface IStickerPack { } } +export interface ISticker { + angle: number; + set: string; + sticker: string; + text: string; + latlngs: { + lat: number; + lng: number; + } +} + export interface IStickers { base: IStickerPack, real: IStickerPack, diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 77af4c1..7f97c62 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -34,11 +34,11 @@ interface IEditor { router: Router; logo: keyof ILogos; - owner: { id: string }; + owner: number; initialData: { version: number, title: IRootState['title'], - owner: { id: string }, + owner: number, address: IRootState['address'], path: any, route: any, @@ -322,11 +322,11 @@ export class Editor { is_public, is_starred, description, - }: IEditor['initialData']): void => { + }: Partial): void => { this.setTitle(title || ''); const { id } = this.getUser(); - if (address && id && owner && id === owner.id) { + if (address && id && owner && id === owner) { this.setAddress(address); } @@ -389,7 +389,7 @@ export class Editor { version: 2, title: this.getTitle(), owner: this.owner, - address: (this.owner.id === id ? path : null), + address: (this.owner === id ? path : null), path, route, stickers, @@ -405,7 +405,7 @@ export class Editor { const { id } = this.getUser(); this.setInitialData(); - this.owner = { id }; + this.owner = id; this.poly.enableEditor(); this.stickers.startEditing(); diff --git a/src/redux/store.ts b/src/redux/store.ts index e7aba7f..1a5d11a 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -4,7 +4,7 @@ import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import createSagaMiddleware from 'redux-saga'; -import { userReducer } from '$redux/user/reducer'; +import { userReducer, IRootReducer } from '$redux/user/reducer'; import { userSaga } from '$redux/user/sagas'; import { createBrowserHistory } from 'history'; import { locationChanged } from '$redux/user/actions'; @@ -16,6 +16,9 @@ const userPersistConfig: PersistConfig = { storage, }; +export interface IState { + user: IRootReducer +} // create the saga middleware export const sagaMiddleware = createSagaMiddleware(); diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index ae42b87..b98c392 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -94,9 +94,9 @@ export const mapsSetShift = (shift: number) => ({ type: ACTIONS.MAPS_SET_SHIFT, export const setFeature = (features: { [x: string]: boolean }) => ({ type: ACTIONS.SET_FEATURE, features }); export const setIsRouting = (is_routing: boolean) => ({ type: ACTIONS.SET_IS_ROUTING, is_routing }); -export const dropRoute = (_id: string) => ({ type: ACTIONS.DROP_ROUTE, _id }); -export const modifyRoute = (_id: string, { title, is_public }: { title: string, is_public: boolean }) => ({ - type: ACTIONS.MODIFY_ROUTE, _id, title, is_public +export const dropRoute = (address: string) => ({ type: ACTIONS.DROP_ROUTE, address }); +export const modifyRoute = (address: string, { title, is_public }: { title: string, is_public: boolean }) => ({ + type: ACTIONS.MODIFY_ROUTE, address, title, is_public }); -export const toggleRouteStarred = (_id: string) => ({ type: ACTIONS.TOGGLE_ROUTE_STARRED, _id }); -export const setRouteStarred = (_id: string, is_starred: boolean) => ({ type: ACTIONS.SET_ROUTE_STARRED, _id, is_starred }); +export const toggleRouteStarred = (address: string) => ({ type: ACTIONS.TOGGLE_ROUTE_STARRED, address }); +export const setRouteStarred = (address: string, is_starred: boolean) => ({ type: ACTIONS.SET_ROUTE_STARRED, address, is_starred }); diff --git a/src/redux/user/reducer.ts b/src/redux/user/reducer.ts index 00d2aaa..335ce6a 100644 --- a/src/redux/user/reducer.ts +++ b/src/redux/user/reducer.ts @@ -7,10 +7,27 @@ import { TIPS } from '$constants/tips'; import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; import { DIALOGS, IDialogs, TABS } from '$constants/dialogs'; import * as ActionCreators from '$redux/user/actions'; -import { IStickers } from "$constants/stickers"; +import { IStickers, ISticker } from "$constants/stickers"; +import { IRoutePoint } from '$utils/gpx'; +import { IStickerDump } from '$modules/Sticker'; + +export interface IRoute { + version: number, + title: IRootState['title'], + owner: number, + address: IRootState['address'], + route: IRoutePoint[], + stickers: IStickerDump[], + provider: IRootState['provider'], + is_public: IRootState['is_public'], + is_published: IRootState['is_starred'], + description: IRootState['description'], + logo: IRootState['logo'], + distance: IRootState['distance'] +} export interface IRouteListItem { - _id: string, + address: string, title: string, distance: number, is_public: boolean, @@ -318,13 +335,13 @@ const setIsRouting: ActionHandler = (state, is_routing, }); -const setRouteStarred: ActionHandler = (state, { _id, is_starred }) => ({ +const setRouteStarred: ActionHandler = (state, { address, is_starred }) => ({ ...state, routes: { ...state.routes, list: ( state.routes.list - .map(el => el._id === _id ? { ...el, is_starred } : el) + .map(el => el.address === address ? { ...el, is_starred } : el) .filter(el => ( (state.routes.filter.tab === 'starred' && el.is_starred) || (state.routes.filter.tab === 'all' && !el.is_starred) diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index c5717db..d48b9ae 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -1,13 +1,27 @@ -import { REHYDRATE } from 'redux-persist'; -import { delay, SagaIterator } from 'redux-saga'; -import { takeLatest, select, call, put, takeEvery, race, take } from 'redux-saga/effects'; +import { REHYDRATE } from "redux-persist"; +import { delay, SagaIterator } from "redux-saga"; import { - checkIframeToken, checkOSRMService, - checkUserToken, dropRoute, - getGuestToken, getRouteList, - getStoredMap, modifyRoute, - postMap, sendRouteStarred -} from '$utils/api'; + takeLatest, + select, + call, + put, + takeEvery, + race, + take, + TakeEffect +} from "redux-saga/effects"; +import { + checkIframeToken, + checkOSRMService, + checkUserToken, + dropRoute, + getGuestToken, + getRouteList, + getStoredMap, + modifyRoute, + postMap, + sendRouteStarred +} from "$utils/api"; import { hideRenderer, searchPutRoutes, @@ -32,54 +46,79 @@ import { setProvider, changeProvider, setSaveLoading, - mapsSetShift, searchChangeDistance, clearAll, setFeature, searchSetTitle, setRouteStarred, setDescription, -} from '$redux/user/actions'; -import { getUrlData, parseQuery, pushLoaderState, pushNetworkInitError, pushPath, replacePath } from '$utils/history'; -import { editor } from '$modules/Editor'; -import { ACTIONS } from '$redux/user/constants'; -import { MODES } from '$constants/modes'; -import { DEFAULT_USER } from '$constants/auth'; -import { TIPS } from '$constants/tips'; + mapsSetShift, + searchChangeDistance, + clearAll, + setFeature, + searchSetTitle, + setRouteStarred, + setDescription +} from "$redux/user/actions"; import { - composeArrows, composeDistMark, + getUrlData, + parseQuery, + pushLoaderState, + pushNetworkInitError, + pushPath, + replacePath +} from "$utils/history"; +import { editor } from "$modules/Editor"; +import { ACTIONS } from "$redux/user/constants"; +import { MODES } from "$constants/modes"; +import { DEFAULT_USER, IUser } from "$constants/auth"; +import { TIPS } from "$constants/tips"; +import { + composeArrows, + composeDistMark, composeImages, - composePoly, composeStickers, downloadCanvas, + composePoly, + composeStickers, + downloadCanvas, fetchImages, - getPolyPlacement, getStickersPlacement, + getPolyPlacement, + getStickersPlacement, getTilePlacement, imageFetcher -} from '$utils/renderer'; -import { ILogos, LOGOS } from '$constants/logos'; -import { DEFAULT_PROVIDER } from '$constants/providers'; -import { DIALOGS, TABS } from '$constants/dialogs'; +} from "$utils/renderer"; +import { LOGOS } from "$constants/logos"; +import { DEFAULT_PROVIDER } from "$constants/providers"; +import { DIALOGS } from "$constants/dialogs"; -import * as ActionCreators from '$redux/user/actions'; +import * as ActionCreators from "$redux/user/actions"; import { IRootState } from "$redux/user/reducer"; import { downloadGPXTrack, getGPXString } from "$utils/gpx"; +import { Unwrap } from "$utils/middleware"; +import { IState } from "$redux/store"; -const getUser = state => (state.user.user); -const getState = state => (state.user); +const getUser = (state: IState) => state.user.user; +const getState = (state: IState) => state.user; const hideLoader = () => { - document.getElementById('loader').style.opacity = String(0); - document.getElementById('loader').style.pointerEvents = 'none'; + document.getElementById("loader").style.opacity = String(0); + document.getElementById("loader").style.pointerEvents = "none"; return true; }; function* generateGuestSaga() { - const user = yield call(getGuestToken); - yield put(setUser(user)); + const { + data: { user, random_url } + }: Unwrap = yield call(getGuestToken); - return user; + yield put(setUser({ ...user, random_url })); + + return { ...user, random_url }; } function* startEmptyEditorSaga() { - const { user: { id, random_url }, provider = DEFAULT_PROVIDER } = yield select(getState); + const { + user: { id, random_url }, + provider = DEFAULT_PROVIDER + } = yield select(getState); pushPath(`/${random_url}/edit`); - editor.owner = { id }; + editor.owner = id; editor.setProvider(provider); editor.startEditing(); @@ -95,9 +134,7 @@ function* startEditingSaga() { } function* stopEditingSaga() { - const { - changed, editing, mode, address_origin - } = yield select(getState); + const { changed, editing, mode, address_origin } = yield select(getState); const { path } = getUrlData(); if (!editing) return; @@ -111,22 +148,24 @@ function* stopEditingSaga() { yield put(setChanged(false)); yield put(setEditing(editor.hasEmptyHistory)); // don't close editor if no previous map - yield pushPath(`/${(address_origin || path)}/`); + yield pushPath(`/${address_origin || path}/`); } function* loadMapSaga(path) { - const map = yield call(getStoredMap, { name: path }); + const { data: { route, error, random_url } }: Unwrap = yield call(getStoredMap, { name: path }); - if (map) { + if (route && !error) { yield editor.clearAll(); - yield editor.setData(map); + yield editor.setData(route); yield editor.fitDrawing(); yield editor.setInitialData(); yield put(setChanged(false)); + + return { route, random_url }; } - return map; + return null } function* replaceAddressIfItsBusy(destination, original) { @@ -150,14 +189,17 @@ function* setReadySaga() { hideLoader(); yield call(checkOSRMServiceSaga); - yield put(searchSetTab('mine')); + yield put(searchSetTab("my")); } function* mapInitSaga() { pushLoaderState(90); const { path, mode, hash } = getUrlData(); - const { provider, user: { id } } = yield select(getState); + const { + provider, + user: { id } + } = yield select(getState); editor.map.setProvider(provider); yield put(changeProvider(provider)); @@ -174,13 +216,13 @@ function* mapInitSaga() { if (path) { const map = yield call(loadMapSaga, path); - if (map) { - if (mode && mode === 'edit') { - if (map && map.owner && mode === 'edit' && map.owner.id !== id) { + if (map && map.route) { + if (mode && mode === "edit") { + if (map && map.route && map.route.owner && mode === "edit" && map.route.owner !== id) { yield call(setReadySaga); yield call(replaceAddressIfItsBusy, map.random_url, map.address); } else { - yield put(setAddressOrigin('')); + yield put(setAddressOrigin("")); } yield put(setEditing(true)); @@ -226,10 +268,15 @@ function* authCheckSaga() { } if (id && token) { - const user = yield call(checkUserToken, { id, token }); + const { + data: { user, random_url } + }: Unwrap = yield call(checkUserToken, { + id, + token + }); if (user) { - yield put(setUser(user)); + yield put(setUser({ ...user, random_url })); pushLoaderState(99); @@ -251,14 +298,19 @@ function* setModeSaga({ mode }: ReturnType) { // console.log('change', mode); } -function* setActiveStickerSaga({ activeSticker }: { type: string, activeSticker: IRootState['activeSticker'] }) { - yield editor.activeSticker = activeSticker; +function* setActiveStickerSaga({ + activeSticker +}: { + type: string; + activeSticker: IRootState["activeSticker"]; +}) { + yield (editor.activeSticker = activeSticker); yield put(setMode(MODES.STICKERS)); return true; } -function* setLogoSaga({ logo }: { type: string, logo: string }) { +function* setLogoSaga({ logo }: { type: string; logo: string }) { const { mode } = yield select(getState); editor.logo = logo; @@ -299,7 +351,8 @@ function* clearSaga({ type }) { yield put(setChanged(false)); break; - default: break; + default: + break; } yield put(setActiveSticker(null)); @@ -307,48 +360,75 @@ function* clearSaga({ type }) { } function* sendSaveRequestSaga({ - title, address, force, is_public, description, + title, + address, + force, + is_public, + description }: ReturnType) { if (editor.isEmpty) return yield put(setSaveError(TIPS.SAVE_EMPTY)); const { route, stickers, provider } = editor.dumpData(); const { logo, distance } = yield select(getState); - const { id, token } = yield select(getUser); + const { token } = yield select(getUser); yield put(setSaveLoading(true)); - const { result, timeout, cancel } = yield race({ + const { + result, + timeout, + cancel + }: { + result: Unwrap; + timeout: boolean; + cancel: TakeEffect; + } = yield race({ result: postMap({ - id, token, route, stickers, title, force, address, logo, distance, provider, is_public, description, + token, + route, + stickers, + title, + force, + address, + logo, + distance, + provider, + is_public, + description }), timeout: delay(10000), - cancel: take(ACTIONS.RESET_SAVE_DIALOG), + cancel: take(ACTIONS.RESET_SAVE_DIALOG) }); yield put(setSaveLoading(false)); if (cancel) return yield put(setMode(MODES.NONE)); - if (result && result.mode === 'overwriting') return yield put(setSaveOverwrite()); - if (result && result.mode === 'exists') return yield put(setSaveError(TIPS.SAVE_EXISTS)); - if (timeout || !result || !result.success || !result.address) return yield put(setSaveError(TIPS.SAVE_TIMED_OUT)); + if (result && result.mode === "overwriting") + return yield put(setSaveOverwrite()); + if (result && result.mode === "exists") + return yield put(setSaveError(TIPS.SAVE_EXISTS)); + if (timeout || !result || !result.success || !result.address) + return yield put(setSaveError(TIPS.SAVE_TIMED_OUT)); - return yield put(setSaveSuccess({ - address: result.address, - title: result.title, - is_public: result.is_public, - description: result.description, + return yield put( + setSaveSuccess({ + address: result.address, + title: result.title, + is_public: result.is_public, + description: result.description, - save_error: TIPS.SAVE_SUCCESS, - })); + save_error: TIPS.SAVE_SUCCESS + }) + ); } function* getRenderData() { - yield put(setRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); + yield put(setRenderer({ info: "Загрузка тайлов", progress: 0.1 })); - const canvas = document.getElementById('renderer'); + const canvas = document.getElementById("renderer"); canvas.width = window.innerWidth; canvas.height = window.innerHeight; - const ctx = canvas.getContext('2d'); + const ctx = canvas.getContext("2d"); const geometry = getTilePlacement(); const points = getPolyPlacement(); @@ -359,7 +439,7 @@ function* getRenderData() { const images = yield fetchImages(ctx, geometry); - yield put(setRenderer({ info: 'Отрисовка', progress: 0.5 })); + yield put(setRenderer({ info: "Отрисовка", progress: 0.5 })); yield composeImages({ geometry, images, ctx }); yield composePoly({ points, ctx }); @@ -367,9 +447,9 @@ function* getRenderData() { yield composeDistMark({ ctx, points, distance }); yield composeStickers({ stickers, ctx }); - yield put(setRenderer({ info: 'Готово', progress: 1 })); + yield put(setRenderer({ info: "Готово", progress: 1 })); - return yield canvas.toDataURL('image/jpeg'); + return yield canvas.toDataURL("image/jpeg"); } function* takeAShotSaga() { @@ -377,50 +457,62 @@ function* takeAShotSaga() { const { result, timeout } = yield race({ result: worker, - timeout: delay(500), + timeout: delay(500) }); if (timeout) yield put(setMode(MODES.SHOT_PREFETCH)); - const data = yield (result || worker); + const data = yield result || worker; yield put(setMode(MODES.NONE)); - yield put(setRenderer({ - data, renderer_active: true, width: window.innerWidth, height: window.innerHeight - })); + yield put( + setRenderer({ + data, + renderer_active: true, + width: window.innerWidth, + height: window.innerHeight + }) + ); } -function* getCropData({ - x, y, width, height -}) { - const { logo, renderer: { data } } = yield select(getState); - const canvas = document.getElementById('renderer'); +function* getCropData({ x, y, width, height }) { + const { + logo, + renderer: { data } + } = yield select(getState); + const canvas = document.getElementById("renderer"); canvas.width = width; canvas.height = height; - const ctx = canvas.getContext('2d'); + const ctx = canvas.getContext("2d"); const image = yield imageFetcher(data); ctx.drawImage(image, -x, -y); if (logo && LOGOS[logo][1]) { const logoImage = yield imageFetcher(LOGOS[logo][1]); - ctx.drawImage(logoImage, width - logoImage.width, height - logoImage.height); + ctx.drawImage( + logoImage, + width - logoImage.width, + height - logoImage.height + ); } - return yield canvas.toDataURL('image/jpeg'); + return yield canvas.toDataURL("image/jpeg"); } function* cropAShotSaga(params) { const { title, address } = yield select(getState); yield call(getCropData, params); - const canvas = document.getElementById('renderer') as HTMLCanvasElement; + const canvas = document.getElementById("renderer") as HTMLCanvasElement; - downloadCanvas(canvas, (title || address).replace(/\./ig, ' ')); + downloadCanvas(canvas, (title || address).replace(/\./gi, " ")); return yield put(hideRenderer()); } -function* changeProviderSaga({ provider }: ReturnType) { +function* changeProviderSaga({ + provider +}: ReturnType) { const { provider: current_provider } = yield select(getState); yield put(setProvider(provider)); @@ -435,8 +527,15 @@ function* changeProviderSaga({ provider }: ReturnType) { - const { address, ready, user: { id, random_url }, is_public } = yield select(getState); +function* locationChangeSaga({ + location +}: ReturnType) { + const { + address, + ready, + user: { id, random_url }, + is_public + } = yield select(getState); if (!ready) return; @@ -445,16 +544,16 @@ function* locationChangeSaga({ location }: ReturnType) { - const data = yield call(checkUserToken, user); - yield put(setUser(data)); +function* gotVkUserSaga({ + user: u +}: ReturnType) { + const { + data: { user, random_url } + }: Unwrap = yield call(checkUserToken, u); + + yield put(setUser({ ...user, random_url })); } -function* keyPressedSaga({ key, target }: ReturnType): any { - if ( - target === 'INPUT' || - target === 'TEXTAREA' - ) { +function* keyPressedSaga({ + key, + target +}: ReturnType): any { + if (target === "INPUT" || target === "TEXTAREA") { return; } - if (key === 'Escape') { - const { dialog_active, mode, renderer: { renderer_active } } = yield select(getState); + if (key === "Escape") { + const { + dialog_active, + mode, + renderer: { renderer_active } + } = yield select(getState); if (renderer_active) return yield put(hideRenderer()); if (dialog_active) return yield put(setDialogActive(false)); if (mode !== MODES.NONE) return yield put(setMode(MODES.NONE)); - } else if (key === 'Delete') { - const { user: { editing } } = yield select(); + } else if (key === "Delete") { + const { + user: { editing } + } = yield select(); if (!editing) return; @@ -494,47 +604,63 @@ function* keyPressedSaga({ key, target }: ReturnType = yield getRouteList({ token, - title, - distance, + search: title, + min: distance[0], + max: distance[1], step, shift, - author: tab === 'mine' ? id : '', - starred: tab === 'starred' ? 1 : 0, + tab }); + + return result; } function* searchSetSagaWorker() { - const { routes: { filter } } = yield select(getState); + const { + routes: { filter } + }: ReturnType = yield select(getState); - const { list, min, max, limit, shift, step } = yield call(searchGetRoutes); + const { + data: { + routes, + limits: { min, max, count: limit }, + filter: { shift, step } + } + }: Unwrap = yield call(searchGetRoutes); - yield put(searchPutRoutes({ list, min, max, limit, shift, step })); + yield put(searchPutRoutes({ list: routes, min, max, limit, shift, step })); // change distange range if needed and load additional data if ( (filter.min > min && filter.distance[0] <= filter.min) || (filter.max < max && filter.distance[1] >= filter.max) ) { - yield put(searchChangeDistance([ - (filter.min > min && filter.distance[0] <= filter.min) - ? min - : filter.distance[0], - (filter.max < max && filter.distance[1] >= filter.max) - ? max - : filter.distance[1], - ])); + yield put( + searchChangeDistance([ + filter.min > min && filter.distance[0] <= filter.min + ? min + : filter.distance[0], + filter.max < max && filter.distance[1] >= filter.max + ? max + : filter.distance[1] + ]) + ); } return yield put(searchSetLoading(false)); @@ -547,14 +673,22 @@ function* searchSetSaga() { yield call(searchSetSagaWorker); } -function* openMapDialogSaga({ tab }: ReturnType) { - const { dialog_active, routes: { filter: { tab: current } } } = yield select(getState); +function* openMapDialogSaga({ + tab +}: ReturnType) { + const { + dialog_active, + routes: { + filter: { tab: current } + } + } = yield select(getState); if (dialog_active && tab === current) { return yield put(setDialogActive(false)); } - if (tab !== current) { // if tab wasnt changed just update data + if (tab !== current) { + // if tab wasnt changed just update data yield put(searchSetTab(tab)); } @@ -566,13 +700,18 @@ function* openMapDialogSaga({ tab }: ReturnType) { const { id } = yield select(getUser); const { dialog_active } = yield select(getState); @@ -585,7 +724,7 @@ function* setSaveSuccessSaga({ yield put(setDescription(description)); yield put(setChanged(false)); - yield editor.owner = { id }; + editor.owner = id; if (dialog_active) { yield call(searchSetSagaWorker); @@ -594,7 +733,7 @@ function* setSaveSuccessSaga({ return yield editor.setInitialData(); } -function* userLogoutSaga():SagaIterator { +function* userLogoutSaga(): SagaIterator { yield put(setUser(DEFAULT_USER)); yield call(generateGuestSaga); } @@ -607,8 +746,12 @@ function* setUserSaga() { return true; } -function* setTitleSaga({ title }: ReturnType):SagaIterator { - if (title) { document.title = `${title} | Редактор маршрутов`; } +function* setTitleSaga({ + title +}: ReturnType): SagaIterator { + if (title) { + document.title = `${title} | Редактор маршрутов`; + } } function* getGPXTrackSaga(): SagaIterator { @@ -617,13 +760,15 @@ function* getGPXTrackSaga(): SagaIterator { if (!route || route.length <= 0) return; - const track = getGPXString({ route, stickers, title: (title || address) }); + const track = getGPXString({ route, stickers, title: title || address }); return downloadGPXTrack({ track, title }); } function* mapsLoadMoreSaga() { - const { routes: { limit, list, shift, step, loading, filter } } = yield select(getState); + const { + routes: { limit, list, shift, step, loading, filter } + } = yield select(getState); if (loading || list.length >= limit || limit === 0) return; @@ -638,73 +783,109 @@ function* mapsLoadMoreSaga() { (filter.min > result.min && filter.distance[0] <= filter.min) || (filter.max < result.max && filter.distance[1] >= filter.max) ) { - yield put(searchChangeDistance([ - (filter.min > result.min && filter.distance[0] <= filter.min) - ? result.min - : filter.distance[0], - (filter.max < result.max && filter.distance[1] >= filter.max) - ? result.max - : filter.distance[1], - ])); + yield put( + searchChangeDistance([ + filter.min > result.min && filter.distance[0] <= filter.min + ? result.min + : filter.distance[0], + filter.max < result.max && filter.distance[1] >= filter.max + ? result.max + : filter.distance[1] + ]) + ); } yield put(searchPutRoutes({ ...result, list: [...list, ...result.list] })); yield put(searchSetLoading(false)); } -function* dropRouteSaga({ _id }: ReturnType): SagaIterator { - const { id, token } = yield select(getUser); +function* dropRouteSaga({ + address +}: ReturnType): SagaIterator { + const { token } = yield select(getUser); const { - routes: { list, step, shift, limit, filter: { min, max } } + routes: { + list, + step, + shift, + limit, + filter: { min, max } + } } = yield select(getState); - const index = list.findIndex(el => el._id === _id); + const index = list.findIndex(el => el.address === address); if (index >= 0) { - yield put(searchPutRoutes({ - list: list.filter(el => el._id !== _id), - min, - max, - step, - shift: (shift > 0) ? shift - 1 : 0, - limit: (limit > 0) ? limit - 1 : limit, - })); + yield put( + searchPutRoutes({ + list: list.filter(el => el.address !== address), + min, + max, + step, + shift: shift > 0 ? shift - 1 : 0, + limit: limit > 0 ? limit - 1 : limit + }) + ); } - return yield call(dropRoute, { address: _id, id, token }); + return yield call(dropRoute, { address, token }); } -function* modifyRouteSaga({ _id, title, is_public }: ReturnType): SagaIterator { - const { id, token } = yield select(getUser); +function* modifyRouteSaga({ + address, + title, + is_public +}: ReturnType): SagaIterator { + const { token } = yield select(getUser); const { - routes: { list, step, shift, limit, filter: { min, max } } - } = yield select(getState); + routes: { + list, + step, + shift, + limit, + filter: { min, max } + } + }: ReturnType = yield select(getState); - const index = list.findIndex(el => el._id === _id); + const index = list.findIndex(el => el.address === address); if (index >= 0) { - yield put(searchPutRoutes({ - list: list.map(el => (el._id !== _id ? el : { ...el, title, is_public })), - min, - max, - step, - shift: (shift > 0) ? shift - 1 : 0, - limit: (limit > 0) ? limit - 1 : limit, - })); + yield put( + searchPutRoutes({ + list: list.map(el => + el.address !== address ? el : { ...el, title, is_public } + ), + min, + max, + step, + shift: shift > 0 ? shift - 1 : 0, + limit: limit > 0 ? limit - 1 : limit + }) + ); } - return yield call(modifyRoute, { address: _id, id, token, title, is_public }); + return yield call(modifyRoute, { address, token, title, is_public }); } -function* toggleRouteStarredSaga({ _id }: ReturnType) { - const { routes: { list } } = yield select(getState); - const route = list.find(el => el._id === _id); +function* toggleRouteStarredSaga({ + address +}: ReturnType) { + const { + routes: { list } + }: IState["user"] = yield select(getState); + + const route = list.find(el => el.address === address); const { id, token } = yield select(getUser); - yield put(setRouteStarred(_id, !route.is_starred)); - const result = yield sendRouteStarred({ id, token, _id, is_starred: !route.is_starred }); + yield put(setRouteStarred(address, !route.is_starred)); + const result = yield sendRouteStarred({ + id, + token, + address, + is_starred: !route.is_starred + }); - if (!result) return yield put(setRouteStarred(_id, route.is_starred)); + if (!result) return yield put(setRouteStarred(address, route.is_starred)); } export function* userSaga() { @@ -720,12 +901,15 @@ export function* userSaga() { yield takeEvery(ACTIONS.ROUTER_CANCEL, routerCancelSaga); yield takeEvery(ACTIONS.ROUTER_SUBMIT, routerSubmitSaga); - yield takeEvery([ - ACTIONS.CLEAR_POLY, - ACTIONS.CLEAR_STICKERS, - ACTIONS.CLEAR_ALL, - ACTIONS.CLEAR_CANCEL, - ], clearSaga); + yield takeEvery( + [ + ACTIONS.CLEAR_POLY, + ACTIONS.CLEAR_STICKERS, + ACTIONS.CLEAR_ALL, + ACTIONS.CLEAR_CANCEL + ], + clearSaga + ); yield takeLatest(ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); yield takeLatest(ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); @@ -740,10 +924,10 @@ export function* userSaga() { yield takeLatest(ACTIONS.SET_TITLE, setTitleSaga); - yield takeLatest([ - ACTIONS.SEARCH_SET_TITLE, - ACTIONS.SEARCH_SET_DISTANCE, - ], searchSetSaga); + yield takeLatest( + [ACTIONS.SEARCH_SET_TITLE, ACTIONS.SEARCH_SET_DISTANCE], + searchSetSaga + ); yield takeLatest(ACTIONS.OPEN_MAP_DIALOG, openMapDialogSaga); yield takeLatest(ACTIONS.SEARCH_SET_TAB, searchSetTabSaga); diff --git a/src/utils/api.ts b/src/utils/api.ts index d8528a6..269cd29 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -1,126 +1,222 @@ -import axios, { AxiosPromise } from 'axios/index'; -import { API } from '$constants/api'; -import { IRootState } from "$redux/user/reducer"; +import axios, { AxiosPromise } from "axios/index"; +import { API } from "$constants/api"; +import { IRootState, IRouteListItem, IRoute } from "$redux/user/reducer"; import { IUser } from "$constants/auth"; import { ILatLng } from "$modules/Stickers"; import { IStickerDump } from "$modules/Sticker"; -import { CLIENT } from '$config/frontend'; +import { CLIENT } from "$config/frontend"; import { LatLngLiteral } from "leaflet"; +import { + resultMiddleware, + errorMiddleware, + IResultWithStatus, + configWithToken +} from "./middleware"; -const arrayToObject = (array: any[], key: string): {} => array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); - -interface IPostMap { - title: IRootState['title'], - address: IRootState['address'], - route: Array, - stickers: Array, - id: IRootState['user']['id'], - token: IRootState['user']['token'], - force: boolean, - logo: IRootState['logo'], - distance: IRootState['distance'], - provider: IRootState['provider'], - is_public: IRootState['is_public'], - description: IRootState['description'], -} +const arrayToObject = (array: any[], key: string): {} => + array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); interface IGetRouteList { - title: IRootState['title'], - distance: IRootState['distance'], - author: IRootState['routes']['filter']['author'], - step: IRootState['routes']['step'], - shift: IRootState['routes']['step'], - starred: number, - id: IRootState['user']['id'], - token: IRootState['user']['token'], + min: number; + max: number; + tab: string; + search: string; + step: IRootState["routes"]["step"]; + shift: IRootState["routes"]["step"]; + token: IRootState["user"]["token"]; } interface IGetRouteListResult { - min: IRootState['routes']['filter']['min'], - max: IRootState['routes']['filter']['max'], - limit: IRootState['routes']['limit'], - step: IRootState['routes']['step'], - shift: IRootState['routes']['shift'], - list: IRootState['routes']['list'], + min: IRootState["routes"]["filter"]["min"]; + max: IRootState["routes"]["filter"]["max"]; + limit: IRootState["routes"]["limit"]; + step: IRootState["routes"]["step"]; + shift: IRootState["routes"]["shift"]; + list: IRootState["routes"]["list"]; } -export const checkUserToken = ( - { id, token }: - { id: IRootState['user']['id'], token: IRootState['user']['token']} -):AxiosPromise => axios.get(API.CHECK_TOKEN, { - params: { id, token } -}).then(result => (result && result.data && { - ...result.data, +export const checkUserToken = ({ id, - token, - routes: (result.data.routes && result.data.routes.length > 0 && arrayToObject(result.data.routes, '_id')) || {}, -})).catch(() => null); + token +}: { + id: IRootState["user"]["id"]; + token: IRootState["user"]["token"]; +}): Promise> => + axios + .get(API.CHECK_TOKEN, { + params: { id, token } + }) + .then(resultMiddleware) + .catch(errorMiddleware); -export const getGuestToken = ():AxiosPromise => axios.get(API.GET_GUEST).then(result => (result && result.data)); +export const getGuestToken = (): Promise> => + axios + .get(API.GET_GUEST) + .then(resultMiddleware) + .catch(errorMiddleware); -export const getStoredMap = ( - { name }: { name: IRootState['address'] } -) => axios.get(API.GET_MAP, { - params: { name } -}) - .then(result => ( - result && result.data && result.data.success && result.data - )); +export const getStoredMap = ({ + name +}: { + name: IRootState["address"]; +}): Promise> => + axios + .get(API.GET_MAP, { + params: { name } + }) + .then(resultMiddleware) + .catch(errorMiddleware); export const postMap = ({ - title, address, route, stickers, id, token, force, logo, distance, provider, is_public, description, -}: IPostMap) => axios.post(API.POST_MAP, { title, address, route, stickers, - id, - token, force, logo, distance, provider, is_public, description, -}).then(result => (result && result.data && result.data)); + token +}: Partial & { force: boolean; token: string }) => + axios + .post( + API.POST_MAP, + { + title, + address, + route, + stickers, + force, + logo, + distance, + provider, + is_public, + description + }, + configWithToken(token) + ) + .then(result => result && result.data && result.data); -export const checkIframeToken = ( - { viewer_id, auth_key }: - { viewer_id: string, auth_key: string } -) => axios.get(API.IFRAME_LOGIN_VK, { - params: { viewer_id, auth_key } -}).then(result => (result && result.data && result.data.success && result.data.user)).catch(() => (false)); +export const checkIframeToken = ({ + viewer_id, + auth_key +}: { + viewer_id: string; + auth_key: string; +}) => + axios + .get(API.IFRAME_LOGIN_VK, { + params: { viewer_id, auth_key } + }) + .then( + result => result && result.data && result.data.success && result.data.user + ) + .catch(() => false); export const getRouteList = ({ - title, distance, author, starred, id, token, step, shift, -}: IGetRouteList): AxiosPromise => axios.get(API.GET_ROUTE_LIST, { - params: { - title, distance, author, starred, id, token, step, shift - } -}).then(result => (result && result.data && result.data.success && result.data)) - .catch(() => ({ list: [], min: 0, max: 0, limit: 0, step: 20, shift: 20 })); + search, + min, + max, + tab, + token, + step, + shift +}: IGetRouteList): Promise> => + axios + .get( + API.GET_ROUTE_LIST, + configWithToken(token, { + params: { + search, + min, + max, + tab, + token, + step, + shift + } + }) + ) + .then(resultMiddleware) + .catch(errorMiddleware); -export const checkOSRMService = (bounds: LatLngLiteral[]): Promise => ( - CLIENT && CLIENT.OSRM_URL && axios.get(CLIENT.OSRM_TEST_URL(bounds)).then(() => true).catch(() => false) -); - -export const dropRoute = ({ address, id, token }: { address: string, id: string, token: string }): AxiosPromise => ( - axios.delete(API.DROP_ROUTE, { data: { address, id, token } }) -); - -export const modifyRoute = ( - { address, id, token, title, is_public }: - { address: string, id: string, token: string, title: string, is_public: boolean } -): AxiosPromise => ( - axios.patch(API.DROP_ROUTE, { address, id, token, title, is_public }) -); - -export const sendRouteStarred = ( - { id, token, _id, is_starred }: - { id: string, token: string, _id: string, is_starred: boolean } -): Promise => ( - axios.post(API.SET_STARRED, { id, token, address: _id, is_starred }) +export const checkOSRMService = (bounds: LatLngLiteral[]): Promise => + CLIENT && + CLIENT.OSRM_URL && + axios + .get(CLIENT.OSRM_TEST_URL(bounds)) .then(() => true) - .catch(() => true) -); + .catch(() => false); +export const dropRoute = ({ + address, + token +}: { + address: string; + token: string; +}): Promise => + axios + .delete(API.DROP_ROUTE, configWithToken(token, { data: { address } })) + .then(resultMiddleware) + .catch(errorMiddleware); + +export const modifyRoute = ({ + address, + token, + title, + is_public +}: { + address: string; + token: string; + title: string; + is_public: boolean; +}): Promise> => + axios.patch( + API.MODIFY_ROUTE, + { address, token, is_public, title }, + configWithToken(token) + ); + +export const sendRouteStarred = ({ + id, + token, + address, + is_starred +}: { + id: string; + token: string; + address: string; + is_starred: boolean; +}): Promise> => + axios + .post(API.SET_STARRED, { id, token, address, is_starred }) + .then(resultMiddleware) + .catch(errorMiddleware); diff --git a/src/utils/middleware.ts b/src/utils/middleware.ts new file mode 100644 index 0000000..1a2fa1f --- /dev/null +++ b/src/utils/middleware.ts @@ -0,0 +1,50 @@ +import { AxiosRequestConfig } from "axios"; + +export type Unwrap = T extends (...args: any[]) => Promise ? U : T; + +export interface IApiErrorResult { + detail?: string; + code?: string; +} + +export interface IResultWithStatus { + status: any; + data?: Partial & IApiErrorResult; + error?: string; + debug?: string; +} + +export const HTTP_RESPONSES = { + SUCCESS: 200, + CREATED: 201, + CONNECTION_REFUSED: 408, + BAD_REQUEST: 400, + UNAUTHORIZED: 401, + NOT_FOUND: 404, + TOO_MANY_REQUESTS: 429, +}; + +export const resultMiddleware = (({ + status, + data, +}: { + status: number; + data: T; +}): { status: number; data: T } => ({ status, data })); + +export const errorMiddleware = (debug): IResultWithStatus => (debug && debug.response + ? debug.response + : { + status: HTTP_RESPONSES.CONNECTION_REFUSED, + data: {}, + debug, + error: 'Ошибка сети', + }); + +export const configWithToken = ( + token: string, + config: AxiosRequestConfig = {}, +): AxiosRequestConfig => ({ + ...config, + headers: { ...(config.headers || {}), Authorization: `${token}` }, +}); \ No newline at end of file From 2144af9899e8124fabc20daf913dc122e366de1e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 12 Dec 2019 17:22:57 +0700 Subject: [PATCH 085/320] modified to match golang backend --- src/components/dialogs/MapListDialog.tsx | 18 +-- src/components/maps/RouteRowDrop.tsx | 6 +- src/components/maps/RouteRowEditor.tsx | 6 +- src/components/maps/RouteRowView.tsx | 133 ++++++++++++----------- src/components/maps/RouteRowWrapper.tsx | 133 ++++++++++++----------- src/components/panels/UserPanel.tsx | 4 +- src/constants/api.ts | 8 +- src/constants/dialogs.ts | 20 ++-- src/modules/Editor.ts | 12 +- src/redux/user/actions.ts | 4 +- src/redux/user/reducer.ts | 20 ++-- src/redux/user/sagas.ts | 93 ++++++++++------ src/utils/api.ts | 74 +++++++------ 13 files changed, 296 insertions(+), 235 deletions(-) diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index 5a30c87..8e52106 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -16,7 +16,7 @@ import { isMobile } from '$utils/window'; import classnames from 'classnames'; import * as Range from 'rc-slider/lib/Range'; -import { TABS } from '$constants/dialogs'; +import { TABS, TABS_TITLES } from '$constants/dialogs'; import { Icon } from '$components/panels/Icon'; import { pushPath } from '$utils/history'; import { IRootState, IRouteListItem } from '$redux/user/reducer'; @@ -110,12 +110,12 @@ class Component extends React.Component { - this.props.dropRoute(_id); + dropRoute = (address: string): void => { + this.props.dropRoute(address); }; - modifyRoute = ({ _id, title, is_public }: { _id: string, title: string, is_public: boolean }): void => { - this.props.modifyRoute(_id, { title, is_public }); + modifyRoute = ({ address, title, is_public }: { address: string, title: string, is_public: boolean }): void => { + this.props.modifyRoute(address, { title, is_public }); this.stopEditing(); }; @@ -161,13 +161,13 @@ class Component extends React.Component { - Object.keys(TABS).map(item => (role === ROLES.admin || item !== 'all') && ( + Object.values(TABS).map(item => (role === ROLES.admin || item !== TABS.PENDING) && (
      this.props.searchSetTab(item)} key={item} > - {TABS[item]} + {TABS_TITLES[item]}
      )) } @@ -211,9 +211,9 @@ class Component extends React.Component => (
      -
      Удалить
      +
      Удалить
      Отмена
      diff --git a/src/components/maps/RouteRowEditor.tsx b/src/components/maps/RouteRowEditor.tsx index eb08ff5..d8471db 100644 --- a/src/components/maps/RouteRowEditor.tsx +++ b/src/components/maps/RouteRowEditor.tsx @@ -6,7 +6,7 @@ import { MapListDialog } from "$components/dialogs/MapListDialog"; interface Props { title: string; - _id: string; + address: string; is_public: boolean, modifyRoute: typeof MapListDialog.modifyRoute, } @@ -29,10 +29,10 @@ export class RouteRowEditor extends React.Component { stopEditing = () => { const { state: { title, is_public }, - props: { _id } + props: { address } } = this; - this.props.modifyRoute({ _id, title, is_public }) + this.props.modifyRoute({ address, title, is_public }) }; setPublic = () => this.setState({ is_public: !this.state.is_public }); diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 42027dd..85c0811 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -1,93 +1,100 @@ // @flow -import * as React from 'react'; -import { Icon } from '$components/panels/Icon'; +import * as React from "react"; +import { Icon } from "$components/panels/Icon"; import { MapListDialog } from "$components/dialogs/MapListDialog"; import { Tooltip } from "$components/panels/Tooltip"; import { ReactElement } from "react"; -import classnames from 'classnames'; +import classnames from "classnames"; import { toggleRouteStarred } from "$redux/user/actions"; +import { TABS } from "$constants/dialogs"; interface Props { - tab: string, + tab: string; - _id: string, - title: string, - distance: number, - is_public: boolean, - is_admin: boolean, - is_starred: boolean, + address: string; + title: string; + distance: number; + is_public: boolean; + is_admin: boolean; + is_published: boolean; - openRoute: typeof MapListDialog.openRoute, - toggleStarred: typeof MapListDialog.toggleStarred, - startEditing: typeof MapListDialog.startEditing, - stopEditing: typeof MapListDialog.stopEditing, - showMenu: typeof MapListDialog.showMenu, - hideMenu: typeof MapListDialog.hideMenu, - showDropCard: typeof MapListDialog.showDropCard, + openRoute: typeof MapListDialog.openRoute; + toggleStarred: typeof MapListDialog.toggleStarred; + startEditing: typeof MapListDialog.startEditing; + stopEditing: typeof MapListDialog.stopEditing; + showMenu: typeof MapListDialog.showMenu; + hideMenu: typeof MapListDialog.hideMenu; + showDropCard: typeof MapListDialog.showDropCard; } export const RouteRowView = ({ - title, distance, _id, openRoute, tab, startEditing, showMenu, showDropCard, hideMenu, is_admin, is_starred, toggleStarred, + title, + distance, + address, + openRoute, + tab, + startEditing, + showMenu, + showDropCard, + hideMenu, + is_admin, + is_published, + toggleStarred }: Props): ReactElement => ( -
      - { - (tab === 'all' || tab === 'starred') && is_admin && -
      - { - is_starred - ? - : - } +
      + {(tab === TABS.PENDING || tab === TABS.STARRED) && is_admin && ( +
      + {is_published ? ( + + ) : ( + + )}
      - } -
      openRoute(_id)} - > + )} +
      openRoute(address)}>
      - { - (tab === 'my' || !is_admin) && is_starred && -
      - } - - {(title || _id)} - + {(tab === "my" || !is_admin) && is_published && ( +
      + +
      + )} + {title || address}
      - {_id} + {address} - {(distance && `${distance} km`) || '0 km'} + {(distance && `${distance} km`) || "0 km"}
      - { - tab === 'my' && - -
      - -
      -
      - Удалить - -
      -
      - Редактировать - -
      + {tab === "my" && ( + +
      + +
      +
      + Удалить + +
      +
      + Редактировать +
      - - } +
      +
      + )}
      ); diff --git a/src/components/maps/RouteRowWrapper.tsx b/src/components/maps/RouteRowWrapper.tsx index a8379d4..a681974 100644 --- a/src/components/maps/RouteRowWrapper.tsx +++ b/src/components/maps/RouteRowWrapper.tsx @@ -1,5 +1,5 @@ -import * as React from 'react'; -import classnames from 'classnames'; +import * as React from "react"; +import classnames from "classnames"; import { MapListDialog } from "$components/dialogs/MapListDialog"; import { RouteRowView } from "$components/maps/RouteRowView"; import { RouteRowEditor } from "$components/maps/RouteRowEditor"; @@ -7,76 +7,85 @@ import { RouteRowDrop } from "$components/maps/RouteRowDrop"; import { ReactElement } from "react"; interface Props { - _id: string, - tab: string, - title: string, - distance: number, - is_public: boolean, - is_starred: boolean, + address: string; + tab: string; + title: string; + distance: number; + is_public: boolean; + is_published: boolean; - is_admin: boolean, - is_editing_target: boolean, - is_menu_target: boolean, + is_admin: boolean; + is_editing_target: boolean; + is_menu_target: boolean; - openRoute: typeof MapListDialog.openRoute, - startEditing: typeof MapListDialog.startEditing, - stopEditing: typeof MapListDialog.stopEditing, - showMenu: typeof MapListDialog.showMenu, - hideMenu: typeof MapListDialog.hideMenu, - showDropCard: typeof MapListDialog.showDropCard, - dropRoute: typeof MapListDialog.dropRoute, - modifyRoute: typeof MapListDialog.modifyRoute, - toggleStarred: typeof MapListDialog.toggleStarred, + openRoute: typeof MapListDialog.openRoute; + startEditing: typeof MapListDialog.startEditing; + stopEditing: typeof MapListDialog.stopEditing; + showMenu: typeof MapListDialog.showMenu; + hideMenu: typeof MapListDialog.hideMenu; + showDropCard: typeof MapListDialog.showDropCard; + dropRoute: typeof MapListDialog.dropRoute; + modifyRoute: typeof MapListDialog.modifyRoute; + toggleStarred: typeof MapListDialog.toggleStarred; - is_editing_mode: 'edit' | 'drop', + is_editing_mode: "edit" | "drop"; } export const RouteRowWrapper = ({ - title, distance, _id, openRoute, tab, startEditing, showMenu, - showDropCard, is_public, is_editing_target, is_menu_target, is_editing_mode, - dropRoute, stopEditing, modifyRoute, hideMenu, is_admin, is_starred, toggleStarred, + title, + distance, + address, + openRoute, + tab, + startEditing, + showMenu, + showDropCard, + is_public, + is_editing_target, + is_menu_target, + is_editing_mode, + dropRoute, + stopEditing, + modifyRoute, + hideMenu, + is_admin, + is_published, + toggleStarred }: Props): ReactElement => (
      - { - is_editing_target && is_editing_mode === 'edit' && - - } - { - is_editing_target && is_editing_mode === 'drop' && - - } - { - !is_editing_target && - - } + {is_editing_target && is_editing_mode === "edit" && ( + + )} + {is_editing_target && is_editing_mode === "drop" && ( + + )} + {!is_editing_target && ( + + )}
      ); diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 783ac71..aea5d13 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -11,7 +11,7 @@ import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; import { CLIENT } from '$config/frontend'; -import { DIALOGS } from '$constants/dialogs'; +import { DIALOGS, TABS } from '$constants/dialogs'; import { IRootState } from "$redux/user/reducer"; import { Tooltip } from "$components/panels/Tooltip"; import { TitleDialog } from "$components/dialogs/TitleDialog"; @@ -65,7 +65,7 @@ export class Component extends React.PureComponent { setMenuOpened = () => this.setState({ menuOpened: !this.state.menuOpened }); openMapsDialog = () => { - this.props.openMapDialog('my'); + this.props.openMapDialog(TABS.MY); }; openAppInfoDialog = () => { diff --git a/src/constants/api.ts b/src/constants/api.ts index fa343c7..6e0a243 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -1,16 +1,16 @@ import { CLIENT } from '$config/frontend'; -export const API: { [x: string]: string } = { +export const API = { GET_GUEST: `${CLIENT.API_ADDR}/api/auth/`, CHECK_TOKEN: `${CLIENT.API_ADDR}/api/auth/`, - IFRAME_LOGIN_VK: `${CLIENT.API_ADDR}/api/auth/vk/`, + IFRAME_LOGIN_VK: `${CLIENT.API_ADDR}/api/auth/vk`, GET_MAP: `${CLIENT.API_ADDR}/api/route/`, POST_MAP: `${CLIENT.API_ADDR}/api/route/`, - GET_ROUTE_LIST: `${CLIENT.API_ADDR}/api/route/list/`, + GET_ROUTE_LIST: tab => `${CLIENT.API_ADDR}/api/route/list/${tab}`, DROP_ROUTE: `${CLIENT.API_ADDR}/api/route/`, MODIFY_ROUTE: `${CLIENT.API_ADDR}/api/route/`, - SET_STARRED: `${CLIENT.API_ADDR}/api/route/publish/`, + SET_STARRED: `${CLIENT.API_ADDR}/api/route/publish`, }; export const API_RETRY_INTERVAL = 10; diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts index 93cec51..1291b6c 100644 --- a/src/constants/dialogs.ts +++ b/src/constants/dialogs.ts @@ -5,9 +5,9 @@ export interface IDialogs { } export interface IMapTabs { - my: string, - all: string, - starred: string, + MY: string, + PENDING: string, + STARRED: string, } export const DIALOGS: IDialogs = ({ @@ -16,8 +16,14 @@ export const DIALOGS: IDialogs = ({ APP_INFO: 'APP_INFO', }); -export const TABS: IMapTabs = ({ - my: 'Мои', - all: 'Заявки', - starred: 'Каталог', +export const TABS: IMapTabs = { + MY: 'my', + PENDING: 'pending', + STARRED: 'starred', +} + +export const TABS_TITLES = ({ + [TABS.MY]: 'Мои', + [TABS.PENDING]: 'Заявки', + [TABS.STARRED]: 'Каталог', }); diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 7f97c62..b3c0e6a 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -45,7 +45,7 @@ interface IEditor { stickers: any, provider: IRootState['provider'], is_public: IRootState['is_public'], - is_starred: IRootState['is_starred'], + is_published: IRootState['is_published'], description: IRootState['description'], logo: IRootState['logo'], }; @@ -160,7 +160,7 @@ export class Editor { stickers: null, provider: null, is_public: false, - is_starred: false, + is_published: false, description: '', logo: null, }; @@ -320,7 +320,7 @@ export class Editor { provider = DEFAULT_PROVIDER, logo = DEFAULT_LOGO, is_public, - is_starred, + is_published, description, }: Partial): void => { this.setTitle(title || ''); @@ -348,7 +348,7 @@ export class Editor { } this.setPublic(is_public); - this.setStarred(is_starred); + this.setStarred(is_published); this.setDescription(description); this.setLogo((logo && LOGOS[DEFAULT_LOGO] && logo) || DEFAULT_LOGO); @@ -382,7 +382,7 @@ export class Editor { setInitialData = (): void => { const { path } = getUrlData(); const { id } = this.getUser(); - const { is_public, logo, is_starred , description} = this.getState(); + const { is_public, logo, is_published , description} = this.getState(); const { route, stickers, provider } = this.dumpData(); this.initialData = { @@ -396,7 +396,7 @@ export class Editor { provider, is_public, logo, - is_starred, + is_published, description, }; }; diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index b98c392..5f43ab1 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -17,7 +17,7 @@ export const setDescription = description => ({ type: ACTIONS.SET_DESCRIPTION, d export const setAddress = address => ({ type: ACTIONS.SET_ADDRESS, address }); export const setAddressOrigin = address_origin => ({ type: ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); export const setPublic = is_public => ({ type: ACTIONS.SET_PUBLIC, is_public }); -export const setStarred = is_starred => ({ type: ACTIONS.SET_STARRED, is_starred }); +export const setStarred = is_published => ({ type: ACTIONS.SET_STARRED, is_published }); export const setSpeed = speed => ({ type: ACTIONS.SET_SPEED, speed }); export const startEditing = () => ({ type: ACTIONS.START_EDITING }); @@ -99,4 +99,4 @@ export const modifyRoute = (address: string, { title, is_public }: { title: stri type: ACTIONS.MODIFY_ROUTE, address, title, is_public }); export const toggleRouteStarred = (address: string) => ({ type: ACTIONS.TOGGLE_ROUTE_STARRED, address }); -export const setRouteStarred = (address: string, is_starred: boolean) => ({ type: ACTIONS.SET_ROUTE_STARRED, address, is_starred }); +export const setRouteStarred = (address: string, is_published: boolean) => ({ type: ACTIONS.SET_ROUTE_STARRED, address, is_published }); diff --git a/src/redux/user/reducer.ts b/src/redux/user/reducer.ts index 335ce6a..ca57a7f 100644 --- a/src/redux/user/reducer.ts +++ b/src/redux/user/reducer.ts @@ -20,7 +20,7 @@ export interface IRoute { stickers: IStickerDump[], provider: IRootState['provider'], is_public: IRootState['is_public'], - is_published: IRootState['is_starred'], + is_published: IRootState['is_published'], description: IRootState['description'], logo: IRootState['logo'], distance: IRootState['distance'] @@ -31,7 +31,7 @@ export interface IRouteListItem { title: string, distance: number, is_public: boolean, - is_starred: boolean, + is_published: boolean, updated_at: string, } @@ -54,7 +54,7 @@ export interface IRootReducer { provider: keyof typeof PROVIDERS, markers_shown: boolean, - is_starred: boolean, + is_published: boolean, is_public: boolean, is_empty: boolean, is_routing: boolean, @@ -271,7 +271,7 @@ const searchSetTab: ActionHandler = (state, ...state.routes, filter: { ...state.routes.filter, - tab: Object.keys(TABS).indexOf(tab) >= 0 ? tab : TABS[Object.keys(TABS)[0]], + tab: Object.values(TABS).indexOf(tab) >= 0 ? tab : TABS[Object.values(TABS)[0]], } } }); @@ -304,7 +304,7 @@ const searchSetLoading: ActionHandler = }); const setPublic: ActionHandler = (state, { is_public = false }) => ({ ...state, is_public }); -const setStarred: ActionHandler = (state, { is_starred = false }) => ({ ...state, is_starred }); +const setStarred: ActionHandler = (state, { is_published = false }) => ({ ...state, is_published }); const setSpeed: ActionHandler = (state, { speed = 15 }) => ({ ...state, @@ -335,16 +335,16 @@ const setIsRouting: ActionHandler = (state, is_routing, }); -const setRouteStarred: ActionHandler = (state, { address, is_starred }) => ({ +const setRouteStarred: ActionHandler = (state, { address, is_published }) => ({ ...state, routes: { ...state.routes, list: ( state.routes.list - .map(el => el.address === address ? { ...el, is_starred } : el) + .map(el => el.address === address ? { ...el, is_published } : el) .filter(el => ( - (state.routes.filter.tab === 'starred' && el.is_starred) || - (state.routes.filter.tab === 'all' && !el.is_starred) + (state.routes.filter.tab === TABS.STARRED && el.is_published) || + (state.routes.filter.tab === TABS.PENDING && !el.is_published) )) ) } @@ -421,7 +421,7 @@ export const INITIAL_STATE: IRootReducer = { changed: false, editing: false, - is_starred: false, + is_published: false, is_public: false, is_empty: true, is_routing: false, diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index d48b9ae..ee79778 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -82,7 +82,7 @@ import { } from "$utils/renderer"; import { LOGOS } from "$constants/logos"; import { DEFAULT_PROVIDER } from "$constants/providers"; -import { DIALOGS } from "$constants/dialogs"; +import { DIALOGS, TABS } from "$constants/dialogs"; import * as ActionCreators from "$redux/user/actions"; import { IRootState } from "$redux/user/reducer"; @@ -152,7 +152,9 @@ function* stopEditingSaga() { } function* loadMapSaga(path) { - const { data: { route, error, random_url } }: Unwrap = yield call(getStoredMap, { name: path }); + const { + data: { route, error, random_url } + }: Unwrap = yield call(getStoredMap, { name: path }); if (route && !error) { yield editor.clearAll(); @@ -161,11 +163,11 @@ function* loadMapSaga(path) { yield editor.setInitialData(); yield put(setChanged(false)); - + return { route, random_url }; } - return null + return null; } function* replaceAddressIfItsBusy(destination, original) { @@ -189,7 +191,7 @@ function* setReadySaga() { hideLoader(); yield call(checkOSRMServiceSaga); - yield put(searchSetTab("my")); + yield put(searchSetTab(TABS.MY)); } function* mapInitSaga() { @@ -218,7 +220,13 @@ function* mapInitSaga() { if (map && map.route) { if (mode && mode === "edit") { - if (map && map.route && map.route.owner && mode === "edit" && map.route.owner !== id) { + if ( + map && + map.route && + map.route.owner && + mode === "edit" && + map.route.owner !== id + ) { yield call(setReadySaga); yield call(replaceAddressIfItsBusy, map.random_url, map.address); } else { @@ -403,19 +411,20 @@ function* sendSaveRequestSaga({ yield put(setSaveLoading(false)); if (cancel) return yield put(setMode(MODES.NONE)); - if (result && result.mode === "overwriting") + + if (result && result.data.code === "already_exist") return yield put(setSaveOverwrite()); - if (result && result.mode === "exists") + if (result && result.data.code === "conflict") return yield put(setSaveError(TIPS.SAVE_EXISTS)); - if (timeout || !result || !result.success || !result.address) + if (timeout || !result || !result.data.route || !result.data.route.address) return yield put(setSaveError(TIPS.SAVE_TIMED_OUT)); return yield put( setSaveSuccess({ - address: result.address, - title: result.title, - is_public: result.is_public, - description: result.description, + address: result.data.route.address, + title: result.data.route.title, + is_public: result.data.route.is_public, + description: result.data.route.description, save_error: TIPS.SAVE_SUCCESS }) @@ -533,8 +542,7 @@ function* locationChangeSaga({ const { address, ready, - user: { id, random_url }, - is_public + user: { id, random_url } } = yield select(getState); if (!ready) return; @@ -544,7 +552,14 @@ function* locationChangeSaga({ if (address !== path) { const map = yield call(loadMapSaga, path); - if (map && map.route && map.route.owner && mode === "edit" && map.route.owner !== id) { + if ( + map && + map.route && + map.route.owner && + mode === "edit" && + map.route.owner !== id + ) { + console.log("replace address if its busy"); return yield call(replaceAddressIfItsBusy, map.random_url, map.address); } } else if (mode === "edit" && editor.owner !== id) { @@ -608,7 +623,7 @@ function* keyPressedSaga({ } function* searchGetRoutes() { - const { id, token } = yield select(getUser); + const { token } = yield select(getUser); const { routes: { @@ -669,7 +684,7 @@ function* searchSetSagaWorker() { function* searchSetSaga() { yield put(searchSetLoading(true)); yield put(mapsSetShift(0)); - yield delay(500); + yield delay(300); yield call(searchSetSagaWorker); } @@ -772,30 +787,45 @@ function* mapsLoadMoreSaga() { if (loading || list.length >= limit || limit === 0) return; - yield delay(100); + yield delay(50); yield put(searchSetLoading(true)); yield put(mapsSetShift(shift + step)); - const result = yield call(searchGetRoutes); + const { + data: { + limits: { min, max, count }, + filter: { shift: resp_shift, step: resp_step }, + routes + } + }: Unwrap = yield call(searchGetRoutes); if ( - (filter.min > result.min && filter.distance[0] <= filter.min) || - (filter.max < result.max && filter.distance[1] >= filter.max) + (filter.min > min && filter.distance[0] <= filter.min) || + (filter.max < max && filter.distance[1] >= filter.max) ) { yield put( searchChangeDistance([ - filter.min > result.min && filter.distance[0] <= filter.min - ? result.min + filter.min > min && filter.distance[0] <= filter.min + ? min : filter.distance[0], - filter.max < result.max && filter.distance[1] >= filter.max - ? result.max + filter.max < max && filter.distance[1] >= filter.max + ? max : filter.distance[1] ]) ); } - yield put(searchPutRoutes({ ...result, list: [...list, ...result.list] })); + yield put( + searchPutRoutes({ + min, + max, + limit: count, + shift: resp_shift, + step: resp_step, + list: [...list, ...routes] + }) + ); yield put(searchSetLoading(false)); } @@ -875,17 +905,16 @@ function* toggleRouteStarredSaga({ }: IState["user"] = yield select(getState); const route = list.find(el => el.address === address); - const { id, token } = yield select(getUser); + const { token } = yield select(getUser); - yield put(setRouteStarred(address, !route.is_starred)); + yield put(setRouteStarred(address, !route.is_published)); const result = yield sendRouteStarred({ - id, token, address, - is_starred: !route.is_starred + is_published: !route.is_published }); - if (!result) return yield put(setRouteStarred(address, route.is_starred)); + if (!result) return yield put(setRouteStarred(address, route.is_published)); } export function* userSaga() { diff --git a/src/utils/api.ts b/src/utils/api.ts index 269cd29..4423b8b 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -90,25 +90,35 @@ export const postMap = ({ is_public, description, token -}: Partial & { force: boolean; token: string }) => +}: Partial & { + force: boolean; + token: string; +}): Promise> => axios .post( API.POST_MAP, { - title, - address, - route, - stickers, - force, - logo, - distance, - provider, - is_public, - description + route: { + title, + address, + route, + stickers, + logo, + distance, + provider, + is_public, + description + }, + force }, configWithToken(token) ) - .then(result => result && result.data && result.data); + .then(resultMiddleware) + .catch(errorMiddleware); export const checkIframeToken = ({ viewer_id, @@ -150,13 +160,12 @@ export const getRouteList = ({ }>> => axios .get( - API.GET_ROUTE_LIST, + API.GET_ROUTE_LIST(tab), configWithToken(token, { params: { search, min, max, - tab, token, step, shift @@ -199,24 +208,25 @@ export const modifyRoute = ({ }): Promise> => - axios.patch( - API.MODIFY_ROUTE, - { address, token, is_public, title }, - configWithToken(token) - ); - -export const sendRouteStarred = ({ - id, - token, - address, - is_starred -}: { - id: string; - token: string; - address: string; - is_starred: boolean; -}): Promise> => axios - .post(API.SET_STARRED, { id, token, address, is_starred }) + .patch( + API.MODIFY_ROUTE, + { address, token, is_public, title }, + configWithToken(token) + ) + .then(resultMiddleware) + .catch(errorMiddleware); + +export const sendRouteStarred = ({ + token, + address, + is_published +}: { + token: string; + address: string; + is_published: boolean; +}): Promise> => + axios + .post(API.SET_STARRED, { address, is_published }, configWithToken(token)) .then(resultMiddleware) .catch(errorMiddleware); From 288c25e32c137d2828ba4b4cce703f275c8a4fa7 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 13 Dec 2019 12:13:41 +0700 Subject: [PATCH 086/320] changed todos --- src/index.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index ad0867d..726e861 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,7 +1,4 @@ /* - ## BUGS - todo catalogue minimum is 25km. Why? - ## FEATURES todo screenshots with dot losing .png extension todo refactor reducer to use is_ prefix for editing and etc (mb move them to status object) From 7bea7b9ed1f5a6d3fe46d39cc54c2409396af33c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 13 Dec 2019 12:30:22 +0700 Subject: [PATCH 087/320] fixed idents --- src/components/panels/UserPanel.tsx | 167 +++++++++++++++++----------- 1 file changed, 99 insertions(+), 68 deletions(-) diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index aea5d13..e094fd1 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -1,48 +1,71 @@ -import * as React from 'react'; +import * as React from "react"; -import { GuestButton } from '$components/user/GuestButton'; -import { DEFAULT_USER, IUser, ROLES } from '$constants/auth'; -import { UserButton } from '$components/user/UserButton'; -import { UserMenu } from '$components/user/UserMenu'; -import { setUser, userLogout, takeAShot, setDialog, gotVkUser, setDialogActive, openMapDialog, getGPXTrack } from '$redux/user/actions'; -import { bindActionCreators } from 'redux'; -import { connect } from 'react-redux'; -import { Icon } from '$components/panels/Icon'; +import { GuestButton } from "$components/user/GuestButton"; +import { DEFAULT_USER, IUser, ROLES } from "$constants/auth"; +import { UserButton } from "$components/user/UserButton"; +import { UserMenu } from "$components/user/UserMenu"; +import { + setUser, + userLogout, + takeAShot, + setDialog, + gotVkUser, + setDialogActive, + openMapDialog, + getGPXTrack +} from "$redux/user/actions"; +import { bindActionCreators } from "redux"; +import { connect } from "react-redux"; +import { Icon } from "$components/panels/Icon"; -import classnames from 'classnames'; -import { CLIENT } from '$config/frontend'; -import { DIALOGS, TABS } from '$constants/dialogs'; +import classnames from "classnames"; +import { CLIENT } from "$config/frontend"; +import { DIALOGS, TABS } from "$constants/dialogs"; import { IRootState } from "$redux/user/reducer"; import { Tooltip } from "$components/panels/Tooltip"; import { TitleDialog } from "$components/dialogs/TitleDialog"; interface Props extends IRootState { - userLogout: typeof userLogout, - setDialog: typeof setDialog, - setDialogActive: typeof setDialogActive, - gotVkUser: typeof gotVkUser, - takeAShot: typeof takeAShot, - openMapDialog: typeof openMapDialog, - getGPXTrack: typeof getGPXTrack, + userLogout: typeof userLogout; + setDialog: typeof setDialog; + setDialogActive: typeof setDialogActive; + gotVkUser: typeof gotVkUser; + takeAShot: typeof takeAShot; + openMapDialog: typeof openMapDialog; + getGPXTrack: typeof getGPXTrack; } interface State { - menuOpened: boolean + menuOpened: boolean; } export class Component extends React.PureComponent { state = { - menuOpened: false, + menuOpened: false }; componentDidMount() { - window.addEventListener('message', e => { + window.addEventListener("message", e => { const { data } = e; - if (!data || !data.type || data.type !== 'oauth_login' || !data.user || !data.user.id || !data.user.token) return; + if ( + !data || + !data.type || + data.type !== "oauth_login" || + !data.user || + !data.user.id || + !data.user.token + ) + return; const { - id, token, role = 'vk', name = '', ip = '', photo = '', agent = '', + id, + token, + role = "vk", + name = "", + ip = "", + photo = "", + agent = "" } = data.user; const user = { @@ -54,7 +77,7 @@ export class Component extends React.PureComponent { name, ip, agent, - photo, + photo } }; @@ -82,7 +105,7 @@ export class Component extends React.PureComponent { window.open( `https://oauth.vk.com/authorize?client_id=5987644&scope=&redirect_uri=${CLIENT.API_ADDR}/api/auth/vk`, - 'socialPopupWindow', + "socialPopupWindow", `location=no,width=700,height=370,scrollbars=no,top=${top},left=${left},resizable=no` ); }; @@ -90,25 +113,26 @@ export class Component extends React.PureComponent { render() { const { props: { user, dialog, dialog_active, is_empty }, - state: { menuOpened }, + state: { menuOpened } } = this; return (
      - { - - } + +
      - { - !user || user.role === ROLES.guest - ? - : - } - { - (user && user.role && user.role !== 'guest' && menuOpened) && - - } + {!user || user.role === ROLES.guest ? ( + + ) : ( + + )} + {user && user.role && user.role !== "guest" && menuOpened && ( + + )}
      @@ -116,7 +140,7 @@ export class Component extends React.PureComponent {
      - { - !is_empty && - -
      + {!is_empty && ( + +
      -
      - -
      - - } +
      + +
      + + )}
      ); } } +const mapStateToProps = ({ + user: { dialog, dialog_active, user, is_empty } +}) => ({ dialog, dialog_active, user, is_empty }); +const mapDispatchToProps = dispatch => + bindActionCreators( + { + setUser, + userLogout, + takeAShot, + setDialog, + gotVkUser, + setDialogActive, + openMapDialog, + getGPXTrack + }, + dispatch + ); -const mapStateToProps = ({ user: { dialog, dialog_active, user, is_empty } }) => ({ dialog, dialog_active, user, is_empty }); -const mapDispatchToProps = dispatch => bindActionCreators({ - setUser, - userLogout, - takeAShot, - setDialog, - gotVkUser, - setDialogActive, - openMapDialog, - getGPXTrack, -}, dispatch); - -export const UserPanel = connect(mapStateToProps, mapDispatchToProps)(Component); +export const UserPanel = connect( + mapStateToProps, + mapDispatchToProps +)(Component); From dd6f16379346cfc8ab01507356139251dfd6e2e6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 13 Dec 2019 13:23:54 +0700 Subject: [PATCH 088/320] removed backend part --- backend/app.js | 59 ------- backend/bin/www | 34 ---- backend/config/db.js | 18 --- backend/config/strings.js | 11 -- backend/models/Route.js | 23 --- backend/models/User.js | 27 ---- backend/models/index.js | 8 - backend/public/stylesheets/social/vk.css | 1 - backend/public/stylesheets/social/vk.less | 47 ------ backend/public/stylesheets/style.css | 1 - backend/public/stylesheets/style.less | 8 - backend/routes/auth.js | 16 -- backend/routes/auth/check.js | 24 --- backend/routes/auth/guest.js | 52 ------- backend/routes/auth/iframe/vk.js | 22 --- backend/routes/auth/list.js | 9 -- backend/routes/auth/social/vk.js | 82 ---------- backend/routes/index.js | 9 -- backend/routes/route.js | 18 --- backend/routes/route/drop.js | 19 --- backend/routes/route/get.js | 26 ---- backend/routes/route/list.js | 96 ------------ backend/routes/route/patch.js | 24 --- backend/routes/route/post.js | 57 ------- backend/routes/route/star.js | 19 --- backend/routes/users.js | 9 -- backend/tools/import.js | 182 ---------------------- backend/tools/stickersReplacement.js | 44 ------ backend/utils/gen.js | 10 -- backend/utils/parse.js | 30 ---- backend/views/error.pug | 6 - backend/views/index.pug | 5 - backend/views/layout.pug | 7 - backend/views/social/success.pug | 17 -- backend/views/social/vk_error.pug | 13 -- package.json | 7 - 36 files changed, 1040 deletions(-) delete mode 100644 backend/app.js delete mode 100755 backend/bin/www delete mode 100644 backend/config/db.js delete mode 100644 backend/config/strings.js delete mode 100644 backend/models/Route.js delete mode 100644 backend/models/User.js delete mode 100644 backend/models/index.js delete mode 100644 backend/public/stylesheets/social/vk.css delete mode 100644 backend/public/stylesheets/social/vk.less delete mode 100644 backend/public/stylesheets/style.css delete mode 100644 backend/public/stylesheets/style.less delete mode 100644 backend/routes/auth.js delete mode 100644 backend/routes/auth/check.js delete mode 100644 backend/routes/auth/guest.js delete mode 100644 backend/routes/auth/iframe/vk.js delete mode 100644 backend/routes/auth/list.js delete mode 100644 backend/routes/auth/social/vk.js delete mode 100644 backend/routes/index.js delete mode 100644 backend/routes/route.js delete mode 100644 backend/routes/route/drop.js delete mode 100644 backend/routes/route/get.js delete mode 100644 backend/routes/route/list.js delete mode 100644 backend/routes/route/patch.js delete mode 100644 backend/routes/route/post.js delete mode 100644 backend/routes/route/star.js delete mode 100644 backend/routes/users.js delete mode 100755 backend/tools/import.js delete mode 100644 backend/tools/stickersReplacement.js delete mode 100644 backend/utils/gen.js delete mode 100644 backend/utils/parse.js delete mode 100644 backend/views/error.pug delete mode 100644 backend/views/index.pug delete mode 100644 backend/views/layout.pug delete mode 100644 backend/views/social/success.pug delete mode 100644 backend/views/social/vk_error.pug diff --git a/backend/app.js b/backend/app.js deleted file mode 100644 index b85af36..0000000 --- a/backend/app.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - https://habr.com/company/ruvds/blog/321104/ - */ -const createError = require('http-errors'); -const express = require('express'); -const path = require('path'); -const cookieParser = require('cookie-parser'); -const lessMiddleware = require('less-middleware'); -const logger = require('morgan'); -const bodyParser = require('body-parser'); - -const routeRouter = require('./routes/route'); -const authRouter = require('./routes/auth'); -const db = require('./config/db'); - -const app = express(); - -// view engine setup -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'pug'); - -app.use(logger('dev')); -app.use(express.json()); -app.use(express.urlencoded({ extended: false })); -app.use(cookieParser()); -app.use(lessMiddleware(path.join(__dirname, 'public'))); -app.use(express.static(path.join(__dirname, 'public'))); -app.use((req, res, next) => { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, PATCH'); - res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); - next(); -}); - -app.use(bodyParser.json()); -app.use(express.json()); - -// app.use('/', indexRouter); -// app.use('/users', usersRouter); -app.use('/auth', authRouter); -app.use('/route', routeRouter); -// catch 404 and forward to error handler -app.use((req, res, next) => { - next(createError(404)); -}); - -// error handler -app.use((err, req, res, next) => { - // set locals, only providing error in development - res.locals.message = err.message; - res.locals.error = req.app.get('env') === 'development' ? err : {}; - - // render the error page - res.status(err.status || 500); - res.render('error'); -}); - -module.exports = app; - diff --git a/backend/bin/www b/backend/bin/www deleted file mode 100755 index 9bc1724..0000000 --- a/backend/bin/www +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env node -const { CONFIG } = require('../../config/backend'); - -const app = require('../app'); -const fs = require('fs'); -const http = require('http'); -const https = require('https'); - -if (CONFIG.HTTP.ENABLED) { - const httpPort = CONFIG.HTTP.PORT; - // app.set('port', httpPort); - - const httpServer = http.createServer(app); - httpServer.listen(httpPort); - - httpServer.on('error', console.log); - httpServer.on('listening', console.log); -} - -if (CONFIG.HTTPS.ENABLED) { - const sslPort = CONFIG.HTTPS.PORT; - // app.set('port', sslPort); - - const key = fs.readFileSync(CONFIG.HTTPS.PRIVATE_KEY, 'utf8'); - const cert = fs.readFileSync(CONFIG.HTTPS.CERTIFICATE, 'utf8'); - const ca = fs.readFileSync(CONFIG.HTTPS.CA, 'utf8'); - - const sslServer = https.createServer({ key, cert, ca }, app); - - sslServer.listen(sslPort); - sslServer.on('error', console.log); - sslServer.on('listening', console.log); -} - diff --git a/backend/config/db.js b/backend/config/db.js deleted file mode 100644 index ee1b5f0..0000000 --- a/backend/config/db.js +++ /dev/null @@ -1,18 +0,0 @@ -const { CONFIG } = require('../../config/backend'); - -const { - DB: { - USER, PASSWORD, HOSTNAME, PORT, DATABASE - } -} = CONFIG; - -const mongoose = require('mongoose'); -mongoose.Promise = require('bluebird'); - -mongoose.connect(`mongodb://${USER}:${PASSWORD}@${HOSTNAME}:${PORT}/${DATABASE}`, { }); -const database = mongoose.connection; - -database.on('error', (err) => { console.error(`Database Connection Error: ${err}`); process.exit(2); }); -database.on('connected', () => { console.info('Succesfully connected to MongoDB Database'); }); - -console.log(`DB: mongodb://${USER}:${PASSWORD}@${HOSTNAME}:${PORT}/${DATABASE}`); diff --git a/backend/config/strings.js b/backend/config/strings.js deleted file mode 100644 index e402ca5..0000000 --- a/backend/config/strings.js +++ /dev/null @@ -1,11 +0,0 @@ -// export const OAUTH_FAILED_TITLE = 'Ошибка авторизации'; -module.exports.STRINGS = { - OAUTH: { - ERROR_TITLE: 'Ошибка авторизации', - ERROR_HEADING: 'Ошибка', - ERROR_TEXT: 'Авторизация не удалась, попробуйте еще раз', - ERROR_CLOSE_BUTTON: 'ЗАКРЫТЬ', - - SUCCESS_TITLE: 'Успешно!', - }, -}; diff --git a/backend/models/Route.js b/backend/models/Route.js deleted file mode 100644 index be39b3e..0000000 --- a/backend/models/Route.js +++ /dev/null @@ -1,23 +0,0 @@ -const mongoose = require('mongoose'); - -const { Schema } = mongoose; - -const RouteSchema = new Schema({ - _id: { type: String, required: true }, - title: { type: String, default: '' }, - version: { type: Number, default: 2 }, - route: { type: Array, default: [] }, - stickers: { type: Array, default: [] }, - owner: { type: Schema.Types.ObjectId, ref: 'User' }, - distance: { type: Number, default: 0 }, - is_public: { type: Boolean, default: false }, - is_starred: { type: Boolean, default: false }, - is_deleted: { type: Boolean, default: false }, - created_at: { type: Date, default: Date.now() }, - updated_at: { type: Date, default: Date.now() }, - logo: { type: String, default: 'DEFAULT' }, - provider: { type: String, default: 'DEFAULT' }, - description: { type: String, default: '' }, -}); - -module.exports.RouteSchema = RouteSchema; diff --git a/backend/models/User.js b/backend/models/User.js deleted file mode 100644 index ceb8fbb..0000000 --- a/backend/models/User.js +++ /dev/null @@ -1,27 +0,0 @@ -const mongoose = require('mongoose'); -const { Schema } = mongoose; - -// Schemas -const UserSchema = new Schema( - { - _id: { type: String, required: true }, - role: { - type: String, - required: true, - enum: ['admin', 'guest', 'user', 'vk'], - }, - token: { type: String, required: true }, - created_at: { type: Date, required: true, default: Date.now }, - - first_name: { type: String }, - last_name: { type: String }, - photo: { type: String }, - version: { type: Number, default: 2 }, - routes: [{ type: Schema.Types.ObjectId, ref: 'Route' }] - }, - { - timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' } - } -); - -module.exports.UserSchema = UserSchema; diff --git a/backend/models/index.js b/backend/models/index.js deleted file mode 100644 index 0522c0f..0000000 --- a/backend/models/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const mongoose = require('mongoose'); - -const { UserSchema } = require('./User'); -const { RouteSchema } = require('./Route'); - -module.exports.User = mongoose.model('User', UserSchema); -module.exports.Route = mongoose.model('Route', RouteSchema); - diff --git a/backend/public/stylesheets/social/vk.css b/backend/public/stylesheets/social/vk.css deleted file mode 100644 index 6700af0..0000000 --- a/backend/public/stylesheets/social/vk.css +++ /dev/null @@ -1 +0,0 @@ -body{background:#6d9dc8;font:14px "Lucida Grande",Helvetica,Arial,sans-serif;color:white;margin:0;font-weight:300}div#message{padding:100px;display:flex;align-items:center;justify-content:center;flex-direction:column;height:100vh;width:100vw;margin:0;position:absolute;box-sizing:border-box;text-align:left}div.bg{background:white;color:#666666;padding:20px 40px;border-radius:4px}h1{margin-bottom:10px;text-transform:uppercase}button{height:32px;padding:0 24px;color:white;border:none;box-sizing:border-box;margin-top:40px;border-radius:3px;background:#6d9dc8;font-weight:bold;float:right;cursor:pointer} \ No newline at end of file diff --git a/backend/public/stylesheets/social/vk.less b/backend/public/stylesheets/social/vk.less deleted file mode 100644 index a5ffeb6..0000000 --- a/backend/public/stylesheets/social/vk.less +++ /dev/null @@ -1,47 +0,0 @@ -body { - background: #6d9dc8; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; - color: white; - margin: 0; - font-weight: 300; -} - -div#message { - padding: 100px; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - height: 100vh; - width: 100vw; - margin: 0; - position: absolute; - box-sizing: border-box; - text-align: left; -} - -div.bg { - background: white; - color: #666666; - padding: 20px 40px; - border-radius: 4px; -} - -h1 { - margin-bottom: 10px; - text-transform: uppercase; -} - -button { - height: 32px; - padding: 0 24px; - color: white; - border: none; - box-sizing: border-box; - margin-top: 40px; - border-radius: 3px; - background: #6d9dc8; - font-weight: bold; - float: right; - cursor: pointer; -} diff --git a/backend/public/stylesheets/style.css b/backend/public/stylesheets/style.css deleted file mode 100644 index 73f017c..0000000 --- a/backend/public/stylesheets/style.css +++ /dev/null @@ -1 +0,0 @@ -body{padding:50px;font:14px "Lucida Grande",Helvetica,Arial,sans-serif}a{color:#00B7FF} \ No newline at end of file diff --git a/backend/public/stylesheets/style.less b/backend/public/stylesheets/style.less deleted file mode 100644 index 9453385..0000000 --- a/backend/public/stylesheets/style.less +++ /dev/null @@ -1,8 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} - -a { - color: #00B7FF; -} diff --git a/backend/routes/auth.js b/backend/routes/auth.js deleted file mode 100644 index 356833c..0000000 --- a/backend/routes/auth.js +++ /dev/null @@ -1,16 +0,0 @@ -const express = require('express'); -const guest = require('./auth/guest'); -const list = require('./auth/list'); -const check = require('./auth/check'); -const vk = require('./auth/social/vk'); -const iframe_vk = require('./auth/iframe/vk'); - -const router = express.Router(); - -router.get('/', check); -// router.get('/list', list); -router.get('/guest', guest); -router.get('/social/vk', vk); -router.get('/iframe/vk', iframe_vk); - -module.exports = router; diff --git a/backend/routes/auth/check.js b/backend/routes/auth/check.js deleted file mode 100644 index fe74a0a..0000000 --- a/backend/routes/auth/check.js +++ /dev/null @@ -1,24 +0,0 @@ -const { User } = require('../../models'); -const { generateGuest, generateRandomUrl } = require('./guest'); - -module.exports = async (req, res) => { - const { id, token } = req.query; - - const user = await User.findOne({ _id: id, token }); - - const random_url = await generateRandomUrl(); - - if (user) { - return res.send({ - success: true, ...user.toObject(), id: user._id, random_url - }); - } - - const guest = await generateGuest(); - const created = await User.create(guest).then(result => result.toObject()); - - return res.send({ - success: false, error: 'user not found', error_code: 1231, ...created, id: created._id, random_url - }); -}; - diff --git a/backend/routes/auth/guest.js b/backend/routes/auth/guest.js deleted file mode 100644 index 73d8dc8..0000000 --- a/backend/routes/auth/guest.js +++ /dev/null @@ -1,52 +0,0 @@ -const { genRandomSequence } = require('../../utils/gen'); -const { User } = require('../../models'); - -const generateGuestToken = () => { - const _id = `guest:${genRandomSequence(16)}`; - - return User.find({ _id }).then(user => { - if (user.length) return generateGuestToken(); - - return _id; - }); -}; - -const generateUser = (_id, role = 'guest') => { - const token = `seq:${genRandomSequence(32)}`; - - return { _id, token, role }; -}; - -const saveUser = user => { - const model = new User({ ...user }); - - return model.save() - .then(() => model.toObject()) - .catch(() => ({ - ...user, - success: false, - error: 'Error saving user model', - error_code: 1232, - })); -}; - -const generateRandomUrl = () => Promise.resolve(genRandomSequence(16)); - -const generateGuest = async () => { - const user = await generateGuestToken() - .then(generateUser); - const random_url = await generateRandomUrl(); - - return { ...user, random_url, first_name: '', last_name: '', photo: '' }; -}; - -module.exports = async (req, res) => { - const user = await generateGuest().then(saveUser); - - res.send({ success: true, ...user }); -}; - -module.exports.generateUser = generateUser; -module.exports.generateGuest = generateGuest; -module.exports.generateGuestToken = generateGuestToken; -module.exports.generateRandomUrl = generateRandomUrl; diff --git a/backend/routes/auth/iframe/vk.js b/backend/routes/auth/iframe/vk.js deleted file mode 100644 index 19dbf8a..0000000 --- a/backend/routes/auth/iframe/vk.js +++ /dev/null @@ -1,22 +0,0 @@ -const { User } = require('../../../models'); -const { CONFIG } = require('../../../../config/backend'); -const md5 = require('js-md5'); -const { generateRandomUrl } = require('../guest'); - -module.exports = async (req, res) => { - if (!CONFIG.SOCIAL.VK_IFRAME.ENABLED) return res.send({ success: false, error: 'Unsupported Method' }); - - const { query: { viewer_id, auth_key } } = req; - - const checksum = md5(`${CONFIG.SOCIAL.VK_IFRAME.APP_ID}_${viewer_id}_${CONFIG.SOCIAL.VK_IFRAME.SECRET}`); - - if (checksum !== auth_key) return res.send({ success: false, error: 'No such user (1)' }); - - const user = await User.findOne({ _id: `vk:${viewer_id}` }).populate('routes'); - - if (!user) return res.send({ success: false, error: 'No such user (2)' }); - - const random_url = await generateRandomUrl(); - return res.send({ success: true, user: { ...user.toObject(), id: user._id, random_url } }); -}; - diff --git a/backend/routes/auth/list.js b/backend/routes/auth/list.js deleted file mode 100644 index 60a904d..0000000 --- a/backend/routes/auth/list.js +++ /dev/null @@ -1,9 +0,0 @@ -const { User } = require('../../models'); - -module.exports = (req, res) => User.find((err, articles) => { - if (!err) return res.send(articles); - - res.statusCode = 500; - return res.send({ error: 'Server error' }); -}); - diff --git a/backend/routes/auth/social/vk.js b/backend/routes/auth/social/vk.js deleted file mode 100644 index 47cfd61..0000000 --- a/backend/routes/auth/social/vk.js +++ /dev/null @@ -1,82 +0,0 @@ -const { User } = require('../../../models'); -const axios = require('axios'); -const { generateUser } = require('../guest'); -const { STRINGS } = require('../../../config/strings'); -const { CONFIG } = require('../../../../config/backend'); - -const fetchUserData = async (req, res) => { - const { query: { code } } = req; - const host = req.get('host'); - const proto = req.connection.encrypted ? 'https' : 'http'; - - const { data: { access_token, user_id } } = await axios.get( - 'https://oauth.vk.com/access_token', - { - params: { - client_id: CONFIG.SOCIAL.VK.APP_ID, - client_secret: CONFIG.SOCIAL.VK.SECRET, - code, - redirect_uri: `${proto}://${host}/api/auth/social/vk`, - } - } - ).catch(() => { - return res.render('social/vk_error', { - title: STRINGS.OAUTH.ERROR_TITLE, - heading: STRINGS.OAUTH.ERROR_HEADING, - reason: STRINGS.OAUTH.ERROR_TEXT, - button: STRINGS.OAUTH.ERROR_CLOSE_BUTTON, - }); - }); - - const { data } = await axios.get( - 'https://api.vk.com/method/users.get', - { - params: { - user_id, - fields: 'photo', - v: '5.67', - access_token, - } - } - ).catch(() => { - return res.render('social/vk_error', { - title: STRINGS.OAUTH.ERROR_TITLE, - heading: STRINGS.OAUTH.ERROR_HEADING, - reason: STRINGS.OAUTH.ERROR_TEXT, - button: STRINGS.OAUTH.ERROR_CLOSE_BUTTON, - }); - }); - - return data; -}; - -module.exports = async (req, res) => { - const { response } = await fetchUserData(req, res); - - const { - first_name = '', last_name = '', photo = '', id = '' - } = response[0]; - - const newUser = await generateUser(`vk:${id}`, 'vk'); - const name = `${first_name} ${last_name}`; - const user = { - ...newUser, first_name, last_name, photo, name, - }; - - const auth = await User.findOne({ _id: user._id }).populate('routes'); - - if (auth) { - await auth.set({ - first_name, last_name, name, photo - }).save(); - - res.render('social/success', { title: STRINGS.OAUTH.SUCCESS_TITLE, ...user, token: auth.token }); - } else { - const created = await User.create(user, (err, result) => { - return result.toObject(); - }); - - res.render('social/success', { title: STRINGS.OAUTH.SUCCESS_TITLE, ...user, ...created }); - } -}; - diff --git a/backend/routes/index.js b/backend/routes/index.js deleted file mode 100644 index 6e84977..0000000 --- a/backend/routes/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const express = require('express'); -const router = express.Router(); - -/* GET home page. */ -router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); -}); - -module.exports = router; diff --git a/backend/routes/route.js b/backend/routes/route.js deleted file mode 100644 index c340d14..0000000 --- a/backend/routes/route.js +++ /dev/null @@ -1,18 +0,0 @@ -const express = require('express'); -const post = require('./route/post'); -const get = require('./route/get'); -const list = require('./route/list'); -const drop = require('./route/drop'); -const patch = require('./route/patch'); -const star = require('./route/star'); - -const router = express.Router(); - -router.post('/star', star); -router.post('/', post); -router.get('/', get); -router.patch('/', patch); -router.delete('/', drop); -router.get('/list', list); - -module.exports = router; diff --git a/backend/routes/route/drop.js b/backend/routes/route/drop.js deleted file mode 100644 index ae51e06..0000000 --- a/backend/routes/route/drop.js +++ /dev/null @@ -1,19 +0,0 @@ -const { User, Route } = require('../../models'); - -module.exports = async (req, res) => { - const { body: { id, token, address } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - - if (!owner) return res.send({ success: false, reason: 'unauthorized' }); - - const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); - - if (!exists) return res.send({ success: false, mode: 'not_exists' }); - if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'not_yours' }); - - await exists.set({ is_deleted: true }).save(); - - return res.send({ success: true, address }); -}; - diff --git a/backend/routes/route/get.js b/backend/routes/route/get.js deleted file mode 100644 index 7421a86..0000000 --- a/backend/routes/route/get.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateRandomUrl } = require('../auth/guest'); -const { Route } = require('../../models'); - -module.exports = async (req, res) => { - const { query: { name } } = req; - - if (!name) return res.send({ success: false, mode: 'not_found_1' }); - - const exists = await Route.findOne({ _id: name, is_deleted: false }).populate('owner', '_id'); - - if (!exists) return res.send({ success: false, mode: 'not_found_2' }); - const data = exists.toObject(); - const random_url = await generateRandomUrl(); - - return res.send({ - success: true, - ...data, - address: exists._id, - owner: { - ...data.owner, - id: data.owner._id, - }, - random_url, - }); -}; - diff --git a/backend/routes/route/list.js b/backend/routes/route/list.js deleted file mode 100644 index d97bfe2..0000000 --- a/backend/routes/route/list.js +++ /dev/null @@ -1,96 +0,0 @@ -const { Route, User } = require('../../models'); - -module.exports = async (req, res) => { - const { - query: { - id, token, title, distance, author, step = 20, shift = 0, starred, - } - } = req; - - const is_starred = parseInt(starred, 10) === 1; - const user = await User.findOne({ _id: id, token }); - - let criteria = { is_deleted: false }; - - if (title) { - criteria = { - ...criteria, - $or: [ - { title: new RegExp(title.trim(), 'ig') }, - { _id: new RegExp(title.trim(), 'ig') }, - ], - }; - } - - if (is_starred) { - criteria = { - ...criteria, - is_starred: true, - is_public: true, - }; - } else if (!author || !user || (user._id !== author)) { - criteria = { - ...criteria, - is_starred: false, - is_public: true, - }; - } - - let list = await Route.find( - { - ...criteria, - }, - '_id title distance owner updated_at is_public is_deleted is_starred', - { - limit: 9000, - sort: { updated_at: -1 }, - } - ).populate('owner', '_id'); - - - list = list.filter(item => !author || (item.owner && item.owner._id === author)); - - let limits = list.reduce(({ min, max }, { distance: dist }) => ({ - min: Math.floor(Math.min(dist, min) / 25) * 25, - max: Math.ceil(Math.max(dist, max) / 25) * 25, - }), { min: 999999, max: 0 }); - - const minDist = parseInt(distance[0], 10); - const maxDist = parseInt(distance[1], 10) === 200 ? 99999 : parseInt(distance[1], 10); - // const maxDist = parseInt(distance[1], 10) > parseInt(distance[0], 10) - // ? parseInt(distance[1], 10) - // : 10000; - - if (distance && distance.length === 2 && !(minDist === maxDist && minDist === 0)) { - list = list.filter(item => ( - item.distance >= minDist && - item.distance <= maxDist - )); - } - - const limit = list.length; - - if (step) { - list = list.slice(parseInt(shift, 10), (parseInt(shift, 10) + parseInt(step, 10))); - } - - if (list.length === 0) { - limits = { min: 0, max: 0 }; - } else if (limits.max === 0) { - limits = { min: 0, max: 0 }; - } else if (limits.min === limits.max) { - limits = { min: limits.max - 25, max: limits.max }; - } else if (limits.max > 200) { - limits = { min: limits.min, max: 200 }; - } - - res.send({ - success: true, - list, - limit, - step: parseInt(step, 10), - shift: parseInt(shift, 10), - ...limits, - }); -}; - diff --git a/backend/routes/route/patch.js b/backend/routes/route/patch.js deleted file mode 100644 index 3abbdb1..0000000 --- a/backend/routes/route/patch.js +++ /dev/null @@ -1,24 +0,0 @@ -const { User, Route } = require('../../models'); - -const { parseString } = require('../../utils/parse'); - -module.exports = async (req, res) => { - const { body, body: { id, token, address } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - - if (!owner) return res.send({ success: false, reason: 'unauthorized' }); - - const title = parseString(body.title, 64); - const is_public = !!body.is_public; - - const exists = await Route.findOne({ _id: address, is_deleted: false }).populate('owner', '_id'); - - if (!exists) return res.send({ success: false, mode: 'not_exists' }); - if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'not_yours' }); - - await exists.set({ title, is_public }).save(); - - return res.send({ success: true, ...exists }); -}; - diff --git a/backend/routes/route/post.js b/backend/routes/route/post.js deleted file mode 100644 index e1251f4..0000000 --- a/backend/routes/route/post.js +++ /dev/null @@ -1,57 +0,0 @@ -const { User, Route } = require('../../models'); - -const { - parseRoute, parseStickers, parseString, parseNumber, parseAddress -} = require('../../utils/parse'); - -module.exports = async (req, res) => { - const { body, body: { id, token, force } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - if (!owner) { - return res.send({ - success: false, reason: 'unauthorized', id, token - }); - } - - const title = parseString(body.title, 64); - const description = parseString(body.description, 256); - const address = parseAddress(body.address, 32); - const route = parseRoute(body.route); - const stickers = parseStickers(body.stickers); - const logo = parseString(body.logo, 16); - const provider = parseString(body.provider, 16) || 'DEFAULT'; - const distance = parseNumber(body.distance, 0, 1000); - const is_public = !!body.is_public; - - if ((!route || route.length <= 0) && (!stickers || stickers.length <= 0)) { - return res.send({ success: false, mode: 'empty' }); - } - - const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); - - if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'exists' }); - if (exists && !force) return res.send({ success: false, mode: 'overwriting' }); - - if (exists) { - await exists.set({ - title, route, stickers, logo, distance, updated_at: Date.now(), provider, is_public, description, - }).save(); - - return res.send({ - success: true, title, address, route, stickers, mode: 'overwrited', is_public, description, - }); - } - - const created = await Route.create({ - _id: address, title, route, stickers, owner, logo, distance, provider, is_public, description, - }); - - await owner.routes.push(created); - await owner.save(); - - return res.send({ - success: true, title, address, route, stickers, provider, is_public, description, - }); -}; - diff --git a/backend/routes/route/star.js b/backend/routes/route/star.js deleted file mode 100644 index aa96fce..0000000 --- a/backend/routes/route/star.js +++ /dev/null @@ -1,19 +0,0 @@ -const { User, Route } = require('../../models'); - -module.exports = async (req, res) => { - const { body, body: { id, token, address } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - - if (!owner || owner.role !== 'admin') return res.send({ success: false, reason: 'unauthorized' }); - - const is_starred = !!body.is_starred; - - const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); - if (!exists) return res.send({ success: false, mode: 'not_exists' }); - - await exists.set({ is_starred }).save(); - - return res.send({ success: true, ...exists }); -}; - diff --git a/backend/routes/users.js b/backend/routes/users.js deleted file mode 100644 index 623e430..0000000 --- a/backend/routes/users.js +++ /dev/null @@ -1,9 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -/* GET users listing. */ -router.get('/', function(req, res, next) { - res.send('respond with a resource'); -}); - -module.exports = router; diff --git a/backend/tools/import.js b/backend/tools/import.js deleted file mode 100755 index 0481cc3..0000000 --- a/backend/tools/import.js +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env node -const mysql = require('mysql'); -const { REPLACEMENT, MAPS } = require('./stickersReplacement'); -const db = require('../config/db'); -let total_dist = 0; -const { User, Route } = require('../models'); - -const con = mysql.createConnection({ - host: 'vault48.org', - user: 'macos_exporter', - password: 'password', -}); - -const tryJSON = data => { - try { - return JSON.parse(data); - } catch (e) { - return {}; - } -}; - -function deg2rad(deg) { - return (deg * Math.PI) / 180; -} - -const findDistance = (t1, n1, t2, n2) => { - // convert coordinates to radians - const lat1 = deg2rad(t1); - const lon1 = deg2rad(n1); - const lat2 = deg2rad(t2); - const lon2 = deg2rad(n2); - - // find the differences between the coordinates - const dlat = lat2 - lat1; - const dlon = lon2 - lon1; - - // here's the heavy lifting - const a = (Math.sin(dlat / 2) ** 2) + - (Math.cos(lat1) * Math.cos(lat2) * (Math.sin(dlon / 2) ** 2)); - const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); // great circle distance in radians - // const dm = c * 3961; // great circle distance in miles - const dk = c * 6373; // great circle distance in km - - // round the results down to the nearest 1/1000 - // const mi = round(dm); - return (Math.round(dk * 1000) / 1000); -}; - -const calcPolyDistance = route => { - let summ = 0; - for (let i = 1; i < route.length; i += 1) { - summ += findDistance(route[i - 1].lat, route[i - 1].lng, route[i].lat, route[i].lng); - } - - total_dist += summ; - - return parseFloat(Number(summ).toFixed(2)); -}; - -const stickerAngleParser = angle => parseFloat(((Number(angle) % Math.PI) + Math.PI).toFixed(2)); - -const stickerStyleParser = style => (REPLACEMENT[style] - ? { ...REPLACEMENT[style] } - : { set: 'base', sticker: 'chicken' }); - -const stickersParser = stickers => ( - stickers.map(({ - ang, latlng, style, text - }) => ({ - angle: stickerAngleParser(ang), // todo: change it! - latlng, - text, - ...stickerStyleParser(style), - })) -); - -const pointParser = points => ( - points.map(({ latlngs, text }) => ({ - text, - latlng: latlngs[0], - set: 'base', - sticker: 'empty', - angle: 2.2, - })) -); - -const mapStyleParser = style => (MAPS[style] - ? MAPS[style] - : 'DEFAULT' -); - -const run = async () => { - await con.connect(err => { if (err) throw err; }); - await con.query('use neu_map'); - - const users = await new Promise(resolve => con.query('SELECT * from tokens where role = "vk"', (err, rows) => { - resolve(rows.map(({ - login, token, created, role, data - }) => { - const info = tryJSON(data); - const created_at = new Date(created * 1000); - - return { - _id: login, - token, - created_at, - updated_at: created_at, - name: info.name, - first_name: (info.name && info.name.split(' ')[0]) || '', - last_name: (info.name && info.name.split(' ')[1]) || '', - role, - photo: info.photo, - version: 1, - }; - })); - })); - - const routes = await new Promise(resolve => con.query('SELECT routes.*, tokens.login as login from routes LEFT JOIN tokens ON tokens.id = routes.id WHERE tokens.login IS NOT NULL AND tokens.role="vk"', (err, rows) => { - if (err) console.log('error', err); - - resolve(rows.map(({ - data, created, name, login - }) => { - const { - map_style, route, stickers, points, logo - } = tryJSON(data); - const created_at = new Date(created * 1000); - - return { - _id: name, - owner: { _id: login }, - created_at, - updated_at: created_at, - provider: mapStyleParser(map_style), - route: route.map(({ lat, lng }) => ({ lat: Number(lat), lng: Number(lng) })), - stickers: [ - ...stickersParser(stickers), - ...pointParser(points) - ], - logo: logo === 'default' ? 'nvs' : logo, - title: '', - version: 1, - distance: calcPolyDistance(route), - is_public: true, - }; - })); - })); - - console.log('ended, got users:', users.length); - console.log('ended, got routes:', routes.length); - - const deletedUsers = await User.deleteMany({ - // version: 1 - }); - const deletedRoutes = await Route.deleteMany({ - // version: 1 - }); - console.log("dropped users", deletedUsers); - console.log("dropped routes", deletedRoutes); - console.log('inserting users'); - const addedUsers = (await Promise.all(users.map(user => User.create(user)))) - .reduce((obj, user) => ({ ...obj, [user._id]: user }), {}); - - console.log('inserting routes'); - const addedRoutes = await (await Promise.all(routes.map(route => Route.create({ - ...route, - owner: addedUsers[route.owner._id], - })))); - - await Promise.all(addedRoutes.map(async (route) => { - await addedUsers[route.owner._id].routes.push(route); - })); - - await Promise.all(addedRoutes.map(route => new Promise(resolve => ( - addedUsers[route.owner._id].save(() => resolve()) - )))); - - console.log('ok'); -}; - -run(); - diff --git a/backend/tools/stickersReplacement.js b/backend/tools/stickersReplacement.js deleted file mode 100644 index 082574e..0000000 --- a/backend/tools/stickersReplacement.js +++ /dev/null @@ -1,44 +0,0 @@ -module.exports.REPLACEMENT = { - 0: { set: 'base', sticker: 'men' }, - 1: { set: 'base', sticker: 'square' }, - 2: { set: 'base', sticker: 'bridge' }, - 3: { set: 'base', sticker: 'ikea' }, - 4: { set: 'base', sticker: 'bugr' }, - 5: { set: 'base', sticker: 'monum' }, - 6: { set: 'base', sticker: 'opera' }, - 7: { set: 'base', sticker: 'forest' }, - 8: { set: 'base', sticker: 'empty' }, - 9: { set: 'base', sticker: 'empty' }, - 10: { set: 'base', sticker: 'road' }, - 11: { set: 'base', sticker: 'chicken' }, - 12: { set: 'base', sticker: 'camp' }, - 13: { set: 'base', sticker: 'fastfood' }, - 14: { set: 'base', sticker: 'beer' }, - 15: { set: 'base', sticker: 'pancake' }, - 16: { set: 'base', sticker: 'rocks' }, - 17: { set: 'real', sticker: 'swamp' }, - 18: { set: 'real', sticker: 'skull' }, - 19: { set: 'base', sticker: 'crap' }, - 20: { set: 'pin', sticker: 'start' }, - 21: { set: 'pin', sticker: 'p1' }, - 22: { set: 'pin', sticker: 'p2' }, - 23: { set: 'pin', sticker: 'p3' }, - 24: { set: 'pin', sticker: 'p4' }, - 25: { set: 'pin', sticker: 'p5' }, - 26: { set: 'pin', sticker: 'p6' }, - 27: { set: 'pin', sticker: 'finish' }, - 29: { set: 'pin', sticker: 'danger' }, - 30: { set: 'pin', sticker: 'question' }, -}; - -module.exports.MAPS = { - 'watercolor': 'BLANK', - 'darq': 'BLANK', - 'default': 'DGIS', - 'osm': 'DEFAULT', - 'hot': 'HOT', - 'blank': 'BLANK', - 'sat': 'DEFAULT', - 'ymap': 'DEFAULT', - 'ysat': 'DEFAULT', -}; diff --git a/backend/utils/gen.js b/backend/utils/gen.js deleted file mode 100644 index 5c5c9f1..0000000 --- a/backend/utils/gen.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports.genRandomSequence = (length = 16) => { - let sequence = ''; - const symbols = 'ABCDEFGHIJKLMOPQRSTUVXYZabcdefghijgmlopqrstuvxyz01234567890' - - for (let i = 0; i < length; i += 1) { - sequence += symbols[parseInt(Math.random() * (symbols.length - 1), 10)]; - } - - return sequence; -}; diff --git a/backend/utils/parse.js b/backend/utils/parse.js deleted file mode 100644 index 4e023ff..0000000 --- a/backend/utils/parse.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports.parseRoute = route => route.filter(el => ( - Object.keys(el).length === 2 - && el.lat - && parseInt(el.lat, 10) > 0 - && parseInt(el.lat, 10) < 1000 - && el.lng - && parseInt(el.lng, 10) > 0 - && parseInt(el.lng, 10) < 1000 -)); - -module.exports.parseStickers = stickers => stickers.filter(el => ( - Object.keys(el).length === 5 - && el.latlng - && Object.keys(el.latlng).length === 2 - && el.latlng.lat - && parseInt(el.latlng.lat, 10) > 0 - && parseInt(el.latlng.lat, 10) < 1000 - && el.latlng.lng - && parseInt(el.latlng.lng, 10) > 0 - && parseInt(el.latlng.lng, 10) < 1000 -)); -// .map(el => ((el.text && String(el.text).substr(0, 100)) || '')); - -const parseString = (value, size) => (value && String(value).substr(0, size)) || ''; -module.exports.parseNumber = (value, min, max) => (value && Number(value) && Math.min(max, Math.max(min, value))) || 0; - -module.exports.parseString = parseString; -module.exports.parseAddress = (value, size) => ( - parseString(value, size).replace(/[^A-Za-z\-_0-9]/ig, '_').replace(/_{2,}/ig, '_') -); diff --git a/backend/views/error.pug b/backend/views/error.pug deleted file mode 100644 index 51ec12c..0000000 --- a/backend/views/error.pug +++ /dev/null @@ -1,6 +0,0 @@ -extends layout - -block content - h1= message - h2= error.status - pre #{error.stack} diff --git a/backend/views/index.pug b/backend/views/index.pug deleted file mode 100644 index 3d63b9a..0000000 --- a/backend/views/index.pug +++ /dev/null @@ -1,5 +0,0 @@ -extends layout - -block content - h1= title - p Welcome to #{title} diff --git a/backend/views/layout.pug b/backend/views/layout.pug deleted file mode 100644 index 15af079..0000000 --- a/backend/views/layout.pug +++ /dev/null @@ -1,7 +0,0 @@ -doctype html -html - head - title= title - link(rel='stylesheet', href='/stylesheets/style.css') - body - block content diff --git a/backend/views/social/success.pug b/backend/views/social/success.pug deleted file mode 100644 index 2f8b3c5..0000000 --- a/backend/views/social/success.pug +++ /dev/null @@ -1,17 +0,0 @@ -doctype html -html - body - script. - window.opener.postMessage({ - type: 'oauth_login', - user: { - id: '#{_id}', - token: '#{token}', - name: '#{name}', - photo: '#{photo}', - role: '#{role}', - } - }, '*'); - - window.close(); - diff --git a/backend/views/social/vk_error.pug b/backend/views/social/vk_error.pug deleted file mode 100644 index d172533..0000000 --- a/backend/views/social/vk_error.pug +++ /dev/null @@ -1,13 +0,0 @@ -doctype html -html - head - title Ошибка авторизации - link(rel='stylesheet', href='/stylesheets/social/vk.css') - - body - block content - div#message - div.bg - h1=heading - div=reason - button(onclick='window.close()')=button diff --git a/package.json b/package.json index 635e200..790749f 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "identity-obj-proxy": "^3.0.0", "less-loader": "^4.1.0", "mini-css-extract-plugin": "^0.5.0", - "nodemon": "^1.19.2", "style-loader": "^0.21.0", "sw-precache-webpack-plugin": "^0.11.5", "ts-node": "^8.0.1", @@ -61,14 +60,12 @@ "@types/react": "16.8.1", "axios": "^0.18.0", "babel-runtime": "^6.26.0", - "bluebird": "^3.5.3", "body-parser": "^1.18.3", "classnames": "^2.2.6", "clean-webpack-plugin": "^0.1.9", "cookie-parser": "~1.4.3", "croppr": "^2.3.1", "debug": "~2.6.9", - "express": "~4.16.0", "file-saver": "^2.0.0", "history": "^4.7.2", "http-errors": "~1.6.2", @@ -82,12 +79,8 @@ "less": "^3.8.1", "less-middleware": "~2.2.1", "lodash": "^4.17.10", - "mongoose": "^5.3.14", - "morgan": "~1.9.0", - "mysql": "^2.16.0", "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", - "pug": "2.0.0-beta11", "raleway-cyrillic": "^4.0.2", "rc-slider": "8.5.0", "react": "16.8.1", From 5b857c17243fe57e8d17a830f50fbeac4957617f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 13 Dec 2019 13:24:15 +0700 Subject: [PATCH 089/320] removed backend configs --- config/backend.example.js | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 config/backend.example.js diff --git a/config/backend.example.js b/config/backend.example.js deleted file mode 100644 index 5ff4226..0000000 --- a/config/backend.example.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports.CONFIG = { - HTTPS: { - ENABLED: false, - PORT: 3000, - PRIVATE_KEY: '/etc/letsencrypt/live/HOSTNAME.org/privkey.pem', - CERTIFICATE: '/etc/letsencrypt/live/HOSTNAME.org/cert.pem', - CA: '/etc/letsencrypt/live/hostname/chain.pem', - }, - HTTP: { - ENABLED: false, - PORT: 3000, - }, - DB: { // mongo db config - USER: 'user', - PASSWORD: 'password', - HOSTNAME: 'HOSTNAME.org', - PORT: 27017, - DATABASE: 'map', - }, - SOCIAL: { - VK: { - ENABLED: false, - SECRET: 'YOUR_VK_SECRET', // secret token - APP_ID: 0, // numeric - } - } -}; From d55f403ff2ae5524e78f156321d98a414fdf076a Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 13 Dec 2019 13:26:19 +0700 Subject: [PATCH 090/320] removed serve tasks --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index 790749f..396294f 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,6 @@ "main": "./src/js/index.js", "scripts": { "start": "NODE_ENV=development webpack-dev-server --mode development --hot --open --inline --progress", - "serve": "node ./backend/bin/www", - "serve-dev": "nodemon ./backend/bin/www", "build": "NODE_ENV=production webpack --env production --config=webpack.config.js --progress -p", "profile": "webpack --json > stats.json" }, From ba446169a98f893fc1cfa65dd374db46d17b6c37 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 18:26:56 +0700 Subject: [PATCH 091/320] test deploy --- src/utils/api.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/api.ts b/src/utils/api.ts index 4423b8b..7c08f02 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -136,6 +136,7 @@ export const checkIframeToken = ({ ) .catch(() => false); + export const getRouteList = ({ search, min, From 710d04a77b513acbaab250ad9bed1fe58952329b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 18:30:47 +0700 Subject: [PATCH 092/320] added test cache server --- src/constants/providers.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 45be696..e91ce1d 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -15,6 +15,7 @@ export interface ITileMaps { YMAP: IProvider, SAT: IProvider, ESAT: IProvider, + CACHE: IProvider, } @@ -35,6 +36,11 @@ const TILEMAPS: ITileMaps = { url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, + CACHE: { + name: 'Cache', + url: 'https://{s}.osm.tile.vault48.org/{z}/{x}/{y}.png', + range: ['a', 'b', 'c'], + }, DARQ: { name: 'Darq', url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', @@ -72,7 +78,7 @@ const TILEMAPS: ITileMaps = { } }; -const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT']; +const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT', 'CACHE']; export const DEFAULT_PROVIDER: keyof ITileMaps = ENABLED[0]; export const PROVIDERS: Partial = ENABLED.reduce((obj, provider) => ({ From bbd7f801b41961dce8bad41a657338f0dddddff4 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 18:34:51 +0700 Subject: [PATCH 093/320] added carto to cache --- src/constants/providers.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index e91ce1d..498bdc7 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -15,7 +15,8 @@ export interface ITileMaps { YMAP: IProvider, SAT: IProvider, ESAT: IProvider, - CACHE: IProvider, + CACHE_OSM: IProvider, + CACHE_CARTO: IProvider, } @@ -36,11 +37,16 @@ const TILEMAPS: ITileMaps = { url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, - CACHE: { - name: 'Cache', + CACHE_OSM: { + name: 'Cache Osm', url: 'https://{s}.osm.tile.vault48.org/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, + CACHE_CARTO: { + name: 'Cache Carto', + url: 'https://{s}.carto.tile.vault48.org/{z}/{x}/{y}.png', + range: ['a', 'b', 'c'], + }, DARQ: { name: 'Darq', url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', @@ -78,7 +84,7 @@ const TILEMAPS: ITileMaps = { } }; -const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT', 'CACHE']; +const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT', 'CACHE_OSM', 'CACHE_CARTO']; export const DEFAULT_PROVIDER: keyof ITileMaps = ENABLED[0]; export const PROVIDERS: Partial = ENABLED.reduce((obj, provider) => ({ From 40c589063ad5fad7d4299b8820af5fb1aeef6890 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 18:37:06 +0700 Subject: [PATCH 094/320] fixed broken logo --- src/components/logo/LogoPreview.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/logo/LogoPreview.tsx b/src/components/logo/LogoPreview.tsx index c6966e8..27f4123 100644 --- a/src/components/logo/LogoPreview.tsx +++ b/src/components/logo/LogoPreview.tsx @@ -1,6 +1,6 @@ -import * as React from 'react'; -import { LOGOS } from '$constants/logos'; -import { connect } from 'react-redux'; +import * as React from "react"; +import { LOGOS } from "$constants/logos"; +import { connect } from "react-redux"; import { IRootState } from "$redux/user/reducer"; interface Props extends IRootState {} @@ -10,8 +10,8 @@ const Component = ({ logo }: Props) => ( className="logo-preview" style={{ backgroundImage: logo - ? `url(${LOGOS[logo][1]})` - : 'none' + ? `url(${LOGOS && LOGOS[logo] && LOGOS[logo][1]})` + : "none" }} /> ); From 6ad3d9681a435385b395d1cb3030fcd1a670288f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 18:57:47 +0700 Subject: [PATCH 095/320] replaced some providers with cached one --- src/constants/providers.ts | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 498bdc7..5fffc8f 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -15,8 +15,8 @@ export interface ITileMaps { YMAP: IProvider, SAT: IProvider, ESAT: IProvider, - CACHE_OSM: IProvider, - CACHE_CARTO: IProvider, + // CACHE_OSM: IProvider, + // CACHE_CARTO: IProvider, } @@ -34,19 +34,10 @@ const TILEMAPS: ITileMaps = { }, DEFAULT: { name: 'OpenStreetMap', - url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - range: ['a', 'b', 'c'], - }, - CACHE_OSM: { - name: 'Cache Osm', + // url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', url: 'https://{s}.osm.tile.vault48.org/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, - CACHE_CARTO: { - name: 'Cache Carto', - url: 'https://{s}.carto.tile.vault48.org/{z}/{x}/{y}.png', - range: ['a', 'b', 'c'], - }, DARQ: { name: 'Darq', url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', @@ -54,7 +45,8 @@ const TILEMAPS: ITileMaps = { }, BLANK: { name: 'Blanque', - url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', + // url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', + url: 'https://{s}.carto.tile.vault48.org/light_all/{z}/{x}/{y}.png', range: [1, 2, 3, 4], }, HOT: { @@ -84,7 +76,7 @@ const TILEMAPS: ITileMaps = { } }; -const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT', 'CACHE_OSM', 'CACHE_CARTO']; +const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT']; export const DEFAULT_PROVIDER: keyof ITileMaps = ENABLED[0]; export const PROVIDERS: Partial = ENABLED.reduce((obj, provider) => ({ From 6880d155ed35e7aad239b7b5d176d7e7c509baef Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 19:32:00 +0700 Subject: [PATCH 096/320] removed providers with cached ones --- src/constants/providers.ts | 92 ++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 5fffc8f..08cfc42 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -4,33 +4,35 @@ export interface IProvider { range: Array, } -export interface ITileMaps { - WATERCOLOR: IProvider, - DGIS: IProvider, - DEFAULT: IProvider, - DARQ: IProvider, - BLANK: IProvider, - HOT: IProvider, - YSAT: IProvider, - YMAP: IProvider, - SAT: IProvider, - ESAT: IProvider, +export type ITileMaps = Record +// { + // WATERCOLOR: IProvider, + // DGIS: IProvider, + // DEFAULT: IProvider, + // DARQ: IProvider, + // BLANK: IProvider, + // HOT: IProvider, + // YSAT: IProvider, + // YMAP: IProvider, + // SAT: IProvider, + // ESAT: IProvider, // CACHE_OSM: IProvider, // CACHE_CARTO: IProvider, -} +// } // Стили карт const TILEMAPS: ITileMaps = { - WATERCOLOR: { - name: 'Watercolor', - url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg', - range: [1, 2, 3, 4], - }, + // WATERCOLOR: { + // name: 'Watercolor', + // url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg', + // range: [1, 2, 3, 4], + // }, DGIS: { name: '2gis', - url: 'https://tile1.maps.2gis.com/tiles?x={x}&y={y}&z={z}&v=1', - range: [1, 2, 3], + // url: 'https://tile1.maps.2gis.com/tiles?x={x}&y={y}&z={z}&v=1', + url: 'https://{s}.dgis.tile.vault48.org/tiles?x={x}&y={y}&z={z}&v=1', + range: ['a','b','c'], }, DEFAULT: { name: 'OpenStreetMap', @@ -38,41 +40,45 @@ const TILEMAPS: ITileMaps = { url: 'https://{s}.osm.tile.vault48.org/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, - DARQ: { - name: 'Darq', - url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', - range: [1, 2, 3, 4], - }, + // DARQ: { + // name: 'Darq', + // url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', + // range: [1, 2, 3, 4], + // }, BLANK: { name: 'Blanque', // url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', url: 'https://{s}.carto.tile.vault48.org/light_all/{z}/{x}/{y}.png', - range: [1, 2, 3, 4], + // range: [1, 2, 3, 4], + range: ['a','b','c'], }, HOT: { name: 'Hot', - url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', + // url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', + url: 'https://{s}.hot.tile.vault48.org/hot/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, - SAT: { - name: 'Google Sattelite', - url: 'https://mt{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}', - range: [0, 1, 2, 3], - }, - YMAP: { - name: 'Yandex', - url: 'https://vec0{s}.maps.yandex.net/tiles?l=map&v=17.04.16-0&x={x}&y={y}&z={z}&scale=1&lang=ru_RU', - range: [1, 2, 3, 4], - }, - YSAT: { - name: 'YandexSat', - url: 'https://sat0{s}.maps.yandex.net/tiles?l=sat&v=3.330.0&x={x}&y={y}&z={z}&lang=ru_RU', - range: [1, 2, 3, 4], - }, + // SAT: { + // name: 'Google Sattelite', + // url: 'https://mt{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}', + // range: [0, 1, 2, 3], + // }, + // YMAP: { + // name: 'Yandex', + // url: 'https://vec0{s}.maps.yandex.net/tiles?l=map&v=17.04.16-0&x={x}&y={y}&z={z}&scale=1&lang=ru_RU', + // range: [1, 2, 3, 4], + // }, + // YSAT: { + // name: 'YandexSat', + // url: 'https://sat0{s}.maps.yandex.net/tiles?l=sat&v=3.330.0&x={x}&y={y}&z={z}&lang=ru_RU', + // range: [1, 2, 3, 4], + // }, ESAT: { name: 'Sattelite', - url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', - range: [1,2,3,4], + // url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + url: 'https://{s}.esat.tile.vault48.org/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + // range: [1,2,3,4], + range: ['a','b','c'], } }; From ef92e4f38c63e81b17dc3d55105643b1bb8c562d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 19:34:26 +0700 Subject: [PATCH 097/320] fixed errors --- src/constants/providers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 08cfc42..4faade2 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -96,5 +96,5 @@ export const replaceProviderUrl = (provider, { x, y, zoom }: { x: number, y: num ? range[Math.round((Math.random() * (range.length - 1)))] : 1; - return url.replace('{x}', x).replace('{y}', y).replace('{z}', zoom).replace('{s}', String(random)); + return url.replace('{x}', String(x)).replace('{y}', String(y)).replace('{z}', String(zoom)).replace('{s}', String(random)); }; From 01a8a441148da50892c6340049f8c4aa3599c4cf Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 19:49:13 +0700 Subject: [PATCH 098/320] removed non-working hosts from cache --- src/constants/providers.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 4faade2..c9e6c7b 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -30,8 +30,8 @@ const TILEMAPS: ITileMaps = { // }, DGIS: { name: '2gis', - // url: 'https://tile1.maps.2gis.com/tiles?x={x}&y={y}&z={z}&v=1', - url: 'https://{s}.dgis.tile.vault48.org/tiles?x={x}&y={y}&z={z}&v=1', + url: 'https://tile1.maps.2gis.com/tiles?x={x}&y={y}&z={z}&v=1', + // url: 'https://{s}.dgis.tile.vault48.org/tiles?x={x}&y={y}&z={z}&v=1', range: ['a','b','c'], }, DEFAULT: { @@ -75,10 +75,10 @@ const TILEMAPS: ITileMaps = { // }, ESAT: { name: 'Sattelite', - // url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', - url: 'https://{s}.esat.tile.vault48.org/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', - // range: [1,2,3,4], - range: ['a','b','c'], + url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + // url: 'https://{s}.esat.tile.vault48.org/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', + range: [1,2,3,4], + // range: ['a','b','c'], } }; From d8705e3fb29f81358ee4548eaa6198aa5ff4c0d4 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 23:00:51 +0700 Subject: [PATCH 099/320] cleanup --- src/modules/InteractivePoly.ts | 2 -- src/modules/Poly.ts | 1 - 2 files changed, 3 deletions(-) diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index e477229..cfbef0a 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -33,8 +33,6 @@ export class Component extends Polyline { this.constraintsStyle = { ...this.constraintsStyle, ...options.constraintsStyle }; this.maxMarkers = options.maxMarkers || this.maxMarkers; - // this.kmMarksEnabled = options.kmMarksEnabled || this.kmMarksEnabled; - // this.kmMarksStep = options.kmMarksStep || this.kmMarksStep; this.constrLine = new Polyline([], this.constraintsStyle); diff --git a/src/modules/Poly.ts b/src/modules/Poly.ts index df639ff..ada6e1c 100644 --- a/src/modules/Poly.ts +++ b/src/modules/Poly.ts @@ -1,6 +1,5 @@ import { Map, LatLng } from 'leaflet'; import { simplify } from '$utils/simplify'; -import { CLIENT } from '$config/frontend'; import { editor, Editor } from "$modules/Editor"; import { ILatLng } from "$modules/Stickers"; import { InteractivePoly } from "$modules/InteractivePoly"; From 570efa661d50bd40ec377fbe256624a6ec905774 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Dec 2019 23:42:15 +0700 Subject: [PATCH 100/320] changed readme --- src/components/dialogs/AppInfoDialog.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/dialogs/AppInfoDialog.tsx b/src/components/dialogs/AppInfoDialog.tsx index f22bcdb..1dd6d98 100644 --- a/src/components/dialogs/AppInfoDialog.tsx +++ b/src/components/dialogs/AppInfoDialog.tsx @@ -19,7 +19,8 @@ export const AppInfoDialog = () => (
      From f814fe6c42fe24542673471df067b2ae0b70e30c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 11:01:47 +0700 Subject: [PATCH 101/320] fixed undetected console log --- src/redux/user/sagas.ts | 7 +++++-- src/utils/history.ts | 1 - tsconfig.json | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index ee79778..d6bf860 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -1,4 +1,4 @@ -import { REHYDRATE } from "redux-persist"; +import { REHYDRATE, RehydrateAction } from "redux-persist"; import { delay, SagaIterator } from "redux-saga"; import { takeLatest, @@ -253,7 +253,9 @@ function* mapInitSaga() { return true; } -function* authCheckSaga() { +function* authCheckSaga({ key }: RehydrateAction) { + if (key !== 'user') return; + pushLoaderState(70); const { id, token } = yield select(getUser); @@ -291,6 +293,7 @@ function* authCheckSaga() { return yield call(mapInitSaga); } else if (!ready) { pushNetworkInitError(); + return; } } diff --git a/src/utils/history.ts b/src/utils/history.ts index 1db47a8..a1ce63f 100644 --- a/src/utils/history.ts +++ b/src/utils/history.ts @@ -40,7 +40,6 @@ export const pushLoaderState = (state: number) => { }; export const countDownToRefresh = (left: number = API_RETRY_INTERVAL): void => { - console.log('countdown'); if (left <= 0) return document.location.reload(); document.getElementById('loader-bar').style.width = `${(left / API_RETRY_INTERVAL) * 100}%`; diff --git a/tsconfig.json b/tsconfig.json index 2e5ace5..4344f6f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,7 +26,7 @@ } }, "include": [ - "./src/**/*", + "./src/index.tsx", "./backend/**/*", "./custom.d.ts" ] From 813fded92734788811979d6b36621d9706aba1f2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 11:05:04 +0700 Subject: [PATCH 102/320] fixed reducer placement for user --- src/components/dialogs/LogoDialog.tsx | 2 +- src/components/dialogs/MapListDialog.tsx | 2 +- src/components/dialogs/ProviderDialog.tsx | 2 +- src/components/dialogs/TitleDialog.tsx | 2 +- src/components/logo/LogoPreview.tsx | 2 +- src/components/panels/DistanceBar.tsx | 2 +- src/components/panels/EditorDialog.tsx | 2 +- src/components/panels/EditorPanel.tsx | 2 +- src/components/panels/TopRightPanel.tsx | 2 +- src/components/panels/UserPanel.tsx | 2 +- src/components/renderer/Renderer.tsx | 2 +- src/modules/Editor.ts | 2 +- src/modules/Sticker.tsx | 2 +- src/redux/map/index.ts | 0 src/redux/store.ts | 2 +- src/redux/user/actions.ts | 2 +- src/redux/user/{reducer.ts => index.ts} | 0 src/redux/user/sagas.ts | 2 +- src/utils/api.ts | 2 +- src/utils/renderer.ts | 2 +- 20 files changed, 18 insertions(+), 18 deletions(-) create mode 100644 src/redux/map/index.ts rename src/redux/user/{reducer.ts => index.ts} (100%) diff --git a/src/components/dialogs/LogoDialog.tsx b/src/components/dialogs/LogoDialog.tsx index 33961a5..2924f07 100644 --- a/src/components/dialogs/LogoDialog.tsx +++ b/src/components/dialogs/LogoDialog.tsx @@ -3,7 +3,7 @@ import { LOGOS } from '$constants/logos'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; import { setLogo as setLogoAction } from "$redux/user/actions"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; interface Props extends IRootState { setLogo: typeof setLogoAction, diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index 8e52106..fb6d94b 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -19,7 +19,7 @@ import * as Range from 'rc-slider/lib/Range'; import { TABS, TABS_TITLES } from '$constants/dialogs'; import { Icon } from '$components/panels/Icon'; import { pushPath } from '$utils/history'; -import { IRootState, IRouteListItem } from '$redux/user/reducer'; +import { IRootState, IRouteListItem } from '$redux/user'; import { ROLES } from "$constants/auth"; export interface IMapListDialogProps extends IRootState { diff --git a/src/components/dialogs/ProviderDialog.tsx b/src/components/dialogs/ProviderDialog.tsx index 61da606..79b1197 100644 --- a/src/components/dialogs/ProviderDialog.tsx +++ b/src/components/dialogs/ProviderDialog.tsx @@ -3,7 +3,7 @@ import { PROVIDERS, replaceProviderUrl } from '$constants/providers'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; import { changeProvider as changeProviderAction } from "$redux/user/actions"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; interface Props extends IRootState { changeProvider: typeof changeProviderAction, diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index 9d40364..0f74e63 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -5,7 +5,7 @@ import { connect } from 'react-redux'; import classnames from 'classnames'; import { getStyle } from "$utils/dom"; import { nearestInt } from "$utils/geom"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { parseDesc } from "$utils/format"; interface ITitleDialogProps { diff --git a/src/components/logo/LogoPreview.tsx b/src/components/logo/LogoPreview.tsx index 27f4123..923234a 100644 --- a/src/components/logo/LogoPreview.tsx +++ b/src/components/logo/LogoPreview.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { LOGOS } from "$constants/logos"; import { connect } from "react-redux"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; interface Props extends IRootState {} diff --git a/src/components/panels/DistanceBar.tsx b/src/components/panels/DistanceBar.tsx index 9857f00..3360226 100644 --- a/src/components/panels/DistanceBar.tsx +++ b/src/components/panels/DistanceBar.tsx @@ -7,7 +7,7 @@ import { connect } from 'react-redux'; import * as Slider from 'rc-slider/lib/Slider'; import { bindActionCreators } from 'redux'; import { setSpeed } from '$redux/user/actions'; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { Tooltip } from "$components/panels/Tooltip"; import { isMobile } from "$utils/window"; diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index d4b2b45..af07059 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -28,7 +28,7 @@ import { } from '$redux/user/actions'; import { ProviderDialog } from '$components/dialogs/ProviderDialog'; import { ShotPrefetchDialog } from '$components/dialogs/ShotPrefetchDialog'; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; interface Props extends IRootState { width: number, diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 5c3cb50..e310053 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -7,7 +7,7 @@ import { EditorDialog } from '$components/panels/EditorDialog'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { setMode, startEditing, stopEditing, setLogo, takeAShot, keyPressed } from '$redux/user/actions'; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { Tooltip } from "$components/panels/Tooltip"; interface Props extends IRootState { diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index f4f65d4..9b70fe8 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -6,7 +6,7 @@ import { LOGOS } from '$constants/logos'; import { setMode } from '$redux/user/actions'; import { connect } from 'react-redux'; import { MODES } from '$constants/modes'; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { Tooltip } from "$components/panels/Tooltip"; diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index e094fd1..4d497b7 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -21,7 +21,7 @@ import { Icon } from "$components/panels/Icon"; import classnames from "classnames"; import { CLIENT } from "$config/frontend"; import { DIALOGS, TABS } from "$constants/dialogs"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { Tooltip } from "$components/panels/Tooltip"; import { TitleDialog } from "$components/dialogs/TitleDialog"; diff --git a/src/components/renderer/Renderer.tsx b/src/components/renderer/Renderer.tsx index 463593c..aa2d69d 100644 --- a/src/components/renderer/Renderer.tsx +++ b/src/components/renderer/Renderer.tsx @@ -7,7 +7,7 @@ import * as Croppr from 'croppr'; import 'croppr/dist/croppr.css'; import { LOGOS } from '$constants/logos'; import { RendererPanel } from '$components/panels/RendererPanel'; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; type Props = { data: IRootState['renderer']['data'], diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index b3c0e6a..50b9db3 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -24,7 +24,7 @@ import { } from '$redux/user/actions'; import { DEFAULT_PROVIDER, IProvider, PROVIDERS } from '$constants/providers'; import { STICKERS } from '$constants/stickers'; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { DEFAULT_USER, IUser } from "$constants/auth"; interface IEditor { diff --git a/src/modules/Sticker.tsx b/src/modules/Sticker.tsx index 4f0eec8..ea2bb2b 100644 --- a/src/modules/Sticker.tsx +++ b/src/modules/Sticker.tsx @@ -8,7 +8,7 @@ import { StickerDesc } from '$components/StickerDesc'; import classnames from 'classnames'; import { getLabelDirection } from '$utils/geom'; import { ILatLng } from "$modules/Stickers"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { Editor, editor } from "$modules/Editor"; const getX = e => ( diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/redux/store.ts b/src/redux/store.ts index 1a5d11a..4687051 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -4,7 +4,7 @@ import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import createSagaMiddleware from 'redux-saga'; -import { userReducer, IRootReducer } from '$redux/user/reducer'; +import { userReducer, IRootReducer } from '$redux/user'; import { userSaga } from '$redux/user/sagas'; import { createBrowserHistory } from 'history'; import { locationChanged } from '$redux/user/actions'; diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 5f43ab1..b06db61 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,6 +1,6 @@ import { ACTIONS } from '$redux/user/constants'; import { IUser } from "$constants/auth"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; export const setUser = (user: IUser) => ({ type: ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: ACTIONS.USER_LOGOUT }); diff --git a/src/redux/user/reducer.ts b/src/redux/user/index.ts similarity index 100% rename from src/redux/user/reducer.ts rename to src/redux/user/index.ts diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index d6bf860..43ee59d 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -85,7 +85,7 @@ import { DEFAULT_PROVIDER } from "$constants/providers"; import { DIALOGS, TABS } from "$constants/dialogs"; import * as ActionCreators from "$redux/user/actions"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { downloadGPXTrack, getGPXString } from "$utils/gpx"; import { Unwrap } from "$utils/middleware"; import { IState } from "$redux/store"; diff --git a/src/utils/api.ts b/src/utils/api.ts index 7c08f02..9743aa0 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -1,6 +1,6 @@ import axios, { AxiosPromise } from "axios/index"; import { API } from "$constants/api"; -import { IRootState, IRouteListItem, IRoute } from "$redux/user/reducer"; +import { IRootState, IRouteListItem, IRoute } from "$redux/user"; import { IUser } from "$constants/auth"; import { ILatLng } from "$modules/Stickers"; import { IStickerDump } from "$modules/Sticker"; diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 5cea0a7..58f7158 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -5,7 +5,7 @@ import { replaceProviderUrl } from '$constants/providers'; import { STICKERS } from '$constants/stickers'; import { ILatLng } from "$modules/Stickers"; import { IStickerDump } from "$modules/Sticker"; -import { IRootState } from "$redux/user/reducer"; +import { IRootState } from "$redux/user"; import { angleBetweenPoints, angleBetweenPointsRad, findDistancePx, middleCoordPx } from "$utils/geom"; import { Point } from "leaflet"; From 5664291c92d67d9e78e62be78caa5c343edb7b96 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 11:10:28 +0700 Subject: [PATCH 103/320] map reducer and user reducer refactor --- src/redux/map/handlers.ts | 3 + src/redux/map/index.ts | 11 ++ src/redux/user/actions.ts | 122 +++++++------- src/redux/user/constants.ts | 2 +- src/redux/user/handlers.ts | 297 ++++++++++++++++++++++++++++++++++ src/redux/user/index.ts | 307 +----------------------------------- src/redux/user/sagas.ts | 70 ++++---- 7 files changed, 411 insertions(+), 401 deletions(-) create mode 100644 src/redux/map/handlers.ts create mode 100644 src/redux/user/handlers.ts diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts new file mode 100644 index 0000000..a5d12a5 --- /dev/null +++ b/src/redux/map/handlers.ts @@ -0,0 +1,3 @@ +export const MAP_HANDLERS = { + +} \ No newline at end of file diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index e69de29..ce8f294 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -0,0 +1,11 @@ +import { createReducer } from 'reduxsauce'; +import { MAP_HANDLERS } from './handlers'; + +export interface IMapReducer { + +} + +export const MAP_INITIAL_STATE = { + +} +export const map = createReducer(MAP_INITIAL_STATE, MAP_HANDLERS) \ No newline at end of file diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index b06db61..3c48f15 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,35 +1,35 @@ -import { ACTIONS } from '$redux/user/constants'; +import { USER_ACTIONS } from '$redux/user/constants'; import { IUser } from "$constants/auth"; import { IRootState } from "$redux/user"; -export const setUser = (user: IUser) => ({ type: ACTIONS.SET_USER, user }); -export const userLogout = () => ({ type: ACTIONS.USER_LOGOUT }); +export const setUser = (user: IUser) => ({ type: USER_ACTIONS.SET_USER, user }); +export const userLogout = () => ({ type: USER_ACTIONS.USER_LOGOUT }); -export const setEditing = (editing: IRootState['editing']) => ({ type: ACTIONS.SET_EDITING, editing }); -export const setMode = (mode: IRootState['mode']) => ({ type: ACTIONS.SET_MODE, mode }); -export const setDistance = (distance: IRootState['distance']) => ({ type: ACTIONS.SET_DISTANCE, distance }); -export const setChanged = (changed: IRootState['changed']) => ({ type: ACTIONS.SET_CHANGED, changed }); -export const setRouterPoints = routerPoints => ({ type: ACTIONS.SET_ROUTER_POINTS, routerPoints }); -export const setActiveSticker = activeSticker => ({ type: ACTIONS.SET_ACTIVE_STICKER, activeSticker }); -export const setLogo = logo => ({ type: ACTIONS.SET_LOGO, logo }); -export const setTitle = title => ({ type: ACTIONS.SET_TITLE, title }); -export const setDescription = description => ({ type: ACTIONS.SET_DESCRIPTION, description }); -export const setAddress = address => ({ type: ACTIONS.SET_ADDRESS, address }); -export const setAddressOrigin = address_origin => ({ type: ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); -export const setPublic = is_public => ({ type: ACTIONS.SET_PUBLIC, is_public }); -export const setStarred = is_published => ({ type: ACTIONS.SET_STARRED, is_published }); -export const setSpeed = speed => ({ type: ACTIONS.SET_SPEED, speed }); +export const setEditing = (editing: IRootState['editing']) => ({ type: USER_ACTIONS.SET_EDITING, editing }); +export const setMode = (mode: IRootState['mode']) => ({ type: USER_ACTIONS.SET_MODE, mode }); +export const setDistance = (distance: IRootState['distance']) => ({ type: USER_ACTIONS.SET_DISTANCE, distance }); +export const setChanged = (changed: IRootState['changed']) => ({ type: USER_ACTIONS.SET_CHANGED, changed }); +export const setRouterPoints = routerPoints => ({ type: USER_ACTIONS.SET_ROUTER_POINTS, routerPoints }); +export const setActiveSticker = activeSticker => ({ type: USER_ACTIONS.SET_ACTIVE_STICKER, activeSticker }); +export const setLogo = logo => ({ type: USER_ACTIONS.SET_LOGO, logo }); +export const setTitle = title => ({ type: USER_ACTIONS.SET_TITLE, title }); +export const setDescription = description => ({ type: USER_ACTIONS.SET_DESCRIPTION, description }); +export const setAddress = address => ({ type: USER_ACTIONS.SET_ADDRESS, address }); +export const setAddressOrigin = address_origin => ({ type: USER_ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); +export const setPublic = is_public => ({ type: USER_ACTIONS.SET_PUBLIC, is_public }); +export const setStarred = is_published => ({ type: USER_ACTIONS.SET_STARRED, is_published }); +export const setSpeed = speed => ({ type: USER_ACTIONS.SET_SPEED, speed }); -export const startEditing = () => ({ type: ACTIONS.START_EDITING }); -export const stopEditing = () => ({ type: ACTIONS.STOP_EDITING }); +export const startEditing = () => ({ type: USER_ACTIONS.START_EDITING }); +export const stopEditing = () => ({ type: USER_ACTIONS.STOP_EDITING }); -export const routerCancel = () => ({ type: ACTIONS.ROUTER_CANCEL }); -export const routerSubmit = () => ({ type: ACTIONS.ROUTER_SUBMIT }); +export const routerCancel = () => ({ type: USER_ACTIONS.ROUTER_CANCEL }); +export const routerSubmit = () => ({ type: USER_ACTIONS.ROUTER_SUBMIT }); -export const clearPoly = () => ({ type: ACTIONS.CLEAR_POLY }); -export const clearStickers = () => ({ type: ACTIONS.CLEAR_STICKERS }); -export const clearAll = () => ({ type: ACTIONS.CLEAR_ALL }); -export const clearCancel = () => ({ type: ACTIONS.CLEAR_CANCEL }); +export const clearPoly = () => ({ type: USER_ACTIONS.CLEAR_POLY }); +export const clearStickers = () => ({ type: USER_ACTIONS.CLEAR_STICKERS }); +export const clearAll = () => ({ type: USER_ACTIONS.CLEAR_ALL }); +export const clearCancel = () => ({ type: USER_ACTIONS.CLEAR_CANCEL }); export const sendSaveRequest = (payload: { title: IRootState['title'], @@ -38,13 +38,13 @@ export const sendSaveRequest = (payload: { description: IRootState['description'], force: boolean, }) => ({ - type: ACTIONS.SEND_SAVE_REQUEST, + type: USER_ACTIONS.SEND_SAVE_REQUEST, ...payload, }); -export const resetSaveDialog = () => ({ type: ACTIONS.RESET_SAVE_DIALOG }); +export const resetSaveDialog = () => ({ type: USER_ACTIONS.RESET_SAVE_DIALOG }); -export const setSaveLoading = (save_loading: IRootState['save_loading']) => ({ type: ACTIONS.SET_SAVE_LOADING, save_loading }); +export const setSaveLoading = (save_loading: IRootState['save_loading']) => ({ type: USER_ACTIONS.SET_SAVE_LOADING, save_loading }); export const setSaveSuccess = (payload: { address: IRootState['address'], @@ -53,50 +53,50 @@ export const setSaveSuccess = (payload: { description: IRootState['description'], save_error: string, -}) => ({ type: ACTIONS.SET_SAVE_SUCCESS, ...payload }); +}) => ({ type: USER_ACTIONS.SET_SAVE_SUCCESS, ...payload }); -export const setSaveError = (save_error: IRootState['save_error']) => ({ type: ACTIONS.SET_SAVE_ERROR, save_error }); -export const setSaveOverwrite = () => ({ type: ACTIONS.SET_SAVE_OVERWRITE }); +export const setSaveError = (save_error: IRootState['save_error']) => ({ type: USER_ACTIONS.SET_SAVE_ERROR, save_error }); +export const setSaveOverwrite = () => ({ type: USER_ACTIONS.SET_SAVE_OVERWRITE }); -export const hideRenderer = () => ({ type: ACTIONS.HIDE_RENDERER }); -export const setRenderer = payload => ({ type: ACTIONS.SET_RENDERER, payload }); -export const takeAShot = () => ({ type: ACTIONS.TAKE_A_SHOT }); -export const cropAShot = payload => ({ type: ACTIONS.CROP_A_SHOT, ...payload }); +export const hideRenderer = () => ({ type: USER_ACTIONS.HIDE_RENDERER }); +export const setRenderer = payload => ({ type: USER_ACTIONS.SET_RENDERER, payload }); +export const takeAShot = () => ({ type: USER_ACTIONS.TAKE_A_SHOT }); +export const cropAShot = payload => ({ type: USER_ACTIONS.CROP_A_SHOT, ...payload }); -export const setProvider = provider => ({ type: ACTIONS.SET_PROVIDER, provider }); -export const changeProvider = provider => ({ type: ACTIONS.CHANGE_PROVIDER, provider }); +export const setProvider = provider => ({ type: USER_ACTIONS.SET_PROVIDER, provider }); +export const changeProvider = provider => ({ type: USER_ACTIONS.CHANGE_PROVIDER, provider }); -export const setDialog = dialog => ({ type: ACTIONS.SET_DIALOG, dialog }); -export const setDialogActive = dialog_active => ({ type: ACTIONS.SET_DIALOG_ACTIVE, dialog_active }); -export const openMapDialog = tab => ({ type: ACTIONS.OPEN_MAP_DIALOG, tab }); +export const setDialog = dialog => ({ type: USER_ACTIONS.SET_DIALOG, dialog }); +export const setDialogActive = dialog_active => ({ type: USER_ACTIONS.SET_DIALOG_ACTIVE, dialog_active }); +export const openMapDialog = tab => ({ type: USER_ACTIONS.OPEN_MAP_DIALOG, tab }); -export const locationChanged = location => ({ type: ACTIONS.LOCATION_CHANGED, location }); -export const setReady = ready => ({ type: ACTIONS.SET_READY, ready }); +export const locationChanged = location => ({ type: USER_ACTIONS.LOCATION_CHANGED, location }); +export const setReady = ready => ({ type: USER_ACTIONS.SET_READY, ready }); -export const gotVkUser = user => ({ type: ACTIONS.GOT_VK_USER, user }); -export const keyPressed = ({ key, target: { tagName } }) => ({ type: ACTIONS.KEY_PRESSED, key, target: tagName }); +export const gotVkUser = user => ({ type: USER_ACTIONS.GOT_VK_USER, user }); +export const keyPressed = ({ key, target: { tagName } }) => ({ type: USER_ACTIONS.KEY_PRESSED, key, target: tagName }); -export const searchSetTitle = title => ({ type: ACTIONS.SEARCH_SET_TITLE, title }); -export const searchSetDistance = distance => ({ type: ACTIONS.SEARCH_SET_DISTANCE, distance }); -export const searchChangeDistance = distance => ({ type: ACTIONS.SEARCH_CHANGE_DISTANCE, distance }); -export const searchSetTab = tab => ({ type: ACTIONS.SEARCH_SET_TAB, tab }); -export const searchSetLoading = loading => ({ type: ACTIONS.SEARCH_SET_LOADING, loading }); +export const searchSetTitle = title => ({ type: USER_ACTIONS.SEARCH_SET_TITLE, title }); +export const searchSetDistance = distance => ({ type: USER_ACTIONS.SEARCH_SET_DISTANCE, distance }); +export const searchChangeDistance = distance => ({ type: USER_ACTIONS.SEARCH_CHANGE_DISTANCE, distance }); +export const searchSetTab = tab => ({ type: USER_ACTIONS.SEARCH_SET_TAB, tab }); +export const searchSetLoading = loading => ({ type: USER_ACTIONS.SEARCH_SET_LOADING, loading }); -export const searchPutRoutes = payload => ({ type: ACTIONS.SEARCH_PUT_ROUTES, ...payload }); +export const searchPutRoutes = payload => ({ type: USER_ACTIONS.SEARCH_PUT_ROUTES, ...payload }); -export const setMarkersShown = markers_shown => ({ type: ACTIONS.SET_MARKERS_SHOWN, markers_shown }); -export const getGPXTrack = () => ({ type: ACTIONS.GET_GPX_TRACK }); -export const setIsEmpty = is_empty => ({ type: ACTIONS.SET_IS_EMPTY, is_empty }); +export const setMarkersShown = markers_shown => ({ type: USER_ACTIONS.SET_MARKERS_SHOWN, markers_shown }); +export const getGPXTrack = () => ({ type: USER_ACTIONS.GET_GPX_TRACK }); +export const setIsEmpty = is_empty => ({ type: USER_ACTIONS.SET_IS_EMPTY, is_empty }); -export const mapsLoadMore = () => ({ type: ACTIONS.MAPS_LOAD_MORE }); -export const mapsSetShift = (shift: number) => ({ type: ACTIONS.MAPS_SET_SHIFT, shift }); +export const mapsLoadMore = () => ({ type: USER_ACTIONS.MAPS_LOAD_MORE }); +export const mapsSetShift = (shift: number) => ({ type: USER_ACTIONS.MAPS_SET_SHIFT, shift }); -export const setFeature = (features: { [x: string]: boolean }) => ({ type: ACTIONS.SET_FEATURE, features }); -export const setIsRouting = (is_routing: boolean) => ({ type: ACTIONS.SET_IS_ROUTING, is_routing }); +export const setFeature = (features: { [x: string]: boolean }) => ({ type: USER_ACTIONS.SET_FEATURE, features }); +export const setIsRouting = (is_routing: boolean) => ({ type: USER_ACTIONS.SET_IS_ROUTING, is_routing }); -export const dropRoute = (address: string) => ({ type: ACTIONS.DROP_ROUTE, address }); +export const dropRoute = (address: string) => ({ type: USER_ACTIONS.DROP_ROUTE, address }); export const modifyRoute = (address: string, { title, is_public }: { title: string, is_public: boolean }) => ({ - type: ACTIONS.MODIFY_ROUTE, address, title, is_public + type: USER_ACTIONS.MODIFY_ROUTE, address, title, is_public }); -export const toggleRouteStarred = (address: string) => ({ type: ACTIONS.TOGGLE_ROUTE_STARRED, address }); -export const setRouteStarred = (address: string, is_published: boolean) => ({ type: ACTIONS.SET_ROUTE_STARRED, address, is_published }); +export const toggleRouteStarred = (address: string) => ({ type: USER_ACTIONS.TOGGLE_ROUTE_STARRED, address }); +export const setRouteStarred = (address: string, is_published: boolean) => ({ type: USER_ACTIONS.SET_ROUTE_STARRED, address, is_published }); diff --git a/src/redux/user/constants.ts b/src/redux/user/constants.ts index 3dc2869..34dea81 100644 --- a/src/redux/user/constants.ts +++ b/src/redux/user/constants.ts @@ -2,7 +2,7 @@ export interface IActions { [x: string]: string, } -export const ACTIONS: IActions = { +export const USER_ACTIONS: IActions = { SET_USER: 'SET_USER', USER_LOGOUT: 'USER_LOGOUT', diff --git a/src/redux/user/handlers.ts b/src/redux/user/handlers.ts new file mode 100644 index 0000000..da2da64 --- /dev/null +++ b/src/redux/user/handlers.ts @@ -0,0 +1,297 @@ +import { IRootState } from "."; +import * as ActionCreators from './actions' +import { TIPS } from "$constants/tips"; +import { TABS } from "$constants/dialogs"; +import { USER_ACTIONS } from "./constants"; + +type UnsafeReturnType = T extends (...args: any[]) => infer R ? R : any; + +export interface ActionHandler { + (state: IRootState, payload: UnsafeReturnType): IRootState; +} + +const getEstimated = (distance: number, speed: number = 15): number => { + const time = (distance && (distance / speed)) || 0; + return (time && parseFloat(time.toFixed(1))); +}; + +const setUser: ActionHandler = (state, { user }) => ({ + ...state, + user: { + ...state.user, + ...user, + }, +}); + +const setEditing: ActionHandler = (state, { editing }) => ({ + ...state, editing +}); + +const setChanged: ActionHandler = (state, { changed }) => ({ + ...state, + changed +}); + +const setMode: ActionHandler = (state, { mode }) => ({ + ...state, + mode +}); + +const setDistance: ActionHandler = (state, { distance }) => ({ + ...state, + distance, + estimated: getEstimated(distance, state.speed), +}); + +const setRouterPoints: ActionHandler = (state, { routerPoints }) => ({ + ...state, + routerPoints, +}); + +const setActiveSticker: ActionHandler = (state, { activeSticker }) => ({ + ...state, + activeSticker: activeSticker || { set: null, sticker: null } +}); + +const setLogo: ActionHandler = (state, { logo }) => ({ + ...state, + logo +}); + +const setTitle: ActionHandler = (state, { title }) => ({ + ...state, + title +}); + +const setDescription: ActionHandler = (state, { description }) => ({ + ...state, + description +}); + +const setAddress: ActionHandler = (state, { address }) => ({ + ...state, + address +}); + +const setAddressOrigin: ActionHandler = (state, { address_origin }) => ({ + ...state, + address_origin +}); + +const sendSaveRequest: ActionHandler = (state) => ({ + ...state, + save_processing: true, +}); + +const setSaveError: ActionHandler = (state, { save_error }) => ({ + ...state, save_error, save_finished: false, save_processing: false +}); + +const setSaveLoading: ActionHandler = (state, { save_loading }) => ({ + ...state, save_loading +}); + +const setSaveOverwrite: ActionHandler = (state) => ({ + ...state, + save_overwriting: true, + save_finished: false, + save_processing: false, + save_error: TIPS.SAVE_OVERWRITE, +}); + +const setSaveSuccess: ActionHandler = (state, { save_error }) => ({ + ...state, + save_overwriting: false, + save_finished: true, + save_processing: false, + save_error, +}); + +const resetSaveDialog: ActionHandler = (state) => ({ + ...state, save_overwriting: false, save_finished: false, save_processing: false, save_error: '', +}); + +const hideRenderer: ActionHandler = (state) => ({ + ...state, + renderer: { ...state.renderer, renderer_active: false } +}); + +const setRenderer: ActionHandler = (state, { payload }) => ({ + ...state, + renderer: { ...state.renderer, ...payload } +}); + +const setProvider: ActionHandler = (state, { provider }) => ({ ...state, provider }); + +const setDialog: ActionHandler = (state, { dialog }) => ({ + ...state, + dialog, +}); + +const setDialogActive: ActionHandler = (state, { dialog_active }) => ({ + ...state, + dialog_active: dialog_active || !state.dialog_active, +}); + +const setReady: ActionHandler = (state, { ready = true }) => ({ + ...state, + ready, +}); + +const searchSetTitle: ActionHandler = (state, { title = '' }) => ({ + ...state, + routes: { + ...state.routes, + filter: { + ...state.routes.filter, + title, + distance: [0, 10000], + } + } +}); + +const searchSetDistance: ActionHandler = (state, { distance = [0, 9999] }) => ({ + ...state, + routes: { + ...state.routes, + filter: { + ...state.routes.filter, + distance, + } + } +}); + +const searchSetTab: ActionHandler = (state, { tab = TABS[Object.keys(TABS)[0]] }) => ({ + ...state, + routes: { + ...state.routes, + filter: { + ...state.routes.filter, + tab: Object.values(TABS).indexOf(tab) >= 0 ? tab : TABS[Object.values(TABS)[0]], + } + } +}); + +const searchPutRoutes: ActionHandler = (state, { list = [], min, max, limit, step, shift }) => ({ + ...state, + routes: { + ...state.routes, + list, + limit, + step, + shift, + filter: { + ...state.routes.filter, + distance: (state.routes.filter.min === state.routes.filter.max) + ? [min, max] + : state.routes.filter.distance, + min, + max, + } + } +}); + +const searchSetLoading: ActionHandler = (state, { loading = false }) => ({ + ...state, + routes: { + ...state.routes, + loading, + } +}); + +const setPublic: ActionHandler = (state, { is_public = false }) => ({ ...state, is_public }); +const setStarred: ActionHandler = (state, { is_published = false }) => ({ ...state, is_published }); + +const setSpeed: ActionHandler = (state, { speed = 15 }) => ({ + ...state, + speed, + estimated: getEstimated(state.distance, speed), +}); + +const setMarkersShown: ActionHandler = (state, { markers_shown = true }) => ({ ...state, markers_shown }); +const setIsEmpty: ActionHandler = (state, { is_empty = true }) => ({ ...state, is_empty }); +const mapsSetShift: ActionHandler = (state, { shift = 0 }) => ({ + ...state, + routes: { + ...state.routes, + shift, + } +}); + +const setFeature: ActionHandler = (state, { features }) => ({ + ...state, + features: { + ...state.features, + ...features, + } +}); + +const setIsRouting: ActionHandler = (state, { is_routing }) => ({ + ...state, + is_routing, +}); + +const setRouteStarred: ActionHandler = (state, { address, is_published }) => ({ + ...state, + routes: { + ...state.routes, + list: ( + state.routes.list + .map(el => el.address === address ? { ...el, is_published } : el) + .filter(el => ( + (state.routes.filter.tab === TABS.STARRED && el.is_published) || + (state.routes.filter.tab === TABS.PENDING && !el.is_published) + )) + ) + } +}); + +export const USER_HANDLERS = ({ + [USER_ACTIONS.SET_USER]: setUser, + [USER_ACTIONS.SET_EDITING]: setEditing, + [USER_ACTIONS.SET_CHANGED]: setChanged, + [USER_ACTIONS.SET_MODE]: setMode, + [USER_ACTIONS.SET_DISTANCE]: setDistance, + [USER_ACTIONS.SET_ROUTER_POINTS]: setRouterPoints, + [USER_ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, + [USER_ACTIONS.SET_LOGO]: setLogo, + [USER_ACTIONS.SET_TITLE]: setTitle, + [USER_ACTIONS.SET_DESCRIPTION]: setDescription, + [USER_ACTIONS.SET_ADDRESS]: setAddress, + [USER_ACTIONS.SET_ADDRESS_ORIGIN]: setAddressOrigin, + + [USER_ACTIONS.SET_SAVE_ERROR]: setSaveError, + [USER_ACTIONS.SET_SAVE_LOADING]: setSaveLoading, + [USER_ACTIONS.SET_SAVE_OVERWRITE]: setSaveOverwrite, + [USER_ACTIONS.SET_SAVE_SUCCESS]: setSaveSuccess, + [USER_ACTIONS.SEND_SAVE_REQUEST]: sendSaveRequest, + [USER_ACTIONS.RESET_SAVE_DIALOG]: resetSaveDialog, + + [USER_ACTIONS.HIDE_RENDERER]: hideRenderer, + [USER_ACTIONS.SET_RENDERER]: setRenderer, + + [USER_ACTIONS.SET_PROVIDER]: setProvider, + + [USER_ACTIONS.SET_DIALOG]: setDialog, + [USER_ACTIONS.SET_DIALOG_ACTIVE]: setDialogActive, + [USER_ACTIONS.SET_READY]: setReady, + + [USER_ACTIONS.SEARCH_SET_TITLE]: searchSetTitle, + [USER_ACTIONS.SEARCH_SET_DISTANCE]: searchSetDistance, + [USER_ACTIONS.SEARCH_CHANGE_DISTANCE]: searchSetDistance, + [USER_ACTIONS.SEARCH_SET_TAB]: searchSetTab, + [USER_ACTIONS.SEARCH_PUT_ROUTES]: searchPutRoutes, + [USER_ACTIONS.SEARCH_SET_LOADING]: searchSetLoading, + [USER_ACTIONS.SET_PUBLIC]: setPublic, + [USER_ACTIONS.SET_STARRED]: setStarred, + [USER_ACTIONS.SET_SPEED]: setSpeed, + + [USER_ACTIONS.SET_MARKERS_SHOWN]: setMarkersShown, + [USER_ACTIONS.SET_IS_EMPTY]: setIsEmpty, + [USER_ACTIONS.MAPS_SET_SHIFT]: mapsSetShift, + + [USER_ACTIONS.SET_FEATURE]: setFeature, + [USER_ACTIONS.SET_IS_ROUTING]: setIsRouting, + + [USER_ACTIONS.SET_ROUTE_STARRED]: setRouteStarred, +}); \ No newline at end of file diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index ca57a7f..4cfae99 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -1,15 +1,13 @@ import { createReducer } from 'reduxsauce'; -import { ACTIONS } from '$redux/user/constants'; import { DEFAULT_USER, IUser } from '$constants/auth'; import { MODES } from '$constants/modes'; import { DEFAULT_LOGO, LOGOS } from '$constants/logos'; -import { TIPS } from '$constants/tips'; import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; import { DIALOGS, IDialogs, TABS } from '$constants/dialogs'; -import * as ActionCreators from '$redux/user/actions'; -import { IStickers, ISticker } from "$constants/stickers"; +import { IStickers } from "$constants/stickers"; import { IRoutePoint } from '$utils/gpx'; import { IStickerDump } from '$modules/Sticker'; +import { USER_HANDLERS } from './handlers'; export interface IRoute { version: number, @@ -100,305 +98,6 @@ export interface IRootReducer { } export type IRootState = Readonly; -type UnsafeReturnType = T extends (...args: any[]) => infer R ? R : any; - -export interface ActionHandler { - (state: IRootState, payload: UnsafeReturnType): IRootState; -} - -const getEstimated = (distance: number, speed: number = 15): number => { - const time = (distance && (distance / speed)) || 0; - return (time && parseFloat(time.toFixed(1))); -}; - -const setUser: ActionHandler = (state, { user }) => ({ - ...state, - user: { - ...state.user, - ...user, - }, -}); - -const setEditing: ActionHandler = (state, { editing }) => ({ - ...state, editing -}); - -const setChanged: ActionHandler = (state, { changed }) => ({ - ...state, - changed -}); - -const setMode: ActionHandler = (state, { mode }) => ({ - ...state, - mode -}); - -const setDistance: ActionHandler = (state, { distance }) => ({ - ...state, - distance, - estimated: getEstimated(distance, state.speed), -}); - -const setRouterPoints: ActionHandler = (state, { routerPoints }) => ({ - ...state, - routerPoints, -}); - -const setActiveSticker: ActionHandler = (state, { activeSticker }) => ({ - ...state, - activeSticker: activeSticker || { set: null, sticker: null } -}); - -const setLogo: ActionHandler = (state, { logo }) => ({ - ...state, - logo -}); - -const setTitle: ActionHandler = (state, { title }) => ({ - ...state, - title -}); - -const setDescription: ActionHandler = (state, { description }) => ({ - ...state, - description -}); - -const setAddress: ActionHandler = (state, { address }) => ({ - ...state, - address -}); - -const setAddressOrigin: ActionHandler = (state, { address_origin }) => ({ - ...state, - address_origin -}); - -const sendSaveRequest: ActionHandler = (state) => ({ - ...state, - save_processing: true, -}); - -const setSaveError: ActionHandler = (state, { save_error }) => ({ - ...state, save_error, save_finished: false, save_processing: false -}); - -const setSaveLoading: ActionHandler = (state, { save_loading }) => ({ - ...state, save_loading -}); - -const setSaveOverwrite: ActionHandler = (state) => ({ - ...state, - save_overwriting: true, - save_finished: false, - save_processing: false, - save_error: TIPS.SAVE_OVERWRITE, -}); - -const setSaveSuccess: ActionHandler = (state, { save_error }) => ({ - ...state, - save_overwriting: false, - save_finished: true, - save_processing: false, - save_error, -}); - -const resetSaveDialog: ActionHandler = (state) => ({ - ...state, save_overwriting: false, save_finished: false, save_processing: false, save_error: '', -}); -// -// const showRenderer: ActionHandler = (state) => ({ -// ...state, -// renderer: { -// ...state.renderer, -// renderer_active: true -// } -// }); - -const hideRenderer: ActionHandler = (state) => ({ - ...state, - renderer: { ...state.renderer, renderer_active: false } -}); - -const setRenderer: ActionHandler = (state, { payload }) => ({ - ...state, - renderer: { ...state.renderer, ...payload } -}); - -const setProvider: ActionHandler = (state, { provider }) => ({ ...state, provider }); - -const setDialog: ActionHandler = (state, { dialog }) => ({ - ...state, - dialog, -}); - -const setDialogActive: ActionHandler = (state, { dialog_active }) => ({ - ...state, - dialog_active: dialog_active || !state.dialog_active, -}); - -const setReady: ActionHandler = (state, { ready = true }) => ({ - ...state, - ready, -}); - -const searchSetTitle: ActionHandler = (state, { title = '' }) => ({ - ...state, - routes: { - ...state.routes, - filter: { - ...state.routes.filter, - title, - distance: [0, 10000], - } - } -}); - -const searchSetDistance: ActionHandler = (state, { distance = [0, 9999] }) => ({ - ...state, - routes: { - ...state.routes, - filter: { - ...state.routes.filter, - distance, - } - } -}); - -const searchSetTab: ActionHandler = (state, { tab = TABS[Object.keys(TABS)[0]] }) => ({ - ...state, - routes: { - ...state.routes, - filter: { - ...state.routes.filter, - tab: Object.values(TABS).indexOf(tab) >= 0 ? tab : TABS[Object.values(TABS)[0]], - } - } -}); - -const searchPutRoutes: ActionHandler = (state, { list = [], min, max, limit, step, shift }) => ({ - ...state, - routes: { - ...state.routes, - list, - limit, - step, - shift, - filter: { - ...state.routes.filter, - distance: (state.routes.filter.min === state.routes.filter.max) - ? [min, max] - : state.routes.filter.distance, - min, - max, - } - } -}); - -const searchSetLoading: ActionHandler = (state, { loading = false }) => ({ - ...state, - routes: { - ...state.routes, - loading, - } -}); - -const setPublic: ActionHandler = (state, { is_public = false }) => ({ ...state, is_public }); -const setStarred: ActionHandler = (state, { is_published = false }) => ({ ...state, is_published }); - -const setSpeed: ActionHandler = (state, { speed = 15 }) => ({ - ...state, - speed, - estimated: getEstimated(state.distance, speed), -}); - -const setMarkersShown: ActionHandler = (state, { markers_shown = true }) => ({ ...state, markers_shown }); -const setIsEmpty: ActionHandler = (state, { is_empty = true }) => ({ ...state, is_empty }); -const mapsSetShift: ActionHandler = (state, { shift = 0 }) => ({ - ...state, - routes: { - ...state.routes, - shift, - } -}); - -const setFeature: ActionHandler = (state, { features }) => ({ - ...state, - features: { - ...state.features, - ...features, - } -}); - -const setIsRouting: ActionHandler = (state, { is_routing }) => ({ - ...state, - is_routing, -}); - -const setRouteStarred: ActionHandler = (state, { address, is_published }) => ({ - ...state, - routes: { - ...state.routes, - list: ( - state.routes.list - .map(el => el.address === address ? { ...el, is_published } : el) - .filter(el => ( - (state.routes.filter.tab === TABS.STARRED && el.is_published) || - (state.routes.filter.tab === TABS.PENDING && !el.is_published) - )) - ) - } -}); - -const HANDLERS = ({ - [ACTIONS.SET_USER]: setUser, - [ACTIONS.SET_EDITING]: setEditing, - [ACTIONS.SET_CHANGED]: setChanged, - [ACTIONS.SET_MODE]: setMode, - [ACTIONS.SET_DISTANCE]: setDistance, - [ACTIONS.SET_ROUTER_POINTS]: setRouterPoints, - [ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, - [ACTIONS.SET_LOGO]: setLogo, - [ACTIONS.SET_TITLE]: setTitle, - [ACTIONS.SET_DESCRIPTION]: setDescription, - [ACTIONS.SET_ADDRESS]: setAddress, - [ACTIONS.SET_ADDRESS_ORIGIN]: setAddressOrigin, - - [ACTIONS.SET_SAVE_ERROR]: setSaveError, - [ACTIONS.SET_SAVE_LOADING]: setSaveLoading, - [ACTIONS.SET_SAVE_OVERWRITE]: setSaveOverwrite, - [ACTIONS.SET_SAVE_SUCCESS]: setSaveSuccess, - [ACTIONS.SEND_SAVE_REQUEST]: sendSaveRequest, - [ACTIONS.RESET_SAVE_DIALOG]: resetSaveDialog, - - [ACTIONS.HIDE_RENDERER]: hideRenderer, - [ACTIONS.SET_RENDERER]: setRenderer, - - [ACTIONS.SET_PROVIDER]: setProvider, - - [ACTIONS.SET_DIALOG]: setDialog, - [ACTIONS.SET_DIALOG_ACTIVE]: setDialogActive, - [ACTIONS.SET_READY]: setReady, - - [ACTIONS.SEARCH_SET_TITLE]: searchSetTitle, - [ACTIONS.SEARCH_SET_DISTANCE]: searchSetDistance, - [ACTIONS.SEARCH_CHANGE_DISTANCE]: searchSetDistance, - [ACTIONS.SEARCH_SET_TAB]: searchSetTab, - [ACTIONS.SEARCH_PUT_ROUTES]: searchPutRoutes, - [ACTIONS.SEARCH_SET_LOADING]: searchSetLoading, - [ACTIONS.SET_PUBLIC]: setPublic, - [ACTIONS.SET_STARRED]: setStarred, - [ACTIONS.SET_SPEED]: setSpeed, - - [ACTIONS.SET_MARKERS_SHOWN]: setMarkersShown, - [ACTIONS.SET_IS_EMPTY]: setIsEmpty, - [ACTIONS.MAPS_SET_SHIFT]: mapsSetShift, - - [ACTIONS.SET_FEATURE]: setFeature, - [ACTIONS.SET_IS_ROUTING]: setIsRouting, - - [ACTIONS.SET_ROUTE_STARRED]: setRouteStarred, -}); export const INITIAL_STATE: IRootReducer = { ready: false, @@ -466,4 +165,4 @@ export const INITIAL_STATE: IRootReducer = { }, }; -export const userReducer = createReducer(INITIAL_STATE, HANDLERS); +export const userReducer = createReducer(INITIAL_STATE, USER_HANDLERS); diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 43ee59d..bb7f70a 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -63,7 +63,7 @@ import { replacePath } from "$utils/history"; import { editor } from "$modules/Editor"; -import { ACTIONS } from "$redux/user/constants"; +import { USER_ACTIONS } from "$redux/user/constants"; import { MODES } from "$constants/modes"; import { DEFAULT_USER, IUser } from "$constants/auth"; import { TIPS } from "$constants/tips"; @@ -348,16 +348,16 @@ function* routerSubmitSaga() { function* clearSaga({ type }) { switch (type) { - case ACTIONS.CLEAR_POLY: + case USER_ACTIONS.CLEAR_POLY: yield editor.poly.clearAll(); yield editor.router.clearAll(); break; - case ACTIONS.CLEAR_STICKERS: + case USER_ACTIONS.CLEAR_STICKERS: yield editor.stickers.clearAll(); break; - case ACTIONS.CLEAR_ALL: + case USER_ACTIONS.CLEAR_ALL: yield editor.clearAll(); yield put(setChanged(false)); break; @@ -408,7 +408,7 @@ function* sendSaveRequestSaga({ description }), timeout: delay(10000), - cancel: take(ACTIONS.RESET_SAVE_DIALOG) + cancel: take(USER_ACTIONS.RESET_SAVE_DIALOG) }); yield put(setSaveLoading(false)); @@ -922,53 +922,53 @@ function* toggleRouteStarredSaga({ export function* userSaga() { yield takeLatest(REHYDRATE, authCheckSaga); - yield takeEvery(ACTIONS.SET_MODE, setModeSaga); + yield takeEvery(USER_ACTIONS.SET_MODE, setModeSaga); - yield takeEvery(ACTIONS.START_EDITING, startEditingSaga); - yield takeEvery(ACTIONS.STOP_EDITING, stopEditingSaga); + yield takeEvery(USER_ACTIONS.START_EDITING, startEditingSaga); + yield takeEvery(USER_ACTIONS.STOP_EDITING, stopEditingSaga); - yield takeEvery(ACTIONS.USER_LOGOUT, userLogoutSaga); - yield takeEvery(ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); - yield takeEvery(ACTIONS.SET_LOGO, setLogoSaga); + yield takeEvery(USER_ACTIONS.USER_LOGOUT, userLogoutSaga); + yield takeEvery(USER_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); + yield takeEvery(USER_ACTIONS.SET_LOGO, setLogoSaga); - yield takeEvery(ACTIONS.ROUTER_CANCEL, routerCancelSaga); - yield takeEvery(ACTIONS.ROUTER_SUBMIT, routerSubmitSaga); + yield takeEvery(USER_ACTIONS.ROUTER_CANCEL, routerCancelSaga); + yield takeEvery(USER_ACTIONS.ROUTER_SUBMIT, routerSubmitSaga); yield takeEvery( [ - ACTIONS.CLEAR_POLY, - ACTIONS.CLEAR_STICKERS, - ACTIONS.CLEAR_ALL, - ACTIONS.CLEAR_CANCEL + USER_ACTIONS.CLEAR_POLY, + USER_ACTIONS.CLEAR_STICKERS, + USER_ACTIONS.CLEAR_ALL, + USER_ACTIONS.CLEAR_CANCEL ], clearSaga ); - yield takeLatest(ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); - yield takeLatest(ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); - yield takeLatest(ACTIONS.TAKE_A_SHOT, takeAShotSaga); - yield takeLatest(ACTIONS.CROP_A_SHOT, cropAShotSaga); + yield takeLatest(USER_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); + yield takeLatest(USER_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); + yield takeLatest(USER_ACTIONS.TAKE_A_SHOT, takeAShotSaga); + yield takeLatest(USER_ACTIONS.CROP_A_SHOT, cropAShotSaga); - yield takeEvery(ACTIONS.CHANGE_PROVIDER, changeProviderSaga); - yield takeLatest(ACTIONS.LOCATION_CHANGED, locationChangeSaga); + yield takeEvery(USER_ACTIONS.CHANGE_PROVIDER, changeProviderSaga); + yield takeLatest(USER_ACTIONS.LOCATION_CHANGED, locationChangeSaga); - yield takeLatest(ACTIONS.GOT_VK_USER, gotVkUserSaga); - yield takeLatest(ACTIONS.KEY_PRESSED, keyPressedSaga); + yield takeLatest(USER_ACTIONS.GOT_VK_USER, gotVkUserSaga); + yield takeLatest(USER_ACTIONS.KEY_PRESSED, keyPressedSaga); - yield takeLatest(ACTIONS.SET_TITLE, setTitleSaga); + yield takeLatest(USER_ACTIONS.SET_TITLE, setTitleSaga); yield takeLatest( - [ACTIONS.SEARCH_SET_TITLE, ACTIONS.SEARCH_SET_DISTANCE], + [USER_ACTIONS.SEARCH_SET_TITLE, USER_ACTIONS.SEARCH_SET_DISTANCE], searchSetSaga ); - yield takeLatest(ACTIONS.OPEN_MAP_DIALOG, openMapDialogSaga); - yield takeLatest(ACTIONS.SEARCH_SET_TAB, searchSetTabSaga); - yield takeLatest(ACTIONS.SET_USER, setUserSaga); + yield takeLatest(USER_ACTIONS.OPEN_MAP_DIALOG, openMapDialogSaga); + yield takeLatest(USER_ACTIONS.SEARCH_SET_TAB, searchSetTabSaga); + yield takeLatest(USER_ACTIONS.SET_USER, setUserSaga); - yield takeLatest(ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); - yield takeLatest(ACTIONS.MAPS_LOAD_MORE, mapsLoadMoreSaga); + yield takeLatest(USER_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); + yield takeLatest(USER_ACTIONS.MAPS_LOAD_MORE, mapsLoadMoreSaga); - yield takeLatest(ACTIONS.DROP_ROUTE, dropRouteSaga); - yield takeLatest(ACTIONS.MODIFY_ROUTE, modifyRouteSaga); - yield takeLatest(ACTIONS.TOGGLE_ROUTE_STARRED, toggleRouteStarredSaga); + yield takeLatest(USER_ACTIONS.DROP_ROUTE, dropRouteSaga); + yield takeLatest(USER_ACTIONS.MODIFY_ROUTE, modifyRouteSaga); + yield takeLatest(USER_ACTIONS.TOGGLE_ROUTE_STARRED, toggleRouteStarredSaga); } From fca52df9f55a9b85a9abd7b0540fe4670f9b347f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 13:16:35 +0700 Subject: [PATCH 104/320] added editable route --- src/components/Cursor.tsx | 2 +- src/containers/App.tsx | 5 ++ src/containers/map/Map/index.tsx | 46 +++++++++++++++ src/containers/map/Route/index.tsx | 80 ++++++++++++++++++++++++++ src/containers/map/TileLayer/index.tsx | 40 +++++++++++++ src/index.html | 3 + src/modules/InteractivePoly.ts | 8 +-- src/redux/map/actions.ts | 17 ++++++ src/redux/map/constants.ts | 7 +++ src/redux/map/handlers.ts | 34 ++++++++++- src/redux/map/index.ts | 8 ++- src/redux/map/selectors.ts | 2 + src/redux/map/types.ts | 8 +++ src/redux/store.ts | 3 + src/redux/user/sagas.ts | 13 +++++ src/styles/map.less | 12 +++- src/utils/context.ts | 5 ++ 17 files changed, 282 insertions(+), 11 deletions(-) create mode 100644 src/containers/map/Map/index.tsx create mode 100644 src/containers/map/Route/index.tsx create mode 100644 src/containers/map/TileLayer/index.tsx create mode 100644 src/redux/map/actions.ts create mode 100644 src/redux/map/constants.ts create mode 100644 src/redux/map/selectors.ts create mode 100644 src/redux/map/types.ts create mode 100644 src/utils/context.ts diff --git a/src/components/Cursor.tsx b/src/components/Cursor.tsx index ebc392f..52e8e93 100644 --- a/src/components/Cursor.tsx +++ b/src/components/Cursor.tsx @@ -16,7 +16,7 @@ export class Cursor extends React.PureComponent { } moveCursor = e => { - if (!e.clientX || !e.clientY) return; + if (!e.clientX || !e.clientY || !this.cursor || !this.cursor.style) return; const { clientX, clientY } = e; diff --git a/src/containers/App.tsx b/src/containers/App.tsx index 54a490d..bd1aa38 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -19,6 +19,9 @@ import { IStickerPack } from "$constants/stickers"; import { IDialogs } from "$constants/dialogs"; import { IModes } from "$constants/modes"; +import { Map } from "$containers/map/Map" +import { TileLayer } from '$containers/map/TileLayer'; + type Props = { sticker: string, renderer_active: boolean, @@ -49,6 +52,8 @@ const Component = (props: Props) => ( setDialogActive={props.setDialogActive} /> + + { props.renderer_active && } diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx new file mode 100644 index 0000000..2f76a56 --- /dev/null +++ b/src/containers/map/Map/index.tsx @@ -0,0 +1,46 @@ +import { Map as MapInterface, map } from "leaflet"; +import * as React from "react"; +import { createPortal } from "react-dom"; +import { MapContext } from "$utils/context.ts"; +import { TileLayer } from "$containers/map/TileLayer"; +import { Route } from "$containers/map/Route"; +import { selectMapProvider, selectMapRoute } from "$redux/map/selectors"; +import { connect } from "react-redux"; +import * as MAP_ACTIONS from "$redux/map/actions"; + +const mapStateToProps = state => ({ + provider: selectMapProvider(state), + route: selectMapRoute(state) +}); + +const mapDispatchToProps = { + mapSetRoute: MAP_ACTIONS.mapSetRoute +}; + +type IProps = React.HTMLAttributes & + ReturnType & + typeof mapDispatchToProps & {}; + +const MapUnconnected: React.FC = ({ provider, route, mapSetRoute }) => { + const ref = React.useRef(null); + const [maps, setMaps] = React.useState(null); + + React.useEffect(() => { + if (!ref.current) return; + + setMaps(map(ref.current).setView([55.0153275, 82.9071235], 13)); + }, [ref]); + + return createPortal( +
      + + + + +
      , + document.getElementById("canvas") + ); +}; + +const Map = connect(mapStateToProps, mapDispatchToProps)(MapUnconnected); +export { Map }; diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx new file mode 100644 index 0000000..4eb2936 --- /dev/null +++ b/src/containers/map/Route/index.tsx @@ -0,0 +1,80 @@ +import React, { + FC, + useEffect, + memo, + useContext, + useState, + useCallback +} from "react"; +import { IMapRoute, ILatLng } from "../../../redux/map/types"; +import { MapContext } from "$utils/context"; +import { InteractivePoly } from "$modules/InteractivePoly"; +import { isMobile } from "$utils/window"; +import { LatLng } from "leaflet"; + +interface IProps { + route: IMapRoute; + is_editing: boolean; + mapSetRoute: (latlngs: ILatLng[]) => void; +} + +const Route: FC = memo(({ route, is_editing, mapSetRoute }) => { + const [layer, setLayer] = useState(null); + const map = useContext(MapContext); + + const onRouteChanged = useCallback( + ({ latlngs }) => { + // mapSetRoute(latlngs) + }, + [mapSetRoute] + ); + + useEffect(() => { + if (!layer) return; + + layer.on("latlngschange", onRouteChanged); + + return () => layer.off("latlngschange", onRouteChanged); + }, [layer, onRouteChanged]); + + useEffect(() => { + if (!map) return; + + setLayer( + new InteractivePoly([], { + color: "url(#activePathGradient)", + weight: 6, + maxMarkers: isMobile() ? 20 : 100, + smoothFactor: 3, + updateself: false, + }) + .addTo(map) + .on("distancechange", console.log) + .on("allvertexhide", console.log) + .on("allvertexshow", console.log) + // .on("latlngschange", console.log) + ); + }, [map]); + + useEffect(() => { + if (!layer) return; + + const points = (route && route.length > 0 && route) || []; + + layer.setPoints(points as LatLng[]); // TODO: refactor this + }, [route, layer]); + + useEffect(() => { + if (!layer) return; + + if (is_editing) { + layer.editor.enable(); + } else { + layer.editor.disable(); + } + }, [is_editing, layer]); + + return null; +}); + +export { Route }; diff --git a/src/containers/map/TileLayer/index.tsx b/src/containers/map/TileLayer/index.tsx new file mode 100644 index 0000000..fdddeb6 --- /dev/null +++ b/src/containers/map/TileLayer/index.tsx @@ -0,0 +1,40 @@ +import * as React from "react"; +import { MapContext, TileContext } from "../../../utils/context"; +import { TileLayer as TileLayerInterface, tileLayer } from "leaflet"; +import { DEFAULT_PROVIDER, PROVIDERS } from "$constants/providers"; +import { IMapReducer } from "$redux/map"; + +type IProps = React.HTMLAttributes & { + provider: IMapReducer['provider'], +}; + +const TileLayer: React.FC = ({ children, provider }) => { + const [layer, setLayer] = React.useState(null); + const map = React.useContext(MapContext); + + React.useEffect(() => { + if (!map) return; + + setLayer( + tileLayer(PROVIDERS[DEFAULT_PROVIDER].url, { + attribution: "Независимое Велосообщество", + maxNativeZoom: 18, + maxZoom: 18 + }).addTo(map) + ); + }, [map]); + + React.useEffect(() => { + if (!layer || !provider) return; + + const { url } = + (provider && PROVIDERS[provider] && PROVIDERS[provider]) || + PROVIDERS[DEFAULT_PROVIDER]; + + layer.setUrl(url); + }, [layer, provider]); + + return {children}; +}; + +export { TileLayer }; diff --git a/src/index.html b/src/index.html index 7c1707f..3acea9a 100644 --- a/src/index.html +++ b/src/index.html @@ -130,7 +130,10 @@ +
      +
      +
      ЗАГРУЗКА
      diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index cfbef0a..4f5c324 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -27,7 +27,7 @@ interface InteractivePolylineOptions extends PolylineOptions { kmMarksStep?: number, } -export class Component extends Polyline { +export class InteractivePoly extends Polyline { constructor(latlngs: LatLngExpression[] | LatLngExpression[][], options?: InteractivePolylineOptions) { super(latlngs, options); @@ -47,7 +47,6 @@ export class Component extends Polyline { this.setLatLngs(latlngs); this.recreateMarkers(); this.recalcDistance(); - // this.recalcKmMarks(); this.touchHinter.setLatLngs(latlngs); this.fire('latlngschange', { latlngs }); }; @@ -101,7 +100,6 @@ export class Component extends Polyline { this._map.addLayer(this.markerLayer); this.fire('allvertexshow'); - console.log(); }; hideAllMarkers = (): void => { @@ -516,7 +514,7 @@ export class Component extends Polyline { distance: number = 0; } -Component.addInitHook(function () { +InteractivePoly.addInitHook(function () { this.once('add', (event) => { if (event.target instanceof InteractivePoly) { this.map = event.target._map; @@ -550,7 +548,7 @@ Component.addInitHook(function () { }); }); -export const InteractivePoly = Component; +// export const InteractivePoly = Component; /* events: vertexdragstart, diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts new file mode 100644 index 0000000..ec8a222 --- /dev/null +++ b/src/redux/map/actions.ts @@ -0,0 +1,17 @@ +import { MAP_ACTIONS } from "./constants"; +import { IMapReducer } from "./"; + +export const mapSet = (map: Partial) => ({ + type: MAP_ACTIONS.SET_MAP, + map +}); + +export const mapSetProvider = (provider: IMapReducer['provider']) => ({ + type: MAP_ACTIONS.SET_PROVIDER, + provider +}); + +export const mapSetRoute = (route: IMapReducer['route']) => ({ + type: MAP_ACTIONS.SET_ROUTE, + route, +}); diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts new file mode 100644 index 0000000..4e363d9 --- /dev/null +++ b/src/redux/map/constants.ts @@ -0,0 +1,7 @@ +const P = 'MAP' + +export const MAP_ACTIONS = { + SET_MAP: `${P}-SET_MAP`, + SET_PROVIDER: `${P}-SET_PROVIDER`, + SET_ROUTE: `${P}-SET_ROUTE`, +} \ No newline at end of file diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts index a5d12a5..912bd2a 100644 --- a/src/redux/map/handlers.ts +++ b/src/redux/map/handlers.ts @@ -1,3 +1,33 @@ +import { MAP_ACTIONS } from "./constants"; +import { IMapReducer } from "."; +import { mapSet, mapSetProvider, mapSetRoute } from "./actions"; + +const setMap = ( + state: IMapReducer, + { map }: ReturnType +): IMapReducer => ({ + ...state, + ...map +}); + +const setProvider = ( + state: IMapReducer, + { provider }: ReturnType +): IMapReducer => ({ + ...state, + provider +}); + +const setRoute = ( + state: IMapReducer, + { route }: ReturnType +): IMapReducer => ({ + ...state, + route +}); + export const MAP_HANDLERS = { - -} \ No newline at end of file + [MAP_ACTIONS.SET_MAP]: setMap, + [MAP_ACTIONS.SET_PROVIDER]: setProvider, + [MAP_ACTIONS.SET_ROUTE]: setRoute +}; diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index ce8f294..ba5bb99 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -1,11 +1,15 @@ import { createReducer } from 'reduxsauce'; import { MAP_HANDLERS } from './handlers'; +import { DEFAULT_PROVIDER } from '$constants/providers'; +import { IMapRoute } from './types'; export interface IMapReducer { - + provider: string; + route: IMapRoute; } export const MAP_INITIAL_STATE = { - + provider: DEFAULT_PROVIDER, } + export const map = createReducer(MAP_INITIAL_STATE, MAP_HANDLERS) \ No newline at end of file diff --git a/src/redux/map/selectors.ts b/src/redux/map/selectors.ts new file mode 100644 index 0000000..5b169a8 --- /dev/null +++ b/src/redux/map/selectors.ts @@ -0,0 +1,2 @@ +export const selectMapProvider = state => state.map.provider; +export const selectMapRoute= state => state.map.route; \ No newline at end of file diff --git a/src/redux/map/types.ts b/src/redux/map/types.ts new file mode 100644 index 0000000..3d59e9f --- /dev/null +++ b/src/redux/map/types.ts @@ -0,0 +1,8 @@ +import { LatLng } from "leaflet"; + +export type ILatLng = { + lat: number, + lng: number, +} + +export type IMapRoute = ILatLng[]; \ No newline at end of file diff --git a/src/redux/store.ts b/src/redux/store.ts index 4687051..5774cd6 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -9,6 +9,7 @@ import { userSaga } from '$redux/user/sagas'; import { createBrowserHistory } from 'history'; import { locationChanged } from '$redux/user/actions'; import { PersistConfig, Persistor } from "redux-persist/es/types"; +import { map, IMapReducer } from '$redux/map'; const userPersistConfig: PersistConfig = { key: 'user', @@ -18,6 +19,7 @@ const userPersistConfig: PersistConfig = { export interface IState { user: IRootReducer + map: IMapReducer, } // create the saga middleware export const sagaMiddleware = createSagaMiddleware(); @@ -32,6 +34,7 @@ const composeEnhancers = export const store = createStore( combineReducers({ user: persistReducer(userPersistConfig, userReducer), + map, // routing: routerReducer }), composeEnhancers(applyMiddleware(/* routerMiddleware(history), */ sagaMiddleware)) diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index bb7f70a..9ba905b 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -89,6 +89,7 @@ import { IRootState } from "$redux/user"; import { downloadGPXTrack, getGPXString } from "$utils/gpx"; import { Unwrap } from "$utils/middleware"; import { IState } from "$redux/store"; +import { mapSetProvider, mapSet } from "$redux/map/actions"; const getUser = (state: IState) => state.user.user; const getState = (state: IState) => state.user; @@ -156,6 +157,8 @@ function* loadMapSaga(path) { data: { route, error, random_url } }: Unwrap = yield call(getStoredMap, { name: path }); + console.log({ route }); + if (route && !error) { yield editor.clearAll(); yield editor.setData(route); @@ -164,6 +167,13 @@ function* loadMapSaga(path) { yield put(setChanged(false)); + // TODO: REACTIVE BRANCH: + // yield put(mapSetProvider(route.provider)); + yield put(mapSet({ + provider: route.provider, + route: route.route, + })) + return { route, random_url }; } @@ -529,6 +539,9 @@ function* changeProviderSaga({ yield put(setProvider(provider)); + // TODO: REACTIVE BRANCH + yield put(mapSetProvider(provider)) + if (current_provider === provider) return; yield put(setChanged(true)); diff --git a/src/styles/map.less b/src/styles/map.less index bffc38f..dc7e580 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -1,5 +1,5 @@ #map { - width: 100%; + width: 50% !important; height: 100%; position: absolute; z-index: 1; @@ -283,3 +283,13 @@ font-size: 11px; } } + +#canvas { + background: #ff3344; + z-index: 0; + + > div { + width: 100%; + height: 100%; + } +} \ No newline at end of file diff --git a/src/utils/context.ts b/src/utils/context.ts new file mode 100644 index 0000000..3f25d78 --- /dev/null +++ b/src/utils/context.ts @@ -0,0 +1,5 @@ +import * as React from 'react'; +import { Map, TileLayer } from 'leaflet'; + +export const MapContext = React.createContext(null); +export const TileContext = React.createContext(null) \ No newline at end of file From 58eefd5670c61cf6573c9ad8f573fe45cb05067e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 15:07:59 +0700 Subject: [PATCH 105/320] stickers stops dragging --- src/containers/map/Map/index.tsx | 22 +- src/containers/map/Route/index.tsx | 48 ++-- src/containers/map/Sticker/index.tsx | 118 ++++++++++ src/containers/map/Stickers/index.tsx | 39 ++++ src/containers/map/TileLayer/index.tsx | 8 +- src/modules/InteractivePoly.ts | 311 ++++++++++++++----------- src/modules/Sticker.tsx | 3 + src/redux/map/index.ts | 4 + src/redux/map/selectors.ts | 7 +- src/redux/user/sagas.ts | 3 +- 10 files changed, 388 insertions(+), 175 deletions(-) create mode 100644 src/containers/map/Sticker/index.tsx create mode 100644 src/containers/map/Stickers/index.tsx diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index 2f76a56..65b8a3e 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -2,15 +2,18 @@ import { Map as MapInterface, map } from "leaflet"; import * as React from "react"; import { createPortal } from "react-dom"; import { MapContext } from "$utils/context.ts"; -import { TileLayer } from "$containers/map/TileLayer"; -import { Route } from "$containers/map/Route"; -import { selectMapProvider, selectMapRoute } from "$redux/map/selectors"; +import { selectMapProvider, selectMapRoute, selectMapStickers } from "$redux/map/selectors"; import { connect } from "react-redux"; import * as MAP_ACTIONS from "$redux/map/actions"; +import { Route } from "$containers/map/Route"; +import { TileLayer } from "$containers/map/TileLayer"; +import { Stickers } from "$containers/map/Stickers"; + const mapStateToProps = state => ({ provider: selectMapProvider(state), - route: selectMapRoute(state) + route: selectMapRoute(state), + stickers: selectMapStickers(state), }); const mapDispatchToProps = { @@ -21,7 +24,7 @@ type IProps = React.HTMLAttributes & ReturnType & typeof mapDispatchToProps & {}; -const MapUnconnected: React.FC = ({ provider, route, mapSetRoute }) => { +const MapUnconnected: React.FC = ({ provider, route, mapSetRoute, stickers }) => { const ref = React.useRef(null); const [maps, setMaps] = React.useState(null); @@ -31,12 +34,13 @@ const MapUnconnected: React.FC = ({ provider, route, mapSetRoute }) => { setMaps(map(ref.current).setView([55.0153275, 82.9071235], 13)); }, [ref]); + // console.log('RERENDER!'); + return createPortal(
      - - - - + + +
      , document.getElementById("canvas") ); diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 4eb2936..a39bf6b 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -10,21 +10,40 @@ import { IMapRoute, ILatLng } from "../../../redux/map/types"; import { MapContext } from "$utils/context"; import { InteractivePoly } from "$modules/InteractivePoly"; import { isMobile } from "$utils/window"; -import { LatLng } from "leaflet"; +import { LatLng, Map } from "leaflet"; interface IProps { + map: Map; route: IMapRoute; is_editing: boolean; mapSetRoute: (latlngs: ILatLng[]) => void; } -const Route: FC = memo(({ route, is_editing, mapSetRoute }) => { +const Route: FC = memo(({ route, is_editing, mapSetRoute, map }) => { const [layer, setLayer] = useState(null); - const map = useContext(MapContext); + + useEffect(() => { + if (!map) return; + + setLayer( + new InteractivePoly([], { + color: "url(#activePathGradient)", + weight: 6, + maxMarkers: isMobile() ? 20 : 100, + smoothFactor: 3, + }) + .addTo(map) + // .on("distancechange", console.log) + // .on("allvertexhide", console.log) + // .on("allvertexshow", console.log) + ); + }, [map]); + const onRouteChanged = useCallback( ({ latlngs }) => { - // mapSetRoute(latlngs) + // console.log('THIS!'); + mapSetRoute(latlngs) }, [mapSetRoute] ); @@ -37,28 +56,11 @@ const Route: FC = memo(({ route, is_editing, mapSetRoute }) => { return () => layer.off("latlngschange", onRouteChanged); }, [layer, onRouteChanged]); - useEffect(() => { - if (!map) return; - - setLayer( - new InteractivePoly([], { - color: "url(#activePathGradient)", - weight: 6, - maxMarkers: isMobile() ? 20 : 100, - smoothFactor: 3, - updateself: false, - }) - .addTo(map) - .on("distancechange", console.log) - .on("allvertexhide", console.log) - .on("allvertexshow", console.log) - // .on("latlngschange", console.log) - ); - }, [map]); - useEffect(() => { if (!layer) return; + console.log('route use effect!') + const points = (route && route.length > 0 && route) || []; layer.setPoints(points as LatLng[]); // TODO: refactor this diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx new file mode 100644 index 0000000..c487bd3 --- /dev/null +++ b/src/containers/map/Sticker/index.tsx @@ -0,0 +1,118 @@ +import * as React from "react"; +import { Map, marker, Marker } from "leaflet"; +import { IStickerDump, Sticker as StickerComponent } from "$modules/Sticker"; +import { STICKERS } from "$constants/stickers"; +import { StickerDesc } from "$components/StickerDesc"; +import classNames from "classnames"; +import { DomMarker } from "$utils/DomMarker"; +import { createPortal } from "react-dom"; + +interface IProps { + map: Map; + sticker: IStickerDump; +} + +const preventPropagation = (e): void => { + if (!e || !e.stopPropagation) return; + + e.stopPropagation(); + e.preventDefault(); +}; + +const getX = e => + e.touches && e.touches.length > 0 + ? { pageX: e.touches[0].pageX, pageY: e.touches[0].pageY } + : { pageX: e.pageX, pageY: e.pageY }; + +const Sticker: React.FC = ({ map, sticker }) => { + const [layer, setLayer] = React.useState(null); + const [dragging, setDragging] = React.useState(false); + + const stickerArrow = React.useRef(null); + const stickerImage = React.useRef(null); + + const onDragStart = React.useCallback(() => { + layer.dragging.disable(); + map.dragging.disable(); + + setDragging(true); + }, [setDragging, layer, map]); + + const onDragStop = React.useCallback(() => { + layer.dragging.enable(); + map.dragging.enable(); + + setDragging(false); + }, [setDragging, layer, map]); + + const onDrag = React.useCallback(event => { + // event.stopPrapagation(); + // console.log("drag") + }, []); + + const onDelete = console.log; + const setText = console.log; + + const direction = React.useMemo(() => "left", [sticker.angle]); + + const element = React.useMemo(() => document.createElement("div"), []); + + React.useEffect(() => { + if (dragging) { + document.addEventListener("mousemove", onDrag); + document.addEventListener("mouseUp", onDragStop); + } + + return () => document.removeEventListener("mousemove", onDrag); + }, [dragging, onDrag]); + + React.useEffect(() => { + if (!map) return; + + const icon = new DomMarker({ + element, + className: "sticker-container" + }); + + const item = marker(sticker.latlng, { icon, draggable: true }).addTo(map); + + setLayer(item); + + return () => item.removeFrom(map); + }, [element, map, sticker]); + + return createPortal( + +
      +
      + + +
      + +
      +
      + , + element + ); +}; + +export { Sticker }; diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx new file mode 100644 index 0000000..7185d9f --- /dev/null +++ b/src/containers/map/Stickers/index.tsx @@ -0,0 +1,39 @@ +import * as React from "react"; +import { IStickerDump } from "$modules/Sticker"; +import { Layer, FeatureGroup, Map } from "leaflet"; +import { MapContext } from "$utils/context"; +import { Sticker } from "$containers/map/Sticker"; + +interface IProps { + stickers: IStickerDump[]; + is_editing: boolean; + map: Map; +} + +// const { FC, useContext, useState, useEffect } = React; + +const Stickers: React.FC = React.memo(({ stickers, is_editing, map }) => { + const [layer, setLayer] = React.useState(null); + + React.useEffect(() => { + if (!map) return; + + setLayer(new FeatureGroup().addTo(map)); + }, [map]); + + return ( +
      + {layer && + stickers.map((sticker, index) => ( + + ))} +
      + ); + // return null; +}); + +export { Stickers }; diff --git a/src/containers/map/TileLayer/index.tsx b/src/containers/map/TileLayer/index.tsx index fdddeb6..6466e6e 100644 --- a/src/containers/map/TileLayer/index.tsx +++ b/src/containers/map/TileLayer/index.tsx @@ -1,16 +1,16 @@ import * as React from "react"; import { MapContext, TileContext } from "../../../utils/context"; -import { TileLayer as TileLayerInterface, tileLayer } from "leaflet"; +import { TileLayer as TileLayerInterface, tileLayer, Map } from "leaflet"; import { DEFAULT_PROVIDER, PROVIDERS } from "$constants/providers"; import { IMapReducer } from "$redux/map"; type IProps = React.HTMLAttributes & { provider: IMapReducer['provider'], + map: Map, }; -const TileLayer: React.FC = ({ children, provider }) => { +const TileLayer: React.FC = React.memo(({ children, provider, map }) => { const [layer, setLayer] = React.useState(null); - const map = React.useContext(MapContext); React.useEffect(() => { if (!map) return; @@ -35,6 +35,6 @@ const TileLayer: React.FC = ({ children, provider }) => { }, [layer, provider]); return {children}; -}; +}); export { TileLayer }; diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index 4f5c324..33822a9 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -15,23 +15,29 @@ import { LatLng, LeafletMouseEvent, latLng, - LatLngLiteral, -} from 'leaflet'; + LatLngLiteral +} from "leaflet"; import { distKm, distToSegment, getPolyLength, pointInArea } from "$utils/geom"; interface InteractivePolylineOptions extends PolylineOptions { - maxMarkers?: number, - constraintsStyle?: PolylineOptions, - kmMarksEnabled?: boolean, - kmMarksStep?: number, + maxMarkers?: number; + constraintsStyle?: PolylineOptions; + kmMarksEnabled?: boolean; + kmMarksStep?: number; } export class InteractivePoly extends Polyline { - constructor(latlngs: LatLngExpression[] | LatLngExpression[][], options?: InteractivePolylineOptions) { + constructor( + latlngs: LatLngExpression[] | LatLngExpression[][], + options?: InteractivePolylineOptions + ) { super(latlngs, options); - this.constraintsStyle = { ...this.constraintsStyle, ...options.constraintsStyle }; + this.constraintsStyle = { + ...this.constraintsStyle, + ...options.constraintsStyle + }; this.maxMarkers = options.maxMarkers || this.maxMarkers; this.constrLine = new Polyline([], this.constraintsStyle); @@ -43,36 +49,41 @@ export class InteractivePoly extends Polyline { this.touchHinter.setLatLngs(latlngs); }; - setPoints = (latlngs: LatLng[]) => { + setPoints = (latlngs: LatLng[], emitEvent = false) => { this.setLatLngs(latlngs); this.recreateMarkers(); this.recalcDistance(); this.touchHinter.setLatLngs(latlngs); - this.fire('latlngschange', { latlngs }); + + if (emitEvent) { + this.fire("latlngschange", { latlngs }); + } }; - createHintMarker = (latlng: LatLng): Marker => marker(latlng, { - draggable: false, - icon: divIcon({ - className: 'leaflet-vertex-drag-helper', - iconSize: [11, 11], - iconAnchor: [6, 6] - }) - }); + createHintMarker = (latlng: LatLng): Marker => + marker(latlng, { + draggable: false, + icon: divIcon({ + className: "leaflet-vertex-drag-helper", + iconSize: [11, 11], + iconAnchor: [6, 6] + }) + }); - createMarker = (latlng: LatLng): Marker => marker(latlng, { - draggable: true, - icon: divIcon({ - className: 'leaflet-vertex-icon', - iconSize: [11, 11], - iconAnchor: [6, 6] + createMarker = (latlng: LatLng): Marker => + marker(latlng, { + draggable: true, + icon: divIcon({ + className: "leaflet-vertex-icon", + iconSize: [11, 11], + iconAnchor: [6, 6] + }) }) - }) - .on('contextmenu', this.dropMarker) - .on('drag', this.onMarkerDrag) - .on('dragstart', this.onMarkerDragStart) - .on('dragend', this.onMarkerDragEnd) - .addTo(this.markerLayer); + .on("contextmenu", this.dropMarker) + .on("drag", this.onMarkerDrag) + .on("dragstart", this.onMarkerDragStart) + .on("dragend", this.onMarkerDragEnd) + .addTo(this.markerLayer); recreateMarkers = () => { this.clearAllMarkers(); @@ -99,14 +110,14 @@ export class InteractivePoly extends Polyline { if (this._map.hasLayer(this.markerLayer)) return; this._map.addLayer(this.markerLayer); - this.fire('allvertexshow'); + this.fire("allvertexshow"); }; hideAllMarkers = (): void => { if (!this._map.hasLayer(this.markerLayer)) return; this._map.removeLayer(this.markerLayer); - this.fire('allvertexhide'); + this.fire("allvertexhide"); }; showVisibleMarkers = (): void => { @@ -115,15 +126,19 @@ export class InteractivePoly extends Polyline { const northEast = this._map.getBounds().getNorthEast(); const southWest = this._map.getBounds().getSouthWest(); - const { visible, hidden } = this.markers.reduce((obj, marker) => { - const { lat, lng } = marker.getLatLng(); - const is_hidden = (lat > northEast.lat || lng > northEast.lng || lat < southWest.lat || lng < southWest.lng); + const { visible, hidden } = this.markers.reduce( + (obj, marker) => { + const { lat, lng } = marker.getLatLng(); + const is_hidden = + lat > northEast.lat || + lng > northEast.lng || + lat < southWest.lat || + lng < southWest.lng; - return is_hidden - ? { ...obj, hidden: [...obj.hidden, marker] } - : { ...obj, visible: [...obj.visible, marker] } - - }, + return is_hidden + ? { ...obj, hidden: [...obj.hidden, marker] } + : { ...obj, visible: [...obj.visible, marker] }; + }, { visible: [], hidden: [] } ); @@ -136,7 +151,8 @@ export class InteractivePoly extends Polyline { }); hidden.forEach(marker => { - if (this.markerLayer.hasLayer(marker)) this.markerLayer.removeLayer(marker); + if (this.markerLayer.hasLayer(marker)) + this.markerLayer.removeLayer(marker); }); }; @@ -147,7 +163,7 @@ export class InteractivePoly extends Polyline { this.stopDragHinting(); this.stopDrawing(); this.touchHinter.removeFrom(this._map); - this.fire('editordisable'); + this.fire("editordisable"); }, enable: () => { this.is_editing = true; @@ -155,16 +171,16 @@ export class InteractivePoly extends Polyline { this.startDragHinting(); this.touchHinter.addTo(this._map); - this.fire('editorenable'); + this.fire("editorenable"); }, continue: () => { this.is_drawing = true; - this.drawing_direction = 'forward'; + this.drawing_direction = "forward"; this.startDrawing(); }, prepend: () => { this.is_drawing = true; - this.drawing_direction = 'backward'; + this.drawing_direction = "backward"; this.startDrawing(); } }; @@ -174,7 +190,8 @@ export class InteractivePoly extends Polyline { }; hideDragHint = (): void => { - if (this._map.hasLayer(this.hintMarker)) this._map.removeLayer(this.hintMarker); + if (this._map.hasLayer(this.hintMarker)) + this._map.removeLayer(this.hintMarker); }; showDragHint = (): void => { @@ -182,17 +199,17 @@ export class InteractivePoly extends Polyline { }; startDragHinting = (): void => { - this.touchHinter.on('mousemove', this.moveDragHint); - this.touchHinter.on('mousedown', this.startDragHintMove); - this.touchHinter.on('mouseover', this.showDragHint); - this.touchHinter.on('mouseout', this.hideDragHint); + this.touchHinter.on("mousemove", this.moveDragHint); + this.touchHinter.on("mousedown", this.startDragHintMove); + this.touchHinter.on("mouseover", this.showDragHint); + this.touchHinter.on("mouseout", this.hideDragHint); }; stopDragHinting = (): void => { - this.touchHinter.off('mousemove', this.moveDragHint); - this.touchHinter.off('mousedown', this.startDragHintMove); - this.touchHinter.off('mouseover', this.showDragHint); - this.touchHinter.off('mouseout', this.hideDragHint); + this.touchHinter.off("mousemove", this.moveDragHint); + this.touchHinter.off("mousedown", this.startDragHintMove); + this.touchHinter.off("mouseover", this.showDragHint); + this.touchHinter.off("mouseout", this.hideDragHint); }; startDragHintMove = (event: LeafletMouseEvent): void => { @@ -216,9 +233,9 @@ export class InteractivePoly extends Polyline { this.is_dragging = true; - this._map.on('mousemove', this.dragHintMove); - this._map.on('mouseup', this.dragHintAddMarker); - this._map.on('mouseout', this.stopDragHintMove); + this._map.on("mousemove", this.dragHintMove); + this._map.on("mouseup", this.dragHintAddMarker); + this._map.on("mouseout", this.stopDragHintMove); }; stopDragHintMove = (): void => { @@ -226,23 +243,28 @@ export class InteractivePoly extends Polyline { this.constrLine.removeFrom(this._map); - this._map.off('mousemove', this.dragHintMove); - this._map.off('mouseup', this.dragHintAddMarker); - this._map.off('mouseout', this.stopDragHintMove); + this._map.off("mousemove", this.dragHintMove); + this._map.off("mouseup", this.dragHintAddMarker); + this._map.off("mouseout", this.stopDragHintMove); if (this.is_drawing) this.startDrawing(); - setTimeout(() => { this.is_dragging = false; }, 0); + setTimeout(() => { + this.is_dragging = false; + }, 0); }; dragHintAddMarker = ({ latlng }: LeafletMouseEvent): void => { this.dragHintChangeDistance(this.hint_prev_marker, latlng); - this.markers.splice((this.hint_prev_marker + 1), 0, this.createMarker(latlng)); + this.markers.splice( + this.hint_prev_marker + 1, + 0, + this.createMarker(latlng) + ); this.insertLatLng(latlng, this.hint_prev_marker + 1); this.hideDragHint(); this.stopDragHintMove(); - }; dragHintChangeDistance = (index: number, current: LatLngLiteral): void => { @@ -251,28 +273,30 @@ export class InteractivePoly extends Polyline { const initial_distance = distKm(prev.getLatLng(), next.getLatLng()); - const current_distance = ( + const current_distance = ((prev && distKm(prev.getLatLng(), current)) || 0) + - ((next && distKm(next.getLatLng(), current)) || 0) - ); + ((next && distKm(next.getLatLng(), current)) || 0); - this.distance += (current_distance - initial_distance); + this.distance += current_distance - initial_distance; - this.fire('distancechange', { distance: this.distance }); + this.fire("distancechange", { distance: this.distance }); }; dragHintFindNearest = (latlng: LatLng): any => { const latlngs = this.getLatLngs() as LatLng[]; - const neighbours = latlngs.filter((current, index) => { - const next = latlngs[index + 1] as LatLng; + const neighbours = latlngs + .filter((current, index) => { + const next = latlngs[index + 1] as LatLng; - return (next && pointInArea(current, next, latlng)); - }) + return next && pointInArea(current, next, latlng); + }) .map(el => latlngs.indexOf(el)) - .sort((a, b) => ( - distToSegment(latlngs[a], latlngs[a + 1], latlng) - distToSegment(latlngs[b], latlngs[b + 1], latlng) - )); + .sort( + (a, b) => + distToSegment(latlngs[a], latlngs[a + 1], latlng) - + distToSegment(latlngs[b], latlngs[b + 1], latlng) + ); return neighbours.length > 0 ? neighbours[0] : -1; }; @@ -284,22 +308,30 @@ export class InteractivePoly extends Polyline { this.setConstraints([ this.markers[this.hint_prev_marker].getLatLng(), event.latlng, - this.markers[this.hint_prev_marker + 1].getLatLng(), + this.markers[this.hint_prev_marker + 1].getLatLng() ]); }; - onMarkerDrag = ({ target }: { target: Marker}) => { + onMarkerDrag = ({ target }: { target: Marker }) => { const coords = new Array(0) - .concat((this.vertex_index > 0 && this.markers[this.vertex_index - 1].getLatLng()) || []) + .concat( + (this.vertex_index > 0 && + this.markers[this.vertex_index - 1].getLatLng()) || + [] + ) .concat(target.getLatLng()) - .concat((this.vertex_index < (this.markers.length - 1) && this.markers[this.vertex_index + 1].getLatLng()) || []); + .concat( + (this.vertex_index < this.markers.length - 1 && + this.markers[this.vertex_index + 1].getLatLng()) || + [] + ); this.setConstraints(coords); - this.fire('vertexdrag', { index: this.vertex_index, vertex: target }); + this.fire("vertexdrag", { index: this.vertex_index, vertex: target }); }; - onMarkerDragStart = ({ target }: { target: Marker}) => { + onMarkerDragStart = ({ target }: { target: Marker }) => { if (this.is_drawing) { this.stopDrawing(); this.is_drawing = true; @@ -312,12 +344,16 @@ export class InteractivePoly extends Polyline { this.is_dragging = true; this.constrLine.addTo(this._map); - this.fire('vertexdragstart', { index: this.vertex_index, vertex: target }); + this.fire("vertexdragstart", { index: this.vertex_index, vertex: target }); }; - onMarkerDragEnd = ({ target }: { target: Marker}): void => { + onMarkerDragEnd = ({ target }: { target: Marker }): void => { const latlngs = this.getLatLngs() as LatLngLiteral[]; - this.markerDragChangeDistance(this.vertex_index, latlngs[this.vertex_index], target.getLatLng()); + this.markerDragChangeDistance( + this.vertex_index, + latlngs[this.vertex_index], + target.getLatLng() + ); this.replaceLatlng(target.getLatLng(), this.vertex_index); @@ -328,40 +364,43 @@ export class InteractivePoly extends Polyline { if (this.is_drawing) this.startDrawing(); - this.fire('vertexdragend', { index: this.vertex_index, vertex: target }); + this.fire("vertexdragend", { index: this.vertex_index, vertex: target }); }; - markerDragChangeDistance = (index: number, initial: LatLngLiteral, current: LatLngLiteral): void => { + markerDragChangeDistance = ( + index: number, + initial: LatLngLiteral, + current: LatLngLiteral + ): void => { const prev = index > 0 ? this.markers[index - 1] : null; - const next = index <= (this.markers.length + 1) ? this.markers[index + 1] : null; + const next = + index <= this.markers.length + 1 ? this.markers[index + 1] : null; - const initial_distance = ( + const initial_distance = ((prev && distKm(prev.getLatLng(), initial)) || 0) + - ((next && distKm(next.getLatLng(), initial)) || 0) - ); + ((next && distKm(next.getLatLng(), initial)) || 0); - const current_distance = ( + const current_distance = ((prev && distKm(prev.getLatLng(), current)) || 0) + - ((next && distKm(next.getLatLng(), current)) || 0) - ); + ((next && distKm(next.getLatLng(), current)) || 0); - this.distance += (current_distance - initial_distance); + this.distance += current_distance - initial_distance; - this.fire('distancechange', { distance: this.distance }); + this.fire("distancechange", { distance: this.distance }); }; startDrawing = (): void => { this.is_drawing = true; this.setConstraints([]); this.constrLine.addTo(this._map); - this._map.on('mousemove', this.onDrawingMove); - this._map.on('click', this.onDrawingClick); + this._map.on("mousemove", this.onDrawingMove); + this._map.on("click", this.onDrawingClick); }; stopDrawing = (): void => { this.constrLine.removeFrom(this._map); - this._map.off('mousemove', this.onDrawingMove); - this._map.off('click', this.onDrawingClick); + this._map.off("mousemove", this.onDrawingMove); + this._map.off("click", this.onDrawingClick); this.is_drawing = false; }; @@ -371,11 +410,13 @@ export class InteractivePoly extends Polyline { return; } - if (!this._map.hasLayer(this.constrLine)) this._map.addLayer(this.constrLine); + if (!this._map.hasLayer(this.constrLine)) + this._map.addLayer(this.constrLine); - const marker = this.drawing_direction === 'forward' - ? this.markers[this.markers.length - 1] - : this.markers[0]; + const marker = + this.drawing_direction === "forward" + ? this.markers[this.markers.length - 1] + : this.markers[0]; this.setConstraints([latlng, marker.getLatLng()]); }; @@ -391,7 +432,7 @@ export class InteractivePoly extends Polyline { this.drawingChangeDistance(latlng); - if (this.drawing_direction === 'forward') { + if (this.drawing_direction === "forward") { latlngs.push(latlng); this.markers.push(this.createMarker(latlng)); } else { @@ -400,7 +441,7 @@ export class InteractivePoly extends Polyline { } this.setLatLngs(latlngs); - this.fire('latlngschange', { latlngs }); + this.fire("latlngschange", { latlngs }); this.showVisibleMarkers(); this.startDrawing(); }; @@ -410,30 +451,31 @@ export class InteractivePoly extends Polyline { if (latlngs.length < 1) { this.distance = 0; - this.fire('distancechange', { distance: this.distance }); + this.fire("distancechange", { distance: this.distance }); return; } - const point = this.drawing_direction === 'forward' - ? latlngs[latlngs.length - 1] - : latlngs[0]; + const point = + this.drawing_direction === "forward" + ? latlngs[latlngs.length - 1] + : latlngs[0]; this.distance += distKm(point, latlng); - this.fire('distancechange', { distance: this.distance }); + this.fire("distancechange", { distance: this.distance }); }; replaceLatlng = (latlng: LatLng, index: number): void => { const latlngs = this.getLatLngs() as LatLngLiteral[]; latlngs.splice(index, 1, latlng); this.setLatLngs(latlngs); - this.fire('latlngschange', { latlngs }); + this.fire("latlngschange", { latlngs }); }; insertLatLng = (latlng, index): void => { const latlngs = this.getLatLngs(); latlngs.splice(index, 0, latlng); this.setLatLngs(latlngs); - this.fire('latlngschange', { latlngs }); + this.fire("latlngschange", { latlngs }); }; setConstraints = (coords: LatLng[]) => { @@ -444,7 +486,7 @@ export class InteractivePoly extends Polyline { const index = this.markers.indexOf(target); const latlngs = this.getLatLngs(); - if (typeof index === 'undefined' || latlngs.length <= 2) return; + if (typeof index === "undefined" || latlngs.length <= 2) return; this.dropMarkerDistanceChange(index); this._map.removeLayer(this.markers[index]); @@ -452,7 +494,7 @@ export class InteractivePoly extends Polyline { latlngs.splice(index, 1); this.setLatLngs(latlngs); - this.fire('latlngschange', { latlngs }); + this.fire("latlngschange", { latlngs }); }; dropMarkerDistanceChange = (index: number): void => { @@ -460,43 +502,42 @@ export class InteractivePoly extends Polyline { const prev = index > 0 ? latlngs[index - 1] : null; const current = latlngs[index]; - const next = index <= (latlngs.length + 1) ? latlngs[index + 1] : null; + const next = index <= latlngs.length + 1 ? latlngs[index + 1] : null; - const initial_distance = ( + const initial_distance = ((prev && distKm(prev, current)) || 0) + - ((next && distKm(next, current)) || 0) - ); + ((next && distKm(next, current)) || 0); const current_distance = (prev && next && distKm(prev, next)) || 0; - this.distance += (current_distance - initial_distance); + this.distance += current_distance - initial_distance; - this.fire('distancechange', { distance: this.distance }); + this.fire("distancechange", { distance: this.distance }); }; recalcDistance = () => { const latlngs = this.getLatLngs() as LatLngLiteral[]; this.distance = getPolyLength(latlngs); - this.fire('distancechange', { distance: this.distance }); + this.fire("distancechange", { distance: this.distance }); }; markers: Marker[] = []; - maxMarkers: InteractivePolylineOptions['maxMarkers'] = 2; + maxMarkers: InteractivePolylineOptions["maxMarkers"] = 2; markerLayer: LayerGroup = new LayerGroup(); - constraintsStyle: InteractivePolylineOptions['constraintsStyle'] = { + constraintsStyle: InteractivePolylineOptions["constraintsStyle"] = { weight: 6, - color: 'red', - dashArray: '10, 12', + color: "red", + dashArray: "10, 12", opacity: 0.5, - interactive: false, + interactive: false }; touchHinter: Polyline = new Polyline([], { weight: 24, smoothFactor: 3, - className: 'touch-hinter-poly' + className: "touch-hinter-poly" }); hintMarker: Marker = this.createHintMarker(latLng({ lat: 0, lng: 0 })); @@ -507,28 +548,28 @@ export class InteractivePoly extends Polyline { is_dragging: boolean = false; is_drawing: boolean = false; - drawing_direction: 'forward' | 'backward' = 'forward'; + drawing_direction: "forward" | "backward" = "forward"; vertex_index?: number = null; hint_prev_marker: number = null; distance: number = 0; } -InteractivePoly.addInitHook(function () { - this.once('add', (event) => { +InteractivePoly.addInitHook(function() { + this.once("add", event => { if (event.target instanceof InteractivePoly) { this.map = event.target._map; - this.map.on('touch', console.log); + this.map.on("touch", console.log); this.markerLayer.addTo(event.target._map); this.hintMarker.addTo(event.target._map); this.constrLine.addTo(event.target._map); this.touchHinter.addTo(event.target._map); - this.map.on('moveend', this.updateMarkers); + this.map.on("moveend", this.updateMarkers); - this.on('latlngschange', this.updateTouchHinter); + this.on("latlngschange", this.updateTouchHinter); if (window.innerWidth < 768) { this.touchHinter.setStyle({ weight: 32 }); @@ -536,14 +577,14 @@ InteractivePoly.addInitHook(function () { } }); - this.once('remove', (event) => { + this.once("remove", event => { if (event.target instanceof InteractivePoly) { this.markerLayer.removeFrom(this._map); this.hintMarker.removeFrom(this._map); this.constrLine.removeFrom(this._map); this.touchHinter.removeFrom(this._map); - this.map.off('moveend', this.updateMarkers); + this.map.off("moveend", this.updateMarkers); } }); }); diff --git a/src/modules/Sticker.tsx b/src/modules/Sticker.tsx index ea2bb2b..ef33651 100644 --- a/src/modules/Sticker.tsx +++ b/src/modules/Sticker.tsx @@ -56,6 +56,7 @@ export class Sticker { this.deleteSticker = deleteSticker; this.lockMapClicks = lockMapClicks; this.editor = editor; + this.element = document.createElement('div'); ReactDOM.render( @@ -178,6 +179,8 @@ export class Sticker { }; setAngle = (angle: Props['angle']): void => { + if (!this.stickerImage) return; + const direction = getLabelDirection(angle); if (direction !== this.direction) { diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index ba5bb99..35d8920 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -2,14 +2,18 @@ import { createReducer } from 'reduxsauce'; import { MAP_HANDLERS } from './handlers'; import { DEFAULT_PROVIDER } from '$constants/providers'; import { IMapRoute } from './types'; +import { IStickerDump } from '$modules/Sticker'; export interface IMapReducer { provider: string; route: IMapRoute; + stickers: IStickerDump[] } export const MAP_INITIAL_STATE = { provider: DEFAULT_PROVIDER, + route: [], + stickers: [], } export const map = createReducer(MAP_INITIAL_STATE, MAP_HANDLERS) \ No newline at end of file diff --git a/src/redux/map/selectors.ts b/src/redux/map/selectors.ts index 5b169a8..8a1675b 100644 --- a/src/redux/map/selectors.ts +++ b/src/redux/map/selectors.ts @@ -1,2 +1,5 @@ -export const selectMapProvider = state => state.map.provider; -export const selectMapRoute= state => state.map.route; \ No newline at end of file +import { IState } from "$redux/store"; + +export const selectMapProvider = (state: IState) => state.map.provider; +export const selectMapRoute= (state: IState) => state.map.route; +export const selectMapStickers = (state: IState) => state.map.stickers; \ No newline at end of file diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 9ba905b..d148e84 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -157,8 +157,6 @@ function* loadMapSaga(path) { data: { route, error, random_url } }: Unwrap = yield call(getStoredMap, { name: path }); - console.log({ route }); - if (route && !error) { yield editor.clearAll(); yield editor.setData(route); @@ -172,6 +170,7 @@ function* loadMapSaga(path) { yield put(mapSet({ provider: route.provider, route: route.route, + stickers: route.stickers, })) return { route, random_url }; From 9c3c8cf46dcd31610d914682f45ca6ea89aa4e49 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 16:41:37 +0700 Subject: [PATCH 106/320] passing editing status to map --- src/components/StickerDesc.tsx | 4 +- src/components/dialogs/AppInfoDialog.tsx | 3 +- src/containers/map/Map/index.tsx | 38 ++++++-- src/containers/map/Sticker/index.tsx | 109 ++++++++++++++++++----- src/containers/map/Stickers/index.tsx | 52 ++++++----- src/redux/map/actions.ts | 12 +++ src/redux/map/constants.ts | 3 + src/redux/map/handlers.ts | 22 ++++- src/redux/user/sagas.ts | 32 +++++-- src/redux/user/selectors.ts | 3 + 10 files changed, 213 insertions(+), 65 deletions(-) create mode 100644 src/redux/user/selectors.ts diff --git a/src/components/StickerDesc.tsx b/src/components/StickerDesc.tsx index b4da352..835ea52 100644 --- a/src/components/StickerDesc.tsx +++ b/src/components/StickerDesc.tsx @@ -16,12 +16,10 @@ export class StickerDesc extends React.PureComponent { }; setText = e => { - this.setState({ text: e.target.value }); this.props.onChange(e.target.value); }; blockMouse = e => { - console.log('BM'); e.stopPropagation(); this.input.focus(); }; @@ -30,7 +28,7 @@ export class StickerDesc extends React.PureComponent { // todo: pass here locker for moving markers from Sticker.js render() { - const { text } = this.state; + const { value: text } = this.props; return (
      (
      Frontend:
      diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index 65b8a3e..2c39b00 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -1,30 +1,46 @@ import { Map as MapInterface, map } from "leaflet"; import * as React from "react"; import { createPortal } from "react-dom"; -import { MapContext } from "$utils/context.ts"; -import { selectMapProvider, selectMapRoute, selectMapStickers } from "$redux/map/selectors"; +import { + selectMapProvider, + selectMapRoute, + selectMapStickers +} from "$redux/map/selectors"; import { connect } from "react-redux"; import * as MAP_ACTIONS from "$redux/map/actions"; import { Route } from "$containers/map/Route"; import { TileLayer } from "$containers/map/TileLayer"; import { Stickers } from "$containers/map/Stickers"; +import { selectUserEditing } from '$redux/user/selectors' const mapStateToProps = state => ({ provider: selectMapProvider(state), route: selectMapRoute(state), stickers: selectMapStickers(state), + editing: selectUserEditing(state), }); const mapDispatchToProps = { - mapSetRoute: MAP_ACTIONS.mapSetRoute + mapSetRoute: MAP_ACTIONS.mapSetRoute, + mapDropSticker: MAP_ACTIONS.mapDropSticker, + mapSetSticker: MAP_ACTIONS.mapSetSticker }; type IProps = React.HTMLAttributes & ReturnType & typeof mapDispatchToProps & {}; -const MapUnconnected: React.FC = ({ provider, route, mapSetRoute, stickers }) => { +const MapUnconnected: React.FC = ({ + provider, + route, + stickers, + editing, + + mapSetRoute, + mapSetSticker, + mapDropSticker +}) => { const ref = React.useRef(null); const [maps, setMaps] = React.useState(null); @@ -34,13 +50,17 @@ const MapUnconnected: React.FC = ({ provider, route, mapSetRoute, sticke setMaps(map(ref.current).setView([55.0153275, 82.9071235], 13)); }, [ref]); - // console.log('RERENDER!'); - return createPortal(
      - - - + + +
      , document.getElementById("canvas") ); diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index c487bd3..c2abae4 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -10,27 +10,35 @@ import { createPortal } from "react-dom"; interface IProps { map: Map; sticker: IStickerDump; + index: number; + is_editing: boolean; + + mapSetSticker: (index: number, sticker: IStickerDump) => void; + mapDropSticker: (index: number) => void; } -const preventPropagation = (e): void => { - if (!e || !e.stopPropagation) return; - - e.stopPropagation(); - e.preventDefault(); -}; +export const getLabelDirection = (angle: number): "left" | "right" => + angle % Math.PI >= -(Math.PI / 2) && angle % Math.PI <= Math.PI / 2 + ? "left" + : "right"; const getX = e => e.touches && e.touches.length > 0 ? { pageX: e.touches[0].pageX, pageY: e.touches[0].pageY } : { pageX: e.pageX, pageY: e.pageY }; -const Sticker: React.FC = ({ map, sticker }) => { +const Sticker: React.FC = ({ map, sticker, index, mapSetSticker, mapDropSticker, is_editing }) => { const [layer, setLayer] = React.useState(null); const [dragging, setDragging] = React.useState(false); + const [angle, setAngle] = React.useState(sticker.angle); + const element = React.useMemo(() => document.createElement("div"), []); const stickerArrow = React.useRef(null); const stickerImage = React.useRef(null); + const onChange = React.useCallback(state => mapSetSticker(index, state), [mapSetSticker, index]); + const onDelete = React.useCallback(state => mapDropSticker(index), [mapSetSticker, index]); + const onDragStart = React.useCallback(() => { layer.dragging.disable(); map.dragging.disable(); @@ -43,29 +51,76 @@ const Sticker: React.FC = ({ map, sticker }) => { map.dragging.enable(); setDragging(false); - }, [setDragging, layer, map]); + onChange({ + ...sticker, + angle + }); + }, [setDragging, layer, map, sticker, angle]); - const onDrag = React.useCallback(event => { - // event.stopPrapagation(); - // console.log("drag") - }, []); + const onMoveFinished = React.useCallback(event => { + const target = event.target as Marker; - const onDelete = console.log; - const setText = console.log; + onChange({ + ...sticker, + latlng: target.getLatLng(), + }); + }, [onChange, sticker]); - const direction = React.useMemo(() => "left", [sticker.angle]); + const onDrag = React.useCallback( + event => { + if (!element) return; - const element = React.useMemo(() => document.createElement("div"), []); + const { x, y } = element.getBoundingClientRect() as DOMRect; + const { pageX, pageY } = getX(event); + setAngle(parseFloat(Math.atan2(y - pageY, x - pageX).toFixed(2))); + }, + [element] + ); + + const onTextChange = React.useCallback(text => onChange({ + ...sticker, + text, + }), [sticker, onChange]) + + const direction = React.useMemo(() => getLabelDirection(angle), [angle]); + + // Updates html element accroding to current angle + React.useEffect(() => { + if (!stickerImage.current || !stickerArrow.current) return; + + const x = Math.cos(angle + Math.PI) * 56 - 30; + const y = Math.sin(angle + Math.PI) * 56 - 30; + + stickerImage.current.style.left = String(6 + x); + stickerImage.current.style.top = String(6 + y); + + stickerArrow.current.style.transform = `rotate(${angle + Math.PI}rad)`; + }, [stickerArrow, stickerImage, angle]); + + // Attaches onMoveFinished event to item + React.useEffect(() => { + if (!layer) return; + + layer.addEventListener("dragend", onMoveFinished); + + return () => layer.removeEventListener("dragend", onMoveFinished); + }, [layer, onMoveFinished]); + + // Attaches and detaches handlers when user starts dragging React.useEffect(() => { if (dragging) { document.addEventListener("mousemove", onDrag); - document.addEventListener("mouseUp", onDragStop); + document.addEventListener("mouseup", onDragStop); } - return () => document.removeEventListener("mousemove", onDrag); + return () => { + document.removeEventListener("mousemove", onDrag); + document.removeEventListener("mouseup", onDragStop); + }; }, [dragging, onDrag]); + // Initial leaflet marker creation, when element (dom element div) is ready React.useEffect(() => { if (!map) return; @@ -75,12 +130,24 @@ const Sticker: React.FC = ({ map, sticker }) => { }); const item = marker(sticker.latlng, { icon, draggable: true }).addTo(map); - + setLayer(item); - return () => item.removeFrom(map); + return () => { + item.removeFrom(map); + item.remove(); + } }, [element, map, sticker]); + React.useEffect(() => { + if (is_editing) { + element.className = 'sticker-container'; + + } else { + element.className = 'sticker-container inactive'; + + } + }, [element, is_editing]) return createPortal(
      @@ -88,7 +155,7 @@ const Sticker: React.FC = ({ map, sticker }) => { className={classNames(`sticker-label ${direction}`, {})} ref={stickerImage} > - +
      = React.memo(({ stickers, is_editing, map }) => { - const [layer, setLayer] = React.useState(null); +const Stickers: React.FC = React.memo( + ({ stickers, is_editing, map, mapSetSticker, mapDropSticker }) => { + const [layer, setLayer] = React.useState(null); - React.useEffect(() => { - if (!map) return; + React.useEffect(() => { + if (!map) return; - setLayer(new FeatureGroup().addTo(map)); - }, [map]); + setLayer(new FeatureGroup().addTo(map)); + }, [map]); - return ( -
      - {layer && - stickers.map((sticker, index) => ( - - ))} -
      - ); - // return null; -}); + return ( +
      + {layer && + stickers.map((sticker, index) => ( + + ))} +
      + ); + // return null; + } +); export { Stickers }; diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index ec8a222..49aad53 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -1,5 +1,6 @@ import { MAP_ACTIONS } from "./constants"; import { IMapReducer } from "./"; +import { IStickerDump } from "$modules/Sticker"; export const mapSet = (map: Partial) => ({ type: MAP_ACTIONS.SET_MAP, @@ -15,3 +16,14 @@ export const mapSetRoute = (route: IMapReducer['route']) => ({ type: MAP_ACTIONS.SET_ROUTE, route, }); + +export const mapSetSticker = (index: number, sticker: IStickerDump) => ({ + type: MAP_ACTIONS.SET_STICKER, + index, + sticker, +}); + +export const mapDropSticker = (index: number) => ({ + type: MAP_ACTIONS.DROP_STICKER, + index, +}); diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts index 4e363d9..630c2d1 100644 --- a/src/redux/map/constants.ts +++ b/src/redux/map/constants.ts @@ -4,4 +4,7 @@ export const MAP_ACTIONS = { SET_MAP: `${P}-SET_MAP`, SET_PROVIDER: `${P}-SET_PROVIDER`, SET_ROUTE: `${P}-SET_ROUTE`, + + SET_STICKER: `${P}-SET_STICKER`, + DROP_STICKER: `${P}-DROP_STICKER`, } \ No newline at end of file diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts index 912bd2a..af98fa9 100644 --- a/src/redux/map/handlers.ts +++ b/src/redux/map/handlers.ts @@ -1,6 +1,6 @@ import { MAP_ACTIONS } from "./constants"; import { IMapReducer } from "."; -import { mapSet, mapSetProvider, mapSetRoute } from "./actions"; +import { mapSet, mapSetProvider, mapSetRoute, mapSetSticker } from "./actions"; const setMap = ( state: IMapReducer, @@ -26,8 +26,26 @@ const setRoute = ( route }); +const setSticker = ( + state: IMapReducer, + { sticker, index }: ReturnType +): IMapReducer => ({ + ...state, + stickers: state.stickers.map((item, i) => (i === index ? sticker : item)) +}); + +const dropSticker = ( + state: IMapReducer, + { index }: ReturnType +): IMapReducer => ({ + ...state, + stickers: state.stickers.filter((_, i) => i !== index) +}); + export const MAP_HANDLERS = { [MAP_ACTIONS.SET_MAP]: setMap, [MAP_ACTIONS.SET_PROVIDER]: setProvider, - [MAP_ACTIONS.SET_ROUTE]: setRoute + [MAP_ACTIONS.SET_ROUTE]: setRoute, + [MAP_ACTIONS.SET_STICKER]: setSticker, + [MAP_ACTIONS.DROP_STICKER]: dropSticker, }; diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index d148e84..f5e2683 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -167,11 +167,13 @@ function* loadMapSaga(path) { // TODO: REACTIVE BRANCH: // yield put(mapSetProvider(route.provider)); - yield put(mapSet({ - provider: route.provider, - route: route.route, - stickers: route.stickers, - })) + yield put( + mapSet({ + provider: route.provider, + route: route.route, + stickers: route.stickers + }) + ); return { route, random_url }; } @@ -263,7 +265,7 @@ function* mapInitSaga() { } function* authCheckSaga({ key }: RehydrateAction) { - if (key !== 'user') return; + if (key !== "user") return; pushLoaderState(70); @@ -360,15 +362,31 @@ function* clearSaga({ type }) { case USER_ACTIONS.CLEAR_POLY: yield editor.poly.clearAll(); yield editor.router.clearAll(); + yield put( + mapSet({ + route: [] + }) + ); break; case USER_ACTIONS.CLEAR_STICKERS: yield editor.stickers.clearAll(); + yield put( + mapSet({ + stickers: [] + }) + ); break; case USER_ACTIONS.CLEAR_ALL: yield editor.clearAll(); yield put(setChanged(false)); + yield put( + mapSet({ + route: [], + stickers: [] + }) + ); break; default: @@ -539,7 +557,7 @@ function* changeProviderSaga({ yield put(setProvider(provider)); // TODO: REACTIVE BRANCH - yield put(mapSetProvider(provider)) + yield put(mapSetProvider(provider)); if (current_provider === provider) return; diff --git a/src/redux/user/selectors.ts b/src/redux/user/selectors.ts new file mode 100644 index 0000000..529aad2 --- /dev/null +++ b/src/redux/user/selectors.ts @@ -0,0 +1,3 @@ +import { IState } from '$redux/store' + +export const selectUserEditing = (state: IState) => state.user.editing; \ No newline at end of file From e0048d1fc3289b5ff2713c6b01a57f2145bbd3f1 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 16:51:45 +0700 Subject: [PATCH 107/320] cleanup --- src/containers/map/TileLayer/index.tsx | 2 +- src/styles/stickers.less | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/containers/map/TileLayer/index.tsx b/src/containers/map/TileLayer/index.tsx index 6466e6e..e684c11 100644 --- a/src/containers/map/TileLayer/index.tsx +++ b/src/containers/map/TileLayer/index.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { MapContext, TileContext } from "../../../utils/context"; +import { TileContext } from "../../../utils/context"; import { TileLayer as TileLayerInterface, tileLayer, Map } from "leaflet"; import { DEFAULT_PROVIDER, PROVIDERS } from "$constants/providers"; import { IMapReducer } from "$redux/map"; diff --git a/src/styles/stickers.less b/src/styles/stickers.less index fc98bf4..14fc0d1 100644 --- a/src/styles/stickers.less +++ b/src/styles/stickers.less @@ -28,6 +28,8 @@ } &:active { + transition: transform 250ms; + .sticker-delete { pointer-events: none; } @@ -42,6 +44,7 @@ &.inactive { pointer-events: none; + transition: transform 250ms; .sticker-delete { display: none; From 6db2809de5058afcd76da3e21172cc14155c2526 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 17:35:37 +0700 Subject: [PATCH 108/320] adding stickers on click --- src/components/Cursor.tsx | 5 ++-- src/constants/modes.ts | 5 +--- src/containers/App.tsx | 5 ++-- src/containers/map/Map/index.tsx | 28 ++++++++++++++++----- src/containers/map/Route/index.tsx | 4 +-- src/redux/map/actions.ts | 6 +++++ src/redux/map/constants.ts | 2 ++ src/redux/map/sagas.ts | 40 ++++++++++++++++++++++++++++++ src/redux/store.ts | 2 ++ src/redux/user/index.ts | 2 +- src/redux/user/selectors.ts | 4 ++- 11 files changed, 83 insertions(+), 20 deletions(-) create mode 100644 src/redux/map/sagas.ts diff --git a/src/components/Cursor.tsx b/src/components/Cursor.tsx index 52e8e93..eb0afeb 100644 --- a/src/components/Cursor.tsx +++ b/src/components/Cursor.tsx @@ -1,11 +1,12 @@ import * as React from 'react'; import { Icon } from '$components/panels/Icon'; -import { IModes, MODES } from '$constants/modes'; +import { MODES } from '$constants/modes'; import { IStickerPack, STICKERS } from '$constants/stickers'; import { StickerIcon } from '$components/StickerIcon'; +import { IRootReducer } from '$redux/user'; interface Props { - mode: keyof IModes, + mode: IRootReducer['mode'], sticker: string, set: keyof IStickerPack, } diff --git a/src/constants/modes.ts b/src/constants/modes.ts index 70f5588..e012dc3 100644 --- a/src/constants/modes.ts +++ b/src/constants/modes.ts @@ -1,8 +1,5 @@ -export interface IModes { - [x: string]: string, -} -export const MODES: IModes = { +export const MODES = { POLY: 'POLY', STICKERS: 'STICKERS', STICKERS_SELECT: 'STICKERS_SELECT', diff --git a/src/containers/App.tsx b/src/containers/App.tsx index bd1aa38..e26ea06 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -17,16 +17,15 @@ import { TopRightPanel } from '$components/panels/TopRightPanel'; import { LogoPreview } from '$components/logo/LogoPreview'; import { IStickerPack } from "$constants/stickers"; import { IDialogs } from "$constants/dialogs"; -import { IModes } from "$constants/modes"; import { Map } from "$containers/map/Map" -import { TileLayer } from '$containers/map/TileLayer'; +import { IRootReducer } from '$redux/user'; type Props = { sticker: string, renderer_active: boolean, - mode: keyof IModes, + mode: IRootReducer['mode'], dialog: keyof IDialogs, dialog_active: boolean, set: keyof IStickerPack, diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index 2c39b00..2aa1a64 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -24,7 +24,8 @@ const mapStateToProps = state => ({ const mapDispatchToProps = { mapSetRoute: MAP_ACTIONS.mapSetRoute, mapDropSticker: MAP_ACTIONS.mapDropSticker, - mapSetSticker: MAP_ACTIONS.mapSetSticker + mapSetSticker: MAP_ACTIONS.mapSetSticker, + mapClicked: MAP_ACTIONS.mapClicked }; type IProps = React.HTMLAttributes & @@ -37,26 +38,41 @@ const MapUnconnected: React.FC = ({ stickers, editing, + mapClicked, mapSetRoute, mapSetSticker, mapDropSticker }) => { const ref = React.useRef(null); - const [maps, setMaps] = React.useState(null); + const [layer, setLayer] = React.useState(null); + + const onClick = React.useCallback(event => { + mapClicked(event.latlng); + }, [mapClicked]); React.useEffect(() => { if (!ref.current) return; - setMaps(map(ref.current).setView([55.0153275, 82.9071235], 13)); + setLayer(map(ref.current).setView([55.0153275, 82.9071235], 13)); }, [ref]); + React.useEffect(() => { + if (!layer) return; + + layer.addEventListener("click", onClick) + + return () => { + layer.removeEventListener("click", onClick) + } + }, [layer, onClick]); + return createPortal(
      - - + + = memo(({ route, is_editing, mapSetRoute, map }) => { useEffect(() => { if (!layer) return; - console.log('route use effect!') - const points = (route && route.length > 0 && route) || []; - layer.setPoints(points as LatLng[]); // TODO: refactor this + layer.setPoints(points as LatLng[]); }, [route, layer]); useEffect(() => { diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index 49aad53..c45885b 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -1,6 +1,7 @@ import { MAP_ACTIONS } from "./constants"; import { IMapReducer } from "./"; import { IStickerDump } from "$modules/Sticker"; +import { ILatLng } from "./types"; export const mapSet = (map: Partial) => ({ type: MAP_ACTIONS.SET_MAP, @@ -27,3 +28,8 @@ export const mapDropSticker = (index: number) => ({ type: MAP_ACTIONS.DROP_STICKER, index, }); + +export const mapClicked = (latlng: ILatLng) => ({ + type: MAP_ACTIONS.MAP_CLICKED, + latlng, +}); diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts index 630c2d1..e9317fc 100644 --- a/src/redux/map/constants.ts +++ b/src/redux/map/constants.ts @@ -7,4 +7,6 @@ export const MAP_ACTIONS = { SET_STICKER: `${P}-SET_STICKER`, DROP_STICKER: `${P}-DROP_STICKER`, + + MAP_CLICKED: `${P}-MAP_CLICKED` } \ No newline at end of file diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts new file mode 100644 index 0000000..abfbdc1 --- /dev/null +++ b/src/redux/map/sagas.ts @@ -0,0 +1,40 @@ +import { takeEvery, select, put } from "redux-saga/effects"; +import { MAP_ACTIONS } from "./constants"; +import { mapClicked, mapSet } from "./actions"; +import { selectUserMode, selectUserActiveSticker } from "$redux/user/selectors"; +import { IRootReducer } from "$redux/user"; +import { MODES } from "$constants/modes"; +import { selectMapStickers } from "./selectors"; +import { setActiveSticker, setMode } from "$redux/user/actions"; + +function* onMapClick({ latlng }: ReturnType) { + const mode = yield select(selectUserMode); + const { set, sticker } = yield select(selectUserActiveSticker); + const stickers = yield select(selectMapStickers); + + switch (mode) { + case MODES.STICKERS: + yield put( + mapSet({ + stickers: [ + ...stickers, + { + latlng, + set, + sticker, + text: "", + angle: 0, + } + ] + }) + ); + yield put(setMode(MODES.NONE)) + break; + + default: + } +} + +export function* mapSaga() { + yield takeEvery(MAP_ACTIONS.MAP_CLICKED, onMapClick); +} diff --git a/src/redux/store.ts b/src/redux/store.ts index 5774cd6..377c853 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -6,6 +6,7 @@ import createSagaMiddleware from 'redux-saga'; import { userReducer, IRootReducer } from '$redux/user'; import { userSaga } from '$redux/user/sagas'; +import { mapSaga } from '$redux/map/sagas'; import { createBrowserHistory } from 'history'; import { locationChanged } from '$redux/user/actions'; import { PersistConfig, Persistor } from "redux-persist/es/types"; @@ -42,6 +43,7 @@ export const store = createStore( export function configureStore(): { store: Store, persistor: Persistor } { sagaMiddleware.run(userSaga); + sagaMiddleware.run(mapSaga); const persistor = persistStore(store); diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 4cfae99..1bc464f 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -37,7 +37,7 @@ export interface IRootReducer { ready: boolean, user: IUser, editing: boolean, - mode: keyof typeof MODES, + mode: typeof MODES[keyof typeof MODES], logo: keyof typeof LOGOS, routerPoints: number, distance: number, diff --git a/src/redux/user/selectors.ts b/src/redux/user/selectors.ts index 529aad2..5fec11b 100644 --- a/src/redux/user/selectors.ts +++ b/src/redux/user/selectors.ts @@ -1,3 +1,5 @@ import { IState } from '$redux/store' -export const selectUserEditing = (state: IState) => state.user.editing; \ No newline at end of file +export const selectUserEditing = (state: IState) => state.user.editing; +export const selectUserMode = (state: IState) => state.user.mode; +export const selectUserActiveSticker = (state: IState) => state.user.activeSticker; \ No newline at end of file From 848fa9fd0290d35a52795be1c94cc22906b87d5d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 17:56:19 +0700 Subject: [PATCH 109/320] cleanup --- src/containers/map/Sticker/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index c2abae4..203987b 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -148,6 +148,7 @@ const Sticker: React.FC = ({ map, sticker, index, mapSetSticker, mapDrop } }, [element, is_editing]) + return createPortal(
      From 9f8cb1a875ad9e8059f092c0a5d3cadc2d217af0 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 17:59:02 +0700 Subject: [PATCH 110/320] cleanup --- src/containers/map/Sticker/index.tsx | 64 +++++++++++++++++----------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index 203987b..c91fb5d 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -27,7 +27,14 @@ const getX = e => ? { pageX: e.touches[0].pageX, pageY: e.touches[0].pageY } : { pageX: e.pageX, pageY: e.pageY }; -const Sticker: React.FC = ({ map, sticker, index, mapSetSticker, mapDropSticker, is_editing }) => { +const Sticker: React.FC = ({ + map, + sticker, + index, + mapSetSticker, + mapDropSticker, + is_editing +}) => { const [layer, setLayer] = React.useState(null); const [dragging, setDragging] = React.useState(false); const [angle, setAngle] = React.useState(sticker.angle); @@ -36,8 +43,14 @@ const Sticker: React.FC = ({ map, sticker, index, mapSetSticker, mapDrop const stickerArrow = React.useRef(null); const stickerImage = React.useRef(null); - const onChange = React.useCallback(state => mapSetSticker(index, state), [mapSetSticker, index]); - const onDelete = React.useCallback(state => mapDropSticker(index), [mapSetSticker, index]); + const onChange = React.useCallback(state => mapSetSticker(index, state), [ + mapSetSticker, + index + ]); + const onDelete = React.useCallback(state => mapDropSticker(index), [ + mapSetSticker, + index + ]); const onDragStart = React.useCallback(() => { layer.dragging.disable(); @@ -57,14 +70,17 @@ const Sticker: React.FC = ({ map, sticker, index, mapSetSticker, mapDrop }); }, [setDragging, layer, map, sticker, angle]); - const onMoveFinished = React.useCallback(event => { - const target = event.target as Marker; + const onMoveFinished = React.useCallback( + event => { + const target = event.target as Marker; - onChange({ - ...sticker, - latlng: target.getLatLng(), - }); - }, [onChange, sticker]); + onChange({ + ...sticker, + latlng: target.getLatLng() + }); + }, + [onChange, sticker] + ); const onDrag = React.useCallback( event => { @@ -78,10 +94,14 @@ const Sticker: React.FC = ({ map, sticker, index, mapSetSticker, mapDrop [element] ); - const onTextChange = React.useCallback(text => onChange({ - ...sticker, - text, - }), [sticker, onChange]) + const onTextChange = React.useCallback( + text => + onChange({ + ...sticker, + text + }), + [sticker, onChange] + ); const direction = React.useMemo(() => getLabelDirection(angle), [angle]); @@ -130,24 +150,20 @@ const Sticker: React.FC = ({ map, sticker, index, mapSetSticker, mapDrop }); const item = marker(sticker.latlng, { icon, draggable: true }).addTo(map); - + setLayer(item); return () => { item.removeFrom(map); item.remove(); - } + }; }, [element, map, sticker]); React.useEffect(() => { - if (is_editing) { - element.className = 'sticker-container'; - - } else { - element.className = 'sticker-container inactive'; - - } - }, [element, is_editing]) + element.className = is_editing + ? "sticker-container" + : "sticker-container inactive"; + }, [element, is_editing]); return createPortal( From b75c028ce17bf80b876a2c6559449c8b4f3a8ef2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 21:01:01 +0700 Subject: [PATCH 111/320] separated map and user reducers --- .prettierrc | 5 + src/components/UserLocation.tsx | 139 +++---- src/containers/map/Map/index.tsx | 8 +- src/index.html | 3 +- src/redux/map/actions.ts | 30 ++ src/redux/map/constants.ts | 6 + src/redux/map/handlers.ts | 76 +++- src/redux/map/index.ts | 14 +- src/redux/map/sagas.ts | 335 ++++++++++++++-- src/redux/map/selectors.ts | 1 + src/redux/user/sagas.ts | 657 ++++++++----------------------- src/redux/user/selectors.ts | 2 + src/styles/map.less | 2 +- src/utils/renderer.ts | 339 +++++++++------- 14 files changed, 849 insertions(+), 768 deletions(-) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..789ac2e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "es5" +} diff --git a/src/components/UserLocation.tsx b/src/components/UserLocation.tsx index 191ad42..7dd0e7f 100644 --- a/src/components/UserLocation.tsx +++ b/src/components/UserLocation.tsx @@ -1,78 +1,81 @@ import * as React from 'react'; -import { marker } from 'leaflet'; -import { DomMarker } from '$utils/DomMarker'; -import { Icon } from '$components/panels/Icon'; -import { editor } from '$modules/Editor'; +// import { marker } from 'leaflet'; +// import { DomMarker } from '$utils/DomMarker'; +// import { Icon } from '$components/panels/Icon'; +// import { editor } from '$modules/Editor'; interface Props { } export class UserLocation extends React.Component { - constructor(props) { - super(props); - - const element = document.createElement('div'); - this.icon = new DomMarker({ element, className: 'location-marker' }); - - this.map = editor.map.map; - this.location = []; - } - - icon; - mark = null; - map; - location; - - componentDidMount() { - this.getUserLocation(this.updateLocationMark); - } - - getUserLocation = callback => { - // todo: TO SAGAS - if (!window.navigator || !window.navigator.geolocation) return; - - window.navigator.geolocation.getCurrentPosition(position => { - if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) return; - - const { latitude, longitude } = position.coords; - - callback(latitude, longitude); - }); - }; - - centerMapOnLocation = () => { - if (this.location && this.location.length === 2) { - this.panMapTo(this.location[0], this.location[1]); - } else { - this.getUserLocation(this.panMapTo); - } - - this.getUserLocation(this.updateLocationMark); - }; - - panMapTo = (latitude, longitude) => { - if (!latitude || !longitude) return; - - this.map.panTo([latitude, longitude]); - }; - - updateLocationMark = (latitude, longitude) => { - if (!latitude || !longitude) return; - - if (this.mark) this.map.removeLayer(this.mark); - - this.location = [latitude, longitude]; - this.mark = marker(this.location, { icon: this.icon }).addTo(this.map); - }; - render() { - return ( -
      -
      - -
      -
      - ); + return null } + // constructor(props) { + // super(props); + + // const element = document.createElement('div'); + // this.icon = new DomMarker({ element, className: 'location-marker' }); + + // // this.map = editor.map.map; + // this.location = []; + // } + + // icon; + // mark = null; + // map; + // location; + + // componentDidMount() { + // this.getUserLocation(this.updateLocationMark); + // } + + // getUserLocation = callback => { + // // todo: TO SAGAS + // if (!window.navigator || !window.navigator.geolocation) return; + + // window.navigator.geolocation.getCurrentPosition(position => { + // if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) return; + + // const { latitude, longitude } = position.coords; + + // callback(latitude, longitude); + // }); + // }; + + // centerMapOnLocation = () => { + // if (this.location && this.location.length === 2) { + // this.panMapTo(this.location[0], this.location[1]); + // } else { + // this.getUserLocation(this.panMapTo); + // } + + // this.getUserLocation(this.updateLocationMark); + // }; + + // panMapTo = (latitude, longitude) => { + // if (!latitude || !longitude) return; + + // this.map.panTo([latitude, longitude]); + // }; + + // updateLocationMark = (latitude, longitude) => { + // if (!latitude || !longitude) return; + + // if (this.mark) this.map.removeLayer(this.mark); + + // this.location = [latitude, longitude]; + // this.mark = marker(this.location, { icon: this.icon }).addTo(this.map); + // }; + + // render() { + // return ( + //
      + //
      + // + //
      + //
      + // ); + // } } diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index 2aa1a64..fc493ff 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -14,6 +14,8 @@ import { TileLayer } from "$containers/map/TileLayer"; import { Stickers } from "$containers/map/Stickers"; import { selectUserEditing } from '$redux/user/selectors' +import 'leaflet/dist/leaflet.css'; + const mapStateToProps = state => ({ provider: selectMapProvider(state), route: selectMapRoute(state), @@ -32,6 +34,8 @@ type IProps = React.HTMLAttributes & ReturnType & typeof mapDispatchToProps & {}; +export let MainMap = map(document.getElementById('canvas')).setView([55.0153275, 82.9071235], 13); + const MapUnconnected: React.FC = ({ provider, route, @@ -53,8 +57,8 @@ const MapUnconnected: React.FC = ({ React.useEffect(() => { if (!ref.current) return; - setLayer(map(ref.current).setView([55.0153275, 82.9071235], 13)); - }, [ref]); + setLayer(MainMap); + }, []); React.useEffect(() => { if (!layer) return; diff --git a/src/index.html b/src/index.html index 3acea9a..0917b3d 100644 --- a/src/index.html +++ b/src/index.html @@ -131,8 +131,7 @@ -
      -
      +
      diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index c45885b..13a8966 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -24,6 +24,11 @@ export const mapSetSticker = (index: number, sticker: IStickerDump) => ({ sticker, }); +export const mapAddSticker = (sticker: IStickerDump) => ({ + type: MAP_ACTIONS.ADD_STICKER, + sticker, +}); + export const mapDropSticker = (index: number) => ({ type: MAP_ACTIONS.DROP_STICKER, index, @@ -33,3 +38,28 @@ export const mapClicked = (latlng: ILatLng) => ({ type: MAP_ACTIONS.MAP_CLICKED, latlng, }); + +export const mapSetTitle = (title: string) => ({ + type: MAP_ACTIONS.SET_TITLE, + title, +}); + +export const mapSetDescription = (description: string) => ({ + type: MAP_ACTIONS.SET_DESCRIPTION, + description, +}); + +export const mapSetAddress = (address: string) => ({ + type: MAP_ACTIONS.SET_ADDRESS, + address, +}); + +export const mapSetOwner = (owner: IMapReducer['owner']) => ({ + type: MAP_ACTIONS.SET_DESCRIPTION, + owner, +}); + +export const mapSetPublic = (is_public: IMapReducer['is_public']) => ({ + type: MAP_ACTIONS.SET_PUBLIC, + is_public, +}); diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts index e9317fc..9bfb6bf 100644 --- a/src/redux/map/constants.ts +++ b/src/redux/map/constants.ts @@ -4,7 +4,13 @@ export const MAP_ACTIONS = { SET_MAP: `${P}-SET_MAP`, SET_PROVIDER: `${P}-SET_PROVIDER`, SET_ROUTE: `${P}-SET_ROUTE`, + SET_TITLE: `${P}-SET_TILE`, + SET_DESCRIPTION: `${P}-SETDESCRIPTION`, + SET_ADDRESS: `${P}-SET_ADDRESS`, + SET_OWNER: `${P}-SET_OWNER`, + SET_PUBLIC: `${P}-SET_PUBLIC`, + ADD_STICKER: `${P}-ADD_STICKER`, SET_STICKER: `${P}-SET_STICKER`, DROP_STICKER: `${P}-DROP_STICKER`, diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts index af98fa9..dbfb5d7 100644 --- a/src/redux/map/handlers.ts +++ b/src/redux/map/handlers.ts @@ -1,13 +1,21 @@ -import { MAP_ACTIONS } from "./constants"; -import { IMapReducer } from "."; -import { mapSet, mapSetProvider, mapSetRoute, mapSetSticker } from "./actions"; +import { MAP_ACTIONS } from './constants'; +import { IMapReducer } from '.'; +import { + mapSet, + mapSetProvider, + mapSetRoute, + mapSetSticker, + mapAddSticker, + mapSetTitle, + mapSetAddress, + mapSetDescription, + mapSetOwner, + mapSetPublic, +} from './actions'; -const setMap = ( - state: IMapReducer, - { map }: ReturnType -): IMapReducer => ({ +const setMap = (state: IMapReducer, { map }: ReturnType): IMapReducer => ({ ...state, - ...map + ...map, }); const setProvider = ( @@ -15,15 +23,12 @@ const setProvider = ( { provider }: ReturnType ): IMapReducer => ({ ...state, - provider + provider, }); -const setRoute = ( - state: IMapReducer, - { route }: ReturnType -): IMapReducer => ({ +const setRoute = (state: IMapReducer, { route }: ReturnType): IMapReducer => ({ ...state, - route + route, }); const setSticker = ( @@ -31,7 +36,7 @@ const setSticker = ( { sticker, index }: ReturnType ): IMapReducer => ({ ...state, - stickers: state.stickers.map((item, i) => (i === index ? sticker : item)) + stickers: state.stickers.map((item, i) => (i === index ? sticker : item)), }); const dropSticker = ( @@ -39,7 +44,40 @@ const dropSticker = ( { index }: ReturnType ): IMapReducer => ({ ...state, - stickers: state.stickers.filter((_, i) => i !== index) + stickers: state.stickers.filter((_, i) => i !== index), +}); + +const addSticker = ( + state: IMapReducer, + { sticker }: ReturnType +): IMapReducer => ({ + ...state, + stickers: [...state.stickers, sticker], +}); + +const setTitle = (state: IMapReducer, { title }: ReturnType): IMapReducer => ({ + ...state, + title, +}); + +const setAddress = (state: IMapReducer, { address }: ReturnType): IMapReducer => ({ + ...state, + address, +}); + +const setDescription = (state: IMapReducer, { description }: ReturnType): IMapReducer => ({ + ...state, + description, +}); + +const setOwner = (state: IMapReducer, { owner }: ReturnType): IMapReducer => ({ + ...state, + owner, +}); + +const setPublic = (state: IMapReducer, { is_public }: ReturnType): IMapReducer => ({ + ...state, + is_public, }); export const MAP_HANDLERS = { @@ -48,4 +86,10 @@ export const MAP_HANDLERS = { [MAP_ACTIONS.SET_ROUTE]: setRoute, [MAP_ACTIONS.SET_STICKER]: setSticker, [MAP_ACTIONS.DROP_STICKER]: dropSticker, + [MAP_ACTIONS.ADD_STICKER]: addSticker, + [MAP_ACTIONS.SET_TITLE]: setTitle, + [MAP_ACTIONS.SET_ADDRESS]: setAddress, + [MAP_ACTIONS.SET_DESCRIPTION]: setDescription, + [MAP_ACTIONS.SET_OWNER]: setOwner, + [MAP_ACTIONS.SET_PUBLIC]: setPublic, }; diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index 35d8920..41ecff2 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -7,13 +7,23 @@ import { IStickerDump } from '$modules/Sticker'; export interface IMapReducer { provider: string; route: IMapRoute; - stickers: IStickerDump[] + stickers: IStickerDump[]; + title: string; + address: string; + description: string; + owner: { id: string }; + is_public: boolean; } -export const MAP_INITIAL_STATE = { +export const MAP_INITIAL_STATE: IMapReducer = { provider: DEFAULT_PROVIDER, route: [], stickers: [], + title: '', + address: '', + description: '', + owner: { id: null }, + is_public: false, } export const map = createReducer(MAP_INITIAL_STATE, MAP_HANDLERS) \ No newline at end of file diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index abfbdc1..6acec43 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -1,40 +1,323 @@ -import { takeEvery, select, put } from "redux-saga/effects"; -import { MAP_ACTIONS } from "./constants"; -import { mapClicked, mapSet } from "./actions"; -import { selectUserMode, selectUserActiveSticker } from "$redux/user/selectors"; -import { IRootReducer } from "$redux/user"; -import { MODES } from "$constants/modes"; -import { selectMapStickers } from "./selectors"; -import { setActiveSticker, setMode } from "$redux/user/actions"; +import { takeEvery, select, put, call, TakeEffect, race, take, takeLatest } from 'redux-saga/effects'; +import { MAP_ACTIONS } from './constants'; +import { mapClicked, mapAddSticker, mapSetProvider, mapSet, mapSetTitle, mapSetAddress, mapSetDescription, mapSetOwner, mapSetPublic } from './actions'; +import { selectUserMode, selectUserActiveSticker, selectUser, selectUserUser } from '$redux/user/selectors'; +import { MODES } from '$constants/modes'; +import { + setMode, + setChanged, + setAddressOrigin, + setEditing, + setReady, + setActiveSticker, + setSaveError, + setSaveLoading, + sendSaveRequest, + setSaveSuccess, + setSaveOverwrite, +} from '$redux/user/actions'; +import { pushLoaderState, getUrlData, pushPath, replacePath } from '$utils/history'; +import { setReadySaga, searchSetSagaWorker } from '$redux/user/sagas'; +import { getStoredMap, postMap } from '$utils/api'; +import { Unwrap } from '$utils/middleware'; +import { DEFAULT_PROVIDER } from '$constants/providers'; +import { USER_ACTIONS } from '$redux/user/constants'; +import { selectMap } from './selectors'; +import { TIPS } from '$constants/tips'; +import { delay } from 'redux-saga'; function* onMapClick({ latlng }: ReturnType) { const mode = yield select(selectUserMode); const { set, sticker } = yield select(selectUserActiveSticker); - const stickers = yield select(selectMapStickers); switch (mode) { case MODES.STICKERS: - yield put( - mapSet({ - stickers: [ - ...stickers, - { - latlng, - set, - sticker, - text: "", - angle: 0, - } - ] - }) - ); - yield put(setMode(MODES.NONE)) + yield put(mapAddSticker({ latlng, set, sticker, text: '', angle: 0 })); + yield put(setMode(MODES.NONE)); break; default: } } -export function* mapSaga() { - yield takeEvery(MAP_ACTIONS.MAP_CLICKED, onMapClick); +// function* changeProviderSaga({ provider }: ReturnType) { +// const { provider: current_provider } = yield select(selectUser); + +// yield put(mapSetProvider(provider)); + +// if (current_provider === provider) return; + +// yield put(setChanged(true)); + +// return put(setMode(MODES.NONE)); +// } + +function* setLogoSaga({ logo }: { type: string; logo: string }) { + const { mode } = yield select(selectUser); + + yield put(setChanged(true)); + + if (mode === MODES.LOGO) { + yield put(setMode(MODES.NONE)); + } +} + +export function* replaceAddressIfItsBusy(destination, original) { + if (original) { + yield put(setAddressOrigin(original)); + } + + pushPath(`/${destination}/edit`); +} + +export function* loadMapSaga(path) { + const { + data: { route, error, random_url }, + }: Unwrap = yield call(getStoredMap, { name: path }); + + if (route && !error) { + // TODO: set initial data + // TODO: fit bounds + + yield put( + mapSet({ + provider: route.provider, + route: route.route, + stickers: route.stickers, + title: route.title, + }) + ); + + return { route, random_url }; + } + + return null; +} + +function* startEmptyEditorSaga() { + const { + user: { id, random_url }, + provider = DEFAULT_PROVIDER, + } = yield select(selectUser); + + // TODO: set owner { id } + pushPath(`/${random_url}/edit`); + + yield put(setChanged(false)); + yield put(setEditing(true)); + + return yield call(setReadySaga); +} + +export function* mapInitSaga() { + pushLoaderState(90); + + const { path, mode, hash } = getUrlData(); + const { + provider, + user: { id }, + } = yield select(selectUser); + + yield put(mapSetProvider(provider)); + + if (hash && /^#map/.test(hash)) { + const [, newUrl] = hash.match(/^#map[:/?!](.*)$/); + + if (newUrl) { + yield pushPath(`/${newUrl}`); + yield call(setReadySaga); + return; + } + } + + if (path) { + const map = yield call(loadMapSaga, path); + + if (map && map.route) { + if (mode && mode === 'edit') { + if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { + yield call(setReadySaga); + yield call(replaceAddressIfItsBusy, map.random_url, map.address); + } else { + yield put(setAddressOrigin('')); + } + + yield put(setEditing(true)); + // TODO: start editing + } else { + yield put(setEditing(false)); + // TODO: stop editing + } + + yield call(setReadySaga); + return true; + } + } + + yield call(startEmptyEditorSaga); + yield put(setReady(true)); + + pushLoaderState(100); + + return true; +} + +function* setActiveStickerSaga() { + yield put(setMode(MODES.STICKERS)); +} + +function* setTitleSaga({ title }: ReturnType) { + if (title) { + document.title = `${title} | Редактор маршрутов`; + } +} + +function* clearSaga({ type }) { + switch (type) { + case USER_ACTIONS.CLEAR_POLY: + // TODO: clear router waypoints + yield put( + mapSet({ + route: [], + }) + ); + break; + + case USER_ACTIONS.CLEAR_STICKERS: + yield put( + mapSet({ + stickers: [], + }) + ); + break; + + case USER_ACTIONS.CLEAR_ALL: + yield put(setChanged(false)); + yield put( + mapSet({ + route: [], + stickers: [], + }) + ); + break; + + default: + break; + } + + yield put(setActiveSticker(null)); // TODO: move to maps + yield put(setMode(MODES.NONE)); +} + +function* sendSaveRequestSaga({ + title, + address, + force, + is_public, + description, +}: ReturnType) { + const { route, stickers, provider } = yield select(selectMap); + + if (!route.length && !stickers.length) { + return yield put(setSaveError(TIPS.SAVE_EMPTY)); // TODO: move setSaveError to editor + } + + const { logo, distance } = yield select(selectUser); + const { token } = yield select(selectUserUser); + + yield put(setSaveLoading(true)); // TODO: move setSaveLoading to maps + + const { + result, + timeout, + cancel, + }: { + result: Unwrap; + timeout: boolean; + cancel: TakeEffect; + } = yield race({ + result: postMap({ + token, + route, + stickers, + title, + force, + address, + logo, + distance, + provider, + is_public, + description, + }), + timeout: delay(10000), + cancel: take(USER_ACTIONS.RESET_SAVE_DIALOG), + }); + + yield put(setSaveLoading(false)); + + if (cancel) return yield put(setMode(MODES.NONE)); + + if (result && result.data.code === 'already_exist') return yield put(setSaveOverwrite()); // TODO: move setSaveOverwrite to editor + if (result && result.data.code === 'conflict') return yield put(setSaveError(TIPS.SAVE_EXISTS)); + if (timeout || !result || !result.data.route || !result.data.route.address) + return yield put(setSaveError(TIPS.SAVE_TIMED_OUT)); + + return yield put( // TODO: move setSaveSuccess to editor + setSaveSuccess({ + address: result.data.route.address, + title: result.data.route.title, + is_public: result.data.route.is_public, + description: result.data.route.description, + + save_error: TIPS.SAVE_SUCCESS, + }) + ); +} + +function* setSaveSuccessSaga({ + address, + title, + is_public, + description, +}: ReturnType) { + const { id } = yield select(selectUser); + const { dialog_active } = yield select(selectUser); + + replacePath(`/${address}/edit`); + + yield put(mapSetTitle(title)); + yield put(mapSetAddress(address)); + yield put(mapSetPublic(is_public)); + yield put(mapSetDescription(description)); + yield put(setChanged(false)); + yield put(mapSetOwner({ id })); + + if (dialog_active) { + yield call(searchSetSagaWorker); + } + + // yield editor.setInitialData(); + // TODO: set initial data here + + return +} + +export function* mapSaga() { + yield takeEvery(USER_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); // TODO: move active sticker to maps + yield takeEvery(MAP_ACTIONS.MAP_CLICKED, onMapClick); + yield takeEvery(MAP_ACTIONS.SET_TITLE, setTitleSaga); + yield takeEvery(USER_ACTIONS.SET_LOGO, setLogoSaga); + yield takeLatest(USER_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); + yield takeLatest(USER_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); + + yield takeEvery( + // TODO: move all actions to MAP + [ + USER_ACTIONS.CLEAR_POLY, + USER_ACTIONS.CLEAR_STICKERS, + USER_ACTIONS.CLEAR_ALL, + USER_ACTIONS.CLEAR_CANCEL, + ], + clearSaga + ); } diff --git a/src/redux/map/selectors.ts b/src/redux/map/selectors.ts index 8a1675b..6bceeda 100644 --- a/src/redux/map/selectors.ts +++ b/src/redux/map/selectors.ts @@ -1,5 +1,6 @@ import { IState } from "$redux/store"; +export const selectMap = (state: IState) => state.map; export const selectMapProvider = (state: IState) => state.map.provider; export const selectMapRoute= (state: IState) => state.map.route; export const selectMapStickers = (state: IState) => state.map.stickers; \ No newline at end of file diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index f5e2683..ce04081 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -1,5 +1,5 @@ -import { REHYDRATE, RehydrateAction } from "redux-persist"; -import { delay, SagaIterator } from "redux-saga"; +import { REHYDRATE, RehydrateAction } from 'redux-persist'; +import { delay, SagaIterator } from 'redux-saga'; import { takeLatest, select, @@ -7,9 +7,7 @@ import { put, takeEvery, race, - take, - TakeEffect -} from "redux-saga/effects"; +} from 'redux-saga/effects'; import { checkIframeToken, checkOSRMService, @@ -17,56 +15,41 @@ import { dropRoute, getGuestToken, getRouteList, - getStoredMap, modifyRoute, - postMap, - sendRouteStarred -} from "$utils/api"; + sendRouteStarred, +} from '$utils/api'; import { hideRenderer, searchPutRoutes, searchSetLoading, - setActiveSticker, - setAddress, setChanged, setDialogActive, setEditing, setMode, setReady, setRenderer, - setSaveError, - setSaveOverwrite, - setSaveSuccess, - setTitle, searchSetTab, setUser, setDialog, - setPublic, setAddressOrigin, - setProvider, - changeProvider, - setSaveLoading, mapsSetShift, searchChangeDistance, clearAll, setFeature, searchSetTitle, setRouteStarred, - setDescription -} from "$redux/user/actions"; +} from '$redux/user/actions'; + import { getUrlData, parseQuery, pushLoaderState, pushNetworkInitError, pushPath, - replacePath -} from "$utils/history"; -import { editor } from "$modules/Editor"; -import { USER_ACTIONS } from "$redux/user/constants"; -import { MODES } from "$constants/modes"; -import { DEFAULT_USER, IUser } from "$constants/auth"; -import { TIPS } from "$constants/tips"; +} from '$utils/history'; +import { USER_ACTIONS } from '$redux/user/constants'; +import { MODES } from '$constants/modes'; +import { DEFAULT_USER } from '$constants/auth'; import { composeArrows, composeDistMark, @@ -78,32 +61,33 @@ import { getPolyPlacement, getStickersPlacement, getTilePlacement, - imageFetcher -} from "$utils/renderer"; -import { LOGOS } from "$constants/logos"; -import { DEFAULT_PROVIDER } from "$constants/providers"; -import { DIALOGS, TABS } from "$constants/dialogs"; + imageFetcher, +} from '$utils/renderer'; +import { LOGOS } from '$constants/logos'; +import { DIALOGS, TABS } from '$constants/dialogs'; -import * as ActionCreators from "$redux/user/actions"; -import { IRootState } from "$redux/user"; -import { downloadGPXTrack, getGPXString } from "$utils/gpx"; -import { Unwrap } from "$utils/middleware"; -import { IState } from "$redux/store"; -import { mapSetProvider, mapSet } from "$redux/map/actions"; +import * as ActionCreators from '$redux/user/actions'; +import { downloadGPXTrack, getGPXString } from '$utils/gpx'; +import { Unwrap } from '$utils/middleware'; +import { IState } from '$redux/store'; +import { selectUser, selectUserUser } from './selectors'; +import { mapInitSaga, loadMapSaga, replaceAddressIfItsBusy } from '$redux/map/sagas'; +import { LatLng } from 'leaflet'; +import { selectMap } from '$redux/map/selectors'; -const getUser = (state: IState) => state.user.user; -const getState = (state: IState) => state.user; +// const getUser = (state: IState) => state.user.user; +// const selectUser = (state: IState) => state.user; const hideLoader = () => { - document.getElementById("loader").style.opacity = String(0); - document.getElementById("loader").style.pointerEvents = "none"; + document.getElementById('loader').style.opacity = String(0); + document.getElementById('loader').style.pointerEvents = 'none'; return true; }; function* generateGuestSaga() { const { - data: { user, random_url } + data: { user, random_url }, }: Unwrap = yield call(getGuestToken); yield put(setUser({ ...user, random_url })); @@ -111,31 +95,13 @@ function* generateGuestSaga() { return { ...user, random_url }; } -function* startEmptyEditorSaga() { - const { - user: { id, random_url }, - provider = DEFAULT_PROVIDER - } = yield select(getState); - - pushPath(`/${random_url}/edit`); - - editor.owner = id; - editor.setProvider(provider); - editor.startEditing(); - - yield put(setChanged(false)); - yield put(setEditing(true)); - - return yield call(setReadySaga); -} - function* startEditingSaga() { const { path } = getUrlData(); yield pushPath(`/${path}/edit`); } function* stopEditingSaga() { - const { changed, editing, mode, address_origin } = yield select(getState); + const { changed, editing, mode, address_origin } = yield select(selectUser); const { path } = getUrlData(); if (!editing) return; @@ -144,60 +110,23 @@ function* stopEditingSaga() { return; } - yield editor.cancelEditing(); + // TODO: cancel editing? + // yield editor.cancelEditing(); yield put(setMode(MODES.NONE)); yield put(setChanged(false)); - yield put(setEditing(editor.hasEmptyHistory)); // don't close editor if no previous map + // TODO: dont close editor if theres no initial data + // yield put(setEditing(editor.hasEmptyHistory)); // don't close editor if no previous map yield pushPath(`/${address_origin || path}/`); } -function* loadMapSaga(path) { - const { - data: { route, error, random_url } - }: Unwrap = yield call(getStoredMap, { name: path }); - - if (route && !error) { - yield editor.clearAll(); - yield editor.setData(route); - yield editor.fitDrawing(); - yield editor.setInitialData(); - - yield put(setChanged(false)); - - // TODO: REACTIVE BRANCH: - // yield put(mapSetProvider(route.provider)); - yield put( - mapSet({ - provider: route.provider, - route: route.route, - stickers: route.stickers - }) - ); - - return { route, random_url }; - } - - return null; -} - -function* replaceAddressIfItsBusy(destination, original) { - if (original) { - yield put(setAddressOrigin(original)); - } - - pushPath(`/${destination}/edit`); -} - function* checkOSRMServiceSaga() { - const north_east = editor.map.map.getBounds().getNorthEast(); - const south_west = editor.map.map.getBounds().getSouthWest(); - const routing = yield call(checkOSRMService, [north_east, south_west]); + const routing = yield call(checkOSRMService, [new LatLng(1,1), new LatLng(2,2)]); yield put(setFeature({ routing })); } -function* setReadySaga() { +export function* setReadySaga() { yield put(setReady(true)); hideLoader(); @@ -205,72 +134,13 @@ function* setReadySaga() { yield put(searchSetTab(TABS.MY)); } -function* mapInitSaga() { - pushLoaderState(90); - - const { path, mode, hash } = getUrlData(); - const { - provider, - user: { id } - } = yield select(getState); - - editor.map.setProvider(provider); - yield put(changeProvider(provider)); - - if (hash && /^#map/.test(hash)) { - const [, newUrl] = hash.match(/^#map[:/?!](.*)$/); - - if (newUrl) { - yield pushPath(`/${newUrl}`); - return yield call(setReadySaga); - } - } - - if (path) { - const map = yield call(loadMapSaga, path); - - if (map && map.route) { - if (mode && mode === "edit") { - if ( - map && - map.route && - map.route.owner && - mode === "edit" && - map.route.owner !== id - ) { - yield call(setReadySaga); - yield call(replaceAddressIfItsBusy, map.random_url, map.address); - } else { - yield put(setAddressOrigin("")); - } - - yield put(setEditing(true)); - editor.startEditing(); - } else { - yield put(setEditing(false)); - editor.stopEditing(); - } - - yield call(setReadySaga); - return true; - } - } - - yield call(startEmptyEditorSaga); - yield put(setReady(true)); - - pushLoaderState(100); - - return true; -} - function* authCheckSaga({ key }: RehydrateAction) { - if (key !== "user") return; + if (key !== 'user') return; pushLoaderState(70); - const { id, token } = yield select(getUser); - const { ready } = yield select(getState); + const { id, token } = yield select(selectUserUser); + const { ready } = yield select(selectUser); if (window.location.search || true) { const { viewer_id, auth_key } = yield parseQuery(window.location.search); @@ -290,10 +160,10 @@ function* authCheckSaga({ key }: RehydrateAction) { if (id && token) { const { - data: { user, random_url } + data: { user, random_url }, }: Unwrap = yield call(checkUserToken, { id, - token + token, }); if (user) { @@ -315,180 +185,69 @@ function* authCheckSaga({ key }: RehydrateAction) { return yield call(mapInitSaga); } -function* setModeSaga({ mode }: ReturnType) { - return yield editor.changeMode(mode); +// function* setModeSaga({ mode }: ReturnType) { + // return yield editor.changeMode(mode); // console.log('change', mode); -} +// } -function* setActiveStickerSaga({ - activeSticker -}: { - type: string; - activeSticker: IRootState["activeSticker"]; -}) { - yield (editor.activeSticker = activeSticker); - yield put(setMode(MODES.STICKERS)); +// function* setLogoSaga({ logo }: { type: string; logo: string }) { +// const { mode } = yield select(selectUser); +// editor.logo = logo; - return true; -} +// yield put(setChanged(true)); -function* setLogoSaga({ logo }: { type: string; logo: string }) { - const { mode } = yield select(getState); - editor.logo = logo; +// if (mode === MODES.LOGO) { +// yield put(setMode(MODES.NONE)); +// } +// } - yield put(setChanged(true)); +// function* routerCancelSaga() { +// yield call(editor.router.cancelDrawing); +// yield put(setMode(MODES.NONE)); - if (mode === MODES.LOGO) { - yield put(setMode(MODES.NONE)); - } -} +// return true; +// } -function* routerCancelSaga() { - yield call(editor.router.cancelDrawing); - yield put(setMode(MODES.NONE)); +// function* routerSubmitSaga() { +// yield call(editor.router.submitDrawing); +// yield put(setMode(MODES.NONE)); - return true; -} +// return true; +// } -function* routerSubmitSaga() { - yield call(editor.router.submitDrawing); - yield put(setMode(MODES.NONE)); - - return true; -} - -function* clearSaga({ type }) { - switch (type) { - case USER_ACTIONS.CLEAR_POLY: - yield editor.poly.clearAll(); - yield editor.router.clearAll(); - yield put( - mapSet({ - route: [] - }) - ); - break; - - case USER_ACTIONS.CLEAR_STICKERS: - yield editor.stickers.clearAll(); - yield put( - mapSet({ - stickers: [] - }) - ); - break; - - case USER_ACTIONS.CLEAR_ALL: - yield editor.clearAll(); - yield put(setChanged(false)); - yield put( - mapSet({ - route: [], - stickers: [] - }) - ); - break; - - default: - break; - } - - yield put(setActiveSticker(null)); - yield put(setMode(MODES.NONE)); -} - -function* sendSaveRequestSaga({ - title, - address, - force, - is_public, - description -}: ReturnType) { - if (editor.isEmpty) return yield put(setSaveError(TIPS.SAVE_EMPTY)); - - const { route, stickers, provider } = editor.dumpData(); - const { logo, distance } = yield select(getState); - const { token } = yield select(getUser); - - yield put(setSaveLoading(true)); - - const { - result, - timeout, - cancel - }: { - result: Unwrap; - timeout: boolean; - cancel: TakeEffect; - } = yield race({ - result: postMap({ - token, - route, - stickers, - title, - force, - address, - logo, - distance, - provider, - is_public, - description - }), - timeout: delay(10000), - cancel: take(USER_ACTIONS.RESET_SAVE_DIALOG) - }); - - yield put(setSaveLoading(false)); - - if (cancel) return yield put(setMode(MODES.NONE)); - - if (result && result.data.code === "already_exist") - return yield put(setSaveOverwrite()); - if (result && result.data.code === "conflict") - return yield put(setSaveError(TIPS.SAVE_EXISTS)); - if (timeout || !result || !result.data.route || !result.data.route.address) - return yield put(setSaveError(TIPS.SAVE_TIMED_OUT)); - - return yield put( - setSaveSuccess({ - address: result.data.route.address, - title: result.data.route.title, - is_public: result.data.route.is_public, - description: result.data.route.description, - - save_error: TIPS.SAVE_SUCCESS - }) - ); -} function* getRenderData() { - yield put(setRenderer({ info: "Загрузка тайлов", progress: 0.1 })); + yield put(setRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); - const canvas = document.getElementById("renderer"); + const { route, stickers, provider }: ReturnType = yield select(selectMap); + + const canvas = document.getElementById('renderer'); canvas.width = window.innerWidth; canvas.height = window.innerHeight; - const ctx = canvas.getContext("2d"); + const ctx = canvas.getContext('2d'); const geometry = getTilePlacement(); - const points = getPolyPlacement(); - const stickers = getStickersPlacement(); - const distance = editor.poly.poly.distance; + const points = getPolyPlacement(route); + const sticker_points = getStickersPlacement(stickers); + // TODO: get distance: + const distance = 0; + // const distance = editor.poly.poly.distance; ctx.clearRect(0, 0, canvas.width, canvas.height); - const images = yield fetchImages(ctx, geometry); + const images = yield fetchImages(ctx, geometry, provider); - yield put(setRenderer({ info: "Отрисовка", progress: 0.5 })); + yield put(setRenderer({ info: 'Отрисовка', progress: 0.5 })); yield composeImages({ geometry, images, ctx }); yield composePoly({ points, ctx }); yield composeArrows({ points, ctx }); yield composeDistMark({ ctx, points, distance }); - yield composeStickers({ stickers, ctx }); + yield composeStickers({ stickers: sticker_points, ctx }); - yield put(setRenderer({ info: "Готово", progress: 1 })); + yield put(setRenderer({ info: 'Готово', progress: 1 })); - return yield canvas.toDataURL("image/jpeg"); + return yield canvas.toDataURL('image/jpeg'); } function* takeAShotSaga() { @@ -496,7 +255,7 @@ function* takeAShotSaga() { const { result, timeout } = yield race({ result: worker, - timeout: delay(500) + timeout: delay(500), }); if (timeout) yield put(setMode(MODES.SHOT_PREFETCH)); @@ -509,7 +268,7 @@ function* takeAShotSaga() { data, renderer_active: true, width: window.innerWidth, - height: window.innerHeight + height: window.innerHeight, }) ); } @@ -517,66 +276,42 @@ function* takeAShotSaga() { function* getCropData({ x, y, width, height }) { const { logo, - renderer: { data } - } = yield select(getState); - const canvas = document.getElementById("renderer"); + renderer: { data }, + } = yield select(selectUser); + const canvas = document.getElementById('renderer'); canvas.width = width; canvas.height = height; - const ctx = canvas.getContext("2d"); + const ctx = canvas.getContext('2d'); const image = yield imageFetcher(data); ctx.drawImage(image, -x, -y); if (logo && LOGOS[logo][1]) { const logoImage = yield imageFetcher(LOGOS[logo][1]); - ctx.drawImage( - logoImage, - width - logoImage.width, - height - logoImage.height - ); + ctx.drawImage(logoImage, width - logoImage.width, height - logoImage.height); } - return yield canvas.toDataURL("image/jpeg"); + return yield canvas.toDataURL('image/jpeg'); } function* cropAShotSaga(params) { - const { title, address } = yield select(getState); + const { title, address } = yield select(selectUser); yield call(getCropData, params); - const canvas = document.getElementById("renderer") as HTMLCanvasElement; + const canvas = document.getElementById('renderer') as HTMLCanvasElement; - downloadCanvas(canvas, (title || address).replace(/\./gi, " ")); + downloadCanvas(canvas, (title || address).replace(/\./gi, ' ')); return yield put(hideRenderer()); } -function* changeProviderSaga({ - provider -}: ReturnType) { - const { provider: current_provider } = yield select(getState); - - yield put(setProvider(provider)); - - // TODO: REACTIVE BRANCH - yield put(mapSetProvider(provider)); - - if (current_provider === provider) return; - - yield put(setChanged(true)); - - editor.provider = provider; - editor.map.setProvider(provider); - - return put(setMode(MODES.NONE)); -} - -function* locationChangeSaga({ - location -}: ReturnType) { +function* locationChangeSaga({ location }: ReturnType) { const { address, ready, - user: { id, random_url } - } = yield select(getState); + user: { id, random_url }, + } = yield select(selectUser); + + const { owner }: ReturnType = yield select(selectMap) if (!ready) return; @@ -585,67 +320,55 @@ function* locationChangeSaga({ if (address !== path) { const map = yield call(loadMapSaga, path); - if ( - map && - map.route && - map.route.owner && - mode === "edit" && - map.route.owner !== id - ) { - console.log("replace address if its busy"); + if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { return yield call(replaceAddressIfItsBusy, map.random_url, map.address); } - } else if (mode === "edit" && editor.owner !== id) { + } else if (mode === 'edit' && owner.id !== id) { return yield call(replaceAddressIfItsBusy, random_url, address); } else { - yield put(setAddressOrigin("")); + yield put(setAddressOrigin('')); } - if (mode !== "edit") { + if (mode !== 'edit') { yield put(setEditing(false)); - editor.stopEditing(); + // editor.stopEditing(); } else { yield put(setEditing(true)); - editor.startEditing(); + // editor.startEditing(); } } -function* gotVkUserSaga({ - user: u -}: ReturnType) { +function* gotVkUserSaga({ user: u }: ReturnType) { const { - data: { user, random_url } + data: { user, random_url }, }: Unwrap = yield call(checkUserToken, u); yield put(setUser({ ...user, random_url })); } -function* keyPressedSaga({ - key, - target -}: ReturnType): any { - if (target === "INPUT" || target === "TEXTAREA") { +function* keyPressedSaga({ key, target }: ReturnType): any { + if (target === 'INPUT' || target === 'TEXTAREA') { return; } - if (key === "Escape") { + if (key === 'Escape') { const { dialog_active, mode, - renderer: { renderer_active } - } = yield select(getState); + renderer: { renderer_active }, + } = yield select(selectUser); if (renderer_active) return yield put(hideRenderer()); if (dialog_active) return yield put(setDialogActive(false)); if (mode !== MODES.NONE) return yield put(setMode(MODES.NONE)); - } else if (key === "Delete") { + } else if (key === 'Delete') { const { - user: { editing } + user: { editing }, } = yield select(); if (!editing) return; - const { mode } = yield select(getState); + const { mode } = yield select(selectUser); if (mode === MODES.TRASH) { yield put(clearAll()); @@ -656,15 +379,15 @@ function* keyPressedSaga({ } function* searchGetRoutes() { - const { token } = yield select(getUser); + const { token } = yield select(selectUserUser); const { routes: { step, shift, - filter: { title, distance, tab } - } - } = yield select(getState); + filter: { title, distance, tab }, + }, + } = yield select(selectUser); const result: Unwrap = yield getRouteList({ token, @@ -673,23 +396,23 @@ function* searchGetRoutes() { max: distance[1], step, shift, - tab + tab, }); return result; } -function* searchSetSagaWorker() { +export function* searchSetSagaWorker() { const { - routes: { filter } - }: ReturnType = yield select(getState); + routes: { filter }, + }: ReturnType = yield select(selectUser); const { data: { routes, limits: { min, max, count: limit }, - filter: { shift, step } - } + filter: { shift, step }, + }, }: Unwrap = yield call(searchGetRoutes); yield put(searchPutRoutes({ list: routes, min, max, limit, shift, step })); @@ -701,12 +424,8 @@ function* searchSetSagaWorker() { ) { yield put( searchChangeDistance([ - filter.min > min && filter.distance[0] <= filter.min - ? min - : filter.distance[0], - filter.max < max && filter.distance[1] >= filter.max - ? max - : filter.distance[1] + filter.min > min && filter.distance[0] <= filter.min ? min : filter.distance[0], + filter.max < max && filter.distance[1] >= filter.max ? max : filter.distance[1], ]) ); } @@ -721,15 +440,13 @@ function* searchSetSaga() { yield call(searchSetSagaWorker); } -function* openMapDialogSaga({ - tab -}: ReturnType) { +function* openMapDialogSaga({ tab }: ReturnType) { const { dialog_active, routes: { - filter: { tab: current } - } - } = yield select(getState); + filter: { tab: current }, + }, + } = yield select(selectUser); if (dialog_active && tab === current) { return yield put(setDialogActive(false)); @@ -748,37 +465,9 @@ function* openMapDialogSaga({ function* searchSetTabSaga() { yield put(searchChangeDistance([0, 10000])); - yield put( - searchPutRoutes({ list: [], min: 0, max: 10000, step: 20, shift: 0 }) - ); + yield put(searchPutRoutes({ list: [], min: 0, max: 10000, step: 20, shift: 0 })); - yield put(searchSetTitle("")); -} - -function* setSaveSuccessSaga({ - address, - title, - is_public, - description -}: ReturnType) { - const { id } = yield select(getUser); - const { dialog_active } = yield select(getState); - - replacePath(`/${address}/edit`); - - yield put(setTitle(title)); - yield put(setAddress(address)); - yield put(setPublic(is_public)); - yield put(setDescription(description)); - yield put(setChanged(false)); - - editor.owner = id; - - if (dialog_active) { - yield call(searchSetSagaWorker); - } - - return yield editor.setInitialData(); + yield put(searchSetTitle('')); } function* userLogoutSaga(): SagaIterator { @@ -787,24 +476,16 @@ function* userLogoutSaga(): SagaIterator { } function* setUserSaga() { - const { dialog_active } = yield select(getState); + const { dialog_active } = yield select(selectUser); if (dialog_active) yield call(searchSetSagaWorker); return true; } -function* setTitleSaga({ - title -}: ReturnType): SagaIterator { - if (title) { - document.title = `${title} | Редактор маршрутов`; - } -} - function* getGPXTrackSaga(): SagaIterator { - const { route, stickers } = editor.dumpData(); - const { title, address } = yield select(getState); + const { route, stickers }: ReturnType = yield select(selectMap); + const { title, address } = yield select(selectUser); if (!route || route.length <= 0) return; @@ -815,8 +496,8 @@ function* getGPXTrackSaga(): SagaIterator { function* mapsLoadMoreSaga() { const { - routes: { limit, list, shift, step, loading, filter } - } = yield select(getState); + routes: { limit, list, shift, step, loading, filter }, + } = yield select(selectUser); if (loading || list.length >= limit || limit === 0) return; @@ -829,8 +510,8 @@ function* mapsLoadMoreSaga() { data: { limits: { min, max, count }, filter: { shift: resp_shift, step: resp_step }, - routes - } + routes, + }, }: Unwrap = yield call(searchGetRoutes); if ( @@ -839,12 +520,8 @@ function* mapsLoadMoreSaga() { ) { yield put( searchChangeDistance([ - filter.min > min && filter.distance[0] <= filter.min - ? min - : filter.distance[0], - filter.max < max && filter.distance[1] >= filter.max - ? max - : filter.distance[1] + filter.min > min && filter.distance[0] <= filter.min ? min : filter.distance[0], + filter.max < max && filter.distance[1] >= filter.max ? max : filter.distance[1], ]) ); } @@ -856,25 +533,23 @@ function* mapsLoadMoreSaga() { limit: count, shift: resp_shift, step: resp_step, - list: [...list, ...routes] + list: [...list, ...routes], }) ); yield put(searchSetLoading(false)); } -function* dropRouteSaga({ - address -}: ReturnType): SagaIterator { - const { token } = yield select(getUser); +function* dropRouteSaga({ address }: ReturnType): SagaIterator { + const { token } = yield select(selectUserUser); const { routes: { list, step, shift, limit, - filter: { min, max } - } - } = yield select(getState); + filter: { min, max }, + }, + } = yield select(selectUser); const index = list.findIndex(el => el.address === address); @@ -886,7 +561,7 @@ function* dropRouteSaga({ max, step, shift: shift > 0 ? shift - 1 : 0, - limit: limit > 0 ? limit - 1 : limit + limit: limit > 0 ? limit - 1 : limit, }) ); } @@ -897,32 +572,30 @@ function* dropRouteSaga({ function* modifyRouteSaga({ address, title, - is_public + is_public, }: ReturnType): SagaIterator { - const { token } = yield select(getUser); + const { token } = yield select(selectUserUser); const { routes: { list, step, shift, limit, - filter: { min, max } - } - }: ReturnType = yield select(getState); + filter: { min, max }, + }, + }: ReturnType = yield select(selectUser); const index = list.findIndex(el => el.address === address); if (index >= 0) { yield put( searchPutRoutes({ - list: list.map(el => - el.address !== address ? el : { ...el, title, is_public } - ), + list: list.map(el => (el.address !== address ? el : { ...el, title, is_public })), min, max, step, shift: shift > 0 ? shift - 1 : 0, - limit: limit > 0 ? limit - 1 : limit + limit: limit > 0 ? limit - 1 : limit, }) ); } @@ -931,20 +604,20 @@ function* modifyRouteSaga({ } function* toggleRouteStarredSaga({ - address + address, }: ReturnType) { const { - routes: { list } - }: IState["user"] = yield select(getState); + routes: { list }, + }: IState['user'] = yield select(selectUser); const route = list.find(el => el.address === address); - const { token } = yield select(getUser); + const { token } = yield select(selectUserUser); yield put(setRouteStarred(address, !route.is_published)); const result = yield sendRouteStarred({ token, address, - is_published: !route.is_published + is_published: !route.is_published, }); if (!result) return yield put(setRouteStarred(address, route.is_published)); @@ -952,39 +625,25 @@ function* toggleRouteStarredSaga({ export function* userSaga() { yield takeLatest(REHYDRATE, authCheckSaga); - yield takeEvery(USER_ACTIONS.SET_MODE, setModeSaga); yield takeEvery(USER_ACTIONS.START_EDITING, startEditingSaga); yield takeEvery(USER_ACTIONS.STOP_EDITING, stopEditingSaga); yield takeEvery(USER_ACTIONS.USER_LOGOUT, userLogoutSaga); - yield takeEvery(USER_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); - yield takeEvery(USER_ACTIONS.SET_LOGO, setLogoSaga); - yield takeEvery(USER_ACTIONS.ROUTER_CANCEL, routerCancelSaga); - yield takeEvery(USER_ACTIONS.ROUTER_SUBMIT, routerSubmitSaga); - yield takeEvery( - [ - USER_ACTIONS.CLEAR_POLY, - USER_ACTIONS.CLEAR_STICKERS, - USER_ACTIONS.CLEAR_ALL, - USER_ACTIONS.CLEAR_CANCEL - ], - clearSaga - ); + // yield takeEvery(USER_ACTIONS.ROUTER_CANCEL, routerCancelSaga); + // yield takeEvery(USER_ACTIONS.ROUTER_SUBMIT, routerSubmitSaga); - yield takeLatest(USER_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); - yield takeLatest(USER_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); yield takeLatest(USER_ACTIONS.TAKE_A_SHOT, takeAShotSaga); yield takeLatest(USER_ACTIONS.CROP_A_SHOT, cropAShotSaga); - yield takeEvery(USER_ACTIONS.CHANGE_PROVIDER, changeProviderSaga); + // yield takeEvery(USER_ACTIONS.CHANGE_PROVIDER, changeProviderSaga); yield takeLatest(USER_ACTIONS.LOCATION_CHANGED, locationChangeSaga); yield takeLatest(USER_ACTIONS.GOT_VK_USER, gotVkUserSaga); yield takeLatest(USER_ACTIONS.KEY_PRESSED, keyPressedSaga); - yield takeLatest(USER_ACTIONS.SET_TITLE, setTitleSaga); + // yield takeLatest(USER_ACTIONS.SET_TITLE, setTitleSaga); yield takeLatest( [USER_ACTIONS.SEARCH_SET_TITLE, USER_ACTIONS.SEARCH_SET_DISTANCE], diff --git a/src/redux/user/selectors.ts b/src/redux/user/selectors.ts index 5fec11b..b656f50 100644 --- a/src/redux/user/selectors.ts +++ b/src/redux/user/selectors.ts @@ -1,5 +1,7 @@ import { IState } from '$redux/store' +export const selectUser = (state: IState) => state.user; +export const selectUserUser = (state: IState) => state.user.user; export const selectUserEditing = (state: IState) => state.user.editing; export const selectUserMode = (state: IState) => state.user.mode; export const selectUserActiveSticker = (state: IState) => state.user.activeSticker; \ No newline at end of file diff --git a/src/styles/map.less b/src/styles/map.less index dc7e580..17fffb2 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -285,7 +285,7 @@ } #canvas { - background: #ff3344; + background: #eeeeee; z-index: 0; > div { diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 58f7158..aa3ad45 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -1,53 +1,72 @@ -import { editor } from '$modules/Editor'; +// import { editor } from '$modules/Editor'; import { COLORS, CLIENT } from '$config/frontend'; import * as saveAs from 'file-saver'; import { replaceProviderUrl } from '$constants/providers'; import { STICKERS } from '$constants/stickers'; -import { ILatLng } from "$modules/Stickers"; -import { IStickerDump } from "$modules/Sticker"; -import { IRootState } from "$redux/user"; -import { angleBetweenPoints, angleBetweenPointsRad, findDistancePx, middleCoordPx } from "$utils/geom"; -import { Point } from "leaflet"; +import { ILatLng } from '$modules/Stickers'; +import { IStickerDump } from '$modules/Sticker'; +import { IRootState } from '$redux/user'; +import { + angleBetweenPoints, + angleBetweenPointsRad, + findDistancePx, + middleCoordPx, +} from '$utils/geom'; +import { Point } from 'leaflet'; +import { MainMap } from '$containers/map/Map'; export interface ITilePlacement { - minX: number, - maxX: number, - minY: number, - maxY: number, - shiftX: number, - shiftY: number, - size: number, - width: number, - height: number, - zoom: number, + minX: number; + maxX: number; + minY: number; + maxY: number; + shiftX: number; + shiftY: number; + size: number; + width: number; + height: number; + zoom: number; } export interface IStickerPlacement extends IStickerDump { - x: number, - y: number, + x: number; + y: number; } -const latLngToTile = (latlng: { lat: number, lng: number }): { x: number, y: number, z: number } => { - const { map } = editor.map; +const latLngToTile = (latlng: { + lat: number; + lng: number; +}): { x: number; y: number; z: number } => { + const map = MainMap; const zoom = map.getZoom(); - const xtile = Number(Math.floor((latlng.lng + 180) / 360 * (1 << zoom))); - const ytile = Number(Math.floor((1 - Math.log(Math.tan(latlng.lat * Math.PI / 180) + 1 / Math.cos(latlng.lat * Math.PI / 180)) / Math.PI) / 2 * (1 << zoom))); + const xtile = Number(Math.floor(((latlng.lng + 180) / 360) * (1 << zoom))); + const ytile = Number( + Math.floor( + ((1 - + Math.log( + Math.tan((latlng.lat * Math.PI) / 180) + 1 / Math.cos((latlng.lat * Math.PI) / 180) + ) / + Math.PI) / + 2) * + (1 << zoom) + ) + ); return { x: xtile, y: ytile, z: zoom }; }; -const tileToLatLng = (point: { x: number, y: number }): ILatLng => { - const { map } = editor.map; +const tileToLatLng = (point: { x: number; y: number }): ILatLng => { + const map = MainMap; const z = map.getZoom(); - const lng = (point.x / Math.pow(2, z) * 360 - 180); - const n = Math.PI - 2 * Math.PI * point.y / Math.pow(2, z); - const lat = (180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)))); + const lng = (point.x / Math.pow(2, z)) * 360 - 180; + const n = Math.PI - (2 * Math.PI * point.y) / Math.pow(2, z); + const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))); return { lat, lng }; }; export const getTilePlacement = (): ITilePlacement => { - const { map } = editor.map; + const map = MainMap; const width = window.innerWidth; const height = window.innerHeight; @@ -75,7 +94,7 @@ export const getTilePlacement = (): ITilePlacement => { minY, maxY, shiftX: tileTransformTranslate.x - msw2.x, - shiftY: ((maxY - minY) * 256) - (window.innerHeight + (tileTransformTranslate.y - msw2.y)), + shiftY: (maxY - minY) * 256 - (window.innerHeight + (tileTransformTranslate.y - msw2.y)), size: 256, width, height, @@ -83,70 +102,79 @@ export const getTilePlacement = (): ITilePlacement => { }; }; -export const getPolyPlacement = (): Point[] => ( - (!editor.poly.poly || !editor.poly.poly.getLatLngs() || editor.poly.poly.getLatLngs().length <= 0) +export const getPolyPlacement = (latlngs: ILatLng[]): Point[] => + latlngs.length === 0 ? [] - : editor.poly.poly.getLatLngs().map((latlng) => ({ ...editor.map.map.latLngToContainerPoint(latlng) })) -); + : latlngs.map(latlng => (MainMap.latLngToContainerPoint(latlng))); -export const getStickersPlacement = (): IStickerPlacement[] => ( - (!editor.stickers || editor.stickers.dumpData().length <= 0) +export const getStickersPlacement = (stickers: IStickerDump[]): IStickerPlacement[] => + stickers.length === 0 ? [] - : editor.stickers.dumpData().map(sticker => ({ - ...sticker, - ...editor.map.map.latLngToContainerPoint(sticker.latlng), - })) -); + : stickers.map(sticker => ({ + ...sticker, + ...MainMap.latLngToContainerPoint(sticker.latlng), + })); -const getImageSource = (coords: { x: number, y: number, zoom: number }): string => ( - replaceProviderUrl(editor.getProvider(), coords) -); +const getImageSource = (coords: { x: number; y: number; zoom: number }, provider: string): string => + replaceProviderUrl(provider, coords); -export const imageFetcher = (source: string): Promise => new Promise((resolve, reject) => { - const img = new Image(); +export const imageFetcher = (source: string): Promise => + new Promise((resolve, reject) => { + const img = new Image(); - img.crossOrigin = 'anonymous'; - img.onload = () => resolve(img); - img.onerror = () => reject(img); + img.crossOrigin = 'anonymous'; + img.onload = () => resolve(img); + img.onerror = () => reject(img); - img.src = source; -}); + img.src = source; + }); -export const fetchImages = (ctx: CanvasRenderingContext2D, geometry: ITilePlacement ): Promise<{ x: number, y: number, image: HTMLImageElement }[]> => { - const { - minX, maxX, minY, maxY, zoom - } = geometry; +export const fetchImages = ( + ctx: CanvasRenderingContext2D, + geometry: ITilePlacement, + provider, +): Promise<{ x: number; y: number; image: HTMLImageElement }[]> => { + const { minX, maxX, minY, maxY, zoom } = geometry; const images = []; for (let x = minX; x <= maxX; x += 1) { for (let y = minY; y <= maxY; y += 1) { - images.push({ x, y, source: getImageSource({ x, y, zoom }) }); + images.push({ x, y, source: getImageSource({ x, y, zoom }, provider) }); } } - return Promise.all(images.map(({ x, y, source }) => ( - imageFetcher(source).then(image => ({ x, y, image })) - ))); + return Promise.all( + images.map(({ x, y, source }) => imageFetcher(source).then(image => ({ x, y, image }))) + ); }; -export const composeImages = ( - { images, geometry, ctx }: - { images: [], geometry: ITilePlacement, ctx: CanvasRenderingContext2D } -): void => { - const { - minX, minY, shiftX, shiftY, size - } = geometry; +export const composeImages = ({ + images, + geometry, + ctx, +}: { + images: []; + geometry: ITilePlacement; + ctx: CanvasRenderingContext2D; +}): void => { + const { minX, minY, shiftX, shiftY, size } = geometry; images.map(({ x, y, image }) => { - const posX = ((x - minX) * size) + shiftX; - const posY = ((y - minY) * size) - shiftY; + const posX = (x - minX) * size + shiftX; + const posY = (y - minY) * size - shiftY; return ctx.drawImage(image, posX, posY, 256, 256); }); }; -export const composePoly = ({ points, ctx }: { points: Point[], ctx: CanvasRenderingContext2D }): void => { - if (editor.poly.isEmpty) return; +export const composePoly = ({ + points, + ctx, +}: { + points: Point[]; + ctx: CanvasRenderingContext2D; +}): void => { + if (points.length === 0) return; let minX = points[0].x; let maxX = points[0].x; @@ -180,16 +208,22 @@ export const composePoly = ({ points, ctx }: { points: Point[], ctx: CanvasRende ctx.closePath(); }; -export const composeArrows = async ({ points, ctx }: { points: Point[], ctx: CanvasRenderingContext2D }): Promise => { +export const composeArrows = async ({ + points, + ctx, +}: { + points: Point[]; + ctx: CanvasRenderingContext2D; +}): Promise => { const image = await imageFetcher(require('$sprites/arrow.svg')); - const distances = points.map((point, i) => ( - (points[i + 1] && findDistancePx(points[i], points[i + 1])) || 0 - )); + const distances = points.map( + (point, i) => (points[i + 1] && findDistancePx(points[i], points[i + 1])) || 0 + ); // we want to annotate at least 5 arrows - const min_arrows = (distances.length >= 5 ? 5 : distances.length - 1); - const min_distance = distances.sort((a, b) => (b - a))[min_arrows]; + const min_arrows = distances.length >= 5 ? 5 : distances.length - 1; + const min_distance = distances.sort((a, b) => b - a)[min_arrows]; return points.map((point, i) => { if (!points[i + 1]) return false; @@ -203,7 +237,7 @@ export const composeArrows = async ({ points, ctx }: { points: Point[], ctx: Can ctx.save(); ctx.translate(middle.x, middle.y); - ctx.rotate((Math.PI * 0.5) - angle); + ctx.rotate(Math.PI * 0.5 - angle); ctx.translate(-middle.x, -middle.y); ctx.moveTo(middle.x, middle.y); @@ -220,35 +254,33 @@ const measureText = ( ctx: CanvasRenderingContext2D, text: string, lineHeight: number -): { width: number, height: number } => ( - text.split('\n').reduce((obj, line) => ( - { +): { width: number; height: number } => + text.split('\n').reduce( + (obj, line) => ({ width: Math.max(ctx.measureText(line).width, obj.width), height: obj.height + lineHeight, - } - ), { width: 0, height: 0 }) -); + }), + { width: 0, height: 0 } + ); const measureDistText = ( ctx: CanvasRenderingContext2D, text: string, height: number -): { width: number, height: number } => ( - { - width: ctx.measureText(text).width, - height, - } -); +): { width: number; height: number } => ({ + width: ctx.measureText(text).width, + height, +}); const composeStickerArrow = ( ctx: CanvasRenderingContext2D, x: number, y: number, - angle: number, + angle: number ) => { ctx.save(); ctx.translate(x, y); - ctx.rotate(angle + (Math.PI * 0.75)); + ctx.rotate(angle + Math.PI * 0.75); ctx.translate(-x, -y); ctx.fillStyle = '#ff3344'; ctx.beginPath(); @@ -261,18 +293,12 @@ const composeStickerArrow = ( ctx.restore(); }; -const measureRect = ( - x: number, - y: number, - width: number, - height: number, - reversed: boolean, -) => ({ - rectX: reversed ? (x - width - 36 - 10) : x, - rectY: (y - 7 - (height / 2)), +const measureRect = (x: number, y: number, width: number, height: number, reversed: boolean) => ({ + rectX: reversed ? x - width - 36 - 10 : x, + rectY: y - 7 - height / 2, rectW: width + 36 + 10, rectH: height + 20, - textX: reversed ? (x - width - 36) : x + 36 + textX: reversed ? x - width - 36 : x + 36, }); const measureDistRect = ( @@ -280,16 +306,24 @@ const measureDistRect = ( y: number, width: number, height: number, - reversed: boolean, + reversed: boolean ) => ({ - rectX: reversed ? (x - width - 12) : x - 8, - rectY: (y - 2 - (height / 2)), - rectW: reversed ? (width + 22) : (width + 20), + rectX: reversed ? x - width - 12 : x - 8, + rectY: y - 2 - height / 2, + rectW: reversed ? width + 22 : width + 20, rectH: height + 4, - textX: reversed ? (x - width - 8) : x + 8 + textX: reversed ? x - width - 8 : x + 8, }); -export const roundedRect = (ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, fill: string, rad: number = 5): void => { +export const roundedRect = ( + ctx: CanvasRenderingContext2D, + x: number, + y: number, + width: number, + height: number, + fill: string, + rad: number = 5 +): void => { ctx.fillStyle = fill; ctx.beginPath(); ctx.moveTo(x, y + rad); @@ -317,7 +351,6 @@ export const roundedRect = (ctx: CanvasRenderingContext2D, x: number, y: number, ctx.closePath(); ctx.fill(); - }; const composeStickerText = ( @@ -325,19 +358,23 @@ const composeStickerText = ( x: number, y: number, angle: number, - text: string, + text: string ): void => { const rad = 56; - const tX = ((Math.cos(angle + Math.PI) * rad) - 30) + x + 28; - const tY = ((Math.sin(angle + Math.PI) * rad) - 30) + y + 29; + const tX = Math.cos(angle + Math.PI) * rad - 30 + x + 28; + const tY = Math.sin(angle + Math.PI) * rad - 30 + y + 29; ctx.font = '12px "Helvetica Neue", Arial'; const lines = text.split('\n'); const { width, height } = measureText(ctx, text, 16); - const { - rectX, rectY, rectW, rectH, textX - } = measureRect(tX, tY, width, height, (angle > -(Math.PI / 2) && angle < (Math.PI / 2))); + const { rectX, rectY, rectW, rectH, textX } = measureRect( + tX, + tY, + width, + height, + angle > -(Math.PI / 2) && angle < Math.PI / 2 + ); // rectangle // ctx.fillStyle = '#222222'; // ctx.beginPath(); @@ -353,23 +390,18 @@ const composeStickerText = ( // text ctx.fillStyle = 'white'; - lines.map((line, i) => ( - ctx.fillText( - line, - textX, - rectY + 6 + (16 * (i + 1)), - ) - )); + lines.map((line, i) => ctx.fillText(line, textX, rectY + 6 + 16 * (i + 1))); }; -export const composeDistMark = ( - { ctx, points, distance }: - { - ctx: CanvasRenderingContext2D, - points: Point[], - distance: number, - } -): void => { +export const composeDistMark = ({ + ctx, + points, + distance, +}: { + ctx: CanvasRenderingContext2D; + points: Point[]; + distance: number; +}): void => { if (points.length <= 1) return; ctx.font = 'bold 12px "Helvetica Neue", Arial'; @@ -378,9 +410,13 @@ export const composeDistMark = ( const dist = parseFloat(distance.toFixed(1)); const { x, y } = points[points.length - 1]; const { width, height } = measureDistText(ctx, String(dist), 16); - const { - rectX, rectY, rectW, rectH, textX - } = measureDistRect(x, y, width, height, !(angle > -90 && angle < 90)); + const { rectX, rectY, rectW, rectH, textX } = measureDistRect( + x, + y, + width, + height, + !(angle > -90 && angle < 90) + ); roundedRect(ctx, rectX, rectY, rectW, rectH, '#ff3344', 2); @@ -390,11 +426,7 @@ export const composeDistMark = ( ctx.closePath(); ctx.fill(); - ctx.fillText( - String(dist), - textX, - rectY + 14, - ); + ctx.fillText(String(dist), textX, rectY + 14); }; const composeStickerImage = async ( @@ -403,22 +435,25 @@ const composeStickerImage = async ( y: number, angle: number, set: IRootState['activeSticker']['set'], - sticker: IRootState['activeSticker']['sticker'], + sticker: IRootState['activeSticker']['sticker'] ): Promise => { const rad = 56; - const tX = ((Math.cos(angle + Math.PI) * rad) - 30) + (x - 8); - const tY = ((Math.sin(angle + Math.PI) * rad) - 30) + (y - 4); + const tX = Math.cos(angle + Math.PI) * rad - 30 + (x - 8); + const tY = Math.sin(angle + Math.PI) * rad - 30 + (y - 4); const offsetX = STICKERS[set].layers[sticker].off * 72; - return imageFetcher(STICKERS[set].url).then(image => ( + return imageFetcher(STICKERS[set].url).then(image => ctx.drawImage(image, offsetX, 0, 72, 72, tX, tY, 72, 72) - )); + ); }; -export const composeStickers = async ( - { stickers, ctx }: - { stickers: IStickerPlacement[], ctx: CanvasRenderingContext2D } -): Promise => { +export const composeStickers = async ({ + stickers, + ctx, +}: { + stickers: IStickerPlacement[]; + ctx: CanvasRenderingContext2D; +}): Promise => { if (!stickers || stickers.length < 0) return; stickers.map(({ x, y, angle, text }) => { @@ -427,12 +462,12 @@ export const composeStickers = async ( if (text) composeStickerText(ctx, x, y, angle, text); }); - await Promise.all(stickers.map(({ - x, y, angle, set, sticker - }) => ( - composeStickerImage(ctx, x, y, angle, set, sticker) - ))); + await Promise.all( + stickers.map(({ x, y, angle, set, sticker }) => + composeStickerImage(ctx, x, y, angle, set, sticker) + ) + ); }; -export const downloadCanvas = (canvas: HTMLCanvasElement, title: IRootState['title']): void => canvas.toBlob(blob => saveAs(blob, title)); - +export const downloadCanvas = (canvas: HTMLCanvasElement, title: IRootState['title']): void => + canvas.toBlob(blob => saveAs(blob, title)); From de5726929ff37a9148f8a24f72dcc49acbf342b9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 30 Dec 2019 21:16:04 +0700 Subject: [PATCH 112/320] removed unnecessary action creators --- src/components/dialogs/LogoDialog.tsx | 13 +++-- src/components/panels/EditorDialog.tsx | 73 ++++++++++--------------- src/components/panels/EditorPanel.tsx | 4 +- src/components/panels/TopRightPanel.tsx | 6 +- src/modules/Editor.ts | 3 +- src/redux/map/actions.ts | 5 ++ src/redux/map/constants.ts | 1 + src/redux/map/handlers.ts | 7 +++ src/redux/map/index.ts | 3 + src/redux/map/sagas.ts | 18 +++--- src/redux/user/actions.ts | 10 ++-- src/redux/user/handlers.ts | 44 +++++++-------- 12 files changed, 98 insertions(+), 89 deletions(-) diff --git a/src/components/dialogs/LogoDialog.tsx b/src/components/dialogs/LogoDialog.tsx index 2924f07..e3a5b2d 100644 --- a/src/components/dialogs/LogoDialog.tsx +++ b/src/components/dialogs/LogoDialog.tsx @@ -2,14 +2,15 @@ import * as React from 'react'; import { LOGOS } from '$constants/logos'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; -import { setLogo as setLogoAction } from "$redux/user/actions"; -import { IRootState } from "$redux/user"; +import * as MAP_ACTIONS from "$redux/map/actions" +import { IMapReducer } from '$redux/map'; -interface Props extends IRootState { - setLogo: typeof setLogoAction, +interface Props { + logo: IMapReducer['logo'], + mapSetLogo: typeof MAP_ACTIONS.mapSetLogo, } -export const LogoDialog = ({ logo, setLogo }: Props) => ( +export const LogoDialog = ({ logo, mapSetLogo }: Props) => (
      @@ -19,7 +20,7 @@ export const LogoDialog = ({ logo, setLogo }: Props) => ( Object.keys(LOGOS).map(item => (
      setLogo(item)} + onMouseDown={() => mapSetLogo(item)} key={item} > {LOGOS[item][0]} diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index af07059..8cfe48f 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -11,28 +11,33 @@ import { CancelDialog } from '$components/dialogs/CancelDialog'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; -import { - setMode, - setLogo, - routerCancel, - routerSubmit, - setActiveSticker, - clearStickers, - clearPoly, - clearAll, - clearCancel, - stopEditing, - setEditing, - sendSaveRequest, - changeProvider, -} from '$redux/user/actions'; +import * as USER_ACTIONS from '$redux/user/actions'; import { ProviderDialog } from '$components/dialogs/ProviderDialog'; import { ShotPrefetchDialog } from '$components/dialogs/ShotPrefetchDialog'; -import { IRootState } from "$redux/user"; +import * as MAP_ACTIONS from '$redux/map/actions'; +import { selectUserMode } from '$redux/user/selectors'; -interface Props extends IRootState { - width: number, -} +const mapStateToProps = state => ({ mode: selectUserMode(state) }); + +// const mapDispatchToProps = dispatch => bindActionCreators({ +// routerCancel: USER_ACTIONS.routerCancel, +// routerSubmit: USER_ACTIONS.routerSubmit, +// setActiveSticker: USER_ACTIONS.setActiveSticker, +// clearStickers: USER_ACTIONS.clearStickers, +// clearPoly: USER_ACTIONS.clearPoly, +// clearAll: USER_ACTIONS.clearAll, +// clearCancel: USER_ACTIONS.clearCancel, +// stopEditing: USER_ACTIONS.stopEditing, +// setEditing: USER_ACTIONS.setEditing, +// setMode: USER_ACTIONS.setMode, +// sendSaveRequest: USER_ACTIONS.sendSaveRequest, +// changeProvider: USER_ACTIONS.changeProvider, +// mapSetLogo: MAP_ACTIONS.mapSetLogo, +// }, dispatch); + +type Props = ReturnType & { + width: number; + }; const DIALOG_CONTENTS: { [x: string]: any } = { [MODES.ROUTER]: RouterDialog, @@ -45,32 +50,12 @@ const DIALOG_CONTENTS: { [x: string]: any } = { [MODES.SHOT_PREFETCH]: ShotPrefetchDialog, }; -export const Component = (props: Props) => ( +export const Component = (props: Props) => props.mode && DIALOG_CONTENTS[props.mode] - ? React.createElement(DIALOG_CONTENTS[props.mode], { ...props }) - : null -); - -const mapStateToProps = ({ user }) => ({ ...user }); - -const mapDispatchToProps = dispatch => bindActionCreators({ - routerCancel, - routerSubmit, - setLogo, - setActiveSticker, - clearStickers, - clearPoly, - clearAll, - clearCancel, - stopEditing, - setEditing, - setMode, - sendSaveRequest, - changeProvider, -}, dispatch); + ? React.createElement(DIALOG_CONTENTS[props.mode]) + : null; export const EditorDialog = connect( - mapStateToProps, - mapDispatchToProps + mapStateToProps + // mapDispatchToProps )(Component); - diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index e310053..4b4af05 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -6,7 +6,7 @@ import { Icon } from '$components/panels/Icon'; import { EditorDialog } from '$components/panels/EditorDialog'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; -import { setMode, startEditing, stopEditing, setLogo, takeAShot, keyPressed } from '$redux/user/actions'; +import { setMode, startEditing, stopEditing, takeAShot, keyPressed } from '$redux/user/actions'; import { IRootState } from "$redux/user"; import { Tooltip } from "$components/panels/Tooltip"; @@ -159,7 +159,7 @@ function mapStateToProps(state) { const mapDispatchToProps = dispatch => bindActionCreators({ setMode, - setLogo, + // setLogo, startEditing, stopEditing, takeAShot, diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index 9b70fe8..e376b77 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -45,8 +45,12 @@ const Component = ({ function mapStateToProps(state) { const { + map: { + provider, + logo, + }, user: { - provider, logo, markers_shown, editing + markers_shown, editing }, } = state; diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 50b9db3..13492f0 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -12,7 +12,8 @@ import { resetSaveDialog, setActiveSticker, setAddress, - setChanged, setDescription, + setChanged, + setDescription, setDistance, setIsEmpty, setIsRouting, setLogo, diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index 13a8966..df2ba18 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -63,3 +63,8 @@ export const mapSetPublic = (is_public: IMapReducer['is_public']) => ({ type: MAP_ACTIONS.SET_PUBLIC, is_public, }); + +export const mapSetLogo = (logo: IMapReducer['logo']) => ({ + type: MAP_ACTIONS.SET_LOGO, + logo, +}); diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts index 9bfb6bf..477f3a2 100644 --- a/src/redux/map/constants.ts +++ b/src/redux/map/constants.ts @@ -9,6 +9,7 @@ export const MAP_ACTIONS = { SET_ADDRESS: `${P}-SET_ADDRESS`, SET_OWNER: `${P}-SET_OWNER`, SET_PUBLIC: `${P}-SET_PUBLIC`, + SET_LOGO: `${P}-SET_LOGO`, ADD_STICKER: `${P}-ADD_STICKER`, SET_STICKER: `${P}-SET_STICKER`, diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts index dbfb5d7..baaa51e 100644 --- a/src/redux/map/handlers.ts +++ b/src/redux/map/handlers.ts @@ -11,6 +11,7 @@ import { mapSetDescription, mapSetOwner, mapSetPublic, + mapSetLogo, } from './actions'; const setMap = (state: IMapReducer, { map }: ReturnType): IMapReducer => ({ @@ -80,6 +81,11 @@ const setPublic = (state: IMapReducer, { is_public }: ReturnType): IMapReducer => ({ + ...state, + logo, +}); + export const MAP_HANDLERS = { [MAP_ACTIONS.SET_MAP]: setMap, [MAP_ACTIONS.SET_PROVIDER]: setProvider, @@ -92,4 +98,5 @@ export const MAP_HANDLERS = { [MAP_ACTIONS.SET_DESCRIPTION]: setDescription, [MAP_ACTIONS.SET_OWNER]: setOwner, [MAP_ACTIONS.SET_PUBLIC]: setPublic, + [MAP_ACTIONS.SET_LOGO]: setLogo, }; diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index 41ecff2..e6cb1f1 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -3,12 +3,14 @@ import { MAP_HANDLERS } from './handlers'; import { DEFAULT_PROVIDER } from '$constants/providers'; import { IMapRoute } from './types'; import { IStickerDump } from '$modules/Sticker'; +import { DEFAULT_LOGO } from '$constants/logos'; export interface IMapReducer { provider: string; route: IMapRoute; stickers: IStickerDump[]; title: string; + logo: string; address: string; description: string; owner: { id: string }; @@ -17,6 +19,7 @@ export interface IMapReducer { export const MAP_INITIAL_STATE: IMapReducer = { provider: DEFAULT_PROVIDER, + logo: DEFAULT_LOGO, route: [], stickers: [], title: '', diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 6acec43..51f52a8 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -52,15 +52,15 @@ function* onMapClick({ latlng }: ReturnType) { // return put(setMode(MODES.NONE)); // } -function* setLogoSaga({ logo }: { type: string; logo: string }) { - const { mode } = yield select(selectUser); +// function* setLogoSaga({ logo }: { type: string; logo: string }) { +// const { mode } = yield select(selectUser); - yield put(setChanged(true)); +// yield put(setChanged(true)); - if (mode === MODES.LOGO) { - yield put(setMode(MODES.NONE)); - } -} +// if (mode === MODES.LOGO) { +// yield put(setMode(MODES.NONE)); +// } +// } export function* replaceAddressIfItsBusy(destination, original) { if (original) { @@ -303,10 +303,12 @@ function* setSaveSuccessSaga({ } export function* mapSaga() { + // TODO: setChanged on set route, logo, provider, stickers + yield takeEvery(USER_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); // TODO: move active sticker to maps yield takeEvery(MAP_ACTIONS.MAP_CLICKED, onMapClick); yield takeEvery(MAP_ACTIONS.SET_TITLE, setTitleSaga); - yield takeEvery(USER_ACTIONS.SET_LOGO, setLogoSaga); + // yield takeEvery(USER_ACTIONS.SET_LOGO, setLogoSaga); yield takeLatest(USER_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); yield takeLatest(USER_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 3c48f15..25c72f2 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -11,12 +11,12 @@ export const setDistance = (distance: IRootState['distance']) => ({ type: USER_A export const setChanged = (changed: IRootState['changed']) => ({ type: USER_ACTIONS.SET_CHANGED, changed }); export const setRouterPoints = routerPoints => ({ type: USER_ACTIONS.SET_ROUTER_POINTS, routerPoints }); export const setActiveSticker = activeSticker => ({ type: USER_ACTIONS.SET_ACTIVE_STICKER, activeSticker }); -export const setLogo = logo => ({ type: USER_ACTIONS.SET_LOGO, logo }); -export const setTitle = title => ({ type: USER_ACTIONS.SET_TITLE, title }); -export const setDescription = description => ({ type: USER_ACTIONS.SET_DESCRIPTION, description }); -export const setAddress = address => ({ type: USER_ACTIONS.SET_ADDRESS, address }); +// export const setLogo = logo => ({ type: USER_ACTIONS.SET_LOGO, logo }); +// export const setTitle = title => ({ type: USER_ACTIONS.SET_TITLE, title }); +// export const setDescription = description => ({ type: USER_ACTIONS.SET_DESCRIPTION, description }); +// export const setAddress = address => ({ type: USER_ACTIONS.SET_ADDRESS, address }); export const setAddressOrigin = address_origin => ({ type: USER_ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); -export const setPublic = is_public => ({ type: USER_ACTIONS.SET_PUBLIC, is_public }); +// export const setPublic = is_public => ({ type: USER_ACTIONS.SET_PUBLIC, is_public }); export const setStarred = is_published => ({ type: USER_ACTIONS.SET_STARRED, is_published }); export const setSpeed = speed => ({ type: USER_ACTIONS.SET_SPEED, speed }); diff --git a/src/redux/user/handlers.ts b/src/redux/user/handlers.ts index da2da64..1354c55 100644 --- a/src/redux/user/handlers.ts +++ b/src/redux/user/handlers.ts @@ -53,25 +53,25 @@ const setActiveSticker: ActionHandler = activeSticker: activeSticker || { set: null, sticker: null } }); -const setLogo: ActionHandler = (state, { logo }) => ({ - ...state, - logo -}); +// const setLogo: ActionHandler = (state, { logo }) => ({ +// ...state, +// logo +// }); -const setTitle: ActionHandler = (state, { title }) => ({ - ...state, - title -}); +// const setTitle: ActionHandler = (state, { title }) => ({ +// ...state, +// title +// }); -const setDescription: ActionHandler = (state, { description }) => ({ - ...state, - description -}); +// const setDescription: ActionHandler = (state, { description }) => ({ +// ...state, +// description +// }); -const setAddress: ActionHandler = (state, { address }) => ({ - ...state, - address -}); +// const setAddress: ActionHandler = (state, { address }) => ({ +// ...state, +// address +// }); const setAddressOrigin: ActionHandler = (state, { address_origin }) => ({ ...state, @@ -199,7 +199,7 @@ const searchSetLoading: ActionHandler = } }); -const setPublic: ActionHandler = (state, { is_public = false }) => ({ ...state, is_public }); +// const setPublic: ActionHandler = (state, { is_public = false }) => ({ ...state, is_public }); const setStarred: ActionHandler = (state, { is_published = false }) => ({ ...state, is_published }); const setSpeed: ActionHandler = (state, { speed = 15 }) => ({ @@ -254,10 +254,10 @@ export const USER_HANDLERS = ({ [USER_ACTIONS.SET_DISTANCE]: setDistance, [USER_ACTIONS.SET_ROUTER_POINTS]: setRouterPoints, [USER_ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, - [USER_ACTIONS.SET_LOGO]: setLogo, - [USER_ACTIONS.SET_TITLE]: setTitle, - [USER_ACTIONS.SET_DESCRIPTION]: setDescription, - [USER_ACTIONS.SET_ADDRESS]: setAddress, + // [USER_ACTIONS.SET_LOGO]: setLogo, + // [USER_ACTIONS.SET_TITLE]: setTitle, + // [USER_ACTIONS.SET_DESCRIPTION]: setDescription, + // [USER_ACTIONS.SET_ADDRESS]: setAddress, [USER_ACTIONS.SET_ADDRESS_ORIGIN]: setAddressOrigin, [USER_ACTIONS.SET_SAVE_ERROR]: setSaveError, @@ -282,7 +282,7 @@ export const USER_HANDLERS = ({ [USER_ACTIONS.SEARCH_SET_TAB]: searchSetTab, [USER_ACTIONS.SEARCH_PUT_ROUTES]: searchPutRoutes, [USER_ACTIONS.SEARCH_SET_LOADING]: searchSetLoading, - [USER_ACTIONS.SET_PUBLIC]: setPublic, + // [USER_ACTIONS.SET_PUBLIC]: setPublic, [USER_ACTIONS.SET_STARRED]: setStarred, [USER_ACTIONS.SET_SPEED]: setSpeed, From aa8fd14517d8df4be215aa7906b127a8dc75d41f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 8 Jan 2020 11:44:27 +0700 Subject: [PATCH 113/320] renamed some map actions from user --- src/components/dialogs/ProviderDialog.tsx | 8 ++--- src/containers/map/Sticker/index.tsx | 2 +- src/modules/Editor.ts | 36 ++++++++++++----------- src/redux/user/actions.ts | 4 +-- src/redux/user/handlers.ts | 4 +-- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/components/dialogs/ProviderDialog.tsx b/src/components/dialogs/ProviderDialog.tsx index 79b1197..adc7f08 100644 --- a/src/components/dialogs/ProviderDialog.tsx +++ b/src/components/dialogs/ProviderDialog.tsx @@ -2,14 +2,14 @@ import * as React from 'react'; import { PROVIDERS, replaceProviderUrl } from '$constants/providers'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; -import { changeProvider as changeProviderAction } from "$redux/user/actions"; +import * as MAP_ACTIONS from "$redux/map/actions"; import { IRootState } from "$redux/user"; interface Props extends IRootState { - changeProvider: typeof changeProviderAction, + mapSetProvider: typeof MAP_ACTIONS.mapSetProvider, } -export const ProviderDialog = ({ provider, changeProvider }: Props) => ( +export const ProviderDialog = ({ provider, mapSetProvider }: Props) => (
      { @@ -19,7 +19,7 @@ export const ProviderDialog = ({ provider, changeProvider }: Props) => ( style={{ backgroundImage: `url(${replaceProviderUrl(item, { x: 5980, y: 2589, zoom: 13 })})`, }} - onMouseDown={() => changeProvider(item)} + onMouseDown={() => mapSetProvider(item)} key={PROVIDERS[item].name} > { diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index c91fb5d..2633e2b 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -199,4 +199,4 @@ const Sticker: React.FC = ({ ); }; -export { Sticker }; +export { Sticker }; \ No newline at end of file diff --git a/src/modules/Editor.ts b/src/modules/Editor.ts index 13492f0..c207ad3 100644 --- a/src/modules/Editor.ts +++ b/src/modules/Editor.ts @@ -8,21 +8,23 @@ import { DEFAULT_LOGO, ILogos, LOGOS } from '$constants/logos'; import { getUrlData } from '$utils/history'; import { store } from '$redux/store'; import { - changeProvider, resetSaveDialog, setActiveSticker, - setAddress, setChanged, - setDescription, setDistance, setIsEmpty, setIsRouting, - setLogo, setMarkersShown, setMode, - setPublic, setRouterPoints, setStarred, - setTitle, } from '$redux/user/actions'; +import { + mapSetAddress, + mapSetDescription, + mapSetLogo, + mapSetPublic, + mapSetTitle, + mapSetProvider, +} from '$redux/map/actions'; import { DEFAULT_PROVIDER, IProvider, PROVIDERS } from '$constants/providers'; import { STICKERS } from '$constants/stickers'; import { IRootState } from "$redux/user"; @@ -184,14 +186,14 @@ export class Editor { getDistance = () => this.getState().distance; getIsEmpty = () => this.getState().is_empty; - setLogo: typeof setLogo = logo => store.dispatch(setLogo(logo)); + mapSetLogo: typeof mapSetLogo = logo => store.dispatch(mapSetLogo(logo)); setMode: typeof setMode = value => store.dispatch(setMode(value)); setRouterPoints: typeof setRouterPoints = value => store.dispatch(setRouterPoints(value)); setActiveSticker: typeof setActiveSticker = value => store.dispatch(setActiveSticker(value)); - setTitle: typeof setTitle = value => store.dispatch(setTitle(value)); - setDescription: typeof setDescription = value => store.dispatch(setDescription(value)); - setAddress: typeof setAddress = value => store.dispatch(setAddress(value)); - setPublic: typeof setPublic = value => store.dispatch(setPublic(value)); + mapSetTitle: typeof mapSetTitle = value => store.dispatch(mapSetTitle(value)); + mapSetDescription: typeof mapSetDescription = value => store.dispatch(mapSetDescription(value)); + mapSetAddress: typeof mapSetAddress = value => store.dispatch(mapSetAddress(value)); + mapSetPublic: typeof mapSetPublic = value => store.dispatch(mapSetPublic(value)); setStarred: typeof setStarred = value => store.dispatch(setStarred(value)); setIsEmpty: typeof setIsEmpty = value => store.dispatch(setIsEmpty(value)); setIsRouting: typeof setIsRouting = value => store.dispatch(setIsRouting(value)); @@ -324,11 +326,11 @@ export class Editor { is_published, description, }: Partial): void => { - this.setTitle(title || ''); + this.mapSetTitle(title || ''); const { id } = this.getUser(); if (address && id && owner && id === owner) { - this.setAddress(address); + this.mapSetAddress(address); } if (route) this.poly.setPoints(route); @@ -348,11 +350,11 @@ export class Editor { ); } - this.setPublic(is_public); + this.mapSetPublic(is_public); this.setStarred(is_published); - this.setDescription(description); + this.mapSetDescription(description); - this.setLogo((logo && LOGOS[DEFAULT_LOGO] && logo) || DEFAULT_LOGO); + this.mapSetLogo((logo && LOGOS[DEFAULT_LOGO] && logo) || DEFAULT_LOGO); this.setProvider((provider && PROVIDERS[provider] && provider) || DEFAULT_PROVIDER); if (owner) this.owner = owner; @@ -438,7 +440,7 @@ export class Editor { provider: this.getProvider(), }); - setProvider: typeof changeProvider = provider => store.dispatch(changeProvider(provider)); + setProvider: typeof mapSetProvider = provider => store.dispatch(mapSetProvider(provider)); get isEmpty(): boolean { const { route, stickers } = this.dumpData(); diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 25c72f2..f19e18a 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -63,8 +63,8 @@ export const setRenderer = payload => ({ type: USER_ACTIONS.SET_RENDERER, payloa export const takeAShot = () => ({ type: USER_ACTIONS.TAKE_A_SHOT }); export const cropAShot = payload => ({ type: USER_ACTIONS.CROP_A_SHOT, ...payload }); -export const setProvider = provider => ({ type: USER_ACTIONS.SET_PROVIDER, provider }); -export const changeProvider = provider => ({ type: USER_ACTIONS.CHANGE_PROVIDER, provider }); +// export const setProvider = provider => ({ type: USER_ACTIONS.SET_PROVIDER, provider }); +// export const changeProvider = provider => ({ type: USER_ACTIONS.CHANGE_PROVIDER, provider }); export const setDialog = dialog => ({ type: USER_ACTIONS.SET_DIALOG, dialog }); export const setDialogActive = dialog_active => ({ type: USER_ACTIONS.SET_DIALOG_ACTIVE, dialog_active }); diff --git a/src/redux/user/handlers.ts b/src/redux/user/handlers.ts index 1354c55..271687d 100644 --- a/src/redux/user/handlers.ts +++ b/src/redux/user/handlers.ts @@ -121,7 +121,7 @@ const setRenderer: ActionHandler = (state, { renderer: { ...state.renderer, ...payload } }); -const setProvider: ActionHandler = (state, { provider }) => ({ ...state, provider }); +// const setProvider: ActionHandler = (state, { provider }) => ({ ...state, provider }); const setDialog: ActionHandler = (state, { dialog }) => ({ ...state, @@ -270,7 +270,7 @@ export const USER_HANDLERS = ({ [USER_ACTIONS.HIDE_RENDERER]: hideRenderer, [USER_ACTIONS.SET_RENDERER]: setRenderer, - [USER_ACTIONS.SET_PROVIDER]: setProvider, + // [USER_ACTIONS.SET_PROVIDER]: setProvider, [USER_ACTIONS.SET_DIALOG]: setDialog, [USER_ACTIONS.SET_DIALOG_ACTIVE]: setDialogActive, From 0c321f2bb300754966b6d93eacde10540159e152 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 8 Jan 2020 12:07:36 +0700 Subject: [PATCH 114/320] removed all modules --- src/{modules => _modules}/Arrows.ts | 0 src/{modules => _modules}/Editor.ts | 0 src/_modules/InteractivePoly.ts | 608 ++++++++++++++++++++++++++ src/{modules => _modules}/KmMarks.ts | 0 src/{modules => _modules}/Map.ts | 0 src/{modules => _modules}/Poly.ts | 0 src/{modules => _modules}/Router.ts | 0 src/{modules => _modules}/Sticker.tsx | 0 src/{modules => _modules}/Stickers.ts | 0 src/containers/map/Route/index.tsx | 4 +- src/containers/map/Sticker/index.tsx | 2 +- src/containers/map/Stickers/index.tsx | 10 +- src/modules/InteractivePoly.ts | 2 +- src/redux/map/actions.ts | 14 +- src/redux/map/index.ts | 2 +- src/redux/map/types.ts | 11 +- src/redux/types.ts | 0 src/redux/user/index.ts | 2 +- src/utils/api.ts | 89 ++-- src/utils/renderer.ts | 8 +- src/utils/simplify.ts | 2 +- 21 files changed, 677 insertions(+), 77 deletions(-) rename src/{modules => _modules}/Arrows.ts (100%) rename src/{modules => _modules}/Editor.ts (100%) create mode 100644 src/_modules/InteractivePoly.ts rename src/{modules => _modules}/KmMarks.ts (100%) rename src/{modules => _modules}/Map.ts (100%) rename src/{modules => _modules}/Poly.ts (100%) rename src/{modules => _modules}/Router.ts (100%) rename src/{modules => _modules}/Sticker.tsx (100%) rename src/{modules => _modules}/Stickers.ts (100%) create mode 100644 src/redux/types.ts diff --git a/src/modules/Arrows.ts b/src/_modules/Arrows.ts similarity index 100% rename from src/modules/Arrows.ts rename to src/_modules/Arrows.ts diff --git a/src/modules/Editor.ts b/src/_modules/Editor.ts similarity index 100% rename from src/modules/Editor.ts rename to src/_modules/Editor.ts diff --git a/src/_modules/InteractivePoly.ts b/src/_modules/InteractivePoly.ts new file mode 100644 index 0000000..33822a9 --- /dev/null +++ b/src/_modules/InteractivePoly.ts @@ -0,0 +1,608 @@ +/* + done IMPORTANT: select closest point on drag instead of first + done add touch hint poly + done approx radius for dragFindNearest +*/ + +import { + LatLngExpression, + Marker, + Polyline, + PolylineOptions, + marker, + divIcon, + LayerGroup, + LatLng, + LeafletMouseEvent, + latLng, + LatLngLiteral +} from "leaflet"; + +import { distKm, distToSegment, getPolyLength, pointInArea } from "$utils/geom"; + +interface InteractivePolylineOptions extends PolylineOptions { + maxMarkers?: number; + constraintsStyle?: PolylineOptions; + kmMarksEnabled?: boolean; + kmMarksStep?: number; +} + +export class InteractivePoly extends Polyline { + constructor( + latlngs: LatLngExpression[] | LatLngExpression[][], + options?: InteractivePolylineOptions + ) { + super(latlngs, options); + + this.constraintsStyle = { + ...this.constraintsStyle, + ...options.constraintsStyle + }; + this.maxMarkers = options.maxMarkers || this.maxMarkers; + + this.constrLine = new Polyline([], this.constraintsStyle); + + this.startDragHinting(); + } + + updateTouchHinter = ({ latlngs }: { latlngs: LatLngLiteral[] }): void => { + this.touchHinter.setLatLngs(latlngs); + }; + + setPoints = (latlngs: LatLng[], emitEvent = false) => { + this.setLatLngs(latlngs); + this.recreateMarkers(); + this.recalcDistance(); + this.touchHinter.setLatLngs(latlngs); + + if (emitEvent) { + this.fire("latlngschange", { latlngs }); + } + }; + + createHintMarker = (latlng: LatLng): Marker => + marker(latlng, { + draggable: false, + icon: divIcon({ + className: "leaflet-vertex-drag-helper", + iconSize: [11, 11], + iconAnchor: [6, 6] + }) + }); + + createMarker = (latlng: LatLng): Marker => + marker(latlng, { + draggable: true, + icon: divIcon({ + className: "leaflet-vertex-icon", + iconSize: [11, 11], + iconAnchor: [6, 6] + }) + }) + .on("contextmenu", this.dropMarker) + .on("drag", this.onMarkerDrag) + .on("dragstart", this.onMarkerDragStart) + .on("dragend", this.onMarkerDragEnd) + .addTo(this.markerLayer); + + recreateMarkers = () => { + this.clearAllMarkers(); + const latlngs = this.getLatLngs(); + + if (!latlngs || latlngs.length === 0) return; + + latlngs.forEach(latlng => this.markers.push(this.createMarker(latlng))); + + this.updateMarkers(); + }; + + clearAllMarkers = (): void => { + this.markerLayer.clearLayers(); + this.markers = []; + }; + + updateMarkers = (): void => { + this.showVisibleMarkers(); + }; + + showAllMarkers = (): void => { + if (!this.is_editing) return; + if (this._map.hasLayer(this.markerLayer)) return; + + this._map.addLayer(this.markerLayer); + this.fire("allvertexshow"); + }; + + hideAllMarkers = (): void => { + if (!this._map.hasLayer(this.markerLayer)) return; + + this._map.removeLayer(this.markerLayer); + this.fire("allvertexhide"); + }; + + showVisibleMarkers = (): void => { + if (!this.is_editing) return; + + const northEast = this._map.getBounds().getNorthEast(); + const southWest = this._map.getBounds().getSouthWest(); + + const { visible, hidden } = this.markers.reduce( + (obj, marker) => { + const { lat, lng } = marker.getLatLng(); + const is_hidden = + lat > northEast.lat || + lng > northEast.lng || + lat < southWest.lat || + lng < southWest.lng; + + return is_hidden + ? { ...obj, hidden: [...obj.hidden, marker] } + : { ...obj, visible: [...obj.visible, marker] }; + }, + { visible: [], hidden: [] } + ); + + if (visible.length > this.maxMarkers) return this.hideAllMarkers(); + + this.showAllMarkers(); + + visible.forEach(marker => { + if (!this.markerLayer.hasLayer(marker)) this.markerLayer.addLayer(marker); + }); + + hidden.forEach(marker => { + if (this.markerLayer.hasLayer(marker)) + this.markerLayer.removeLayer(marker); + }); + }; + + editor = { + disable: () => { + this.hideAllMarkers(); + this.is_editing = false; + this.stopDragHinting(); + this.stopDrawing(); + this.touchHinter.removeFrom(this._map); + this.fire("editordisable"); + }, + enable: () => { + this.is_editing = true; + this.showVisibleMarkers(); + this.startDragHinting(); + this.touchHinter.addTo(this._map); + + this.fire("editorenable"); + }, + continue: () => { + this.is_drawing = true; + this.drawing_direction = "forward"; + this.startDrawing(); + }, + prepend: () => { + this.is_drawing = true; + this.drawing_direction = "backward"; + this.startDrawing(); + } + }; + + moveDragHint = ({ latlng }: LeafletMouseEvent): void => { + this.hintMarker.setLatLng(latlng); + }; + + hideDragHint = (): void => { + if (this._map.hasLayer(this.hintMarker)) + this._map.removeLayer(this.hintMarker); + }; + + showDragHint = (): void => { + this._map.addLayer(this.hintMarker); + }; + + startDragHinting = (): void => { + this.touchHinter.on("mousemove", this.moveDragHint); + this.touchHinter.on("mousedown", this.startDragHintMove); + this.touchHinter.on("mouseover", this.showDragHint); + this.touchHinter.on("mouseout", this.hideDragHint); + }; + + stopDragHinting = (): void => { + this.touchHinter.off("mousemove", this.moveDragHint); + this.touchHinter.off("mousedown", this.startDragHintMove); + this.touchHinter.off("mouseover", this.showDragHint); + this.touchHinter.off("mouseout", this.hideDragHint); + }; + + startDragHintMove = (event: LeafletMouseEvent): void => { + event.originalEvent.stopPropagation(); + event.originalEvent.preventDefault(); + + if (this.is_drawing) { + this.stopDrawing(); + this.is_drawing = true; + } + + const prev = this.dragHintFindNearest(event.latlng); + + if (prev < 0) return; + + this.hint_prev_marker = prev; + + this.constrLine.setLatLngs([]).addTo(this._map); + + this._map.dragging.disable(); + + this.is_dragging = true; + + this._map.on("mousemove", this.dragHintMove); + this._map.on("mouseup", this.dragHintAddMarker); + this._map.on("mouseout", this.stopDragHintMove); + }; + + stopDragHintMove = (): void => { + this._map.dragging.enable(); + + this.constrLine.removeFrom(this._map); + + this._map.off("mousemove", this.dragHintMove); + this._map.off("mouseup", this.dragHintAddMarker); + this._map.off("mouseout", this.stopDragHintMove); + + if (this.is_drawing) this.startDrawing(); + + setTimeout(() => { + this.is_dragging = false; + }, 0); + }; + + dragHintAddMarker = ({ latlng }: LeafletMouseEvent): void => { + this.dragHintChangeDistance(this.hint_prev_marker, latlng); + + this.markers.splice( + this.hint_prev_marker + 1, + 0, + this.createMarker(latlng) + ); + this.insertLatLng(latlng, this.hint_prev_marker + 1); + this.hideDragHint(); + this.stopDragHintMove(); + }; + + dragHintChangeDistance = (index: number, current: LatLngLiteral): void => { + const prev = this.markers[index]; + const next = this.markers[index + 1]; + + const initial_distance = distKm(prev.getLatLng(), next.getLatLng()); + + const current_distance = + ((prev && distKm(prev.getLatLng(), current)) || 0) + + ((next && distKm(next.getLatLng(), current)) || 0); + + this.distance += current_distance - initial_distance; + + this.fire("distancechange", { distance: this.distance }); + }; + + dragHintFindNearest = (latlng: LatLng): any => { + const latlngs = this.getLatLngs() as LatLng[]; + + const neighbours = latlngs + .filter((current, index) => { + const next = latlngs[index + 1] as LatLng; + + return next && pointInArea(current, next, latlng); + }) + .map(el => latlngs.indexOf(el)) + .sort( + (a, b) => + distToSegment(latlngs[a], latlngs[a + 1], latlng) - + distToSegment(latlngs[b], latlngs[b + 1], latlng) + ); + + return neighbours.length > 0 ? neighbours[0] : -1; + }; + + dragHintMove = (event: LeafletMouseEvent): void => { + event.originalEvent.stopPropagation(); + event.originalEvent.preventDefault(); + + this.setConstraints([ + this.markers[this.hint_prev_marker].getLatLng(), + event.latlng, + this.markers[this.hint_prev_marker + 1].getLatLng() + ]); + }; + + onMarkerDrag = ({ target }: { target: Marker }) => { + const coords = new Array(0) + .concat( + (this.vertex_index > 0 && + this.markers[this.vertex_index - 1].getLatLng()) || + [] + ) + .concat(target.getLatLng()) + .concat( + (this.vertex_index < this.markers.length - 1 && + this.markers[this.vertex_index + 1].getLatLng()) || + [] + ); + + this.setConstraints(coords); + + this.fire("vertexdrag", { index: this.vertex_index, vertex: target }); + }; + + onMarkerDragStart = ({ target }: { target: Marker }) => { + if (this.is_drawing) { + this.stopDrawing(); + this.is_drawing = true; + } + + if (this.is_dragging) this.stopDragHintMove(); + + this.vertex_index = this.markers.indexOf(target); + + this.is_dragging = true; + this.constrLine.addTo(this._map); + + this.fire("vertexdragstart", { index: this.vertex_index, vertex: target }); + }; + + onMarkerDragEnd = ({ target }: { target: Marker }): void => { + const latlngs = this.getLatLngs() as LatLngLiteral[]; + this.markerDragChangeDistance( + this.vertex_index, + latlngs[this.vertex_index], + target.getLatLng() + ); + + this.replaceLatlng(target.getLatLng(), this.vertex_index); + + this.is_dragging = false; + this.constrLine.removeFrom(this._map); + + this.vertex_index = null; + + if (this.is_drawing) this.startDrawing(); + + this.fire("vertexdragend", { index: this.vertex_index, vertex: target }); + }; + + markerDragChangeDistance = ( + index: number, + initial: LatLngLiteral, + current: LatLngLiteral + ): void => { + const prev = index > 0 ? this.markers[index - 1] : null; + const next = + index <= this.markers.length + 1 ? this.markers[index + 1] : null; + + const initial_distance = + ((prev && distKm(prev.getLatLng(), initial)) || 0) + + ((next && distKm(next.getLatLng(), initial)) || 0); + + const current_distance = + ((prev && distKm(prev.getLatLng(), current)) || 0) + + ((next && distKm(next.getLatLng(), current)) || 0); + + this.distance += current_distance - initial_distance; + + this.fire("distancechange", { distance: this.distance }); + }; + + startDrawing = (): void => { + this.is_drawing = true; + this.setConstraints([]); + this.constrLine.addTo(this._map); + this._map.on("mousemove", this.onDrawingMove); + this._map.on("click", this.onDrawingClick); + }; + + stopDrawing = (): void => { + this.constrLine.removeFrom(this._map); + this._map.off("mousemove", this.onDrawingMove); + this._map.off("click", this.onDrawingClick); + this.is_drawing = false; + }; + + onDrawingMove = ({ latlng }: LeafletMouseEvent): void => { + if (this.markers.length === 0) { + this.setConstraints([]); + return; + } + + if (!this._map.hasLayer(this.constrLine)) + this._map.addLayer(this.constrLine); + + const marker = + this.drawing_direction === "forward" + ? this.markers[this.markers.length - 1] + : this.markers[0]; + + this.setConstraints([latlng, marker.getLatLng()]); + }; + + onDrawingClick = (event: LeafletMouseEvent): void => { + if (this.is_dragging) return; + + const { latlng } = event; + + this.stopDrawing(); + + const latlngs = this.getLatLngs() as any[]; + + this.drawingChangeDistance(latlng); + + if (this.drawing_direction === "forward") { + latlngs.push(latlng); + this.markers.push(this.createMarker(latlng)); + } else { + latlngs.unshift(latlng); + this.markers.unshift(this.createMarker(latlng)); + } + + this.setLatLngs(latlngs); + this.fire("latlngschange", { latlngs }); + this.showVisibleMarkers(); + this.startDrawing(); + }; + + drawingChangeDistance = (latlng: LatLngLiteral): void => { + const latlngs = this.getLatLngs() as LatLngLiteral[]; + + if (latlngs.length < 1) { + this.distance = 0; + this.fire("distancechange", { distance: this.distance }); + return; + } + + const point = + this.drawing_direction === "forward" + ? latlngs[latlngs.length - 1] + : latlngs[0]; + + this.distance += distKm(point, latlng); + this.fire("distancechange", { distance: this.distance }); + }; + + replaceLatlng = (latlng: LatLng, index: number): void => { + const latlngs = this.getLatLngs() as LatLngLiteral[]; + latlngs.splice(index, 1, latlng); + this.setLatLngs(latlngs); + this.fire("latlngschange", { latlngs }); + }; + + insertLatLng = (latlng, index): void => { + const latlngs = this.getLatLngs(); + latlngs.splice(index, 0, latlng); + this.setLatLngs(latlngs); + this.fire("latlngschange", { latlngs }); + }; + + setConstraints = (coords: LatLng[]) => { + this.constrLine.setLatLngs(coords); + }; + + dropMarker = ({ target }: LeafletMouseEvent): void => { + const index = this.markers.indexOf(target); + const latlngs = this.getLatLngs(); + + if (typeof index === "undefined" || latlngs.length <= 2) return; + + this.dropMarkerDistanceChange(index); + this._map.removeLayer(this.markers[index]); + this.markers.splice(index, 1); + latlngs.splice(index, 1); + + this.setLatLngs(latlngs); + this.fire("latlngschange", { latlngs }); + }; + + dropMarkerDistanceChange = (index: number): void => { + const latlngs = this.getLatLngs() as LatLngLiteral[]; + + const prev = index > 0 ? latlngs[index - 1] : null; + const current = latlngs[index]; + const next = index <= latlngs.length + 1 ? latlngs[index + 1] : null; + + const initial_distance = + ((prev && distKm(prev, current)) || 0) + + ((next && distKm(next, current)) || 0); + + const current_distance = (prev && next && distKm(prev, next)) || 0; + + this.distance += current_distance - initial_distance; + + this.fire("distancechange", { distance: this.distance }); + }; + + recalcDistance = () => { + const latlngs = this.getLatLngs() as LatLngLiteral[]; + this.distance = getPolyLength(latlngs); + + this.fire("distancechange", { distance: this.distance }); + }; + + markers: Marker[] = []; + maxMarkers: InteractivePolylineOptions["maxMarkers"] = 2; + markerLayer: LayerGroup = new LayerGroup(); + + constraintsStyle: InteractivePolylineOptions["constraintsStyle"] = { + weight: 6, + color: "red", + dashArray: "10, 12", + opacity: 0.5, + interactive: false + }; + + touchHinter: Polyline = new Polyline([], { + weight: 24, + smoothFactor: 3, + className: "touch-hinter-poly" + }); + + hintMarker: Marker = this.createHintMarker(latLng({ lat: 0, lng: 0 })); + + constrLine: Polyline; + + is_editing: boolean = true; + is_dragging: boolean = false; + is_drawing: boolean = false; + + drawing_direction: "forward" | "backward" = "forward"; + vertex_index?: number = null; + + hint_prev_marker: number = null; + distance: number = 0; +} + +InteractivePoly.addInitHook(function() { + this.once("add", event => { + if (event.target instanceof InteractivePoly) { + this.map = event.target._map; + + this.map.on("touch", console.log); + + this.markerLayer.addTo(event.target._map); + this.hintMarker.addTo(event.target._map); + this.constrLine.addTo(event.target._map); + this.touchHinter.addTo(event.target._map); + + this.map.on("moveend", this.updateMarkers); + + this.on("latlngschange", this.updateTouchHinter); + + if (window.innerWidth < 768) { + this.touchHinter.setStyle({ weight: 32 }); + } + } + }); + + this.once("remove", event => { + if (event.target instanceof InteractivePoly) { + this.markerLayer.removeFrom(this._map); + this.hintMarker.removeFrom(this._map); + this.constrLine.removeFrom(this._map); + this.touchHinter.removeFrom(this._map); + + this.map.off("moveend", this.updateMarkers); + } + }); +}); + +// export const InteractivePoly = Component; +/* + events: + vertexdragstart, + vertexdragend, + vertexdrag, + + allvertexhide + allvertexshow + + editordisable + editorenable + + distancechange + + latlngschange + */ diff --git a/src/modules/KmMarks.ts b/src/_modules/KmMarks.ts similarity index 100% rename from src/modules/KmMarks.ts rename to src/_modules/KmMarks.ts diff --git a/src/modules/Map.ts b/src/_modules/Map.ts similarity index 100% rename from src/modules/Map.ts rename to src/_modules/Map.ts diff --git a/src/modules/Poly.ts b/src/_modules/Poly.ts similarity index 100% rename from src/modules/Poly.ts rename to src/_modules/Poly.ts diff --git a/src/modules/Router.ts b/src/_modules/Router.ts similarity index 100% rename from src/modules/Router.ts rename to src/_modules/Router.ts diff --git a/src/modules/Sticker.tsx b/src/_modules/Sticker.tsx similarity index 100% rename from src/modules/Sticker.tsx rename to src/_modules/Sticker.tsx diff --git a/src/modules/Stickers.ts b/src/_modules/Stickers.ts similarity index 100% rename from src/modules/Stickers.ts rename to src/_modules/Stickers.ts diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 48e3c2c..2660916 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -2,13 +2,11 @@ import React, { FC, useEffect, memo, - useContext, useState, useCallback } from "react"; import { IMapRoute, ILatLng } from "../../../redux/map/types"; -import { MapContext } from "$utils/context"; -import { InteractivePoly } from "$modules/InteractivePoly"; +import { InteractivePoly } from "$modules/InteractivePoly"; import { isMobile } from "$utils/window"; import { LatLng, Map } from "leaflet"; diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index 2633e2b..6bea62e 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import { Map, marker, Marker } from "leaflet"; -import { IStickerDump, Sticker as StickerComponent } from "$modules/Sticker"; +import { IStickerDump } from "$redux/map/types"; import { STICKERS } from "$constants/stickers"; import { StickerDesc } from "$components/StickerDesc"; import classNames from "classnames"; diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index e486300..c832b6f 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -1,8 +1,8 @@ -import * as React from "react"; -import { IStickerDump } from "$modules/Sticker"; -import { FeatureGroup, Map } from "leaflet"; -import { Sticker } from "$containers/map/Sticker"; -import { mapSetSticker, mapDropSticker } from "$redux/map/actions"; +import * as React from 'react'; +import { IStickerDump } from '$redux/map/types'; +import { FeatureGroup, Map } from 'leaflet'; +import { Sticker } from '$containers/map/Sticker'; +import { mapSetSticker, mapDropSticker } from '$redux/map/actions'; interface IProps { stickers: IStickerDump[]; diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index 33822a9..c0e15a9 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -16,7 +16,7 @@ import { LeafletMouseEvent, latLng, LatLngLiteral -} from "leaflet"; +} from "leaflet"; import { distKm, distToSegment, getPolyLength, pointInArea } from "$utils/geom"; diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index df2ba18..e091219 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -1,16 +1,16 @@ -import { MAP_ACTIONS } from "./constants"; -import { IMapReducer } from "./"; -import { IStickerDump } from "$modules/Sticker"; -import { ILatLng } from "./types"; +import { MAP_ACTIONS } from './constants'; +import { IMapReducer } from './'; +import { IStickerDump } from '$redux/map/types'; +import { ILatLng } from './types'; export const mapSet = (map: Partial) => ({ type: MAP_ACTIONS.SET_MAP, - map + map, }); export const mapSetProvider = (provider: IMapReducer['provider']) => ({ type: MAP_ACTIONS.SET_PROVIDER, - provider + provider, }); export const mapSetRoute = (route: IMapReducer['route']) => ({ @@ -65,6 +65,6 @@ export const mapSetPublic = (is_public: IMapReducer['is_public']) => ({ }); export const mapSetLogo = (logo: IMapReducer['logo']) => ({ - type: MAP_ACTIONS.SET_LOGO, + type: MAP_ACTIONS.SET_LOGO, logo, }); diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index e6cb1f1..47a64f8 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -2,7 +2,7 @@ import { createReducer } from 'reduxsauce'; import { MAP_HANDLERS } from './handlers'; import { DEFAULT_PROVIDER } from '$constants/providers'; import { IMapRoute } from './types'; -import { IStickerDump } from '$modules/Sticker'; +import { IStickerDump } from '$redux/map/types'; import { DEFAULT_LOGO } from '$constants/logos'; export interface IMapReducer { diff --git a/src/redux/map/types.ts b/src/redux/map/types.ts index 3d59e9f..d17a512 100644 --- a/src/redux/map/types.ts +++ b/src/redux/map/types.ts @@ -5,4 +5,13 @@ export type ILatLng = { lng: number, } -export type IMapRoute = ILatLng[]; \ No newline at end of file +export type IMapRoute = ILatLng[]; + + +export interface IStickerDump { + latlng: ILatLng, + set: string, + sticker: string, + angle?: number, + text?: string, +} diff --git a/src/redux/types.ts b/src/redux/types.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 1bc464f..8017093 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -6,7 +6,7 @@ import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; import { DIALOGS, IDialogs, TABS } from '$constants/dialogs'; import { IStickers } from "$constants/stickers"; import { IRoutePoint } from '$utils/gpx'; -import { IStickerDump } from '$modules/Sticker'; +import { IStickerDump } from '$redux/map/types'; import { USER_HANDLERS } from './handlers'; export interface IRoute { diff --git a/src/utils/api.ts b/src/utils/api.ts index 9743aa0..cf9142b 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -1,17 +1,15 @@ -import axios, { AxiosPromise } from "axios/index"; -import { API } from "$constants/api"; -import { IRootState, IRouteListItem, IRoute } from "$redux/user"; -import { IUser } from "$constants/auth"; -import { ILatLng } from "$modules/Stickers"; -import { IStickerDump } from "$modules/Sticker"; -import { CLIENT } from "$config/frontend"; -import { LatLngLiteral } from "leaflet"; +import axios from 'axios/index'; +import { API } from '$constants/api'; +import { IRootState, IRouteListItem, IRoute } from '$redux/user'; +import { IUser } from '$constants/auth'; +import { CLIENT } from '$config/frontend'; +import { LatLngLiteral } from 'leaflet'; import { resultMiddleware, errorMiddleware, IResultWithStatus, - configWithToken -} from "./middleware"; + configWithToken, +} from './middleware'; const arrayToObject = (array: any[], key: string): {} => array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); @@ -21,26 +19,26 @@ interface IGetRouteList { max: number; tab: string; search: string; - step: IRootState["routes"]["step"]; - shift: IRootState["routes"]["step"]; - token: IRootState["user"]["token"]; + step: IRootState['routes']['step']; + shift: IRootState['routes']['step']; + token: IRootState['user']['token']; } interface IGetRouteListResult { - min: IRootState["routes"]["filter"]["min"]; - max: IRootState["routes"]["filter"]["max"]; - limit: IRootState["routes"]["limit"]; - step: IRootState["routes"]["step"]; - shift: IRootState["routes"]["shift"]; - list: IRootState["routes"]["list"]; + min: IRootState['routes']['filter']['min']; + max: IRootState['routes']['filter']['max']; + limit: IRootState['routes']['limit']; + step: IRootState['routes']['step']; + shift: IRootState['routes']['shift']; + list: IRootState['routes']['list']; } export const checkUserToken = ({ id, - token + token, }: { - id: IRootState["user"]["id"]; - token: IRootState["user"]["token"]; + id: IRootState['user']['id']; + token: IRootState['user']['token']; }): Promise> => axios .get(API.CHECK_TOKEN, { - params: { id, token } + params: { id, token }, }) .then(resultMiddleware) .catch(errorMiddleware); @@ -63,9 +61,9 @@ export const getGuestToken = (): Promise> => axios .get(API.GET_MAP, { - params: { name } + params: { name }, }) .then(resultMiddleware) .catch(errorMiddleware); @@ -89,7 +87,7 @@ export const postMap = ({ provider, is_public, description, - token + token, }: Partial & { force: boolean; token: string; @@ -111,9 +109,9 @@ export const postMap = ({ distance, provider, is_public, - description + description, }, - force + force, }, configWithToken(token) ) @@ -122,21 +120,18 @@ export const postMap = ({ export const checkIframeToken = ({ viewer_id, - auth_key + auth_key, }: { viewer_id: string; auth_key: string; }) => axios .get(API.IFRAME_LOGIN_VK, { - params: { viewer_id, auth_key } + params: { viewer_id, auth_key }, }) - .then( - result => result && result.data && result.data.success && result.data.user - ) + .then(result => result && result.data && result.data.success && result.data.user) .catch(() => false); - export const getRouteList = ({ search, min, @@ -144,7 +139,7 @@ export const getRouteList = ({ tab, token, step, - shift + shift, }: IGetRouteList): Promise => .then(() => true) .catch(() => false); -export const dropRoute = ({ - address, - token -}: { - address: string; - token: string; -}): Promise => +export const dropRoute = ({ address, token }: { address: string; token: string }): Promise => axios .delete(API.DROP_ROUTE, configWithToken(token, { data: { address } })) .then(resultMiddleware) @@ -200,7 +189,7 @@ export const modifyRoute = ({ address, token, title, - is_public + is_public, }: { address: string; token: string; @@ -210,18 +199,14 @@ export const modifyRoute = ({ route: IRoute; }>> => axios - .patch( - API.MODIFY_ROUTE, - { address, token, is_public, title }, - configWithToken(token) - ) + .patch(API.MODIFY_ROUTE, { address, token, is_public, title }, configWithToken(token)) .then(resultMiddleware) .catch(errorMiddleware); export const sendRouteStarred = ({ token, address, - is_published + is_published, }: { token: string; address: string; diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index aa3ad45..784f6bb 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -3,8 +3,8 @@ import { COLORS, CLIENT } from '$config/frontend'; import * as saveAs from 'file-saver'; import { replaceProviderUrl } from '$constants/providers'; import { STICKERS } from '$constants/stickers'; -import { ILatLng } from '$modules/Stickers'; -import { IStickerDump } from '$modules/Sticker'; +import { ILatLng } from '$redux/map/types'; +import { IStickerDump } from '$redux/map/types'; import { IRootState } from '$redux/user'; import { angleBetweenPoints, @@ -434,8 +434,8 @@ const composeStickerImage = async ( x: number, y: number, angle: number, - set: IRootState['activeSticker']['set'], - sticker: IRootState['activeSticker']['sticker'] + set: string, + sticker: string ): Promise => { const rad = 56; const tX = Math.cos(angle + Math.PI) * rad - 30 + (x - 8); diff --git a/src/utils/simplify.ts b/src/utils/simplify.ts index d9ad83d..19f60f0 100644 --- a/src/utils/simplify.ts +++ b/src/utils/simplify.ts @@ -1,5 +1,5 @@ import { Map, LineUtil } from 'leaflet'; -import { ILatLng } from "$modules/Stickers"; +import { ILatLng } from "$redux/map/types"; export const simplify = ({ map, latlngs }: { map: Map, latlngs: ILatLng[] }): ILatLng[] => { const points = []; From 0f31144567bef878e499bb20b9369380ad27bc11 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 8 Jan 2020 12:11:06 +0700 Subject: [PATCH 115/320] fixed provider dialog --- src/components/dialogs/ProviderDialog.tsx | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/dialogs/ProviderDialog.tsx b/src/components/dialogs/ProviderDialog.tsx index adc7f08..8aeaeb9 100644 --- a/src/components/dialogs/ProviderDialog.tsx +++ b/src/components/dialogs/ProviderDialog.tsx @@ -4,12 +4,20 @@ import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; import * as MAP_ACTIONS from "$redux/map/actions"; import { IRootState } from "$redux/user"; +import { selectMapProvider } from '$redux/map/selectors'; +import { connect } from 'react-redux'; -interface Props extends IRootState { - mapSetProvider: typeof MAP_ACTIONS.mapSetProvider, -} +const mapStateToProps = state => ({ + provider: selectMapProvider(state), +}); -export const ProviderDialog = ({ provider, mapSetProvider }: Props) => ( +const mapDispatchToProps = { + mapSetProvider: MAP_ACTIONS.mapSetProvider, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + +const ProviderDialogUnconnected = ({ provider, mapSetProvider }: Props) => (
      { @@ -34,3 +42,7 @@ export const ProviderDialog = ({ provider, mapSetProvider }: Props) => (
      ); + +const ProviderDialog = connect(mapStateToProps, mapDispatchToProps)(ProviderDialogUnconnected) + +export { ProviderDialog } \ No newline at end of file From 23c9e42bd58a97309f26be0a7d2fff7b6e65dbe1 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 8 Jan 2020 12:15:00 +0700 Subject: [PATCH 116/320] fixed logo components --- src/components/dialogs/LogoDialog.tsx | 22 +++++++++++++++------ src/components/dialogs/ProviderDialog.tsx | 1 - src/components/logo/LogoPreview.tsx | 24 +++++++++++------------ src/redux/map/selectors.ts | 1 + 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/components/dialogs/LogoDialog.tsx b/src/components/dialogs/LogoDialog.tsx index e3a5b2d..2fb26e5 100644 --- a/src/components/dialogs/LogoDialog.tsx +++ b/src/components/dialogs/LogoDialog.tsx @@ -3,14 +3,20 @@ import { LOGOS } from '$constants/logos'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; import * as MAP_ACTIONS from "$redux/map/actions" -import { IMapReducer } from '$redux/map'; +import { selectMapLogo } from '$redux/map/selectors'; +import { connect } from 'react-redux'; -interface Props { - logo: IMapReducer['logo'], - mapSetLogo: typeof MAP_ACTIONS.mapSetLogo, -} +const mapStateToProps = state => ({ + logo: selectMapLogo(state), +}); -export const LogoDialog = ({ logo, mapSetLogo }: Props) => ( +const mapDispatchToProps = { + mapSetLogo: MAP_ACTIONS.mapSetLogo, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + +const LogoDialogUnconnected = ({ logo, mapSetLogo }: Props) => (
      @@ -30,3 +36,7 @@ export const LogoDialog = ({ logo, mapSetLogo }: Props) => (
      ); + +const LogoDialog = connect(mapStateToProps, mapDispatchToProps)(LogoDialogUnconnected); + +export { LogoDialog }; \ No newline at end of file diff --git a/src/components/dialogs/ProviderDialog.tsx b/src/components/dialogs/ProviderDialog.tsx index 8aeaeb9..3a870c2 100644 --- a/src/components/dialogs/ProviderDialog.tsx +++ b/src/components/dialogs/ProviderDialog.tsx @@ -3,7 +3,6 @@ import { PROVIDERS, replaceProviderUrl } from '$constants/providers'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; import * as MAP_ACTIONS from "$redux/map/actions"; -import { IRootState } from "$redux/user"; import { selectMapProvider } from '$redux/map/selectors'; import { connect } from 'react-redux'; diff --git a/src/components/logo/LogoPreview.tsx b/src/components/logo/LogoPreview.tsx index 923234a..5a6f212 100644 --- a/src/components/logo/LogoPreview.tsx +++ b/src/components/logo/LogoPreview.tsx @@ -1,21 +1,21 @@ -import * as React from "react"; -import { LOGOS } from "$constants/logos"; -import { connect } from "react-redux"; -import { IRootState } from "$redux/user"; +import * as React from 'react'; +import { LOGOS } from '$constants/logos'; +import { connect } from 'react-redux'; +import { IRootState } from '$redux/user'; +import { selectMapLogo } from '$redux/map/selectors'; -interface Props extends IRootState {} +const mapStateToProps = state => ({ logo: selectMapLogo(state) }); +type Props = ReturnType; -const Component = ({ logo }: Props) => ( +const LogoPreviewUnconnected = React.memo(({ logo }: Props) => (
      -); +)); -const mapStateToProps = ({ user: { logo } }) => ({ logo }); +const LogoPreview = connect(mapStateToProps)(LogoPreviewUnconnected); -export const LogoPreview = connect(mapStateToProps)(Component); +export { LogoPreview }; diff --git a/src/redux/map/selectors.ts b/src/redux/map/selectors.ts index 6bceeda..222d8aa 100644 --- a/src/redux/map/selectors.ts +++ b/src/redux/map/selectors.ts @@ -2,5 +2,6 @@ import { IState } from "$redux/store"; export const selectMap = (state: IState) => state.map; export const selectMapProvider = (state: IState) => state.map.provider; +export const selectMapLogo = (state: IState) => state.map.logo; export const selectMapRoute= (state: IState) => state.map.route; export const selectMapStickers = (state: IState) => state.map.stickers; \ No newline at end of file From 103097edbd38581714c32afee7adfca0ddc4feac Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 8 Jan 2020 12:51:19 +0700 Subject: [PATCH 117/320] fixed imports --- src/_modules/Sticker.tsx | 4 +- src/components/Cursor.tsx | 2 +- src/components/Fills.tsx | 2 +- src/components/Scroll.tsx | 2 +- src/components/StickerDesc.tsx | 2 +- src/components/StickerIcon.tsx | 2 +- src/components/Switch.tsx | 2 +- src/components/UserLocation.tsx | 2 +- src/components/dialogs/AppInfoDialog.tsx | 2 +- src/components/dialogs/CancelDialog.tsx | 2 +- src/components/dialogs/LogoDialog.tsx | 2 +- src/components/dialogs/MapListDialog.tsx | 276 ++++++++++-------- src/components/dialogs/ProviderDialog.tsx | 2 +- src/components/dialogs/RouterDialog.tsx | 2 +- src/components/dialogs/SaveDialog.tsx | 2 +- src/components/dialogs/ShotPrefetchDialog.tsx | 21 +- src/components/dialogs/StickersDialog.tsx | 2 +- src/components/dialogs/TitleDialog.tsx | 2 +- src/components/dialogs/TrashDialog.tsx | 2 +- src/components/logo/LogoPreview.tsx | 2 +- src/components/maps/RouteRowDrop.tsx | 2 +- src/components/maps/RouteRowEditor.tsx | 2 +- src/components/maps/RouteRowView.tsx | 2 +- src/components/maps/RouteRowWrapper.tsx | 2 +- src/components/panels/DistanceBar.tsx | 4 +- src/components/panels/EditorDialog.tsx | 4 +- src/components/panels/EditorPanel.tsx | 2 +- src/components/panels/Icon.tsx | 2 +- src/components/panels/RendererPanel.tsx | 2 +- src/components/panels/Tooltip.tsx | 2 +- src/components/panels/TopLeftPanel.tsx | 2 +- src/components/panels/TopRightPanel.tsx | 2 +- src/components/panels/UserPanel.tsx | 2 +- src/components/renderer/Renderer.tsx | 4 +- src/components/user/GuestButton.tsx | 2 +- src/components/user/UserButton.tsx | 2 +- src/components/user/UserMenu.tsx | 2 +- src/components/user/UserPicture.tsx | 2 +- src/containers/App.tsx | 46 +-- src/containers/LeftDialog.tsx | 43 +-- src/containers/map/Map/index.tsx | 2 +- src/containers/map/Sticker/index.tsx | 2 +- src/containers/map/Stickers/index.tsx | 2 +- src/containers/map/TileLayer/index.tsx | 2 +- src/index.tsx | 4 +- src/redux/user/selectors.ts | 3 +- src/utils/context.ts | 2 +- src/utils/gpx.ts | 2 +- src/utils/renderer.ts | 2 +- tsconfig.json | 2 + 50 files changed, 260 insertions(+), 229 deletions(-) diff --git a/src/_modules/Sticker.tsx b/src/_modules/Sticker.tsx index ef33651..07133dd 100644 --- a/src/_modules/Sticker.tsx +++ b/src/_modules/Sticker.tsx @@ -1,9 +1,9 @@ import { Map, Marker, marker } from 'leaflet'; -import * as React from 'react'; +import React from 'react'; import { DomMarker } from '$utils/DomMarker'; import { STICKERS } from '$constants/stickers'; -import * as ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom'; import { StickerDesc } from '$components/StickerDesc'; import classnames from 'classnames'; import { getLabelDirection } from '$utils/geom'; diff --git a/src/components/Cursor.tsx b/src/components/Cursor.tsx index eb0afeb..4d1c3e8 100644 --- a/src/components/Cursor.tsx +++ b/src/components/Cursor.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; import { MODES } from '$constants/modes'; import { IStickerPack, STICKERS } from '$constants/stickers'; diff --git a/src/components/Fills.tsx b/src/components/Fills.tsx index 70b511f..b68d6cd 100644 --- a/src/components/Fills.tsx +++ b/src/components/Fills.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; export const Fills = () => ( diff --git a/src/components/Scroll.tsx b/src/components/Scroll.tsx index 97ef45e..79c31f0 100644 --- a/src/components/Scroll.tsx +++ b/src/components/Scroll.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Scrollbars } from 'tt-react-custom-scrollbars'; export const Scroll = props => ( diff --git a/src/components/StickerDesc.tsx b/src/components/StickerDesc.tsx index 835ea52..d2e90db 100644 --- a/src/components/StickerDesc.tsx +++ b/src/components/StickerDesc.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import classnames from 'classnames'; interface Props { diff --git a/src/components/StickerIcon.tsx b/src/components/StickerIcon.tsx index 27e499b..a2c7c2f 100644 --- a/src/components/StickerIcon.tsx +++ b/src/components/StickerIcon.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { STICKERS } from '$constants/stickers'; type Props = { diff --git a/src/components/Switch.tsx b/src/components/Switch.tsx index 9d15685..2ece529 100644 --- a/src/components/Switch.tsx +++ b/src/components/Switch.tsx @@ -1,5 +1,5 @@ // @flow -import * as React from 'react'; +import React from 'react'; import classnames from 'classnames'; type Props = { diff --git a/src/components/UserLocation.tsx b/src/components/UserLocation.tsx index 7dd0e7f..73f96db 100644 --- a/src/components/UserLocation.tsx +++ b/src/components/UserLocation.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; // import { marker } from 'leaflet'; // import { DomMarker } from '$utils/DomMarker'; // import { Icon } from '$components/panels/Icon'; diff --git a/src/components/dialogs/AppInfoDialog.tsx b/src/components/dialogs/AppInfoDialog.tsx index 0363352..65b897b 100644 --- a/src/components/dialogs/AppInfoDialog.tsx +++ b/src/components/dialogs/AppInfoDialog.tsx @@ -1,5 +1,5 @@ // @flow -import * as React from 'react'; +import React from 'react'; import { Scroll } from '$components/Scroll'; import { APP_INFO } from '$constants/app_info'; diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index 48f3ed1..393deb6 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { MODES } from '$constants/modes'; import { Icon } from '$components/panels/Icon'; diff --git a/src/components/dialogs/LogoDialog.tsx b/src/components/dialogs/LogoDialog.tsx index 2fb26e5..b7b5514 100644 --- a/src/components/dialogs/LogoDialog.tsx +++ b/src/components/dialogs/LogoDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { LOGOS } from '$constants/logos'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index fb6d94b..ce2ea6f 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -1,5 +1,4 @@ -import * as React from 'react'; -import { bindActionCreators } from 'redux'; +import React from 'react'; import { connect } from 'react-redux'; import { RouteRowWrapper } from '$components/maps/RouteRowWrapper'; import { Scroll } from '$components/Scroll'; @@ -10,44 +9,46 @@ import { setDialogActive, mapsLoadMore, dropRoute, - modifyRoute, toggleRouteStarred, + modifyRoute, + toggleRouteStarred, } from '$redux/user/actions'; import { isMobile } from '$utils/window'; import classnames from 'classnames'; -import * as Range from 'rc-slider/lib/Range'; +import Range from 'rc-slider/lib/Range'; import { TABS, TABS_TITLES } from '$constants/dialogs'; import { Icon } from '$components/panels/Icon'; import { pushPath } from '$utils/history'; import { IRootState, IRouteListItem } from '$redux/user'; -import { ROLES } from "$constants/auth"; +import { ROLES } from '$constants/auth'; +import { IState } from '$redux/store'; export interface IMapListDialogProps extends IRootState { - marks: { [x: number]: string }, - routes_sorted: Array, - routes: IRootState['routes'], - ready: IRootState['ready'], - role: IRootState['user']['role'], + marks: { [x: number]: string }; + routes_sorted: Array; + routes: IRootState['routes']; + ready: IRootState['ready']; + role: IRootState['user']['role']; - mapsLoadMore: typeof mapsLoadMore, - searchSetDistance: typeof searchSetDistance, - searchSetTitle: typeof searchSetTitle, - searchSetTab: typeof searchSetTab, - setDialogActive: typeof setDialogActive, - dropRoute: typeof dropRoute, - modifyRoute: typeof modifyRoute, - toggleRouteStarred: typeof toggleRouteStarred, + mapsLoadMore: typeof mapsLoadMore; + searchSetDistance: typeof searchSetDistance; + searchSetTitle: typeof searchSetTitle; + searchSetTab: typeof searchSetTab; + setDialogActive: typeof setDialogActive; + dropRoute: typeof dropRoute; + modifyRoute: typeof modifyRoute; + toggleRouteStarred: typeof toggleRouteStarred; } export interface IMapListDialogState { - menu_target: IRouteListItem['address'], - editor_target: IRouteListItem['address'], + menu_target: IRouteListItem['address']; + editor_target: IRouteListItem['address']; - is_editing: boolean, - is_dropping: boolean, + is_editing: boolean; + is_dropping: boolean; } -class Component extends React.Component { +class MapListDialogUnconnected extends React.Component { state = { menu_target: null, editor_target: null, @@ -56,33 +57,37 @@ class Component extends React.Component this.setState({ - editor_target, - menu_target: null, - is_editing: true, - is_dropping: false, - }); + startEditing = (editor_target: IRouteListItem['address']): void => + this.setState({ + editor_target, + menu_target: null, + is_editing: true, + is_dropping: false, + }); - showMenu = (menu_target: IRouteListItem['address']): void => this.setState({ - menu_target, - }); + showMenu = (menu_target: IRouteListItem['address']): void => + this.setState({ + menu_target, + }); - hideMenu = (): void => this.setState({ - menu_target: null, - }); + hideMenu = (): void => + this.setState({ + menu_target: null, + }); - showDropCard = (editor_target: IRouteListItem['address']): void => this.setState({ - editor_target, - menu_target: null, - is_editing: false, - is_dropping: true, - }); + showDropCard = (editor_target: IRouteListItem['address']): void => + this.setState({ + editor_target, + menu_target: null, + is_editing: false, + is_dropping: true, + }); stopEditing = (): void => { this.setState({ editor_target: null }); }; - setTitle = ({ target: { value } }: { target: { value: string }}): void => { + setTitle = ({ target: { value } }: { target: { value: string } }): void => { this.props.searchSetTitle(value); }; @@ -97,8 +102,12 @@ class Component extends React.Component { - const { target: { scrollHeight, scrollTop, clientHeight }} = e; + onScroll = (e: { + target: { scrollHeight: number; scrollTop: number; clientHeight: number }; + }): void => { + const { + target: { scrollHeight, scrollTop, clientHeight }, + } = e; const delta = scrollHeight - scrollTop - clientHeight; if ( @@ -114,7 +123,15 @@ class Component extends React.Component { + modifyRoute = ({ + address, + title, + is_public, + }: { + address: string; + title: string; + is_public: boolean; + }): void => { this.props.modifyRoute(address, { title, is_public }); this.stopEditing(); }; @@ -128,13 +145,7 @@ class Component extends React.Component - { list.length === 0 && loading && + {list.length === 0 && loading && (
      - } - { ready && !loading && list.length === 0 && + )} + {ready && !loading && list.length === 0 && (
      - ТУТ ПУСТО
      - И ОДИНОКО + ТУТ ПУСТО
      И ОДИНОКО
      - } + )}
      - { - Object.values(TABS).map(item => (role === ROLES.admin || item !== TABS.PENDING) && ( -
      this.props.searchSetTab(item)} - key={item} - > - {TABS_TITLES[item]} -
      - )) - } + {Object.values(TABS).map( + item => + (role === ROLES.admin || item !== TABS.PENDING) && ( +
      this.props.searchSetTab(item)} + key={item} + > + {TABS_TITLES[item]} +
      + ) + )}
      @@ -181,57 +192,50 @@ class Component extends React.Component
      - { - ready && Object.keys(marks).length > 2 - ? - = max} - /> - :
      - } - + {ready && Object.keys(marks).length > 2 ? ( + = max} + /> + ) : ( +
      + )}
      - +
      - { - list.map(route => ( - - )) - } + {list.map(route => ( + + ))}
      @@ -241,28 +245,42 @@ class Component extends React.Component { +const mapStateToProps = ({ + user: { + editing, + routes, + user: { role }, + }, +}: IState) => { if (routes.filter.max >= 9999) { return { - routes, editing, marks: {}, ready: false, role, + routes, + editing, + marks: {}, + ready: false, + role, }; } - return ({ + return { role, routes, editing, ready: true, - marks: [...new Array(Math.floor((routes.filter.max - routes.filter.min) / 25) + 1)].reduce((obj, el, i) => ({ - ...obj, - [routes.filter.min + (i * 25)]: - ` ${routes.filter.min + (i * 25)}${(routes.filter.min + (i * 25) >= 200) ? '+' : ''} + marks: [...new Array(Math.floor((routes.filter.max - routes.filter.min) / 25) + 1)].reduce( + (obj, el, i) => ({ + ...obj, + [routes.filter.min + i * 25]: ` ${routes.filter.min + i * 25}${ + routes.filter.min + i * 25 >= 200 ? '+' : '' + } `, - }), {}), - }); + }), + {} + ), + }; }; -const mapDispatchToProps = dispatch => bindActionCreators({ +const mapDispatchToProps = { searchSetDistance, searchSetTitle, searchSetTab, @@ -271,6 +289,8 @@ const mapDispatchToProps = dispatch => bindActionCreators({ dropRoute, modifyRoute, toggleRouteStarred, -}, dispatch); +}; -export const MapListDialog = connect(mapStateToProps, mapDispatchToProps)(Component); +const MapListDialog = connect(mapStateToProps, mapDispatchToProps)(MapListDialogUnconnected); + +export { MapListDialog }; diff --git a/src/components/dialogs/ProviderDialog.tsx b/src/components/dialogs/ProviderDialog.tsx index 3a870c2..b6237c1 100644 --- a/src/components/dialogs/ProviderDialog.tsx +++ b/src/components/dialogs/ProviderDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { PROVIDERS, replaceProviderUrl } from '$constants/providers'; import { Icon } from '$components/panels/Icon'; import classnames from 'classnames'; diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index b24b695..6d2bcd9 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; import { routerCancel as routerCancelAction, diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index aa1f521..7f66b14 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { copyToClipboard, getUrlData } from '$utils/history'; import { toTranslit, parseDesc } from '$utils/format'; import { TIPS } from '$constants/tips'; diff --git a/src/components/dialogs/ShotPrefetchDialog.tsx b/src/components/dialogs/ShotPrefetchDialog.tsx index 7e2f62d..487b378 100644 --- a/src/components/dialogs/ShotPrefetchDialog.tsx +++ b/src/components/dialogs/ShotPrefetchDialog.tsx @@ -1,13 +1,14 @@ -import * as React from 'react'; +import React from 'react'; +import { connect } from 'react-redux'; +import { selectUserRenderer } from '$redux/user/selectors'; -interface Props { - renderer: { - info: string, - progress: number, - } -} +const mapStateToProps = state => ({ + renderer: selectUserRenderer(state), +}); -export const ShotPrefetchDialog = ({ renderer: { info, progress }}: Props) => ( +type Props = ReturnType & {}; + +const ShotPrefetchDialogUnconnected = ({ renderer: { info, progress }}: Props) => (
      {info}
      @@ -19,3 +20,7 @@ export const ShotPrefetchDialog = ({ renderer: { info, progress }}: Props) => (
      ); + +const ShotPrefetchDialog = connect(mapStateToProps)(ShotPrefetchDialogUnconnected); + +export { ShotPrefetchDialog } \ No newline at end of file diff --git a/src/components/dialogs/StickersDialog.tsx b/src/components/dialogs/StickersDialog.tsx index 694ec83..db31f3c 100644 --- a/src/components/dialogs/StickersDialog.tsx +++ b/src/components/dialogs/StickersDialog.tsx @@ -1,5 +1,5 @@ // @flow -import * as React from 'react'; +import React from 'react'; import { STICKERS } from '$constants/stickers'; import { setActiveSticker as setActiveStickerAction } from "$redux/user/actions"; diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index 0f74e63..ae8d990 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { bindActionCreators } from "redux"; import { connect } from 'react-redux'; diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index c545a39..09f0e96 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; type Props = { diff --git a/src/components/logo/LogoPreview.tsx b/src/components/logo/LogoPreview.tsx index 5a6f212..7950c2f 100644 --- a/src/components/logo/LogoPreview.tsx +++ b/src/components/logo/LogoPreview.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { LOGOS } from '$constants/logos'; import { connect } from 'react-redux'; import { IRootState } from '$redux/user'; diff --git a/src/components/maps/RouteRowDrop.tsx b/src/components/maps/RouteRowDrop.tsx index 71acdc4..1f7c097 100644 --- a/src/components/maps/RouteRowDrop.tsx +++ b/src/components/maps/RouteRowDrop.tsx @@ -1,5 +1,5 @@ // @flow -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; import { MapListDialog } from "$components/dialogs/MapListDialog"; import { Tooltip } from "$components/panels/Tooltip"; diff --git a/src/components/maps/RouteRowEditor.tsx b/src/components/maps/RouteRowEditor.tsx index d8471db..00466ee 100644 --- a/src/components/maps/RouteRowEditor.tsx +++ b/src/components/maps/RouteRowEditor.tsx @@ -1,5 +1,5 @@ // @flow -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; import { Switch } from '$components/Switch'; import { MapListDialog } from "$components/dialogs/MapListDialog"; diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 85c0811..8a113be 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -1,5 +1,5 @@ // @flow -import * as React from "react"; +import React from "react"; import { Icon } from "$components/panels/Icon"; import { MapListDialog } from "$components/dialogs/MapListDialog"; import { Tooltip } from "$components/panels/Tooltip"; diff --git a/src/components/maps/RouteRowWrapper.tsx b/src/components/maps/RouteRowWrapper.tsx index a681974..24e44cc 100644 --- a/src/components/maps/RouteRowWrapper.tsx +++ b/src/components/maps/RouteRowWrapper.tsx @@ -1,4 +1,4 @@ -import * as React from "react"; +import React from "react"; import classnames from "classnames"; import { MapListDialog } from "$components/dialogs/MapListDialog"; import { RouteRowView } from "$components/maps/RouteRowView"; diff --git a/src/components/panels/DistanceBar.tsx b/src/components/panels/DistanceBar.tsx index 3360226..5531835 100644 --- a/src/components/panels/DistanceBar.tsx +++ b/src/components/panels/DistanceBar.tsx @@ -1,10 +1,10 @@ // flow -import * as React from 'react'; +import React from 'react'; import { toHours } from '$utils/format'; import { Icon } from '$components/panels/Icon'; import { connect } from 'react-redux'; // import Slider from 'rc-slider'; -import * as Slider from 'rc-slider/lib/Slider'; +import Slider from 'rc-slider/lib/Slider'; import { bindActionCreators } from 'redux'; import { setSpeed } from '$redux/user/actions'; import { IRootState } from "$redux/user"; diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index 8cfe48f..6edb3c7 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React, { createElement } from 'react'; import { MODES } from '$constants/modes'; import { RouterDialog } from '$components/dialogs/RouterDialog'; @@ -52,7 +52,7 @@ const DIALOG_CONTENTS: { [x: string]: any } = { export const Component = (props: Props) => props.mode && DIALOG_CONTENTS[props.mode] - ? React.createElement(DIALOG_CONTENTS[props.mode]) + ? createElement(DIALOG_CONTENTS[props.mode]) : null; export const EditorDialog = connect( diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 4b4af05..decdc94 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { MODES } from '$constants/modes'; import classnames from 'classnames'; diff --git a/src/components/panels/Icon.tsx b/src/components/panels/Icon.tsx index edf7377..5cad4a3 100644 --- a/src/components/panels/Icon.tsx +++ b/src/components/panels/Icon.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; export const Icon = ({ icon, size = 32 }: { icon: string, size?: number }) => ( diff --git a/src/components/panels/RendererPanel.tsx b/src/components/panels/RendererPanel.tsx index 0534edb..dc9ff90 100644 --- a/src/components/panels/RendererPanel.tsx +++ b/src/components/panels/RendererPanel.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; type Props = { diff --git a/src/components/panels/Tooltip.tsx b/src/components/panels/Tooltip.tsx index dd75408..663f5f8 100644 --- a/src/components/panels/Tooltip.tsx +++ b/src/components/panels/Tooltip.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import classnames from 'classnames'; export const Tooltip = ({ children, position = 'bottom' }: { children: string, position?: string }) => ( diff --git a/src/components/panels/TopLeftPanel.tsx b/src/components/panels/TopLeftPanel.tsx index ae1f8c6..ee8a829 100644 --- a/src/components/panels/TopLeftPanel.tsx +++ b/src/components/panels/TopLeftPanel.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { UserLocation } from '$components/UserLocation'; import { DistanceBar } from '$components/panels/DistanceBar'; diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index e376b77..246dc0e 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -1,5 +1,5 @@ // flow -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; import { PROVIDERS } from '$constants/providers'; import { LOGOS } from '$constants/logos'; diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 4d497b7..8c494af 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -1,4 +1,4 @@ -import * as React from "react"; +import React from "react"; import { GuestButton } from "$components/user/GuestButton"; import { DEFAULT_USER, IUser, ROLES } from "$constants/auth"; diff --git a/src/components/renderer/Renderer.tsx b/src/components/renderer/Renderer.tsx index aa2d69d..c3f7a5a 100644 --- a/src/components/renderer/Renderer.tsx +++ b/src/components/renderer/Renderer.tsx @@ -1,9 +1,9 @@ -import * as React from 'react'; +import React from 'react'; import { hideRenderer, cropAShot } from '$redux/user/actions'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; -import * as Croppr from 'croppr'; +import Croppr from 'croppr'; import 'croppr/dist/croppr.css'; import { LOGOS } from '$constants/logos'; import { RendererPanel } from '$components/panels/RendererPanel'; diff --git a/src/components/user/GuestButton.tsx b/src/components/user/GuestButton.tsx index d894480..65e920e 100644 --- a/src/components/user/GuestButton.tsx +++ b/src/components/user/GuestButton.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Icon } from '$components/panels/Icon'; type Props = { diff --git a/src/components/user/UserButton.tsx b/src/components/user/UserButton.tsx index e444e00..e09c13d 100644 --- a/src/components/user/UserButton.tsx +++ b/src/components/user/UserButton.tsx @@ -1,5 +1,5 @@ // @flow -import * as React from "react"; +import React from "react"; import { UserPicture } from "$components/user/UserPicture"; import { IUser } from "$constants/auth"; diff --git a/src/components/user/UserMenu.tsx b/src/components/user/UserMenu.tsx index fc63909..1be22dc 100644 --- a/src/components/user/UserMenu.tsx +++ b/src/components/user/UserMenu.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { APP_INFO } from '$constants/app_info'; import { userLogout } from "$redux/user/actions"; diff --git a/src/components/user/UserPicture.tsx b/src/components/user/UserPicture.tsx index cf2fc3f..326992e 100644 --- a/src/components/user/UserPicture.tsx +++ b/src/components/user/UserPicture.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; export const UserPicture = ({ photo }) => (
      (
      @@ -41,9 +41,6 @@ const Component = (props: Props) => ( - - - ( setDialogActive={props.setDialogActive} /> + + - { props.renderer_active && - - } + {props.renderer_active && }
      ); const mapStateToProps = ({ user: { - mode, dialog, dialog_active, renderer, activeSticker: { sticker = null, set = null } - } + mode, + dialog, + dialog_active, + renderer, + activeSticker: { sticker = null, set = null }, + }, }) => ({ renderer_active: renderer.renderer_active, mode, @@ -72,5 +73,6 @@ const mapStateToProps = ({ set, }); -const mapDispatchToProps = dispatch => bindActionCreators({ hideRenderer, setDialogActive }, dispatch); +const mapDispatchToProps = dispatch => + bindActionCreators({ hideRenderer, setDialogActive }, dispatch); export const App = connect(mapStateToProps, mapDispatchToProps)(hot(module)(Component)); diff --git a/src/containers/LeftDialog.tsx b/src/containers/LeftDialog.tsx index 31ea341..16fb58a 100644 --- a/src/containers/LeftDialog.tsx +++ b/src/containers/LeftDialog.tsx @@ -1,17 +1,15 @@ -// @flow -import * as React from 'react'; +import React, { createElement } from 'react'; import { DIALOGS, IDialogs } from '$constants/dialogs'; -import * as classnames from 'classnames'; +import classnames from 'classnames'; import { AppInfoDialog } from '$components/dialogs/AppInfoDialog'; import { Icon } from '$components/panels/Icon'; import { MapListDialog } from '$components/dialogs/MapListDialog'; -import * as ActionCreators from "$redux/user/actions"; -import { StatelessComponent } from "react"; +import * as USER_ACTIONS from '$redux/user/actions'; interface Props { - dialog: keyof IDialogs, - dialog_active: Boolean, - setDialogActive: typeof ActionCreators.setDialogActive, + dialog: keyof IDialogs; + dialog_active: Boolean; + setDialogActive: typeof USER_ACTIONS.setDialogActive; } const LEFT_DIALOGS = { @@ -19,22 +17,25 @@ const LEFT_DIALOGS = { [DIALOGS.APP_INFO]: AppInfoDialog, }; -export const LeftDialog = ({ dialog, dialog_active, setDialogActive }: Props) => ( +const LeftDialog = ({ dialog, dialog_active, setDialogActive }: Props) => ( - { - Object.keys(LEFT_DIALOGS).map(item => ( -
      - { dialog && LEFT_DIALOGS[item] && React.createElement(LEFT_DIALOGS[item]) } -
      setDialogActive(false)}> - -
      + {Object.keys(LEFT_DIALOGS).map(item => ( +
      + {dialog && LEFT_DIALOGS[item] && createElement(LEFT_DIALOGS[item], {})} -
      setDialogActive(false)}> - -
      +
      setDialogActive(false)}> +
      - )) - } + +
      setDialogActive(false)}> + +
      +
      + ))} ); +export { LeftDialog }; diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index fc493ff..a99f856 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -1,5 +1,5 @@ import { Map as MapInterface, map } from "leaflet"; -import * as React from "react"; +import React from "react"; import { createPortal } from "react-dom"; import { selectMapProvider, diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index 6bea62e..c37d505 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -1,4 +1,4 @@ -import * as React from "react"; +import React from "react"; import { Map, marker, Marker } from "leaflet"; import { IStickerDump } from "$redux/map/types"; import { STICKERS } from "$constants/stickers"; diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index c832b6f..20d5b3d 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { IStickerDump } from '$redux/map/types'; import { FeatureGroup, Map } from 'leaflet'; import { Sticker } from '$containers/map/Sticker'; diff --git a/src/containers/map/TileLayer/index.tsx b/src/containers/map/TileLayer/index.tsx index e684c11..ff430fe 100644 --- a/src/containers/map/TileLayer/index.tsx +++ b/src/containers/map/TileLayer/index.tsx @@ -1,4 +1,4 @@ -import * as React from "react"; +import React from "react"; import { TileContext } from "../../../utils/context"; import { TileLayer as TileLayerInterface, tileLayer, Map } from "leaflet"; import { DEFAULT_PROVIDER, PROVIDERS } from "$constants/providers"; diff --git a/src/index.tsx b/src/index.tsx index 726e861..c695bbe 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -73,8 +73,8 @@ done stickers drag on rotate bug */ -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; +import React from 'react'; +import ReactDOM from 'react-dom'; import { App } from '$containers/App'; import '$styles/main.less'; diff --git a/src/redux/user/selectors.ts b/src/redux/user/selectors.ts index b656f50..7c157c9 100644 --- a/src/redux/user/selectors.ts +++ b/src/redux/user/selectors.ts @@ -4,4 +4,5 @@ export const selectUser = (state: IState) => state.user; export const selectUserUser = (state: IState) => state.user.user; export const selectUserEditing = (state: IState) => state.user.editing; export const selectUserMode = (state: IState) => state.user.mode; -export const selectUserActiveSticker = (state: IState) => state.user.activeSticker; \ No newline at end of file +export const selectUserActiveSticker = (state: IState) => state.user.activeSticker; +export const selectUserRenderer = (state: IState) => state.user.renderer; \ No newline at end of file diff --git a/src/utils/context.ts b/src/utils/context.ts index 3f25d78..6631da9 100644 --- a/src/utils/context.ts +++ b/src/utils/context.ts @@ -1,4 +1,4 @@ -import * as React from 'react'; +import React from 'react'; import { Map, TileLayer } from 'leaflet'; export const MapContext = React.createContext(null); diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index 28d4df2..66fd29b 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -1,4 +1,4 @@ -import * as saveAs from 'file-saver'; +import saveAs from 'file-saver'; export interface IRoutePoint { lat: number, diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 784f6bb..f5ecbdf 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -1,6 +1,6 @@ // import { editor } from '$modules/Editor'; import { COLORS, CLIENT } from '$config/frontend'; -import * as saveAs from 'file-saver'; +import saveAs from 'file-saver'; import { replaceProviderUrl } from '$constants/providers'; import { STICKERS } from '$constants/stickers'; import { ILatLng } from '$redux/map/types'; diff --git a/tsconfig.json b/tsconfig.json index 4344f6f..d283ce8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,8 @@ "target": "es6", "jsx": "react", "lib": [ "es2015", "DOM", "es6" ], + "esModuleInterop": true, + "isolatedModules": true, "baseUrl": ".", "paths": { "$components/*": [ "src/components/*" ], From af8d2704608a1c68460d71abb9c29050ce9845e9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 8 Jan 2020 14:25:46 +0700 Subject: [PATCH 118/320] cleaned out user reducer --- src/components/StickerDesc.tsx | 4 +- src/components/dialogs/SaveDialog.tsx | 137 ++++++++++++-------- src/components/dialogs/TitleDialog.tsx | 88 ++++++++----- src/components/panels/EditorDialog.tsx | 3 - src/components/panels/TopRightPanel.tsx | 123 +++++++++--------- src/components/panels/UserPanel.tsx | 114 +++++++---------- src/components/renderer/Renderer.tsx | 3 +- src/redux/map/types.ts | 35 +++-- src/redux/user/actions.ts | 17 +-- src/redux/user/index.ts | 49 +++---- src/utils/api.ts | 5 +- src/utils/format.ts | 162 +++++++++++++++++++++++- src/utils/renderer.ts | 4 +- 13 files changed, 462 insertions(+), 282 deletions(-) diff --git a/src/components/StickerDesc.tsx b/src/components/StickerDesc.tsx index d2e90db..44c5ee4 100644 --- a/src/components/StickerDesc.tsx +++ b/src/components/StickerDesc.tsx @@ -10,7 +10,7 @@ type State = { text: String; } -export class StickerDesc extends React.PureComponent { +class StickerDesc extends React.PureComponent { state = { text: this.props.value, }; @@ -56,3 +56,5 @@ export class StickerDesc extends React.PureComponent { ) } } + +export { StickerDesc }; \ No newline at end of file diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index 7f66b14..4fbd879 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -7,32 +7,32 @@ import { Icon } from '$components/panels/Icon'; import { Switch } from '$components/Switch'; import classnames from 'classnames'; -import { sendSaveRequest, setMode } from "$redux/user/actions"; import ExpandableTextarea from 'react-expandable-textarea'; +import { connect } from 'react-redux'; +import { selectMap } from '$redux/map/selectors'; +import { selectUser } from '$redux/user/selectors'; +import * as USER_ACTIONS from '$redux/user/actions'; -interface Props { - address: string, - title: string, - is_public: boolean, +const mapStateToProps = state => ({ + map: selectMap(state), + user: selectUser(state), +}); - width: number, - setMode: typeof setMode, - sendSaveRequest: typeof sendSaveRequest, - save_error: string, +const mapDispatchToProps = { + setMode: USER_ACTIONS.setMode, + sendSaveRequest: USER_ACTIONS.sendSaveRequest, +}; - save_loading: boolean, - save_finished: boolean, - save_overwriting: boolean, -} +type Props = ReturnType & typeof mapDispatchToProps & { width: number }; interface State { - address: string, - title: string, - is_public: boolean, - description: string, + address: string; + title: string; + is_public: boolean; + description: string; } -export class SaveDialog extends React.Component { +class SaveDialogUnconnected extends React.Component { constructor(props) { super(props); @@ -48,21 +48,30 @@ export class SaveDialog extends React.Component { const { path } = getUrlData(); const { title, address } = this.state; - return toTranslit(address.trim()) || toTranslit(title.trim().toLowerCase()).substr(0, 32) || toTranslit(path.trim()).substr(0, 32); + return ( + toTranslit(address.trim()) || + toTranslit(title.trim().toLowerCase()).substr(0, 32) || + toTranslit(path.trim()).substr(0, 32) + ); }; - setTitle = ({ target: { value } }) => this.setState({ title: ((value && value.substr(0, 64)) || '') }); - setAddress = ({ target: { value } }) => this.setState({ address: (value && value.substr(0, 32) || '') }); - setDescription = ({ target: { value } }) => this.setState({ description: (value && value.substr(0, 256) || '') }); - - + setTitle = ({ target: { value } }) => + this.setState({ title: (value && value.substr(0, 64)) || '' }); + setAddress = ({ target: { value } }) => + this.setState({ address: (value && value.substr(0, 32)) || '' }); + setDescription = ({ target: { value } }) => + this.setState({ description: (value && value.substr(0, 256)) || '' }); sendSaveRequest = (e, force = false) => { const { title, is_public, description } = this.state; const address = this.getAddress(); this.props.sendSaveRequest({ - title, address, force, is_public, description, + title, + address, + force, + is_public, + description, }); }; forceSaveRequest = e => this.sendSaveRequest(e, true); @@ -81,7 +90,10 @@ export class SaveDialog extends React.Component { render() { const { title, is_public, description } = this.state; - const { save_error, save_finished, save_overwriting, width, save_loading } = this.props; + const { + user: { save_error, save_finished, save_overwriting, save_loading }, + width, + } = this.props; const { host, protocol } = getUrlData(); return ( @@ -92,13 +104,21 @@ export class SaveDialog extends React.Component {
      Название
      - +
      - + { onChange={this.setDescription} />
      -
      - { save_error || TIPS.SAVE_INFO } -
      +
      {save_error || TIPS.SAVE_INFO}
      -
      +
      - { - is_public - ? ' В каталоге карт' - : ' Только по ссылке' - } + {is_public ? ' В каталоге карт' : ' Только по ссылке'}
      - { !save_finished && -
      Отмена
      - } - { - !save_finished && !save_overwriting && -
      Сохранить
      - } - { - save_overwriting && -
      Перезаписать
      - } - { save_finished && -
      Скопировать
      - } - { save_finished && -
      Отлично!
      - } + {!save_finished && ( +
      + Отмена +
      + )} + {!save_finished && !save_overwriting && ( +
      + Сохранить +
      + )} + {save_overwriting && ( +
      + Перезаписать +
      + )} + {save_finished && ( +
      + Скопировать +
      + )} + {save_finished && ( +
      + Отлично! +
      + )}
      @@ -159,3 +184,7 @@ export class SaveDialog extends React.Component { ); } } + +const SaveDialog = connect(mapStateToProps, mapDispatchToProps)(SaveDialogUnconnected); + +export { SaveDialog }; diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index ae8d990..e1fe86c 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -1,28 +1,30 @@ import React from 'react'; -import { bindActionCreators } from "redux"; import { connect } from 'react-redux'; import classnames from 'classnames'; -import { getStyle } from "$utils/dom"; -import { nearestInt } from "$utils/geom"; -import { IRootState } from "$redux/user"; -import { parseDesc } from "$utils/format"; +import { getStyle } from '$utils/dom'; +import { nearestInt } from '$utils/geom'; +import { parseDesc } from '$utils/format'; +import { selectUser } from '$redux/user/selectors'; +import { selectMap } from '$redux/map/selectors'; -interface ITitleDialogProps { - editing: IRootState['editing'], - title?: IRootState['title'], - description?: IRootState['description'], - minLines?: number, - maxLines?: number, -} +const mapStateToProps = state => ({ + user: selectUser(state), + map: selectMap(state), +}); -interface ITitleDialogState { +type Props = ReturnType & { + minLines?: number; + maxLines?: number; +}; + +interface State { raised: boolean; height: number; height_raised: number; } -export class Component extends React.PureComponent { +export class TitleDialogUnconnected extends React.PureComponent { state = { raised: false, height: 0, @@ -53,8 +55,9 @@ export class Component extends React.PureComponent -
      { this.ref_sizer = el; }}> +
      { + this.ref_sizer = el; + }} + >
      { this.ref_title = el; }} + ref={el => { + this.ref_title = el; + }} >

      {title}

      height })} + className={classnames('title-dialog-pane title-dialog-text', { + has_shade: height_raised > height, + })} style={{ - height: (raised ? height_raised : height), + height: raised ? height_raised : height, marginBottom: height === 0 ? 0 : 15, }} - ref={el => { this.ref_overflow = el; }} + ref={el => { + this.ref_overflow = el; + }} >
      { this.ref_text = el; }} + ref={el => { + this.ref_text = el; + }} > - { - parseDesc(description) - } + {parseDesc(description)}
      - ) + ); } ref_sizer; @@ -118,7 +139,6 @@ export class Component extends React.PureComponent ({ editing, title, description }); -const mapDispatchToProps = dispatch => bindActionCreators({ }, dispatch); +const TitleDialog = connect(mapStateToProps)(TitleDialogUnconnected); -export const TitleDialog = connect(mapStateToProps, mapDispatchToProps)(Component); +export { TitleDialog }; diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index 6edb3c7..d3f50a5 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -8,13 +8,10 @@ import { LogoDialog } from '$components/dialogs/LogoDialog'; import { SaveDialog } from '$components/dialogs/SaveDialog'; import { CancelDialog } from '$components/dialogs/CancelDialog'; -import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; -import * as USER_ACTIONS from '$redux/user/actions'; import { ProviderDialog } from '$components/dialogs/ProviderDialog'; import { ShotPrefetchDialog } from '$components/dialogs/ShotPrefetchDialog'; -import * as MAP_ACTIONS from '$redux/map/actions'; import { selectUserMode } from '$redux/user/selectors'; const mapStateToProps = state => ({ mode: selectUserMode(state) }); diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index 246dc0e..c06c7e8 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -1,71 +1,72 @@ // flow -import React from 'react'; +import React, { useCallback } from 'react'; import { Icon } from '$components/panels/Icon'; import { PROVIDERS } from '$constants/providers'; import { LOGOS } from '$constants/logos'; -import { setMode } from '$redux/user/actions'; +import * as USER_ACTIONS from '$redux/user/actions'; import { connect } from 'react-redux'; import { MODES } from '$constants/modes'; -import { IRootState } from "$redux/user"; +import { IRootState } from '$redux/user'; -import { Tooltip } from "$components/panels/Tooltip"; +import { Tooltip } from '$components/panels/Tooltip'; +import { selectMap } from '$redux/map/selectors'; +import { selectUser } from '$redux/user/selectors'; -interface Props extends IRootState { - startProviderMode: () => void, - startLogoMode: () => void, - clearMode: () => void, -} - -const Component = ({ - provider, logo, startProviderMode, startLogoMode, clearMode, editing, markers_shown, -}: Props) => ( -
      - { - editing && !markers_shown && -
      - - Приблизьте, чтобы редактировать кривую -
      - } -
      - Стиль карты - -
      - {(provider && PROVIDERS[provider] && PROVIDERS[provider].name) || '...'} -
      - -
      - Логотип - -
      - {(logo && LOGOS[logo] && LOGOS[logo][0]) || '...'} -
      -
      -); - -function mapStateToProps(state) { - const { - map: { - provider, - logo, - }, - user: { - markers_shown, editing - }, - } = state; - - return { - provider, logo, markers_shown, editing - }; -} - -const mapDispatchToProps = dispatch => ({ - startProviderMode: () => dispatch(setMode(MODES.PROVIDER)), - startLogoMode: () => dispatch(setMode(MODES.LOGO)), - clearMode: () => dispatch(setMode(MODES.NONE)), +const mapStateToProps = state => ({ + map: selectMap(state), + user: selectUser(state), }); -export const TopRightPanel = connect( - mapStateToProps, - mapDispatchToProps -)(Component); +const mapDispatchToProps = { + setMode: USER_ACTIONS.setMode, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + +const TopRightPanelUnconnected = ({ + map: { provider, logo }, + user: { markers_shown, editing }, + setMode, +}: Props) => { + const startProviderMode = useCallback(() => setMode(MODES.PROVIDER), [setMode]); + const startLogoMode = useCallback(() => setMode(MODES.LOGO), [setMode]); + const clearMode = useCallback(() => setMode(MODES.NONE), [setMode]); + + return ( +
      + {editing && !markers_shown && ( +
      + + Приблизьте, чтобы редактировать кривую +
      + )} +
      + Стиль карты + +
      + {(provider && PROVIDERS[provider] && PROVIDERS[provider].name) || '...'} +
      + +
      + Логотип + +
      + {(logo && LOGOS[logo] && LOGOS[logo][0]) || '...'} +
      +
      + ); +}; + +const TopRightPanel = connect(mapStateToProps, mapDispatchToProps)(TopRightPanelUnconnected); + +export { TopRightPanel }; diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 8c494af..2bca218 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -1,9 +1,9 @@ -import React from "react"; +import React, { PureComponent } from 'react'; -import { GuestButton } from "$components/user/GuestButton"; -import { DEFAULT_USER, IUser, ROLES } from "$constants/auth"; -import { UserButton } from "$components/user/UserButton"; -import { UserMenu } from "$components/user/UserMenu"; +import { GuestButton } from '$components/user/GuestButton'; +import { DEFAULT_USER, IUser, ROLES } from '$constants/auth'; +import { UserButton } from '$components/user/UserButton'; +import { UserMenu } from '$components/user/UserMenu'; import { setUser, userLogout, @@ -12,18 +12,17 @@ import { gotVkUser, setDialogActive, openMapDialog, - getGPXTrack -} from "$redux/user/actions"; -import { bindActionCreators } from "redux"; -import { connect } from "react-redux"; -import { Icon } from "$components/panels/Icon"; + getGPXTrack, +} from '$redux/user/actions'; +import { connect } from 'react-redux'; +import { Icon } from '$components/panels/Icon'; -import classnames from "classnames"; -import { CLIENT } from "$config/frontend"; -import { DIALOGS, TABS } from "$constants/dialogs"; -import { IRootState } from "$redux/user"; -import { Tooltip } from "$components/panels/Tooltip"; -import { TitleDialog } from "$components/dialogs/TitleDialog"; +import classnames from 'classnames'; +import { CLIENT } from '$config/frontend'; +import { DIALOGS, TABS } from '$constants/dialogs'; +import { IRootState } from '$redux/user'; +import { Tooltip } from '$components/panels/Tooltip'; +import { TitleDialog } from '$components/dialogs/TitleDialog'; interface Props extends IRootState { userLogout: typeof userLogout; @@ -39,34 +38,26 @@ interface State { menuOpened: boolean; } -export class Component extends React.PureComponent { +export class UserPanelUnconnected extends PureComponent { state = { - menuOpened: false + menuOpened: false, }; componentDidMount() { - window.addEventListener("message", e => { + window.addEventListener('message', e => { const { data } = e; if ( !data || !data.type || - data.type !== "oauth_login" || + data.type !== 'oauth_login' || !data.user || !data.user.id || !data.user.token ) return; - const { - id, - token, - role = "vk", - name = "", - ip = "", - photo = "", - agent = "" - } = data.user; + const { id, token, role = 'vk', name = '', ip = '', photo = '', agent = '' } = data.user; const user = { ...DEFAULT_USER, @@ -77,8 +68,8 @@ export class Component extends React.PureComponent { name, ip, agent, - photo - } + photo, + }, }; this.setState({ menuOpened: false }); @@ -105,7 +96,7 @@ export class Component extends React.PureComponent { window.open( `https://oauth.vk.com/authorize?client_id=5987644&scope=&redirect_uri=${CLIENT.API_ADDR}/api/auth/vk`, - "socialPopupWindow", + 'socialPopupWindow', `location=no,width=700,height=370,scrollbars=no,top=${top},left=${left},resizable=no` ); }; @@ -113,13 +104,13 @@ export class Component extends React.PureComponent { render() { const { props: { user, dialog, dialog_active, is_empty }, - state: { menuOpened } + state: { menuOpened }, } = this; return (
      - +
      {!user || user.role === ROLES.guest ? ( @@ -127,7 +118,7 @@ export class Component extends React.PureComponent { ) : ( )} - {user && user.role && user.role !== "guest" && menuOpened && ( + {user && user.role && user.role !== 'guest' && menuOpened && ( {
      @@ -165,10 +153,7 @@ export class Component extends React.PureComponent {
      - @@ -181,25 +166,24 @@ export class Component extends React.PureComponent { } } -const mapStateToProps = ({ - user: { dialog, dialog_active, user, is_empty } -}) => ({ dialog, dialog_active, user, is_empty }); -const mapDispatchToProps = dispatch => - bindActionCreators( - { - setUser, - userLogout, - takeAShot, - setDialog, - gotVkUser, - setDialogActive, - openMapDialog, - getGPXTrack - }, - dispatch - ); +const mapStateToProps = ({ user: { dialog, dialog_active, user, is_empty } }) => ({ + dialog, + dialog_active, + user, + is_empty, +}); -export const UserPanel = connect( - mapStateToProps, - mapDispatchToProps -)(Component); +const mapDispatchToProps = { + setUser, + userLogout, + takeAShot, + setDialog, + gotVkUser, + setDialogActive, + openMapDialog, + getGPXTrack, +}; + +const UserPanel = connect(mapStateToProps, mapDispatchToProps)(UserPanelUnconnected); + +export { UserPanel }; diff --git a/src/components/renderer/Renderer.tsx b/src/components/renderer/Renderer.tsx index c3f7a5a..60166c8 100644 --- a/src/components/renderer/Renderer.tsx +++ b/src/components/renderer/Renderer.tsx @@ -8,10 +8,11 @@ import 'croppr/dist/croppr.css'; import { LOGOS } from '$constants/logos'; import { RendererPanel } from '$components/panels/RendererPanel'; import { IRootState } from "$redux/user"; +import { IRoute } from '$redux/map/types'; type Props = { data: IRootState['renderer']['data'], - logo: IRootState['logo'], + logo: IRoute['logo'], hideRenderer: typeof hideRenderer, cropAShot: typeof cropAShot, }; diff --git a/src/redux/map/types.ts b/src/redux/map/types.ts index d17a512..e36f37b 100644 --- a/src/redux/map/types.ts +++ b/src/redux/map/types.ts @@ -1,17 +1,32 @@ -import { LatLng } from "leaflet"; +import { LatLng } from 'leaflet'; +import { IRoutePoint } from '$utils/gpx'; export type ILatLng = { - lat: number, - lng: number, -} + lat: number; + lng: number; +}; export type IMapRoute = ILatLng[]; - export interface IStickerDump { - latlng: ILatLng, - set: string, - sticker: string, - angle?: number, - text?: string, + latlng: ILatLng; + set: string; + sticker: string; + angle?: number; + text?: string; +} + +export interface IRoute { + version: number; + title: string; + owner: number; + address: string; + route: IRoutePoint[]; + stickers: IStickerDump[]; + provider: string; + is_public: boolean; + is_published: boolean; + description: string; + logo: string; + distance: number; } diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index f19e18a..14dc609 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,6 +1,7 @@ import { USER_ACTIONS } from '$redux/user/constants'; import { IUser } from "$constants/auth"; import { IRootState } from "$redux/user"; +import { IRoute } from '$redux/map/types'; export const setUser = (user: IUser) => ({ type: USER_ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: USER_ACTIONS.USER_LOGOUT }); @@ -32,10 +33,10 @@ export const clearAll = () => ({ type: USER_ACTIONS.CLEAR_ALL }); export const clearCancel = () => ({ type: USER_ACTIONS.CLEAR_CANCEL }); export const sendSaveRequest = (payload: { - title: IRootState['title'], - address: IRootState['address'], - is_public: IRootState['is_public'], - description: IRootState['description'], + title: IRoute['title'], + address: IRoute['address'], + is_public: IRoute['is_public'], + description: IRoute['description'], force: boolean, }) => ({ type: USER_ACTIONS.SEND_SAVE_REQUEST, @@ -47,10 +48,10 @@ export const resetSaveDialog = () => ({ type: USER_ACTIONS.RESET_SAVE_DIALOG }); export const setSaveLoading = (save_loading: IRootState['save_loading']) => ({ type: USER_ACTIONS.SET_SAVE_LOADING, save_loading }); export const setSaveSuccess = (payload: { - address: IRootState['address'], - title: IRootState['address'], - is_public: IRootState['is_public'], - description: IRootState['description'], + address: IRoute['address'], + title: IRoute['address'], + is_public: IRoute['is_public'], + description: IRoute['description'], save_error: string, }) => ({ type: USER_ACTIONS.SET_SAVE_SUCCESS, ...payload }); diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 8017093..15d1e12 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -1,29 +1,10 @@ import { createReducer } from 'reduxsauce'; import { DEFAULT_USER, IUser } from '$constants/auth'; import { MODES } from '$constants/modes'; -import { DEFAULT_LOGO, LOGOS } from '$constants/logos'; -import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; -import { DIALOGS, IDialogs, TABS } from '$constants/dialogs'; +import { DIALOGS, IDialogs } from '$constants/dialogs'; import { IStickers } from "$constants/stickers"; -import { IRoutePoint } from '$utils/gpx'; -import { IStickerDump } from '$redux/map/types'; import { USER_HANDLERS } from './handlers'; -export interface IRoute { - version: number, - title: IRootState['title'], - owner: number, - address: IRootState['address'], - route: IRoutePoint[], - stickers: IStickerDump[], - provider: IRootState['provider'], - is_public: IRootState['is_public'], - is_published: IRootState['is_published'], - description: IRootState['description'], - logo: IRootState['logo'], - distance: IRootState['distance'] -} - export interface IRouteListItem { address: string, title: string, @@ -38,22 +19,22 @@ export interface IRootReducer { user: IUser, editing: boolean, mode: typeof MODES[keyof typeof MODES], - logo: keyof typeof LOGOS, + // logo: keyof typeof LOGOS, routerPoints: number, distance: number, - description: string, + // description: string, estimated: number, speed: number, activeSticker: { set?: keyof IStickers, sticker?: string }, - title: string, - address: string, - address_origin: string, + // title: string, + // address: string, + // address_origin: string, changed: boolean, - provider: keyof typeof PROVIDERS, + // provider: keyof typeof PROVIDERS, markers_shown: boolean, is_published: boolean, - is_public: boolean, + // is_public: boolean, is_empty: boolean, is_routing: boolean, @@ -104,24 +85,24 @@ export const INITIAL_STATE: IRootReducer = { user: { ...DEFAULT_USER }, mode: MODES.NONE, - logo: DEFAULT_LOGO, + // logo: DEFAULT_LOGO, routerPoints: 0, distance: 0, - description: '', + // description: '', estimated: 0, speed: 15, activeSticker: { set: null, sticker: null }, - title: '', - address: '', - address_origin: '', - provider: DEFAULT_PROVIDER, + // title: '', + // address: '', + // address_origin: '', + // provider: DEFAULT_PROVIDER, markers_shown: true, changed: false, editing: false, is_published: false, - is_public: false, + // is_public: false, is_empty: true, is_routing: false, diff --git a/src/utils/api.ts b/src/utils/api.ts index cf9142b..47a3f8b 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -1,6 +1,6 @@ import axios from 'axios/index'; import { API } from '$constants/api'; -import { IRootState, IRouteListItem, IRoute } from '$redux/user'; +import { IRootState, IRouteListItem } from '$redux/user'; import { IUser } from '$constants/auth'; import { CLIENT } from '$config/frontend'; import { LatLngLiteral } from 'leaflet'; @@ -10,6 +10,7 @@ import { IResultWithStatus, configWithToken, } from './middleware'; +import { IRoute } from '$redux/map/types'; const arrayToObject = (array: any[], key: string): {} => array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); @@ -63,7 +64,7 @@ export const getGuestToken = (): Promise text.replace(/[^A-Za-z\-_0-9]/ig, '_').replace(/_{2,}/ig, '_'); +export const removeGarbage = (text: string): string => + text.replace(/[^A-Za-z\-_0-9]/gi, '_').replace(/_{2,}/gi, '_'); export const toHours = (info: number): string => { const hrs = parseInt(String(info), 10); @@ -10,10 +157,11 @@ export const toHours = (info: number): string => { return `${hrs}:${lmin}`; }; -export const toTranslit = (string: string): string => ( - removeGarbage(ru.reduce((text, el, i) => (text.replace(new RegExp(ru[i], 'g'), en[i])), (String(string) || ''))) -); +export const toTranslit = (string: string = ''): string => + removeGarbage( + ru.reduce((text, el, i) => text.replace(new RegExp(ru[i], 'g'), en[i]), String(string) || '') + ); -export const parseDesc = (text: string): string => text.replace(/(\n{2,})/ig, "\n\n"); +export const parseDesc = (text: string = ''): string => text.replace(/(\n{2,})/gi, '\n\n'); // export const colorizeTitle = (text: string): string => text.replace(/(\[[^\]^]+\])/, ``) diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index f5ecbdf..e5fff74 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -3,7 +3,7 @@ import { COLORS, CLIENT } from '$config/frontend'; import saveAs from 'file-saver'; import { replaceProviderUrl } from '$constants/providers'; import { STICKERS } from '$constants/stickers'; -import { ILatLng } from '$redux/map/types'; +import { ILatLng, IRoute } from '$redux/map/types'; import { IStickerDump } from '$redux/map/types'; import { IRootState } from '$redux/user'; import { @@ -469,5 +469,5 @@ export const composeStickers = async ({ ); }; -export const downloadCanvas = (canvas: HTMLCanvasElement, title: IRootState['title']): void => +export const downloadCanvas = (canvas: HTMLCanvasElement, title: IRoute['title']): void => canvas.toBlob(blob => saveAs(blob, title)); From e950d98b736d3317a55741813886cd4499b5b2dc Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 8 Jan 2020 14:38:20 +0700 Subject: [PATCH 119/320] updated aliases --- .gitignore | 4 + src/_modules/Arrows.ts | 4 +- src/_modules/Editor.ts | 28 +++---- src/_modules/InteractivePoly.ts | 2 +- src/_modules/KmMarks.ts | 4 +- src/_modules/Map.ts | 4 +- src/_modules/Poly.ts | 14 ++-- src/_modules/Router.ts | 6 +- src/_modules/Sticker.tsx | 14 ++-- src/_modules/Stickers.ts | 8 +- src/components/Cursor.tsx | 10 +-- src/components/Fills.tsx | 2 +- src/components/StickerIcon.tsx | 2 +- src/components/UserLocation.tsx | 6 +- src/components/dialogs/AppInfoDialog.tsx | 4 +- src/components/dialogs/CancelDialog.tsx | 6 +- src/components/dialogs/LogoDialog.tsx | 8 +- src/components/dialogs/MapListDialog.tsx | 20 ++--- src/components/dialogs/ProviderDialog.tsx | 8 +- src/components/dialogs/RouterDialog.tsx | 4 +- src/components/dialogs/SaveDialog.tsx | 18 ++-- src/components/dialogs/ShotPrefetchDialog.tsx | 2 +- src/components/dialogs/StickersDialog.tsx | 4 +- src/components/dialogs/TitleDialog.tsx | 10 +-- src/components/dialogs/TrashDialog.tsx | 2 +- src/components/logo/LogoPreview.tsx | 6 +- src/components/maps/RouteRowDrop.tsx | 6 +- src/components/maps/RouteRowEditor.tsx | 6 +- src/components/maps/RouteRowView.tsx | 10 +-- src/components/maps/RouteRowWrapper.tsx | 8 +- src/components/panels/DistanceBar.tsx | 12 +-- src/components/panels/EditorDialog.tsx | 20 ++--- src/components/panels/EditorPanel.tsx | 12 +-- src/components/panels/Icon.tsx | 2 +- src/components/panels/RendererPanel.tsx | 2 +- src/components/panels/TopLeftPanel.tsx | 4 +- src/components/panels/TopRightPanel.tsx | 18 ++-- src/components/panels/UserPanel.tsx | 22 ++--- src/components/renderer/Renderer.tsx | 10 +-- src/components/user/GuestButton.tsx | 2 +- src/components/user/UserButton.tsx | 4 +- src/components/user/UserMenu.tsx | 4 +- {config => src/config}/frontend.example.js | 2 +- {config => src/config}/pwa.example.js | 0 src/constants/api.ts | 2 +- src/constants/stickers.ts | 8 +- src/containers/App.tsx | 28 +++---- src/containers/LeftDialog.tsx | 10 +-- src/containers/map/Map/index.tsx | 12 +-- src/containers/map/Route/index.tsx | 4 +- src/containers/map/Sticker/index.tsx | 8 +- src/containers/map/Stickers/index.tsx | 6 +- src/containers/map/TileLayer/index.tsx | 4 +- src/index.tsx | 83 +------------------ src/modules/InteractivePoly.ts | 2 +- src/redux/map/actions.ts | 2 +- src/redux/map/index.ts | 6 +- src/redux/map/sagas.ts | 20 ++--- src/redux/map/selectors.ts | 2 +- src/redux/map/types.ts | 2 +- src/redux/store.ts | 10 +-- src/redux/user/actions.ts | 8 +- src/redux/user/handlers.ts | 4 +- src/redux/user/index.ts | 8 +- src/redux/user/sagas.ts | 30 +++---- src/redux/user/selectors.ts | 2 +- src/utils/api.ts | 10 +-- src/utils/arrow.ts | 2 +- src/utils/history.ts | 4 +- src/utils/renderer.ts | 20 ++--- src/utils/simplify.ts | 2 +- src/utils/window.ts | 2 +- tsconfig.json | 10 +-- webpack.config.js | 35 +++----- 74 files changed, 300 insertions(+), 390 deletions(-) rename {config => src/config}/frontend.example.js (90%) rename {config => src/config}/pwa.example.js (100%) diff --git a/.gitignore b/.gitignore index e1e09d8..382b80e 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,10 @@ yarn-error.log /config/backend.js /config/pwa.js +/src/config/frontend.js +/src/config/backend.js +/src/config/pwa.js + # Bundle *.js.map stats.json diff --git a/src/_modules/Arrows.ts b/src/_modules/Arrows.ts index 107fc35..5e89229 100644 --- a/src/_modules/Arrows.ts +++ b/src/_modules/Arrows.ts @@ -1,7 +1,7 @@ import { LatLngLiteral, LayerGroup, Map } from "leaflet"; -import { arrowClusterIcon, createArrow } from "$utils/arrow"; +import { arrowClusterIcon, createArrow } from "~/utils/arrow"; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { angleBetweenPoints, dist2, middleCoord } from "$utils/geom"; +import { angleBetweenPoints, dist2, middleCoord } from "~/utils/geom"; class Component extends LayerGroup { constructor(props){ diff --git a/src/_modules/Editor.ts b/src/_modules/Editor.ts index c207ad3..79bd824 100644 --- a/src/_modules/Editor.ts +++ b/src/_modules/Editor.ts @@ -1,12 +1,12 @@ -import { Map } from '$modules/Map'; -import { Poly } from '$modules/Poly'; -import { MODES } from '$constants/modes'; -import { ILatLng, Stickers } from '$modules/Stickers'; -import { Router } from '$modules/Router'; -import { DEFAULT_LOGO, ILogos, LOGOS } from '$constants/logos'; +import { Map } from '~/modules/Map'; +import { Poly } from '~/modules/Poly'; +import { MODES } from '~/constants/modes'; +import { ILatLng, Stickers } from '~/modules/Stickers'; +import { Router } from '~/modules/Router'; +import { DEFAULT_LOGO, ILogos, LOGOS } from '~/constants/logos'; -import { getUrlData } from '$utils/history'; -import { store } from '$redux/store'; +import { getUrlData } from '~/utils/history'; +import { store } from '~/redux/store'; import { resetSaveDialog, setActiveSticker, @@ -16,7 +16,7 @@ import { setMarkersShown, setMode, setRouterPoints, setStarred, -} from '$redux/user/actions'; +} from '~/redux/user/actions'; import { mapSetAddress, mapSetDescription, @@ -24,11 +24,11 @@ import { mapSetPublic, mapSetTitle, mapSetProvider, -} from '$redux/map/actions'; -import { DEFAULT_PROVIDER, IProvider, PROVIDERS } from '$constants/providers'; -import { STICKERS } from '$constants/stickers'; -import { IRootState } from "$redux/user"; -import { DEFAULT_USER, IUser } from "$constants/auth"; +} from '~/redux/map/actions'; +import { DEFAULT_PROVIDER, IProvider, PROVIDERS } from '~/constants/providers'; +import { STICKERS } from '~/constants/stickers'; +import { IRootState } from "~/redux/user"; +import { DEFAULT_USER, IUser } from "~/constants/auth"; interface IEditor { map: Map; diff --git a/src/_modules/InteractivePoly.ts b/src/_modules/InteractivePoly.ts index 33822a9..982cbb7 100644 --- a/src/_modules/InteractivePoly.ts +++ b/src/_modules/InteractivePoly.ts @@ -18,7 +18,7 @@ import { LatLngLiteral } from "leaflet"; -import { distKm, distToSegment, getPolyLength, pointInArea } from "$utils/geom"; +import { distKm, distToSegment, getPolyLength, pointInArea } from "~/utils/geom"; interface InteractivePolylineOptions extends PolylineOptions { maxMarkers?: number; diff --git a/src/_modules/KmMarks.ts b/src/_modules/KmMarks.ts index 0fee9ca..7e25910 100644 --- a/src/_modules/KmMarks.ts +++ b/src/_modules/KmMarks.ts @@ -1,7 +1,7 @@ import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from "leaflet"; -import { arrowClusterIcon, createArrow } from "$utils/arrow"; +import { arrowClusterIcon, createArrow } from "~/utils/arrow"; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { allwaysPositiveAngleDeg, angleBetweenPoints, distKm } from "$utils/geom"; +import { allwaysPositiveAngleDeg, angleBetweenPoints, distKm } from "~/utils/geom"; import classNames from 'classnames'; interface KmMarksOptions { diff --git a/src/_modules/Map.ts b/src/_modules/Map.ts index 95059cc..25ceece 100644 --- a/src/_modules/Map.ts +++ b/src/_modules/Map.ts @@ -6,8 +6,8 @@ import { } from 'leaflet'; import 'leaflet/dist/leaflet.css'; -import { PROVIDER } from '$config/frontend'; -import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; +import { PROVIDER } from '~/config/frontend'; +import { DEFAULT_PROVIDER, PROVIDERS } from '~/constants/providers'; interface Props { container: string diff --git a/src/_modules/Poly.ts b/src/_modules/Poly.ts index ada6e1c..fa10316 100644 --- a/src/_modules/Poly.ts +++ b/src/_modules/Poly.ts @@ -1,11 +1,11 @@ import { Map, LatLng } from 'leaflet'; -import { simplify } from '$utils/simplify'; -import { editor, Editor } from "$modules/Editor"; -import { ILatLng } from "$modules/Stickers"; -import { InteractivePoly } from "$modules/InteractivePoly"; -import { Arrows } from "$modules/Arrows"; -import { KmMarks } from "$modules/KmMarks"; -import { isMobile } from "$utils/window"; +import { simplify } from '~/utils/simplify'; +import { editor, Editor } from "~/modules/Editor"; +import { ILatLng } from "~/modules/Stickers"; +import { InteractivePoly } from "~/modules/InteractivePoly"; +import { Arrows } from "~/modules/Arrows"; +import { KmMarks } from "~/modules/KmMarks"; +import { isMobile } from "~/utils/window"; interface Props { map: Map; diff --git a/src/_modules/Router.ts b/src/_modules/Router.ts index 2148db8..a8cf47a 100644 --- a/src/_modules/Router.ts +++ b/src/_modules/Router.ts @@ -1,8 +1,8 @@ import { Map, Marker } from 'leaflet'; import * as Routing from 'leaflet-routing-machine/src/index'; -import { CLIENT } from '$config/frontend'; -import { DomMarker } from '$utils/DomMarker'; -import { editor } from "$modules/Editor"; +import { CLIENT } from '~/config/frontend'; +import { DomMarker } from '~/utils/DomMarker'; +import { editor } from "~/modules/Editor"; interface ILatLng { lat: number, lng: number diff --git a/src/_modules/Sticker.tsx b/src/_modules/Sticker.tsx index 07133dd..ceec2c1 100644 --- a/src/_modules/Sticker.tsx +++ b/src/_modules/Sticker.tsx @@ -1,15 +1,15 @@ import { Map, Marker, marker } from 'leaflet'; import React from 'react'; -import { DomMarker } from '$utils/DomMarker'; +import { DomMarker } from '~/utils/DomMarker'; -import { STICKERS } from '$constants/stickers'; +import { STICKERS } from '~/constants/stickers'; import ReactDOM from 'react-dom'; -import { StickerDesc } from '$components/StickerDesc'; +import { StickerDesc } from '~/components/StickerDesc'; import classnames from 'classnames'; -import { getLabelDirection } from '$utils/geom'; -import { ILatLng } from "$modules/Stickers"; -import { IRootState } from "$redux/user"; -import { Editor, editor } from "$modules/Editor"; +import { getLabelDirection } from '~/utils/geom'; +import { ILatLng } from "~/modules/Stickers"; +import { IRootState } from "~/redux/user"; +import { Editor, editor } from "~/modules/Editor"; const getX = e => ( e.touches && e.touches.length > 0 diff --git a/src/_modules/Stickers.ts b/src/_modules/Stickers.ts index 595332e..4b42d74 100644 --- a/src/_modules/Stickers.ts +++ b/src/_modules/Stickers.ts @@ -1,9 +1,9 @@ import {FeatureGroup, LayerGroup, layerGroup, Map} from 'leaflet'; -import { IStickerDump, Sticker } from '$modules/Sticker'; +import { IStickerDump, Sticker } from '~/modules/Sticker'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { clusterIcon } from '$utils/clusterIcon'; -import { editor, Editor } from "$modules/Editor"; -import { STICKERS } from "$constants/stickers"; +import { clusterIcon } from '~/utils/clusterIcon'; +import { editor, Editor } from "~/modules/Editor"; +import { STICKERS } from "~/constants/stickers"; export interface ILatLng { lat: number, diff --git a/src/components/Cursor.tsx b/src/components/Cursor.tsx index 4d1c3e8..1cf5707 100644 --- a/src/components/Cursor.tsx +++ b/src/components/Cursor.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { Icon } from '$components/panels/Icon'; -import { MODES } from '$constants/modes'; -import { IStickerPack, STICKERS } from '$constants/stickers'; -import { StickerIcon } from '$components/StickerIcon'; -import { IRootReducer } from '$redux/user'; +import { Icon } from '~/components/panels/Icon'; +import { MODES } from '~/constants/modes'; +import { IStickerPack, STICKERS } from '~/constants/stickers'; +import { StickerIcon } from '~/components/StickerIcon'; +import { IRootReducer } from '~/redux/user'; interface Props { mode: IRootReducer['mode'], diff --git a/src/components/Fills.tsx b/src/components/Fills.tsx index b68d6cd..52e0d6f 100644 --- a/src/components/Fills.tsx +++ b/src/components/Fills.tsx @@ -43,6 +43,6 @@ export const Fills = () => ( - + ); diff --git a/src/components/StickerIcon.tsx b/src/components/StickerIcon.tsx index a2c7c2f..f46d915 100644 --- a/src/components/StickerIcon.tsx +++ b/src/components/StickerIcon.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { STICKERS } from '$constants/stickers'; +import { STICKERS } from '~/constants/stickers'; type Props = { set: string, diff --git a/src/components/UserLocation.tsx b/src/components/UserLocation.tsx index 73f96db..ecb501c 100644 --- a/src/components/UserLocation.tsx +++ b/src/components/UserLocation.tsx @@ -1,8 +1,8 @@ import React from 'react'; // import { marker } from 'leaflet'; -// import { DomMarker } from '$utils/DomMarker'; -// import { Icon } from '$components/panels/Icon'; -// import { editor } from '$modules/Editor'; +// import { DomMarker } from '~/utils/DomMarker'; +// import { Icon } from '~/components/panels/Icon'; +// import { editor } from '~/modules/Editor'; interface Props { diff --git a/src/components/dialogs/AppInfoDialog.tsx b/src/components/dialogs/AppInfoDialog.tsx index 65b897b..9441f68 100644 --- a/src/components/dialogs/AppInfoDialog.tsx +++ b/src/components/dialogs/AppInfoDialog.tsx @@ -1,7 +1,7 @@ // @flow import React from 'react'; -import { Scroll } from '$components/Scroll'; -import { APP_INFO } from '$constants/app_info'; +import { Scroll } from '~/components/Scroll'; +import { APP_INFO } from '~/constants/app_info'; export const AppInfoDialog = () => (
      diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index 393deb6..d2aa630 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { MODES } from '$constants/modes'; -import { Icon } from '$components/panels/Icon'; -import { setMode, stopEditing } from "$redux/user/actions"; +import { MODES } from '~/constants/modes'; +import { Icon } from '~/components/panels/Icon'; +import { setMode, stopEditing } from "~/redux/user/actions"; type Props = { stopEditing: typeof stopEditing, diff --git a/src/components/dialogs/LogoDialog.tsx b/src/components/dialogs/LogoDialog.tsx index b7b5514..0cd37d3 100644 --- a/src/components/dialogs/LogoDialog.tsx +++ b/src/components/dialogs/LogoDialog.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { LOGOS } from '$constants/logos'; -import { Icon } from '$components/panels/Icon'; +import { LOGOS } from '~/constants/logos'; +import { Icon } from '~/components/panels/Icon'; import classnames from 'classnames'; -import * as MAP_ACTIONS from "$redux/map/actions" -import { selectMapLogo } from '$redux/map/selectors'; +import * as MAP_ACTIONS from "~/redux/map/actions" +import { selectMapLogo } from '~/redux/map/selectors'; import { connect } from 'react-redux'; const mapStateToProps = state => ({ diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index ce2ea6f..fb35991 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { connect } from 'react-redux'; -import { RouteRowWrapper } from '$components/maps/RouteRowWrapper'; -import { Scroll } from '$components/Scroll'; +import { RouteRowWrapper } from '~/components/maps/RouteRowWrapper'; +import { Scroll } from '~/components/Scroll'; import { searchSetDistance, searchSetTitle, @@ -11,17 +11,17 @@ import { dropRoute, modifyRoute, toggleRouteStarred, -} from '$redux/user/actions'; -import { isMobile } from '$utils/window'; +} from '~/redux/user/actions'; +import { isMobile } from '~/utils/window'; import classnames from 'classnames'; import Range from 'rc-slider/lib/Range'; -import { TABS, TABS_TITLES } from '$constants/dialogs'; -import { Icon } from '$components/panels/Icon'; -import { pushPath } from '$utils/history'; -import { IRootState, IRouteListItem } from '$redux/user'; -import { ROLES } from '$constants/auth'; -import { IState } from '$redux/store'; +import { TABS, TABS_TITLES } from '~/constants/dialogs'; +import { Icon } from '~/components/panels/Icon'; +import { pushPath } from '~/utils/history'; +import { IRootState, IRouteListItem } from '~/redux/user'; +import { ROLES } from '~/constants/auth'; +import { IState } from '~/redux/store'; export interface IMapListDialogProps extends IRootState { marks: { [x: number]: string }; diff --git a/src/components/dialogs/ProviderDialog.tsx b/src/components/dialogs/ProviderDialog.tsx index b6237c1..29ac463 100644 --- a/src/components/dialogs/ProviderDialog.tsx +++ b/src/components/dialogs/ProviderDialog.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { PROVIDERS, replaceProviderUrl } from '$constants/providers'; -import { Icon } from '$components/panels/Icon'; +import { PROVIDERS, replaceProviderUrl } from '~/constants/providers'; +import { Icon } from '~/components/panels/Icon'; import classnames from 'classnames'; -import * as MAP_ACTIONS from "$redux/map/actions"; -import { selectMapProvider } from '$redux/map/selectors'; +import * as MAP_ACTIONS from "~/redux/map/actions"; +import { selectMapProvider } from '~/redux/map/selectors'; import { connect } from 'react-redux'; const mapStateToProps = state => ({ diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index 6d2bcd9..adaa3bc 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { Icon } from '$components/panels/Icon'; +import { Icon } from '~/components/panels/Icon'; import { routerCancel as routerCancelAction, routerSubmit as routerSubmitAction, -} from "$redux/user/actions"; +} from "~/redux/user/actions"; import classnames from "classnames"; type Props = { diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index 4fbd879..67fb1ec 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -1,17 +1,17 @@ import React from 'react'; -import { copyToClipboard, getUrlData } from '$utils/history'; -import { toTranslit, parseDesc } from '$utils/format'; -import { TIPS } from '$constants/tips'; -import { MODES } from '$constants/modes'; -import { Icon } from '$components/panels/Icon'; -import { Switch } from '$components/Switch'; +import { copyToClipboard, getUrlData } from '~/utils/history'; +import { toTranslit, parseDesc } from '~/utils/format'; +import { TIPS } from '~/constants/tips'; +import { MODES } from '~/constants/modes'; +import { Icon } from '~/components/panels/Icon'; +import { Switch } from '~/components/Switch'; import classnames from 'classnames'; import ExpandableTextarea from 'react-expandable-textarea'; import { connect } from 'react-redux'; -import { selectMap } from '$redux/map/selectors'; -import { selectUser } from '$redux/user/selectors'; -import * as USER_ACTIONS from '$redux/user/actions'; +import { selectMap } from '~/redux/map/selectors'; +import { selectUser } from '~/redux/user/selectors'; +import * as USER_ACTIONS from '~/redux/user/actions'; const mapStateToProps = state => ({ map: selectMap(state), diff --git a/src/components/dialogs/ShotPrefetchDialog.tsx b/src/components/dialogs/ShotPrefetchDialog.tsx index 487b378..a03eb5e 100644 --- a/src/components/dialogs/ShotPrefetchDialog.tsx +++ b/src/components/dialogs/ShotPrefetchDialog.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { connect } from 'react-redux'; -import { selectUserRenderer } from '$redux/user/selectors'; +import { selectUserRenderer } from '~/redux/user/selectors'; const mapStateToProps = state => ({ renderer: selectUserRenderer(state), diff --git a/src/components/dialogs/StickersDialog.tsx b/src/components/dialogs/StickersDialog.tsx index db31f3c..97d27c8 100644 --- a/src/components/dialogs/StickersDialog.tsx +++ b/src/components/dialogs/StickersDialog.tsx @@ -1,8 +1,8 @@ // @flow import React from 'react'; -import { STICKERS } from '$constants/stickers'; -import { setActiveSticker as setActiveStickerAction } from "$redux/user/actions"; +import { STICKERS } from '~/constants/stickers'; +import { setActiveSticker as setActiveStickerAction } from "~/redux/user/actions"; interface Props { setActiveSticker: typeof setActiveStickerAction, diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index e1fe86c..50c3464 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -2,11 +2,11 @@ import React from 'react'; import { connect } from 'react-redux'; import classnames from 'classnames'; -import { getStyle } from '$utils/dom'; -import { nearestInt } from '$utils/geom'; -import { parseDesc } from '$utils/format'; -import { selectUser } from '$redux/user/selectors'; -import { selectMap } from '$redux/map/selectors'; +import { getStyle } from '~/utils/dom'; +import { nearestInt } from '~/utils/geom'; +import { parseDesc } from '~/utils/format'; +import { selectUser } from '~/redux/user/selectors'; +import { selectMap } from '~/redux/map/selectors'; const mapStateToProps = state => ({ user: selectUser(state), diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index 09f0e96..fcb19c9 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Icon } from '$components/panels/Icon'; +import { Icon } from '~/components/panels/Icon'; type Props = { clearPoly: () => void, diff --git a/src/components/logo/LogoPreview.tsx b/src/components/logo/LogoPreview.tsx index 7950c2f..4d96127 100644 --- a/src/components/logo/LogoPreview.tsx +++ b/src/components/logo/LogoPreview.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { LOGOS } from '$constants/logos'; +import { LOGOS } from '~/constants/logos'; import { connect } from 'react-redux'; -import { IRootState } from '$redux/user'; -import { selectMapLogo } from '$redux/map/selectors'; +import { IRootState } from '~/redux/user'; +import { selectMapLogo } from '~/redux/map/selectors'; const mapStateToProps = state => ({ logo: selectMapLogo(state) }); type Props = ReturnType; diff --git a/src/components/maps/RouteRowDrop.tsx b/src/components/maps/RouteRowDrop.tsx index 1f7c097..e85d756 100644 --- a/src/components/maps/RouteRowDrop.tsx +++ b/src/components/maps/RouteRowDrop.tsx @@ -1,8 +1,8 @@ // @flow import React from 'react'; -import { Icon } from '$components/panels/Icon'; -import { MapListDialog } from "$components/dialogs/MapListDialog"; -import { Tooltip } from "$components/panels/Tooltip"; +import { Icon } from '~/components/panels/Icon'; +import { MapListDialog } from "~/components/dialogs/MapListDialog"; +import { Tooltip } from "~/components/panels/Tooltip"; import { ReactElement } from "react"; interface Props { diff --git a/src/components/maps/RouteRowEditor.tsx b/src/components/maps/RouteRowEditor.tsx index 00466ee..6e70593 100644 --- a/src/components/maps/RouteRowEditor.tsx +++ b/src/components/maps/RouteRowEditor.tsx @@ -1,8 +1,8 @@ // @flow import React from 'react'; -import { Icon } from '$components/panels/Icon'; -import { Switch } from '$components/Switch'; -import { MapListDialog } from "$components/dialogs/MapListDialog"; +import { Icon } from '~/components/panels/Icon'; +import { Switch } from '~/components/Switch'; +import { MapListDialog } from "~/components/dialogs/MapListDialog"; interface Props { title: string; diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 8a113be..072c80a 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -1,12 +1,12 @@ // @flow import React from "react"; -import { Icon } from "$components/panels/Icon"; -import { MapListDialog } from "$components/dialogs/MapListDialog"; -import { Tooltip } from "$components/panels/Tooltip"; +import { Icon } from "~/components/panels/Icon"; +import { MapListDialog } from "~/components/dialogs/MapListDialog"; +import { Tooltip } from "~/components/panels/Tooltip"; import { ReactElement } from "react"; import classnames from "classnames"; -import { toggleRouteStarred } from "$redux/user/actions"; -import { TABS } from "$constants/dialogs"; +import { toggleRouteStarred } from "~/redux/user/actions"; +import { TABS } from "~/constants/dialogs"; interface Props { tab: string; diff --git a/src/components/maps/RouteRowWrapper.tsx b/src/components/maps/RouteRowWrapper.tsx index 24e44cc..0bd8c06 100644 --- a/src/components/maps/RouteRowWrapper.tsx +++ b/src/components/maps/RouteRowWrapper.tsx @@ -1,9 +1,9 @@ import React from "react"; import classnames from "classnames"; -import { MapListDialog } from "$components/dialogs/MapListDialog"; -import { RouteRowView } from "$components/maps/RouteRowView"; -import { RouteRowEditor } from "$components/maps/RouteRowEditor"; -import { RouteRowDrop } from "$components/maps/RouteRowDrop"; +import { MapListDialog } from "~/components/dialogs/MapListDialog"; +import { RouteRowView } from "~/components/maps/RouteRowView"; +import { RouteRowEditor } from "~/components/maps/RouteRowEditor"; +import { RouteRowDrop } from "~/components/maps/RouteRowDrop"; import { ReactElement } from "react"; interface Props { diff --git a/src/components/panels/DistanceBar.tsx b/src/components/panels/DistanceBar.tsx index 5531835..edcf43c 100644 --- a/src/components/panels/DistanceBar.tsx +++ b/src/components/panels/DistanceBar.tsx @@ -1,15 +1,15 @@ // flow import React from 'react'; -import { toHours } from '$utils/format'; -import { Icon } from '$components/panels/Icon'; +import { toHours } from '~/utils/format'; +import { Icon } from '~/components/panels/Icon'; import { connect } from 'react-redux'; // import Slider from 'rc-slider'; import Slider from 'rc-slider/lib/Slider'; import { bindActionCreators } from 'redux'; -import { setSpeed } from '$redux/user/actions'; -import { IRootState } from "$redux/user"; -import { Tooltip } from "$components/panels/Tooltip"; -import { isMobile } from "$utils/window"; +import { setSpeed } from '~/redux/user/actions'; +import { IRootState } from "~/redux/user"; +import { Tooltip } from "~/components/panels/Tooltip"; +import { isMobile } from "~/utils/window"; interface Props extends IRootState { setSpeed: typeof setSpeed, diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index d3f50a5..0ade17d 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -1,18 +1,18 @@ import React, { createElement } from 'react'; -import { MODES } from '$constants/modes'; +import { MODES } from '~/constants/modes'; -import { RouterDialog } from '$components/dialogs/RouterDialog'; -import { StickersDialog } from '$components/dialogs/StickersDialog'; -import { TrashDialog } from '$components/dialogs/TrashDialog'; -import { LogoDialog } from '$components/dialogs/LogoDialog'; -import { SaveDialog } from '$components/dialogs/SaveDialog'; -import { CancelDialog } from '$components/dialogs/CancelDialog'; +import { RouterDialog } from '~/components/dialogs/RouterDialog'; +import { StickersDialog } from '~/components/dialogs/StickersDialog'; +import { TrashDialog } from '~/components/dialogs/TrashDialog'; +import { LogoDialog } from '~/components/dialogs/LogoDialog'; +import { SaveDialog } from '~/components/dialogs/SaveDialog'; +import { CancelDialog } from '~/components/dialogs/CancelDialog'; import { connect } from 'react-redux'; -import { ProviderDialog } from '$components/dialogs/ProviderDialog'; -import { ShotPrefetchDialog } from '$components/dialogs/ShotPrefetchDialog'; -import { selectUserMode } from '$redux/user/selectors'; +import { ProviderDialog } from '~/components/dialogs/ProviderDialog'; +import { ShotPrefetchDialog } from '~/components/dialogs/ShotPrefetchDialog'; +import { selectUserMode } from '~/redux/user/selectors'; const mapStateToProps = state => ({ mode: selectUserMode(state) }); diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index decdc94..add6782 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -1,14 +1,14 @@ import React from 'react'; -import { MODES } from '$constants/modes'; +import { MODES } from '~/constants/modes'; import classnames from 'classnames'; -import { Icon } from '$components/panels/Icon'; -import { EditorDialog } from '$components/panels/EditorDialog'; +import { Icon } from '~/components/panels/Icon'; +import { EditorDialog } from '~/components/panels/EditorDialog'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; -import { setMode, startEditing, stopEditing, takeAShot, keyPressed } from '$redux/user/actions'; -import { IRootState } from "$redux/user"; -import { Tooltip } from "$components/panels/Tooltip"; +import { setMode, startEditing, stopEditing, takeAShot, keyPressed } from '~/redux/user/actions'; +import { IRootState } from "~/redux/user"; +import { Tooltip } from "~/components/panels/Tooltip"; interface Props extends IRootState { routing: IRootState['features']['routing'], diff --git a/src/components/panels/Icon.tsx b/src/components/panels/Icon.tsx index 5cad4a3..62354f1 100644 --- a/src/components/panels/Icon.tsx +++ b/src/components/panels/Icon.tsx @@ -4,7 +4,7 @@ export const Icon = ({ icon, size = 32 }: { icon: string, size?: number }) => ( - + diff --git a/src/components/panels/RendererPanel.tsx b/src/components/panels/RendererPanel.tsx index dc9ff90..eba3404 100644 --- a/src/components/panels/RendererPanel.tsx +++ b/src/components/panels/RendererPanel.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Icon } from '$components/panels/Icon'; +import { Icon } from '~/components/panels/Icon'; type Props = { onCancel: () => void, diff --git a/src/components/panels/TopLeftPanel.tsx b/src/components/panels/TopLeftPanel.tsx index ee8a829..44acce7 100644 --- a/src/components/panels/TopLeftPanel.tsx +++ b/src/components/panels/TopLeftPanel.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { UserLocation } from '$components/UserLocation'; -import { DistanceBar } from '$components/panels/DistanceBar'; +import { UserLocation } from '~/components/UserLocation'; +import { DistanceBar } from '~/components/panels/DistanceBar'; export const TopLeftPanel = () => (
      diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index c06c7e8..63a7346 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -1,16 +1,16 @@ // flow import React, { useCallback } from 'react'; -import { Icon } from '$components/panels/Icon'; -import { PROVIDERS } from '$constants/providers'; -import { LOGOS } from '$constants/logos'; -import * as USER_ACTIONS from '$redux/user/actions'; +import { Icon } from '~/components/panels/Icon'; +import { PROVIDERS } from '~/constants/providers'; +import { LOGOS } from '~/constants/logos'; +import * as USER_ACTIONS from '~/redux/user/actions'; import { connect } from 'react-redux'; -import { MODES } from '$constants/modes'; -import { IRootState } from '$redux/user'; +import { MODES } from '~/constants/modes'; +import { IRootState } from '~/redux/user'; -import { Tooltip } from '$components/panels/Tooltip'; -import { selectMap } from '$redux/map/selectors'; -import { selectUser } from '$redux/user/selectors'; +import { Tooltip } from '~/components/panels/Tooltip'; +import { selectMap } from '~/redux/map/selectors'; +import { selectUser } from '~/redux/user/selectors'; const mapStateToProps = state => ({ map: selectMap(state), diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 2bca218..a138747 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -1,9 +1,9 @@ import React, { PureComponent } from 'react'; -import { GuestButton } from '$components/user/GuestButton'; -import { DEFAULT_USER, IUser, ROLES } from '$constants/auth'; -import { UserButton } from '$components/user/UserButton'; -import { UserMenu } from '$components/user/UserMenu'; +import { GuestButton } from '~/components/user/GuestButton'; +import { DEFAULT_USER, ROLES } from '~/constants/auth'; +import { UserButton } from '~/components/user/UserButton'; +import { UserMenu } from '~/components/user/UserMenu'; import { setUser, userLogout, @@ -13,16 +13,16 @@ import { setDialogActive, openMapDialog, getGPXTrack, -} from '$redux/user/actions'; +} from '~/redux/user/actions'; import { connect } from 'react-redux'; -import { Icon } from '$components/panels/Icon'; +import { Icon } from '~/components/panels/Icon'; import classnames from 'classnames'; -import { CLIENT } from '$config/frontend'; -import { DIALOGS, TABS } from '$constants/dialogs'; -import { IRootState } from '$redux/user'; -import { Tooltip } from '$components/panels/Tooltip'; -import { TitleDialog } from '$components/dialogs/TitleDialog'; +import { CLIENT } from '~/config/frontend'; +import { DIALOGS, TABS } from '~/constants/dialogs'; +import { IRootState } from '~/redux/user'; +import { Tooltip } from '~/components/panels/Tooltip'; +import { TitleDialog } from '~/components/dialogs/TitleDialog'; interface Props extends IRootState { userLogout: typeof userLogout; diff --git a/src/components/renderer/Renderer.tsx b/src/components/renderer/Renderer.tsx index 60166c8..b1af77b 100644 --- a/src/components/renderer/Renderer.tsx +++ b/src/components/renderer/Renderer.tsx @@ -1,14 +1,14 @@ import React from 'react'; -import { hideRenderer, cropAShot } from '$redux/user/actions'; +import { hideRenderer, cropAShot } from '~/redux/user/actions'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import Croppr from 'croppr'; import 'croppr/dist/croppr.css'; -import { LOGOS } from '$constants/logos'; -import { RendererPanel } from '$components/panels/RendererPanel'; -import { IRootState } from "$redux/user"; -import { IRoute } from '$redux/map/types'; +import { LOGOS } from '~/constants/logos'; +import { RendererPanel } from '~/components/panels/RendererPanel'; +import { IRootState } from "~/redux/user"; +import { IRoute } from '~/redux/map/types'; type Props = { data: IRootState['renderer']['data'], diff --git a/src/components/user/GuestButton.tsx b/src/components/user/GuestButton.tsx index 65e920e..dbc019f 100644 --- a/src/components/user/GuestButton.tsx +++ b/src/components/user/GuestButton.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Icon } from '$components/panels/Icon'; +import { Icon } from '~/components/panels/Icon'; type Props = { onClick: () => void, diff --git a/src/components/user/UserButton.tsx b/src/components/user/UserButton.tsx index e09c13d..2ab1bf2 100644 --- a/src/components/user/UserButton.tsx +++ b/src/components/user/UserButton.tsx @@ -1,7 +1,7 @@ // @flow import React from "react"; -import { UserPicture } from "$components/user/UserPicture"; -import { IUser } from "$constants/auth"; +import { UserPicture } from "~/components/user/UserPicture"; +import { IUser } from "~/constants/auth"; interface Props { user: IUser; diff --git a/src/components/user/UserMenu.tsx b/src/components/user/UserMenu.tsx index 1be22dc..c4730bf 100644 --- a/src/components/user/UserMenu.tsx +++ b/src/components/user/UserMenu.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { APP_INFO } from '$constants/app_info'; -import { userLogout } from "$redux/user/actions"; +import { APP_INFO } from '~/constants/app_info'; +import { userLogout } from "~/redux/user/actions"; interface Props { userLogout: typeof userLogout, diff --git a/config/frontend.example.js b/src/config/frontend.example.js similarity index 90% rename from config/frontend.example.js rename to src/config/frontend.example.js index 4661dd9..ba792af 100644 --- a/config/frontend.example.js +++ b/src/config/frontend.example.js @@ -1,4 +1,4 @@ -import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; +import { DEFAULT_PROVIDER, PROVIDERS } from '~/constants/providers'; import { LatLngLiteral } from 'leaflet'; const PUBLIC_PATH = ''; diff --git a/config/pwa.example.js b/src/config/pwa.example.js similarity index 100% rename from config/pwa.example.js rename to src/config/pwa.example.js diff --git a/src/constants/api.ts b/src/constants/api.ts index 6e0a243..5febdcf 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -1,4 +1,4 @@ -import { CLIENT } from '$config/frontend'; +import { CLIENT } from '~/config/frontend'; export const API = { GET_GUEST: `${CLIENT.API_ADDR}/api/auth/`, diff --git a/src/constants/stickers.ts b/src/constants/stickers.ts index 0652928..03d89a4 100644 --- a/src/constants/stickers.ts +++ b/src/constants/stickers.ts @@ -37,7 +37,7 @@ export interface IStickers { export const STICKERS: IStickers = { base: { title: 'Простые', - url: require('$sprites/stickers/stickers-base.svg'), + url: require('~/sprites/stickers/stickers-base.svg'), size: 72, layers: { men: { off: 5, title: 'Александр 3', title_long: 'Парк Городское Начало' }, @@ -66,7 +66,7 @@ export const STICKERS: IStickers = { }, real: { title: 'Реалистичные', - url: require('$sprites/stickers/stickers-base.svg'), + url: require('~/sprites/stickers/stickers-base.svg'), size: 72, layers: { chicken: { off: 31, title: 'Курочка', title_long: 'Курочка' }, @@ -80,7 +80,7 @@ export const STICKERS: IStickers = { }, pin: { title: 'ПИН-микс', - url: require('$sprites/stickers/stickers-base.svg'), + url: require('~/sprites/stickers/stickers-base.svg'), size: 72, layers: { start: { off: 21, title: '1', title_long: 'Первая точка' }, @@ -97,7 +97,7 @@ export const STICKERS: IStickers = { }, points: { title: 'Точки', - url: require('$sprites/stickers/stickers-base.svg'), + url: require('~/sprites/stickers/stickers-base.svg'), size: 72, layers: { pt1: { off: 40, title: '1', title_long: 'Первая точка' }, diff --git a/src/containers/App.tsx b/src/containers/App.tsx index b23975a..cc7c326 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -1,25 +1,25 @@ // @flow import React from 'react'; -import { EditorPanel } from '$components/panels/EditorPanel'; -import { Fills } from '$components/Fills'; -import { UserPanel } from '$components/panels/UserPanel'; +import { EditorPanel } from '~/components/panels/EditorPanel'; +import { Fills } from '~/components/Fills'; +import { UserPanel } from '~/components/panels/UserPanel'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { hot } from 'react-hot-loader'; -import { Renderer } from '$components/renderer/Renderer'; -import { hideRenderer, setDialogActive } from '$redux/user/actions'; -import { Cursor } from '$components/Cursor'; -import { LeftDialog } from '$containers/LeftDialog'; -import { TopLeftPanel } from '$components/panels/TopLeftPanel'; -import { TopRightPanel } from '$components/panels/TopRightPanel'; -import { LogoPreview } from '$components/logo/LogoPreview'; -import { IStickerPack } from '$constants/stickers'; -import { IDialogs } from '$constants/dialogs'; +import { Renderer } from '~/components/renderer/Renderer'; +import { hideRenderer, setDialogActive } from '~/redux/user/actions'; +import { Cursor } from '~/components/Cursor'; +import { LeftDialog } from '~/containers/LeftDialog'; +import { TopLeftPanel } from '~/components/panels/TopLeftPanel'; +import { TopRightPanel } from '~/components/panels/TopRightPanel'; +import { LogoPreview } from '~/components/logo/LogoPreview'; +import { IStickerPack } from '~/constants/stickers'; +import { IDialogs } from '~/constants/dialogs'; -import { Map } from '$containers/map/Map'; -import { IRootReducer } from '$redux/user'; +import { Map } from '~/containers/map/Map'; +import { IRootReducer } from '~/redux/user'; type Props = { sticker: string; diff --git a/src/containers/LeftDialog.tsx b/src/containers/LeftDialog.tsx index 16fb58a..06a84a8 100644 --- a/src/containers/LeftDialog.tsx +++ b/src/containers/LeftDialog.tsx @@ -1,10 +1,10 @@ import React, { createElement } from 'react'; -import { DIALOGS, IDialogs } from '$constants/dialogs'; +import { DIALOGS, IDialogs } from '~/constants/dialogs'; import classnames from 'classnames'; -import { AppInfoDialog } from '$components/dialogs/AppInfoDialog'; -import { Icon } from '$components/panels/Icon'; -import { MapListDialog } from '$components/dialogs/MapListDialog'; -import * as USER_ACTIONS from '$redux/user/actions'; +import { AppInfoDialog } from '~/components/dialogs/AppInfoDialog'; +import { Icon } from '~/components/panels/Icon'; +import { MapListDialog } from '~/components/dialogs/MapListDialog'; +import * as USER_ACTIONS from '~/redux/user/actions'; interface Props { dialog: keyof IDialogs; diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index a99f856..7ea4489 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -5,14 +5,14 @@ import { selectMapProvider, selectMapRoute, selectMapStickers -} from "$redux/map/selectors"; +} from "~/redux/map/selectors"; import { connect } from "react-redux"; -import * as MAP_ACTIONS from "$redux/map/actions"; +import * as MAP_ACTIONS from "~/redux/map/actions"; -import { Route } from "$containers/map/Route"; -import { TileLayer } from "$containers/map/TileLayer"; -import { Stickers } from "$containers/map/Stickers"; -import { selectUserEditing } from '$redux/user/selectors' +import { Route } from "~/containers/map/Route"; +import { TileLayer } from "~/containers/map/TileLayer"; +import { Stickers } from "~/containers/map/Stickers"; +import { selectUserEditing } from '~/redux/user/selectors' import 'leaflet/dist/leaflet.css'; diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 2660916..6a0ca07 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -6,8 +6,8 @@ import React, { useCallback } from "react"; import { IMapRoute, ILatLng } from "../../../redux/map/types"; -import { InteractivePoly } from "$modules/InteractivePoly"; -import { isMobile } from "$utils/window"; +import { InteractivePoly } from "~/modules/InteractivePoly"; +import { isMobile } from "~/utils/window"; import { LatLng, Map } from "leaflet"; interface IProps { diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index c37d505..f9964bf 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -1,10 +1,10 @@ import React from "react"; import { Map, marker, Marker } from "leaflet"; -import { IStickerDump } from "$redux/map/types"; -import { STICKERS } from "$constants/stickers"; -import { StickerDesc } from "$components/StickerDesc"; +import { IStickerDump } from "~/redux/map/types"; +import { STICKERS } from "~/constants/stickers"; +import { StickerDesc } from "~/components/StickerDesc"; import classNames from "classnames"; -import { DomMarker } from "$utils/DomMarker"; +import { DomMarker } from "~/utils/DomMarker"; import { createPortal } from "react-dom"; interface IProps { diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index 20d5b3d..57984d7 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { IStickerDump } from '$redux/map/types'; +import { IStickerDump } from '~/redux/map/types'; import { FeatureGroup, Map } from 'leaflet'; -import { Sticker } from '$containers/map/Sticker'; -import { mapSetSticker, mapDropSticker } from '$redux/map/actions'; +import { Sticker } from '~/containers/map/Sticker'; +import { mapSetSticker, mapDropSticker } from '~/redux/map/actions'; interface IProps { stickers: IStickerDump[]; diff --git a/src/containers/map/TileLayer/index.tsx b/src/containers/map/TileLayer/index.tsx index ff430fe..15296f1 100644 --- a/src/containers/map/TileLayer/index.tsx +++ b/src/containers/map/TileLayer/index.tsx @@ -1,8 +1,8 @@ import React from "react"; import { TileContext } from "../../../utils/context"; import { TileLayer as TileLayerInterface, tileLayer, Map } from "leaflet"; -import { DEFAULT_PROVIDER, PROVIDERS } from "$constants/providers"; -import { IMapReducer } from "$redux/map"; +import { DEFAULT_PROVIDER, PROVIDERS } from "~/constants/providers"; +import { IMapReducer } from "~/redux/map"; type IProps = React.HTMLAttributes & { provider: IMapReducer['provider'], diff --git a/src/index.tsx b/src/index.tsx index c695bbe..30e849b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,88 +1,13 @@ -/* - ## FEATURES - todo screenshots with dot losing .png extension - todo refactor reducer to use is_ prefix for editing and etc (mb move them to status object) - todo tower sticker - done route description - done setup deploy - - skip polyline editing only in manual mode (or by click) - todo selecting logo on crop - - todo network operations notify - done delayed notify (delay(2000).then(showLoadingMsg)) - todo network error notifications - todo check canvas support at startup - done check osrm is up - - ## DONE - - done arrows on screenshot - done public maps - done editing map on map list - done setting map public on map list - - done routing spinner - done maybe: stickers clusterization? - done moving out the screen makes stickers editable again - - done check if osrm available - done selecting map on dialog in edit mode opens it at view mode - done make arrows and distance points - - done fix arrows (can't reproduce now :-( ) - done adding route, applying it and adding again and deleting it makes ghost points on the map - - done adding/removing points doesn't change distance - done cancelling editing someone's else map return back to it's original address /razminochnyj/ - done change title on route opening - done delete sticker icon - - done tooltips for panel items - done map catalogue - done public maps - done map search - done map list lazy loading - - done save spinner - done better poly editor https://github.com/SupriyaSudhindra/leaflet-editable-polyline - done update after point delete - done hidden markers tooltip - - done clear routing on editing cancellation - done riding speed slider - done dont close map list on click - done fix loaded stickers has wrong text placement for right-sided captions - done fix save button should not react to clicks - done stickers with empty text should not have blackbox at view mode - done add ability to copy-paste address after saving - - done hide sticker dialog on sticker selection - done separate mode for sticker selection - done TEST: set initialData after saving map, clear is-modified - done TEST: provider / logo triggers setChanged - done shot mechanism (100%) - done client-side shot mechanism - done croppr.js - done shot stickers - done progress - done hotkeys via sagas - done better loader screen - done network errors handling on startup - - done stickers drag on rotate bug - */ - import React from 'react'; import ReactDOM from 'react-dom'; -import { App } from '$containers/App'; -import '$styles/main.less'; +import { App } from '~/containers/App'; +import '~/styles/main.less'; import { Provider } from 'react-redux'; import { PersistGate } from 'redux-persist/integration/react'; -import { configureStore } from '$redux/store'; -import { pushLoaderState } from '$utils/history'; +import { configureStore } from '~/redux/store'; +import { pushLoaderState } from '~/utils/history'; const { store, persistor } = configureStore(); diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index c0e15a9..c67c9e3 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -18,7 +18,7 @@ import { LatLngLiteral } from "leaflet"; -import { distKm, distToSegment, getPolyLength, pointInArea } from "$utils/geom"; +import { distKm, distToSegment, getPolyLength, pointInArea } from "~/utils/geom"; interface InteractivePolylineOptions extends PolylineOptions { maxMarkers?: number; diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index e091219..537caee 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -1,6 +1,6 @@ import { MAP_ACTIONS } from './constants'; import { IMapReducer } from './'; -import { IStickerDump } from '$redux/map/types'; +import { IStickerDump } from '~/redux/map/types'; import { ILatLng } from './types'; export const mapSet = (map: Partial) => ({ diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index 47a64f8..a72482d 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -1,9 +1,9 @@ import { createReducer } from 'reduxsauce'; import { MAP_HANDLERS } from './handlers'; -import { DEFAULT_PROVIDER } from '$constants/providers'; +import { DEFAULT_PROVIDER } from '~/constants/providers'; import { IMapRoute } from './types'; -import { IStickerDump } from '$redux/map/types'; -import { DEFAULT_LOGO } from '$constants/logos'; +import { IStickerDump } from '~/redux/map/types'; +import { DEFAULT_LOGO } from '~/constants/logos'; export interface IMapReducer { provider: string; diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 51f52a8..c400922 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -1,8 +1,8 @@ import { takeEvery, select, put, call, TakeEffect, race, take, takeLatest } from 'redux-saga/effects'; import { MAP_ACTIONS } from './constants'; import { mapClicked, mapAddSticker, mapSetProvider, mapSet, mapSetTitle, mapSetAddress, mapSetDescription, mapSetOwner, mapSetPublic } from './actions'; -import { selectUserMode, selectUserActiveSticker, selectUser, selectUserUser } from '$redux/user/selectors'; -import { MODES } from '$constants/modes'; +import { selectUserMode, selectUserActiveSticker, selectUser, selectUserUser } from '~/redux/user/selectors'; +import { MODES } from '~/constants/modes'; import { setMode, setChanged, @@ -15,15 +15,15 @@ import { sendSaveRequest, setSaveSuccess, setSaveOverwrite, -} from '$redux/user/actions'; -import { pushLoaderState, getUrlData, pushPath, replacePath } from '$utils/history'; -import { setReadySaga, searchSetSagaWorker } from '$redux/user/sagas'; -import { getStoredMap, postMap } from '$utils/api'; -import { Unwrap } from '$utils/middleware'; -import { DEFAULT_PROVIDER } from '$constants/providers'; -import { USER_ACTIONS } from '$redux/user/constants'; +} from '~/redux/user/actions'; +import { pushLoaderState, getUrlData, pushPath, replacePath } from '~/utils/history'; +import { setReadySaga, searchSetSagaWorker } from '~/redux/user/sagas'; +import { getStoredMap, postMap } from '~/utils/api'; +import { Unwrap } from '~/utils/middleware'; +import { DEFAULT_PROVIDER } from '~/constants/providers'; +import { USER_ACTIONS } from '~/redux/user/constants'; import { selectMap } from './selectors'; -import { TIPS } from '$constants/tips'; +import { TIPS } from '~/constants/tips'; import { delay } from 'redux-saga'; function* onMapClick({ latlng }: ReturnType) { diff --git a/src/redux/map/selectors.ts b/src/redux/map/selectors.ts index 222d8aa..445d95a 100644 --- a/src/redux/map/selectors.ts +++ b/src/redux/map/selectors.ts @@ -1,4 +1,4 @@ -import { IState } from "$redux/store"; +import { IState } from "~/redux/store"; export const selectMap = (state: IState) => state.map; export const selectMapProvider = (state: IState) => state.map.provider; diff --git a/src/redux/map/types.ts b/src/redux/map/types.ts index e36f37b..1d15bd3 100644 --- a/src/redux/map/types.ts +++ b/src/redux/map/types.ts @@ -1,5 +1,5 @@ import { LatLng } from 'leaflet'; -import { IRoutePoint } from '$utils/gpx'; +import { IRoutePoint } from '~/utils/gpx'; export type ILatLng = { lat: number; diff --git a/src/redux/store.ts b/src/redux/store.ts index 377c853..6da5577 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -4,13 +4,13 @@ import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import createSagaMiddleware from 'redux-saga'; -import { userReducer, IRootReducer } from '$redux/user'; -import { userSaga } from '$redux/user/sagas'; -import { mapSaga } from '$redux/map/sagas'; +import { userReducer, IRootReducer } from '~/redux/user'; +import { userSaga } from '~/redux/user/sagas'; +import { mapSaga } from '~/redux/map/sagas'; import { createBrowserHistory } from 'history'; -import { locationChanged } from '$redux/user/actions'; +import { locationChanged } from '~/redux/user/actions'; import { PersistConfig, Persistor } from "redux-persist/es/types"; -import { map, IMapReducer } from '$redux/map'; +import { map, IMapReducer } from '~/redux/map'; const userPersistConfig: PersistConfig = { key: 'user', diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 14dc609..19d416f 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,7 +1,7 @@ -import { USER_ACTIONS } from '$redux/user/constants'; -import { IUser } from "$constants/auth"; -import { IRootState } from "$redux/user"; -import { IRoute } from '$redux/map/types'; +import { USER_ACTIONS } from '~/redux/user/constants'; +import { IUser } from "~/constants/auth"; +import { IRootState } from "~/redux/user"; +import { IRoute } from '~/redux/map/types'; export const setUser = (user: IUser) => ({ type: USER_ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: USER_ACTIONS.USER_LOGOUT }); diff --git a/src/redux/user/handlers.ts b/src/redux/user/handlers.ts index 271687d..8d9cba9 100644 --- a/src/redux/user/handlers.ts +++ b/src/redux/user/handlers.ts @@ -1,7 +1,7 @@ import { IRootState } from "."; import * as ActionCreators from './actions' -import { TIPS } from "$constants/tips"; -import { TABS } from "$constants/dialogs"; +import { TIPS } from "~/constants/tips"; +import { TABS } from "~/constants/dialogs"; import { USER_ACTIONS } from "./constants"; type UnsafeReturnType = T extends (...args: any[]) => infer R ? R : any; diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 15d1e12..56e177e 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -1,8 +1,8 @@ import { createReducer } from 'reduxsauce'; -import { DEFAULT_USER, IUser } from '$constants/auth'; -import { MODES } from '$constants/modes'; -import { DIALOGS, IDialogs } from '$constants/dialogs'; -import { IStickers } from "$constants/stickers"; +import { DEFAULT_USER, IUser } from '~/constants/auth'; +import { MODES } from '~/constants/modes'; +import { DIALOGS, IDialogs } from '~/constants/dialogs'; +import { IStickers } from "~/constants/stickers"; import { USER_HANDLERS } from './handlers'; export interface IRouteListItem { diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index ce04081..241db78 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -17,7 +17,7 @@ import { getRouteList, modifyRoute, sendRouteStarred, -} from '$utils/api'; +} from '~/utils/api'; import { hideRenderer, searchPutRoutes, @@ -38,7 +38,7 @@ import { setFeature, searchSetTitle, setRouteStarred, -} from '$redux/user/actions'; +} from '~/redux/user/actions'; import { getUrlData, @@ -46,10 +46,10 @@ import { pushLoaderState, pushNetworkInitError, pushPath, -} from '$utils/history'; -import { USER_ACTIONS } from '$redux/user/constants'; -import { MODES } from '$constants/modes'; -import { DEFAULT_USER } from '$constants/auth'; +} from '~/utils/history'; +import { USER_ACTIONS } from '~/redux/user/constants'; +import { MODES } from '~/constants/modes'; +import { DEFAULT_USER } from '~/constants/auth'; import { composeArrows, composeDistMark, @@ -62,18 +62,18 @@ import { getStickersPlacement, getTilePlacement, imageFetcher, -} from '$utils/renderer'; -import { LOGOS } from '$constants/logos'; -import { DIALOGS, TABS } from '$constants/dialogs'; +} from '~/utils/renderer'; +import { LOGOS } from '~/constants/logos'; +import { DIALOGS, TABS } from '~/constants/dialogs'; -import * as ActionCreators from '$redux/user/actions'; -import { downloadGPXTrack, getGPXString } from '$utils/gpx'; -import { Unwrap } from '$utils/middleware'; -import { IState } from '$redux/store'; +import * as ActionCreators from '~/redux/user/actions'; +import { downloadGPXTrack, getGPXString } from '~/utils/gpx'; +import { Unwrap } from '~/utils/middleware'; +import { IState } from '~/redux/store'; import { selectUser, selectUserUser } from './selectors'; -import { mapInitSaga, loadMapSaga, replaceAddressIfItsBusy } from '$redux/map/sagas'; +import { mapInitSaga, loadMapSaga, replaceAddressIfItsBusy } from '~/redux/map/sagas'; import { LatLng } from 'leaflet'; -import { selectMap } from '$redux/map/selectors'; +import { selectMap } from '~/redux/map/selectors'; // const getUser = (state: IState) => state.user.user; // const selectUser = (state: IState) => state.user; diff --git a/src/redux/user/selectors.ts b/src/redux/user/selectors.ts index 7c157c9..4d9e268 100644 --- a/src/redux/user/selectors.ts +++ b/src/redux/user/selectors.ts @@ -1,4 +1,4 @@ -import { IState } from '$redux/store' +import { IState } from '~/redux/store' export const selectUser = (state: IState) => state.user; export const selectUserUser = (state: IState) => state.user.user; diff --git a/src/utils/api.ts b/src/utils/api.ts index 47a3f8b..fdad497 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -1,8 +1,8 @@ import axios from 'axios/index'; -import { API } from '$constants/api'; -import { IRootState, IRouteListItem } from '$redux/user'; -import { IUser } from '$constants/auth'; -import { CLIENT } from '$config/frontend'; +import { API } from '~/constants/api'; +import { IRootState, IRouteListItem } from '~/redux/user'; +import { IUser } from '~/constants/auth'; +import { CLIENT } from '~/config/frontend'; import { LatLngLiteral } from 'leaflet'; import { resultMiddleware, @@ -10,7 +10,7 @@ import { IResultWithStatus, configWithToken, } from './middleware'; -import { IRoute } from '$redux/map/types'; +import { IRoute } from '~/redux/map/types'; const arrayToObject = (array: any[], key: string): {} => array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); diff --git a/src/utils/arrow.ts b/src/utils/arrow.ts index e5439d8..ae52e2a 100644 --- a/src/utils/arrow.ts +++ b/src/utils/arrow.ts @@ -1,6 +1,6 @@ import { divIcon, LatLngLiteral, Marker, marker, DivIcon } from "leaflet"; -const arrow_image = require('$sprites/arrow.svg'); +const arrow_image = require('~/sprites/arrow.svg'); // export const createArrow = (latlng: LatLngLiteral, angle: number): Marker => marker(latlng, { diff --git a/src/utils/history.ts b/src/utils/history.ts index a1ce63f..c23be92 100644 --- a/src/utils/history.ts +++ b/src/utils/history.ts @@ -1,5 +1,5 @@ -import { history } from '$redux/store'; -import {API_RETRY_INTERVAL} from "$constants/api"; +import { history } from '~/redux/store'; +import {API_RETRY_INTERVAL} from "~/constants/api"; interface IUrlData { path: string, diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index e5fff74..650999e 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -1,19 +1,19 @@ -// import { editor } from '$modules/Editor'; -import { COLORS, CLIENT } from '$config/frontend'; +// import { editor } from '~/modules/Editor'; +import { COLORS, CLIENT } from '~/config/frontend'; import saveAs from 'file-saver'; -import { replaceProviderUrl } from '$constants/providers'; -import { STICKERS } from '$constants/stickers'; -import { ILatLng, IRoute } from '$redux/map/types'; -import { IStickerDump } from '$redux/map/types'; -import { IRootState } from '$redux/user'; +import { replaceProviderUrl } from '~/constants/providers'; +import { STICKERS } from '~/constants/stickers'; +import { ILatLng, IRoute } from '~/redux/map/types'; +import { IStickerDump } from '~/redux/map/types'; +import { IRootState } from '~/redux/user'; import { angleBetweenPoints, angleBetweenPointsRad, findDistancePx, middleCoordPx, -} from '$utils/geom'; +} from '~/utils/geom'; import { Point } from 'leaflet'; -import { MainMap } from '$containers/map/Map'; +import { MainMap } from '~/containers/map/Map'; export interface ITilePlacement { minX: number; @@ -215,7 +215,7 @@ export const composeArrows = async ({ points: Point[]; ctx: CanvasRenderingContext2D; }): Promise => { - const image = await imageFetcher(require('$sprites/arrow.svg')); + const image = await imageFetcher(require('~/sprites/arrow.svg')); const distances = points.map( (point, i) => (points[i + 1] && findDistancePx(points[i], points[i + 1])) || 0 diff --git a/src/utils/simplify.ts b/src/utils/simplify.ts index 19f60f0..9e65df1 100644 --- a/src/utils/simplify.ts +++ b/src/utils/simplify.ts @@ -1,5 +1,5 @@ import { Map, LineUtil } from 'leaflet'; -import { ILatLng } from "$redux/map/types"; +import { ILatLng } from "~/redux/map/types"; export const simplify = ({ map, latlngs }: { map: Map, latlngs: ILatLng[] }): ILatLng[] => { const points = []; diff --git a/src/utils/window.ts b/src/utils/window.ts index f5cc23e..8174964 100644 --- a/src/utils/window.ts +++ b/src/utils/window.ts @@ -1,3 +1,3 @@ -import { MOBILE_BREAKPOINT } from '$config/frontend'; +import { MOBILE_BREAKPOINT } from '~/config/frontend'; export const isMobile = (): boolean => (window.innerWidth <= MOBILE_BREAKPOINT); diff --git a/tsconfig.json b/tsconfig.json index d283ce8..48ad582 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,15 +13,7 @@ "isolatedModules": true, "baseUrl": ".", "paths": { - "$components/*": [ "src/components/*" ], - "$containers/*": [ "src/containers/*" ], - "$constants/*": [ "src/constants/*" ], - "$sprites/*": [ "src/sprites/*" ], - "$config/*": [ "./config/*" ], - "$styles/*": [ "src/styles/*" ], - "$redux/*": [ "src/redux/*" ], - "$utils/*": [ "src/utils/*" ], - "$modules/*": [ "src/modules/*" ], + "~/*": [ "src/*" ], "custom_modules/*": [ "src/custom_modules/*" ] diff --git a/webpack.config.js b/webpack.config.js index d05fc22..f91dd0d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,22 +1,15 @@ -// import { CLIENT } from './config/frontend'; const webpack = require('webpack'); const HtmlWebPackPlugin = require('html-webpack-plugin'); -// const FlowWebpackPlugin = require('flow-webpack-plugin'); -// const { version } = require('./package.json'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); -// const WebpackGitHash = require('webpack-git-hash'); const path = require('path'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const WebpackPwaManifest = require('webpack-pwa-manifest'); const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin'); -// import webpack from 'webpack'; -const PWA_CONFIG = require('./config/pwa'); -// const ManifestPlugin = require('webpack-manifest-plugin'); -/* Plugins */ +const PWA_CONFIG = require('./src/config/pwa'); -// const concatPlugin = new webpack.optimize.ModuleConcatenationPlugin(); +/* Plugins */ const htmlPlugin = new HtmlWebPackPlugin({ template: './src/index.html', @@ -35,24 +28,20 @@ const miniCssExractPlugin = new MiniCssExtractPlugin({ const devtool = isDevelopment ? 'cheap-module-eval-source-map' : 'source-map'; -// const flowPlugin = new FlowWebpackPlugin(); - -// const gitPlugin = new WebpackGitHash(); - - /* Resolve */ const resolve = { alias: { - $components: path.join(__dirname, 'src/components'), - $containers: path.join(__dirname, 'src/containers'), - $constants: path.join(__dirname, 'src/constants'), - $sprites: path.join(__dirname, 'src/sprites'), - $config: path.join(__dirname, './config'), - $styles: path.join(__dirname, 'src/styles'), - $redux: path.join(__dirname, 'src/redux'), - $utils: path.join(__dirname, 'src/utils'), - $modules: path.join(__dirname, 'src/modules'), + // $components: path.join(__dirname, 'src/components'), + // $containers: path.join(__dirname, 'src/containers'), + // $constants: path.join(__dirname, 'src/constants'), + // $sprites: path.join(__dirname, 'src/sprites'), + // $config: path.join(__dirname, './config'), + // $styles: path.join(__dirname, 'src/styles'), + // $redux: path.join(__dirname, 'src/redux'), + // $utils: path.join(__dirname, 'src/utils'), + // $modules: path.join(__dirname, 'src/modules'), + '~': path.join(__dirname, 'src'), }, extensions: ['*', '.ts', '.tsx', '.js', '.jsx', '.json'] }; From 87670770b0a685a6bb540ea5a1ba7fc58f2bd9a6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 10:59:26 +0700 Subject: [PATCH 120/320] moved editor to separate reducer --- src/components/Cursor.tsx | 43 +- src/components/dialogs/CancelDialog.tsx | 16 +- src/components/dialogs/MapListDialog.tsx | 124 +++--- src/components/dialogs/RouterDialog.tsx | 35 +- src/components/dialogs/SaveDialog.tsx | 35 +- src/components/dialogs/ShotPrefetchDialog.tsx | 4 +- src/components/dialogs/StickersDialog.tsx | 61 +-- src/components/dialogs/TitleDialog.tsx | 6 +- src/components/panels/DistanceBar.tsx | 33 +- src/components/panels/EditorDialog.tsx | 37 +- src/components/panels/EditorPanel.tsx | 127 +++--- src/components/panels/TopRightPanel.tsx | 20 +- src/components/panels/UserPanel.tsx | 73 ++-- src/components/renderer/Renderer.tsx | 38 +- src/constants/auth.ts | 2 +- src/containers/App.tsx | 23 +- src/containers/LeftDialog.tsx | 10 +- src/containers/map/Map/index.tsx | 4 +- src/redux/editor/actions.ts | 120 +++++ src/redux/editor/constants.ts | 47 ++ src/redux/editor/handlers.ts | 200 +++++++++ src/redux/editor/index.ts | 85 ++++ src/redux/editor/sagas.ts | 256 +++++++++++ src/redux/editor/selectors.ts | 7 + src/redux/map/actions.ts | 5 + src/redux/map/constants.ts | 1 + src/redux/map/handlers.ts | 7 + src/redux/map/index.ts | 2 + src/redux/map/sagas.ts | 181 ++++---- src/redux/store.ts | 23 +- src/redux/user/actions.ts | 106 ++--- src/redux/user/constants.ts | 68 +-- src/redux/user/handlers.ts | 178 +------- src/redux/user/index.ts | 92 +--- src/redux/user/sagas.ts | 411 ++++++++---------- src/redux/user/selectors.ts | 6 +- src/utils/format.ts | 5 +- tsconfig.json | 3 + 38 files changed, 1425 insertions(+), 1069 deletions(-) create mode 100644 src/redux/editor/actions.ts create mode 100644 src/redux/editor/constants.ts create mode 100644 src/redux/editor/handlers.ts create mode 100644 src/redux/editor/index.ts create mode 100644 src/redux/editor/sagas.ts create mode 100644 src/redux/editor/selectors.ts diff --git a/src/components/Cursor.tsx b/src/components/Cursor.tsx index 1cf5707..4f5b114 100644 --- a/src/components/Cursor.tsx +++ b/src/components/Cursor.tsx @@ -1,17 +1,18 @@ import React from 'react'; import { Icon } from '~/components/panels/Icon'; import { MODES } from '~/constants/modes'; -import { IStickerPack, STICKERS } from '~/constants/stickers'; +import { STICKERS } from '~/constants/stickers'; import { StickerIcon } from '~/components/StickerIcon'; -import { IRootReducer } from '~/redux/user'; +import { connect } from 'react-redux'; +import { selectEditor } from '~/redux/editor/selectors' -interface Props { - mode: IRootReducer['mode'], - sticker: string, - set: keyof IStickerPack, -} +const mapStateToProps = state => ({ + editor: selectEditor +}); -export class Cursor extends React.PureComponent { +const mapDispatchToProps = {}; + +class CursorUnconnected extends React.PureComponent { componentDidMount() { window.addEventListener('mousemove', this.moveCursor); } @@ -27,15 +28,27 @@ export class Cursor extends React.PureComponent { cursor: HTMLElement = null; render() { - const { mode, set, sticker } = this.props; - const activeSticker = (sticker && set && STICKERS[set] && STICKERS[set].layers[sticker]); + const { + editor: { mode, set, sticker }, + } = this.props; + + const activeSticker = sticker && set && STICKERS[set] && STICKERS[set].layers[sticker]; return ( -
      { this.cursor = el; }}> - { mode === MODES.ROUTER && } - { mode === MODES.POLY && } - { mode === MODES.STICKERS && activeSticker && } +
      { + this.cursor = el; + }} + > + {mode === MODES.ROUTER && } + {mode === MODES.POLY && } + {mode === MODES.STICKERS && activeSticker && }
      ); } -}; +} + +const Cursor = connect()(CursorUnconnected); + +export { Cursor } \ No newline at end of file diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index d2aa630..ef01f87 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -2,21 +2,23 @@ import React from 'react'; import { MODES } from '~/constants/modes'; import { Icon } from '~/components/panels/Icon'; -import { setMode, stopEditing } from "~/redux/user/actions"; +import { editorSetMode, editorStopEditing } from '~/redux/editor/actions'; -type Props = { - stopEditing: typeof stopEditing, - setMode: typeof setMode, - width: number, +const mapStateToProps = () => ({}); +const mapDispatchToProps = { + editorSetMode, + editorStopEditing, }; +type Props = ReturnType & typeof mapDispatchToProps & { width?: number }; + export class CancelDialog extends React.Component { cancel = () => { - this.props.stopEditing(); + this.props.editorStopEditing(); }; proceed = () => { - this.props.setMode(MODES.NONE); + this.props.editorSetMode(MODES.NONE); }; render() { diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index fb35991..bc6328b 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -6,12 +6,14 @@ import { searchSetDistance, searchSetTitle, searchSetTab, - setDialogActive, mapsLoadMore, dropRoute, modifyRoute, toggleRouteStarred, } from '~/redux/user/actions'; + +import { editorSetDialogActive } from '~/redux/editor/actions'; + import { isMobile } from '~/utils/window'; import classnames from 'classnames'; @@ -19,28 +21,60 @@ import Range from 'rc-slider/lib/Range'; import { TABS, TABS_TITLES } from '~/constants/dialogs'; import { Icon } from '~/components/panels/Icon'; import { pushPath } from '~/utils/history'; -import { IRootState, IRouteListItem } from '~/redux/user'; +import { IRouteListItem } from '~/redux/user'; import { ROLES } from '~/constants/auth'; import { IState } from '~/redux/store'; -export interface IMapListDialogProps extends IRootState { - marks: { [x: number]: string }; - routes_sorted: Array; - routes: IRootState['routes']; - ready: IRootState['ready']; - role: IRootState['user']['role']; - mapsLoadMore: typeof mapsLoadMore; - searchSetDistance: typeof searchSetDistance; - searchSetTitle: typeof searchSetTitle; - searchSetTab: typeof searchSetTab; - setDialogActive: typeof setDialogActive; - dropRoute: typeof dropRoute; - modifyRoute: typeof modifyRoute; - toggleRouteStarred: typeof toggleRouteStarred; -} +const mapStateToProps = ({ + editor: { editing }, + user: { + routes, + user: { role }, + }, +}: IState) => { + if (routes.filter.max >= 9999) { + return { + routes, + editing, + marks: {}, + ready: false, + role, + }; + } -export interface IMapListDialogState { + return { + role, + routes, + editing, + ready: true, + marks: [...new Array(Math.floor((routes.filter.max - routes.filter.min) / 25) + 1)].reduce( + (obj, el, i) => ({ + ...obj, + [routes.filter.min + i * 25]: ` ${routes.filter.min + i * 25}${ + routes.filter.min + i * 25 >= 200 ? '+' : '' + } + `, + }), + {} + ), + }; +}; + +const mapDispatchToProps = { + searchSetDistance, + searchSetTitle, + searchSetTab, + editorSetDialogActive, + mapsLoadMore, + dropRoute, + modifyRoute, + toggleRouteStarred, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {} + +export interface State { menu_target: IRouteListItem['address']; editor_target: IRouteListItem['address']; @@ -48,7 +82,7 @@ export interface IMapListDialogState { is_dropping: boolean; } -class MapListDialogUnconnected extends React.Component { +class MapListDialogUnconnected extends React.Component { state = { menu_target: null, editor_target: null, @@ -92,14 +126,11 @@ class MapListDialogUnconnected extends React.Component { - if (isMobile()) this.props.setDialogActive(false); + if (isMobile()) this.props.editorSetDialogActive(false); - // pushPath(`/${_id}/${this.props.editing ? 'edit' : ''}`); this.stopEditing(); pushPath(`/${_id}`); - - // pushPath(`/${_id}/${this.props.editing ? 'edit' : ''}`); }; onScroll = (e: { @@ -148,7 +179,7 @@ class MapListDialogUnconnected extends React.Component { - if (routes.filter.max >= 9999) { - return { - routes, - editing, - marks: {}, - ready: false, - role, - }; - } - - return { - role, - routes, - editing, - ready: true, - marks: [...new Array(Math.floor((routes.filter.max - routes.filter.min) / 25) + 1)].reduce( - (obj, el, i) => ({ - ...obj, - [routes.filter.min + i * 25]: ` ${routes.filter.min + i * 25}${ - routes.filter.min + i * 25 >= 200 ? '+' : '' - } - `, - }), - {} - ), - }; -}; - -const mapDispatchToProps = { - searchSetDistance, - searchSetTitle, - searchSetTab, - setDialogActive, - mapsLoadMore, - dropRoute, - modifyRoute, - toggleRouteStarred, -}; const MapListDialog = connect(mapStateToProps, mapDispatchToProps)(MapListDialogUnconnected); diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index adaa3bc..a362d9e 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -1,9 +1,6 @@ import React from 'react'; import { Icon } from '~/components/panels/Icon'; -import { - routerCancel as routerCancelAction, - routerSubmit as routerSubmitAction, -} from "~/redux/user/actions"; +import * as EDITOR_ACTIONS from '~/redux/editor/actions' import classnames from "classnames"; type Props = { @@ -11,11 +8,11 @@ type Props = { width: number, is_routing: boolean, - routerCancel: typeof routerCancelAction, - routerSubmit: typeof routerSubmitAction, + editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel, + editorRouterSubmit: typeof EDITOR_ACTIONS.editorRouterSubmit, } -const noPoints = ({ routerCancel }: { routerCancel: typeof routerCancelAction }) => ( +const noPoints = ({ editorRouterCancel }: { editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel }) => (
      @@ -28,7 +25,7 @@ const noPoints = ({ routerCancel }: { routerCancel: typeof routerCancelAction })
      -
      +
      Отмена
      @@ -36,7 +33,7 @@ const noPoints = ({ routerCancel }: { routerCancel: typeof routerCancelAction }) ); -const firstPoint = ({ routerCancel }: { routerCancel: typeof routerCancelAction }) => ( +const firstPoint = ({ editorRouterCancel }: { editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel }) => (
      @@ -47,7 +44,7 @@ const firstPoint = ({ routerCancel }: { routerCancel: typeof routerCancelAction
      -
      +
      Отмена
      @@ -56,10 +53,10 @@ const firstPoint = ({ routerCancel }: { routerCancel: typeof routerCancelAction ); const draggablePoints = ({ - routerCancel, routerSubmit + editorRouterCancel, editorRouterSubmit }: { - routerCancel: typeof routerCancelAction, - routerSubmit: typeof routerSubmitAction, + editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel, + editorRouterSubmit: typeof EDITOR_ACTIONS.editorRouterSubmit, }) => (
      @@ -71,10 +68,10 @@ const draggablePoints = ({
      -
      +
      Отмена
      -
      +
      Применить
      @@ -83,13 +80,13 @@ const draggablePoints = ({ ); export const RouterDialog = ({ - routerPoints, routerCancel, routerSubmit, width, is_routing, + routerPoints, editorRouterCancel, editorRouterSubmit, width, is_routing, }: Props) => (
      - {!routerPoints && noPoints({ routerCancel })} - {routerPoints === 1 && firstPoint({ routerCancel })} - {routerPoints >= 2 && draggablePoints({ routerCancel, routerSubmit })} + {!routerPoints && noPoints({ editorRouterCancel })} + {routerPoints === 1 && firstPoint({ editorRouterCancel })} + {routerPoints >= 2 && draggablePoints({ editorRouterCancel, editorRouterSubmit })}
      ); diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index 67fb1ec..22ef43a 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -10,17 +10,17 @@ import classnames from 'classnames'; import ExpandableTextarea from 'react-expandable-textarea'; import { connect } from 'react-redux'; import { selectMap } from '~/redux/map/selectors'; -import { selectUser } from '~/redux/user/selectors'; -import * as USER_ACTIONS from '~/redux/user/actions'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import { selectEditor } from '~/redux/editor/selectors'; const mapStateToProps = state => ({ map: selectMap(state), - user: selectUser(state), + editor: selectEditor(state), }); const mapDispatchToProps = { - setMode: USER_ACTIONS.setMode, - sendSaveRequest: USER_ACTIONS.sendSaveRequest, + editorSetMode: EDITOR_ACTIONS.editorSetMode, + editorSendSaveRequest: EDITOR_ACTIONS.editorSendSaveRequest, }; type Props = ReturnType & typeof mapDispatchToProps & { width: number }; @@ -33,14 +33,14 @@ interface State { } class SaveDialogUnconnected extends React.Component { - constructor(props) { + constructor(props: Props) { super(props); this.state = { - address: props.address || '', - title: props.title || '', - is_public: props.is_public || false, - description: props.description || '', + address: props.map.address || '', + title: props.map.title || '', + is_public: props.map.is_public || false, + description: props.map.description || '', }; } @@ -57,16 +57,18 @@ class SaveDialogUnconnected extends React.Component { setTitle = ({ target: { value } }) => this.setState({ title: (value && value.substr(0, 64)) || '' }); + setAddress = ({ target: { value } }) => this.setState({ address: (value && value.substr(0, 32)) || '' }); + setDescription = ({ target: { value } }) => this.setState({ description: (value && value.substr(0, 256)) || '' }); - sendSaveRequest = (e, force = false) => { + editorSendSaveRequest = (e, force = false) => { const { title, is_public, description } = this.state; const address = this.getAddress(); - this.props.sendSaveRequest({ + this.props.editorSendSaveRequest({ title, address, force, @@ -74,9 +76,10 @@ class SaveDialogUnconnected extends React.Component { description, }); }; - forceSaveRequest = e => this.sendSaveRequest(e, true); - cancelSaving = () => this.props.setMode(MODES.NONE); + forceSaveRequest = e => this.editorSendSaveRequest(e, true); + + cancelSaving = () => this.props.editorSetMode(MODES.NONE); onCopy = e => { e.preventDefault(); @@ -91,7 +94,7 @@ class SaveDialogUnconnected extends React.Component { render() { const { title, is_public, description } = this.state; const { - user: { save_error, save_finished, save_overwriting, save_loading }, + editor: { save_error, save_finished, save_overwriting, save_loading }, width, } = this.props; const { host, protocol } = getUrlData(); @@ -157,7 +160,7 @@ class SaveDialogUnconnected extends React.Component {
      )} {!save_finished && !save_overwriting && ( -
      +
      Сохранить
      )} diff --git a/src/components/dialogs/ShotPrefetchDialog.tsx b/src/components/dialogs/ShotPrefetchDialog.tsx index a03eb5e..d9aa82f 100644 --- a/src/components/dialogs/ShotPrefetchDialog.tsx +++ b/src/components/dialogs/ShotPrefetchDialog.tsx @@ -1,9 +1,9 @@ import React from 'react'; import { connect } from 'react-redux'; -import { selectUserRenderer } from '~/redux/user/selectors'; +import { selectEditorRenderer } from '~/redux/editor/selectors'; const mapStateToProps = state => ({ - renderer: selectUserRenderer(state), + renderer: selectEditorRenderer(state), }); type Props = ReturnType & {}; diff --git a/src/components/dialogs/StickersDialog.tsx b/src/components/dialogs/StickersDialog.tsx index 97d27c8..9506678 100644 --- a/src/components/dialogs/StickersDialog.tsx +++ b/src/components/dialogs/StickersDialog.tsx @@ -1,39 +1,44 @@ -// @flow import React from 'react'; import { STICKERS } from '~/constants/stickers'; -import { setActiveSticker as setActiveStickerAction } from "~/redux/user/actions"; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import { connect } from 'react-redux'; -interface Props { - setActiveSticker: typeof setActiveStickerAction, - width: number, -} +const mapStateToProps = () => ({}); +const mapDispatchToProps = { + editorSetActiveSticker: EDITOR_ACTIONS.editorSetActiveSticker, +}; -export const StickersDialog = ({ setActiveSticker, width }: Props) => ( +type Props = ReturnType & + typeof mapDispatchToProps & { + width: number; + }; + +const StickersDialogUnconnected = ({ editorSetActiveSticker, width }: Props) => (
      - { - Object.keys(STICKERS).map(set => ( -
      -
      {STICKERS[set].title || null}
      -
      - { - Object.keys(STICKERS[set].layers).map(sticker => ( -
      setActiveSticker({ set, sticker })} - /> - )) - } -
      + {Object.keys(STICKERS).map(set => ( +
      +
      {STICKERS[set].title || null}
      +
      + {Object.keys(STICKERS[set].layers).map(sticker => ( +
      editorSetActiveSticker({ set, sticker })} + /> + ))}
      - )) - } +
      + ))}
      ); + +const StickersDialog = connect(mapStateToProps, mapDispatchToProps)(StickersDialogUnconnected); + +export { StickersDialog }; \ No newline at end of file diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index 50c3464..75fd328 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -5,11 +5,11 @@ import classnames from 'classnames'; import { getStyle } from '~/utils/dom'; import { nearestInt } from '~/utils/geom'; import { parseDesc } from '~/utils/format'; -import { selectUser } from '~/redux/user/selectors'; import { selectMap } from '~/redux/map/selectors'; +import { selectEditor } from '~/redux/editor/selectors'; const mapStateToProps = state => ({ - user: selectUser(state), + editor: selectEditor(state), map: selectMap(state), }); @@ -80,7 +80,7 @@ export class TitleDialogUnconnected extends React.PureComponent { render() { const { - user: { editing }, + editor: { editing }, map: { title, description }, } = this.props; const { raised, height, height_raised } = this.state; diff --git a/src/components/panels/DistanceBar.tsx b/src/components/panels/DistanceBar.tsx index edcf43c..866537d 100644 --- a/src/components/panels/DistanceBar.tsx +++ b/src/components/panels/DistanceBar.tsx @@ -1,20 +1,25 @@ -// flow import React from 'react'; import { toHours } from '~/utils/format'; import { Icon } from '~/components/panels/Icon'; import { connect } from 'react-redux'; -// import Slider from 'rc-slider'; import Slider from 'rc-slider/lib/Slider'; -import { bindActionCreators } from 'redux'; -import { setSpeed } from '~/redux/user/actions'; -import { IRootState } from "~/redux/user"; +import { editorSetSpeed } from '~/redux/editor/actions'; import { Tooltip } from "~/components/panels/Tooltip"; import { isMobile } from "~/utils/window"; +import { IState } from '~/redux/store'; -interface Props extends IRootState { - setSpeed: typeof setSpeed, +function mapStateToProps(state) { + const { + editor: { distance, estimated, speed }, + }: IState = state; + + return { distance, estimated, speed }; } +const mapDispatchToProps = { editorSetSpeed }; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + interface State { dialogOpened: boolean, } @@ -68,7 +73,7 @@ class Component extends React.PureComponent { min={min} max={max} step={step} - onChange={this.props.setSpeed} + onChange={this.props.editorSetSpeed} defaultValue={15} value={speed} marks={marks} @@ -81,18 +86,6 @@ class Component extends React.PureComponent { } } -function mapStateToProps(state) { - const { - user: { distance, estimated, speed }, - } = state; - - return { distance, estimated, speed }; -} - -const mapDispatchToProps = dispatch => bindActionCreators({ - setSpeed, -}, dispatch); - export const DistanceBar = connect( mapStateToProps, mapDispatchToProps diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index 0ade17d..3ed02b0 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -12,29 +12,13 @@ import { connect } from 'react-redux'; import { ProviderDialog } from '~/components/dialogs/ProviderDialog'; import { ShotPrefetchDialog } from '~/components/dialogs/ShotPrefetchDialog'; -import { selectUserMode } from '~/redux/user/selectors'; +import { selectEditorMode } from '~/redux/editor/selectors'; -const mapStateToProps = state => ({ mode: selectUserMode(state) }); - -// const mapDispatchToProps = dispatch => bindActionCreators({ -// routerCancel: USER_ACTIONS.routerCancel, -// routerSubmit: USER_ACTIONS.routerSubmit, -// setActiveSticker: USER_ACTIONS.setActiveSticker, -// clearStickers: USER_ACTIONS.clearStickers, -// clearPoly: USER_ACTIONS.clearPoly, -// clearAll: USER_ACTIONS.clearAll, -// clearCancel: USER_ACTIONS.clearCancel, -// stopEditing: USER_ACTIONS.stopEditing, -// setEditing: USER_ACTIONS.setEditing, -// setMode: USER_ACTIONS.setMode, -// sendSaveRequest: USER_ACTIONS.sendSaveRequest, -// changeProvider: USER_ACTIONS.changeProvider, -// mapSetLogo: MAP_ACTIONS.mapSetLogo, -// }, dispatch); +const mapStateToProps = state => ({ mode: selectEditorMode(state) }); type Props = ReturnType & { - width: number; - }; + width: number; +}; const DIALOG_CONTENTS: { [x: string]: any } = { [MODES.ROUTER]: RouterDialog, @@ -47,12 +31,9 @@ const DIALOG_CONTENTS: { [x: string]: any } = { [MODES.SHOT_PREFETCH]: ShotPrefetchDialog, }; -export const Component = (props: Props) => - props.mode && DIALOG_CONTENTS[props.mode] - ? createElement(DIALOG_CONTENTS[props.mode]) - : null; +const EditorDialogUnconnected = (props: Props) => + props.mode && DIALOG_CONTENTS[props.mode] ? createElement(DIALOG_CONTENTS[props.mode]) : null; -export const EditorDialog = connect( - mapStateToProps - // mapDispatchToProps -)(Component); +const EditorDialog = connect(mapStateToProps)(EditorDialogUnconnected); + +export { EditorDialog }; diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index add6782..ef4bf4d 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { PureComponent } from 'react'; import { MODES } from '~/constants/modes'; import classnames from 'classnames'; @@ -6,21 +6,34 @@ import { Icon } from '~/components/panels/Icon'; import { EditorDialog } from '~/components/panels/EditorDialog'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; -import { setMode, startEditing, stopEditing, takeAShot, keyPressed } from '~/redux/user/actions'; -import { IRootState } from "~/redux/user"; -import { Tooltip } from "~/components/panels/Tooltip"; +import { + editorSetMode, + editorStartEditing, + editorStopEditing, + editorTakeAShot, + editorKeyPressed, +} from '~/redux/editor/actions'; +import { Tooltip } from '~/components/panels/Tooltip'; +import { IState } from '~/redux/store'; +import { selectEditor } from '~/redux/editor/selectors'; -interface Props extends IRootState { - routing: IRootState['features']['routing'], - setMode: typeof setMode, - startEditing: typeof startEditing, - stopEditing: typeof stopEditing, - keyPressed: EventListenerOrEventListenerObject, -} +const mapStateToProps = (state: IState) => ({ + editor: selectEditor(state), +}); -class Component extends React.PureComponent { +const mapDispatchToProps = { + editorSetMode, + editorStartEditing, + editorStopEditing, + editorTakeAShot, + editorKeyPressed, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + +class EditorPanelUnconnected extends PureComponent { componentDidMount() { - window.addEventListener('keydown', this.props.keyPressed); + window.addEventListener('keydown', this.props.editorKeyPressed as any); const obj = document.getElementById('control-dialog'); const { width } = this.panel.getBoundingClientRect(); @@ -33,29 +46,38 @@ class Component extends React.PureComponent { panel: HTMLElement = null; componentWillUnmount() { - window.removeEventListener('keydown', this.props.keyPressed); + window.removeEventListener('keydown', this.props.editorKeyPressed as any); } - startPolyMode = () => this.props.setMode(MODES.POLY); - startStickerMode = () => this.props.setMode(MODES.STICKERS_SELECT); - startRouterMode = () => this.props.setMode(MODES.ROUTER); - startTrashMode = () => this.props.setMode(MODES.TRASH); + startPolyMode = () => this.props.editorSetMode(MODES.POLY); + startStickerMode = () => this.props.editorSetMode(MODES.STICKERS_SELECT); + startRouterMode = () => this.props.editorSetMode(MODES.ROUTER); + startTrashMode = () => this.props.editorSetMode(MODES.TRASH); startSaveMode = () => { // if (!this.props.changed) return; - this.props.setMode(MODES.SAVE); + this.props.editorSetMode(MODES.SAVE); }; render() { const { - mode, changed, editing, routing, + editor: { + mode, + changed, + editing, + features: { routing }, + }, } = this.props; return (
      -
      { this.panel = el; }}> +
      { + this.panel = el; + }} + >
      - { - routing && + {routing && ( - } - + )} -
      @@ -99,10 +121,7 @@ class Component extends React.PureComponent {
      - @@ -114,59 +133,21 @@ class Component extends React.PureComponent {
      -
      -
      - - +
      ); } } -function mapStateToProps(state) { - const { - user: { - editing, - mode, - changed, - features: { - routing, - } - }, - } = state; - - return { - editing, - mode, - changed, - routing, - }; -} - -const mapDispatchToProps = dispatch => bindActionCreators({ - setMode, - // setLogo, - startEditing, - stopEditing, - takeAShot, - keyPressed, -}, dispatch); - -export const EditorPanel = connect( - mapStateToProps, - mapDispatchToProps -)(Component); +export const EditorPanel = connect(mapStateToProps, mapDispatchToProps)(EditorPanelUnconnected); diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index 63a7346..9394433 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -1,36 +1,34 @@ -// flow import React, { useCallback } from 'react'; import { Icon } from '~/components/panels/Icon'; import { PROVIDERS } from '~/constants/providers'; import { LOGOS } from '~/constants/logos'; -import * as USER_ACTIONS from '~/redux/user/actions'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import { connect } from 'react-redux'; import { MODES } from '~/constants/modes'; -import { IRootState } from '~/redux/user'; import { Tooltip } from '~/components/panels/Tooltip'; import { selectMap } from '~/redux/map/selectors'; -import { selectUser } from '~/redux/user/selectors'; +import { selectEditor } from '~/redux/editor/selectors'; const mapStateToProps = state => ({ map: selectMap(state), - user: selectUser(state), + editor: selectEditor(state), }); const mapDispatchToProps = { - setMode: USER_ACTIONS.setMode, + editorSetMode: EDITOR_ACTIONS.editorSetMode, }; type Props = ReturnType & typeof mapDispatchToProps & {}; const TopRightPanelUnconnected = ({ map: { provider, logo }, - user: { markers_shown, editing }, - setMode, + editor: { markers_shown, editing }, + editorSetMode, }: Props) => { - const startProviderMode = useCallback(() => setMode(MODES.PROVIDER), [setMode]); - const startLogoMode = useCallback(() => setMode(MODES.LOGO), [setMode]); - const clearMode = useCallback(() => setMode(MODES.NONE), [setMode]); + const startProviderMode = useCallback(() => editorSetMode(MODES.PROVIDER), [editorSetMode]); + const startLogoMode = useCallback(() => editorSetMode(MODES.LOGO), [editorSetMode]); + const clearMode = useCallback(() => editorSetMode(MODES.NONE), [editorSetMode]); return (
      diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index a138747..b39d60a 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -4,35 +4,41 @@ import { GuestButton } from '~/components/user/GuestButton'; import { DEFAULT_USER, ROLES } from '~/constants/auth'; import { UserButton } from '~/components/user/UserButton'; import { UserMenu } from '~/components/user/UserMenu'; +import { setUser, userLogout, gotVkUser, openMapDialog } from '~/redux/user/actions'; import { - setUser, - userLogout, - takeAShot, - setDialog, - gotVkUser, - setDialogActive, - openMapDialog, - getGPXTrack, -} from '~/redux/user/actions'; + editorTakeAShot, + editorSetDialog, + editorSetDialogActive, + editorGetGPXTrack, +} from '~/redux/editor/actions'; import { connect } from 'react-redux'; import { Icon } from '~/components/panels/Icon'; import classnames from 'classnames'; import { CLIENT } from '~/config/frontend'; import { DIALOGS, TABS } from '~/constants/dialogs'; -import { IRootState } from '~/redux/user'; import { Tooltip } from '~/components/panels/Tooltip'; import { TitleDialog } from '~/components/dialogs/TitleDialog'; -interface Props extends IRootState { - userLogout: typeof userLogout; - setDialog: typeof setDialog; - setDialogActive: typeof setDialogActive; - gotVkUser: typeof gotVkUser; - takeAShot: typeof takeAShot; - openMapDialog: typeof openMapDialog; - getGPXTrack: typeof getGPXTrack; -} +const mapStateToProps = ({ user: { user }, editor: { dialog, dialog_active, is_empty } }) => ({ + dialog, + dialog_active, + user, + is_empty, +}); + +const mapDispatchToProps = { + setUser, + userLogout, + editorTakeAShot, + editorSetDialog, + gotVkUser, + editorSetDialogActive, + openMapDialog, + editorGetGPXTrack, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; interface State { menuOpened: boolean; @@ -84,8 +90,8 @@ export class UserPanelUnconnected extends PureComponent { openAppInfoDialog = () => { this.setMenuOpened(); - this.props.setDialog(DIALOGS.APP_INFO); - this.props.setDialogActive(this.props.dialog !== DIALOGS.APP_INFO); + this.props.editorSetDialog(DIALOGS.APP_INFO); + this.props.editorSetDialogActive(this.props.dialog !== DIALOGS.APP_INFO); }; openOauthFrame = () => { @@ -143,7 +149,7 @@ export class UserPanelUnconnected extends PureComponent {
      - @@ -153,7 +159,10 @@ export class UserPanelUnconnected extends PureComponent {
      - @@ -166,24 +175,6 @@ export class UserPanelUnconnected extends PureComponent { } } -const mapStateToProps = ({ user: { dialog, dialog_active, user, is_empty } }) => ({ - dialog, - dialog_active, - user, - is_empty, -}); - -const mapDispatchToProps = { - setUser, - userLogout, - takeAShot, - setDialog, - gotVkUser, - setDialogActive, - openMapDialog, - getGPXTrack, -}; - const UserPanel = connect(mapStateToProps, mapDispatchToProps)(UserPanelUnconnected); export { UserPanel }; diff --git a/src/components/renderer/Renderer.tsx b/src/components/renderer/Renderer.tsx index b1af77b..a245da5 100644 --- a/src/components/renderer/Renderer.tsx +++ b/src/components/renderer/Renderer.tsx @@ -1,22 +1,26 @@ import React from 'react'; -import { hideRenderer, cropAShot } from '~/redux/user/actions'; -import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import Croppr from 'croppr'; import 'croppr/dist/croppr.css'; import { LOGOS } from '~/constants/logos'; import { RendererPanel } from '~/components/panels/RendererPanel'; -import { IRootState } from "~/redux/user"; -import { IRoute } from '~/redux/map/types'; +import { selectEditor } from '~/redux/editor/selectors'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import { selectMap } from '~/redux/map/selectors'; -type Props = { - data: IRootState['renderer']['data'], - logo: IRoute['logo'], - hideRenderer: typeof hideRenderer, - cropAShot: typeof cropAShot, +const mapStateToProps = state => ({ + editor: selectEditor(state), + map: selectMap(state), +}); + +const mapDispatchToProps = { + editorHideRenderer: EDITOR_ACTIONS.editorHideRenderer, + editorCropAShot: EDITOR_ACTIONS.editorCropAShot, }; +type Props = ReturnType & typeof mapDispatchToProps & {}; + type State = { opacity: number, }; @@ -47,7 +51,7 @@ class Component extends React.Component { this.logo.style.transform = `scale(${scale})`; this.logoImg = document.createElement('img'); - if (this.props.logo && LOGOS[this.props.logo][1]) this.logoImg.src = LOGOS[this.props.logo][1]; + if (this.props.map.logo && LOGOS[this.props.map.logo][1]) this.logoImg.src = LOGOS[this.props.map.logo][1]; this.logo.append(this.logoImg); regionEl.append(this.logo); @@ -58,10 +62,10 @@ class Component extends React.Component { image: HTMLImageElement; logoImg: HTMLImageElement; - getImage = () => this.props.cropAShot(this.croppr.getValue()); + getImage = () => this.props.editorCropAShot(this.croppr.getValue()); render() { - const { data } = this.props; + const { data } = this.props.editor.renderer; const { opacity } = this.state; const { innerWidth, innerHeight } = window; const padding = 30; @@ -95,7 +99,7 @@ class Component extends React.Component {
      @@ -103,12 +107,4 @@ class Component extends React.Component { } } - -const mapStateToProps = state => ({ ...state.user.renderer, logo: state.user.logo }); - -const mapDispatchToProps = dispatch => bindActionCreators({ - hideRenderer, - cropAShot, -}, dispatch); - export const Renderer = connect(mapStateToProps, mapDispatchToProps)(Component); diff --git a/src/constants/auth.ts b/src/constants/auth.ts index 6f44ea0..8e011b8 100644 --- a/src/constants/auth.ts +++ b/src/constants/auth.ts @@ -11,7 +11,7 @@ export interface IUser { role: IRoles[keyof IRoles]; routes: {}; success: boolean; - id?: number; + id?: string; uid: string; token?: string; photo: string; diff --git a/src/containers/App.tsx b/src/containers/App.tsx index cc7c326..e7c7c85 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { EditorPanel } from '~/components/panels/EditorPanel'; @@ -9,8 +8,7 @@ import { bindActionCreators } from 'redux'; import { hot } from 'react-hot-loader'; import { Renderer } from '~/components/renderer/Renderer'; -import { hideRenderer, setDialogActive } from '~/redux/user/actions'; -import { Cursor } from '~/components/Cursor'; +import { editorHideRenderer, editorSetDialogActive } from '~/redux/editor/actions'; import { LeftDialog } from '~/containers/LeftDialog'; import { TopLeftPanel } from '~/components/panels/TopLeftPanel'; import { TopRightPanel } from '~/components/panels/TopRightPanel'; @@ -19,18 +17,19 @@ import { IStickerPack } from '~/constants/stickers'; import { IDialogs } from '~/constants/dialogs'; import { Map } from '~/containers/map/Map'; -import { IRootReducer } from '~/redux/user'; +import { IEditorState } from '~/redux/editor'; +import { IState } from '~/redux/store'; type Props = { sticker: string; renderer_active: boolean; - mode: IRootReducer['mode']; + mode: IEditorState['mode']; dialog: keyof IDialogs; dialog_active: boolean; set: keyof IStickerPack; - hideRenderer: typeof hideRenderer; - setDialogActive: typeof setDialogActive; + editorHideRenderer: typeof editorHideRenderer; + editorSetDialogActive: typeof editorSetDialogActive; }; const Component = (props: Props) => ( @@ -45,26 +44,26 @@ const Component = (props: Props) => ( - {props.renderer_active && } + {props.renderer_active && }
      ); const mapStateToProps = ({ - user: { + editor: { mode, dialog, dialog_active, renderer, activeSticker: { sticker = null, set = null }, }, -}) => ({ +}: IState) => ({ renderer_active: renderer.renderer_active, mode, dialog, @@ -74,5 +73,5 @@ const mapStateToProps = ({ }); const mapDispatchToProps = dispatch => - bindActionCreators({ hideRenderer, setDialogActive }, dispatch); + bindActionCreators({ editorHideRenderer, editorSetDialogActive }, dispatch); export const App = connect(mapStateToProps, mapDispatchToProps)(hot(module)(Component)); diff --git a/src/containers/LeftDialog.tsx b/src/containers/LeftDialog.tsx index 06a84a8..f22a993 100644 --- a/src/containers/LeftDialog.tsx +++ b/src/containers/LeftDialog.tsx @@ -4,12 +4,12 @@ import classnames from 'classnames'; import { AppInfoDialog } from '~/components/dialogs/AppInfoDialog'; import { Icon } from '~/components/panels/Icon'; import { MapListDialog } from '~/components/dialogs/MapListDialog'; -import * as USER_ACTIONS from '~/redux/user/actions'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; interface Props { dialog: keyof IDialogs; dialog_active: Boolean; - setDialogActive: typeof USER_ACTIONS.setDialogActive; + editorSetDialogActive: typeof EDITOR_ACTIONS.editorSetDialogActive; } const LEFT_DIALOGS = { @@ -17,7 +17,7 @@ const LEFT_DIALOGS = { [DIALOGS.APP_INFO]: AppInfoDialog, }; -const LeftDialog = ({ dialog, dialog_active, setDialogActive }: Props) => ( +const LeftDialog = ({ dialog, dialog_active, editorSetDialogActive }: Props) => ( {Object.keys(LEFT_DIALOGS).map(item => (
      ( > {dialog && LEFT_DIALOGS[item] && createElement(LEFT_DIALOGS[item], {})} -
      setDialogActive(false)}> +
      editorSetDialogActive(false)}>
      -
      setDialogActive(false)}> +
      editorSetDialogActive(false)}>
      diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index 7ea4489..2c42cb8 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -12,15 +12,15 @@ import * as MAP_ACTIONS from "~/redux/map/actions"; import { Route } from "~/containers/map/Route"; import { TileLayer } from "~/containers/map/TileLayer"; import { Stickers } from "~/containers/map/Stickers"; -import { selectUserEditing } from '~/redux/user/selectors' import 'leaflet/dist/leaflet.css'; +import { selectEditorEditing } from "~/redux/editor/selectors"; const mapStateToProps = state => ({ provider: selectMapProvider(state), route: selectMapRoute(state), stickers: selectMapStickers(state), - editing: selectUserEditing(state), + editing: selectEditorEditing(state), }); const mapDispatchToProps = { diff --git a/src/redux/editor/actions.ts b/src/redux/editor/actions.ts new file mode 100644 index 0000000..8e72985 --- /dev/null +++ b/src/redux/editor/actions.ts @@ -0,0 +1,120 @@ +import { EDITOR_ACTIONS } from './constants'; +import { IEditorState } from '.'; +import { IRoute } from '../map/types'; +import { KeyboardEvent } from 'react'; + +export const editorSetEditing = (editing: IEditorState['editing']) => ({ + type: EDITOR_ACTIONS.SET_EDITING, + editing, +}); +export const editorSetMode = (mode: IEditorState['mode']) => ({ + type: EDITOR_ACTIONS.SET_MODE, + mode, +}); +export const editorSetDistance = (distance: IEditorState['distance']) => ({ + type: EDITOR_ACTIONS.SET_DISTANCE, + distance, +}); +export const editorSetChanged = (changed: IEditorState['changed']) => ({ + type: EDITOR_ACTIONS.SET_CHANGED, + changed, +}); +export const editorSetSpeed = speed => ({ type: EDITOR_ACTIONS.SET_SPEED, speed }); + +export const editorStartEditing = () => ({ type: EDITOR_ACTIONS.START_EDITING }); +export const editorStopEditing = () => ({ type: EDITOR_ACTIONS.STOP_EDITING }); + +export const editorRouterCancel = () => ({ type: EDITOR_ACTIONS.ROUTER_CANCEL }); +export const editorRouterSubmit = () => ({ type: EDITOR_ACTIONS.ROUTER_SUBMIT }); + +export const editorClearPoly = () => ({ type: EDITOR_ACTIONS.CLEAR_POLY }); +export const editorClearStickers = () => ({ type: EDITOR_ACTIONS.CLEAR_STICKERS }); +export const editorClearAll = () => ({ type: EDITOR_ACTIONS.CLEAR_ALL }); +export const editorClearCancel = () => ({ type: EDITOR_ACTIONS.CLEAR_CANCEL }); + +export const editorSendSaveRequest = (payload: { + title: IRoute['title']; + address: IRoute['address']; + is_public: IRoute['is_public']; + description: IRoute['description']; + force: boolean; +}) => ({ + type: EDITOR_ACTIONS.SEND_SAVE_REQUEST, + ...payload, +}); + +export const editorResetSaveDialog = () => ({ type: EDITOR_ACTIONS.RESET_SAVE_DIALOG }); + +export const editorSetSaveLoading = (save_loading: IEditorState['save_loading']) => ({ + type: EDITOR_ACTIONS.SET_SAVE_LOADING, + save_loading, +}); + +export const editorSetSaveSuccess = (payload: { + address: IRoute['address']; + title: IRoute['address']; + is_public: IRoute['is_public']; + description: IRoute['description']; + + save_error: string; +}) => ({ type: EDITOR_ACTIONS.SET_SAVE_SUCCESS, ...payload }); + +export const editorSetSaveError = (save_error: IEditorState['save_error']) => ({ + type: EDITOR_ACTIONS.SET_SAVE_ERROR, + save_error, +}); +export const editorSetSaveOverwrite = () => ({ type: EDITOR_ACTIONS.SET_SAVE_OVERWRITE }); + +export const editorHideRenderer = () => ({ type: EDITOR_ACTIONS.HIDE_RENDERER }); +export const editorSetRenderer = payload => ({ type: EDITOR_ACTIONS.SET_RENDERER, payload }); +export const editorTakeAShot = () => ({ type: EDITOR_ACTIONS.TAKE_A_SHOT }); +export const editorCropAShot = payload => ({ type: EDITOR_ACTIONS.CROP_A_SHOT, ...payload }); +export const editorSetDialog = dialog => ({ type: EDITOR_ACTIONS.SET_DIALOG, dialog }); +export const editorSetDialogActive = dialog_active => ({ + type: EDITOR_ACTIONS.SET_DIALOG_ACTIVE, + dialog_active, +}); +export const editorSetReady = ready => ({ type: EDITOR_ACTIONS.SET_READY, ready }); + +export const editorGetGPXTrack = () => ({ type: EDITOR_ACTIONS.GET_GPX_TRACK }); +export const editorSetMarkersShown = markers_shown => ({ + type: EDITOR_ACTIONS.SET_MARKERS_SHOWN, + markers_shown, +}); +export const editorSetIsEmpty = is_empty => ({ type: EDITOR_ACTIONS.SET_IS_EMPTY, is_empty }); +export const editorSetFeature = (features: { [x: string]: boolean }) => ({ + type: EDITOR_ACTIONS.SET_FEATURE, + features, +}); + +export const editorSetIsRouting = (is_routing: boolean) => ({ + type: EDITOR_ACTIONS.SET_IS_ROUTING, + is_routing, +}); + +export const editorSetRouterPoints = (routerPoints: IEditorState['routerPoints']) => ({ + type: EDITOR_ACTIONS.SET_ROUTER_POINTS, + routerPoints, +}); + +export const editorSetActiveSticker = (activeSticker: IEditorState['activeSticker']) => ({ + type: EDITOR_ACTIONS.SET_ACTIVE_STICKER, + activeSticker, +}); + +export const editorLocationChanged = location => ({ + type: EDITOR_ACTIONS.LOCATION_CHANGED, + location, +}); + +export const editorKeyPressed = ({ + key, + target: { tagName }, +}: { + key: string; + target: { tagName: string }; +}) => ({ + type: EDITOR_ACTIONS.KEY_PRESSED, + key, + target: tagName, +}); diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts new file mode 100644 index 0000000..d0015a6 --- /dev/null +++ b/src/redux/editor/constants.ts @@ -0,0 +1,47 @@ +const P = 'EDITOR'; + +export const EDITOR_ACTIONS = { + SET_EDITING: `${P}-SET_EDITING`, + SET_MODE: `${P}-SET_MODE`, + SET_DISTANCE: `${P}-SET_DISTANCE`, + SET_CHANGED: `${P}-SET_CHANGED`, + SET_SPEED: `${P}-SET_SPEED`, + SET_ROUTER_POINTS: `${P}-SET_ROUTER_POINTS`, + SET_ACTIVE_STICKER: `${P}-SET_ACTIVE_STICKER`, + START_EDITING: `${P}-START_EDITING`, + STOP_EDITING: `${P}-STOP_EDITING`, + ROUTER_CANCEL: `${P}-ROUTER_CANCEL`, + ROUTER_SUBMIT: `${P}-ROUTER_SUBMIT`, + + CLEAR_POLY: `${P}-CLEAR_POLY`, + CLEAR_STICKERS: `${P}-CLEAR_STICKERS`, + CLEAR_ALL: `${P}-CLEAR_ALL`, + CLEAR_CANCEL: `${P}-CLEAR_CANCEL`, + + SEND_SAVE_REQUEST: `${P}-SEND_SAVE_REQUEST`, + SET_SAVE_LOADING: `${P}-SET_SAVE_LOADING`, + CANCEL_SAVE_REQUEST: `${P}-CANCEL_SAVE_REQUEST`, + RESET_SAVE_DIALOG: `${P}-RESET_SAVE_DIALOG`, + + SET_SAVE_SUCCESS: `${P}-SET_SAVE_SUCCESS`, + SET_SAVE_ERROR: `${P}-SET_SAVE_ERROR`, + SET_SAVE_OVERWRITE: `${P}-SET_SAVE_OVERWRITE`, + + SHOW_RENDERER: `${P}-SHOW_RENDERER`, + HIDE_RENDERER: `${P}-HIDE_RENDERER`, + SET_RENDERER: `${P}-SET_RENDERER`, + TAKE_A_SHOT: `${P}-TAKE_A_SHOT`, + CROP_A_SHOT: `${P}-CROP_A_SHOT`, + + SET_DIALOG: `${P}-SET_DIALOG`, + SET_DIALOG_ACTIVE: `${P}-SET_DIALOG_ACTIVE`, + LOCATION_CHANGED: `${P}-LOCATION_CHANGED`, + SET_READY: `${P}-SET_READY`, + + SET_MARKERS_SHOWN: `${P}-SET_MARKERS_SHOWN`, + GET_GPX_TRACK: `${P}-GET_GPX_TRACK`, + SET_IS_EMPTY: `${P}-SET_IS_EMPTY`, + SET_FEATURE: `${P}-SET_FEATURE`, + SET_IS_ROUTING: `${P}-SET_IS_ROUTING`, + KEY_PRESSED: `${P}-KEY_PRESSED`, +}; diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts new file mode 100644 index 0000000..17257a1 --- /dev/null +++ b/src/redux/editor/handlers.ts @@ -0,0 +1,200 @@ +import { getEstimated } from '~/utils/format'; +import * as ACTIONS from '~/redux/editor/actions'; +import { EDITOR_ACTIONS } from '~/redux/editor/constants'; +import { IEditorState } from '~/redux/editor'; +import { TIPS } from '~/constants/tips'; + +const setEditing = ( + state, + { editing }: ReturnType +): IEditorState => ({ + ...state, + editing, +}); + +const setChanged = ( + state, + { changed }: ReturnType +): IEditorState => ({ + ...state, + changed, +}); + +const setMode = (state, { mode }: ReturnType): IEditorState => ({ + ...state, + mode, +}); + +const setDistance = ( + state, + { distance }: ReturnType +): IEditorState => ({ + ...state, + distance, + estimated: getEstimated(distance, state.speed), +}); + +const setRouterPoints = ( + state, + { routerPoints }: ReturnType +): IEditorState => ({ + ...state, + routerPoints, +}); + +const setActiveSticker = ( + state, + { activeSticker }: ReturnType +): IEditorState => ({ + ...state, + activeSticker: activeSticker || { set: null, sticker: null }, +}); + +const hideRenderer = (state): IEditorState => ({ + ...state, + renderer: { ...state.renderer, renderer_active: false }, +}); + +const setRenderer = ( + state, + { payload }: ReturnType +): IEditorState => ({ + ...state, + renderer: { ...state.renderer, ...payload }, +}); + +const sendSaveRequest = (state): IEditorState => ({ + ...state, + save_processing: true, +}); + +const setSaveError = ( + state, + { save_error }: ReturnType +): IEditorState => ({ + ...state, + save_error, + save_finished: false, + save_processing: false, +}); + +const setSaveLoading = ( + state, + { save_loading }: ReturnType +): IEditorState => ({ + ...state, + save_loading, +}); + +const setSaveOverwrite = (state): IEditorState => ({ + ...state, + save_overwriting: true, + save_finished: false, + save_processing: false, + save_error: TIPS.SAVE_OVERWRITE, +}); + +const setSaveSuccess = ( + state, + { save_error }: ReturnType +): IEditorState => ({ + ...state, + save_overwriting: false, + save_finished: true, + save_processing: false, + save_error, +}); + +const resetSaveDialog = (state): IEditorState => ({ + ...state, + save_overwriting: false, + save_finished: false, + save_processing: false, + save_error: '', +}); + +const setDialog = (state, { dialog }: ReturnType): IEditorState => ({ + ...state, + dialog, +}); + +const setDialogActive = ( + state, + { dialog_active }: ReturnType +): IEditorState => ({ + ...state, + dialog_active: dialog_active || !state.dialog_active, +}); + +const setReady = (state, { ready = true }: ReturnType): IEditorState => ({ + ...state, + ready, +}); + +const setSpeed = ( + state, + { speed = 15 }: ReturnType +): IEditorState => ({ + ...state, + speed, + estimated: getEstimated(state.distance, speed), +}); + +const setMarkersShown = ( + state, + { markers_shown = true }: ReturnType +): IEditorState => ({ ...state, markers_shown }); + +const setIsEmpty = ( + state, + { is_empty = true }: ReturnType +): IEditorState => ({ ...state, is_empty }); + +const setFeature = ( + state, + { features }: ReturnType +): IEditorState => ({ + ...state, + features: { + ...state.features, + ...features, + }, +}); + +const setIsRouting = ( + state, + { is_routing }: ReturnType +): IEditorState => ({ + ...state, + is_routing, +}); + +export const EDITOR_HANDLERS = { + [EDITOR_ACTIONS.SET_EDITING]: setEditing, + [EDITOR_ACTIONS.SET_CHANGED]: setChanged, + [EDITOR_ACTIONS.SET_MODE]: setMode, + [EDITOR_ACTIONS.SET_DISTANCE]: setDistance, + [EDITOR_ACTIONS.SET_ROUTER_POINTS]: setRouterPoints, + [EDITOR_ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, + + [EDITOR_ACTIONS.SET_SAVE_ERROR]: setSaveError, + [EDITOR_ACTIONS.SET_SAVE_LOADING]: setSaveLoading, + [EDITOR_ACTIONS.SET_SAVE_OVERWRITE]: setSaveOverwrite, + [EDITOR_ACTIONS.SET_SAVE_SUCCESS]: setSaveSuccess, + [EDITOR_ACTIONS.SEND_SAVE_REQUEST]: sendSaveRequest, + [EDITOR_ACTIONS.RESET_SAVE_DIALOG]: resetSaveDialog, + + [EDITOR_ACTIONS.HIDE_RENDERER]: hideRenderer, + [EDITOR_ACTIONS.SET_RENDERER]: setRenderer, + + [EDITOR_ACTIONS.SET_DIALOG]: setDialog, + [EDITOR_ACTIONS.SET_DIALOG_ACTIVE]: setDialogActive, + [EDITOR_ACTIONS.SET_READY]: setReady, + + [EDITOR_ACTIONS.SET_SPEED]: setSpeed, + [EDITOR_ACTIONS.SET_MARKERS_SHOWN]: setMarkersShown, + [EDITOR_ACTIONS.SET_IS_EMPTY]: setIsEmpty, + + [EDITOR_ACTIONS.SET_FEATURE]: setFeature, + [EDITOR_ACTIONS.SET_IS_ROUTING]: setIsRouting, +}; diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts new file mode 100644 index 0000000..1bc7b0e --- /dev/null +++ b/src/redux/editor/index.ts @@ -0,0 +1,85 @@ +import { IDialogs } from '~/constants/dialogs'; +import { MODES } from '~/constants/modes'; +import { createReducer } from 'reduxsauce'; +import { EDITOR_HANDLERS } from './handlers'; + +export interface IEditorState { + changed: boolean, + editing: boolean, + ready: boolean, + markers_shown: boolean; + + mode: typeof MODES[keyof typeof MODES], + + dialog: IDialogs[keyof IDialogs], + dialog_active: boolean, + + routerPoints: number, + distance: number, + estimated: number, + speed: number, + activeSticker: { set?: string, sticker?: string }, + is_empty: boolean, + is_published: boolean, + is_routing: boolean, + save_error: string, + save_finished: boolean, + save_overwriting: boolean, + save_processing: boolean, + save_loading: boolean, + + features: { + routing: boolean, + }, + + renderer: { + data: string, + width: number, + height: number + renderer_active: boolean, + info: string, + progress: number, + }, +} + +const EDITOR_INITIAL_STATE = { + changed: false, + editing: false, + ready: false, + markers_shown: false, + + mode: MODES.NONE, + dialog: null, + dialog_active: false, + + routerPoints: 0, + distance: 0, + estimated: 0, + speed: 15, + activeSticker: { set: null, sticker: null }, + + is_published: false, + is_empty: true, + is_routing: false, + + save_error: '', + save_finished: false, + save_overwriting: false, + save_processing: false, + save_loading: false, + + features: { + routing: false, + }, + + renderer: { + data: '', + width: 0, + height: 0, + renderer_active: false, + info: '', + progress: 0, + }, +} + +export const editor = createReducer(EDITOR_INITIAL_STATE, EDITOR_HANDLERS); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts new file mode 100644 index 0000000..c19fe1d --- /dev/null +++ b/src/redux/editor/sagas.ts @@ -0,0 +1,256 @@ +import { call, put, takeEvery, takeLatest, select, race } from 'redux-saga/effects'; +import { delay, SagaIterator } from 'redux-saga'; +import { selectEditor } from '~/redux/editor/selectors'; + +import { + editorHideRenderer, + editorSetChanged, + editorSetEditing, + editorSetMode, + editorSetReady, + editorSetRenderer, + editorSetDialog, + editorSetDialogActive, + editorClearAll, + editorSetFeature, + editorLocationChanged, + editorKeyPressed, +} from '~/redux/editor/actions'; +import { getUrlData, pushPath } from '~/utils/history'; +import { MODES } from '~/constants/modes'; +import { checkOSRMService } from '~/utils/api'; +import { LatLng } from 'leaflet'; +import { searchSetTab } from '../user/actions'; +import { TABS } from '~/constants/dialogs'; +import { EDITOR_ACTIONS } from './constants'; +import { getGPXString, downloadGPXTrack } from '~/utils/gpx'; +import { + getTilePlacement, + getPolyPlacement, + getStickersPlacement, + fetchImages, + composeArrows, + composeDistMark, + composeImages, + composePoly, + composeStickers, + imageFetcher, + downloadCanvas, +} from '~/utils/renderer'; +import { selectMap } from '../map/selectors'; +import { selectUser } from '../user/selectors'; +import { LOGOS } from '~/constants/logos'; +import { loadMapSaga, replaceAddressIfItsBusy } from '../map/sagas'; +import { mapSetAddressOrigin } from '../map/actions'; + +const hideLoader = () => { + document.getElementById('loader').style.opacity = String(0); + document.getElementById('loader').style.pointerEvents = 'none'; + + return true; +}; + +function* stopEditingSaga() { + const { changed, editing, mode }: ReturnType = yield select(selectEditor); + const { address_origin }: ReturnType = yield select(selectMap); + const { path } = getUrlData(); + + if (!editing) return; + if (changed && mode !== MODES.CONFIRM_CANCEL) { + yield put(editorSetMode(MODES.CONFIRM_CANCEL)); + return; + } + + yield put(editorSetMode(MODES.NONE)); + yield put(editorSetChanged(false)); + + yield pushPath(`/${address_origin || path}/`); +} + +function* checkOSRMServiceSaga() { + const routing = yield call(checkOSRMService, [new LatLng(1, 1), new LatLng(2, 2)]); + + yield put(editorSetFeature({ routing })); +} + +export function* setReadySaga() { + yield put(editorSetReady(true)); + hideLoader(); + + yield call(checkOSRMServiceSaga); + yield put(searchSetTab(TABS.MY)); +} + +function* getRenderData() { + yield put(editorSetRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); + + const { route, stickers, provider }: ReturnType = yield select(selectMap); + + const canvas = document.getElementById('renderer'); + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + const ctx = canvas.getContext('2d'); + + const geometry = getTilePlacement(); + const points = getPolyPlacement(route); + const sticker_points = getStickersPlacement(stickers); + // TODO: get distance: + const distance = 0; + // const distance = editor.poly.poly.distance; + + ctx.clearRect(0, 0, canvas.width, canvas.height); + + const images = yield fetchImages(ctx, geometry, provider); + + yield put(editorSetRenderer({ info: 'Отрисовка', progress: 0.5 })); + + yield composeImages({ geometry, images, ctx }); + yield composePoly({ points, ctx }); + yield composeArrows({ points, ctx }); + yield composeDistMark({ ctx, points, distance }); + yield composeStickers({ stickers: sticker_points, ctx }); + + yield put(editorSetRenderer({ info: 'Готово', progress: 1 })); + + return yield canvas.toDataURL('image/jpeg'); +} + +function* takeAShotSaga() { + const worker = call(getRenderData); + + const { result, timeout } = yield race({ + result: worker, + timeout: delay(500), + }); + + if (timeout) yield put(editorSetMode(MODES.SHOT_PREFETCH)); + + const data = yield result || worker; + + yield put(editorSetMode(MODES.NONE)); + yield put( + editorSetRenderer({ + data, + renderer_active: true, + width: window.innerWidth, + height: window.innerHeight, + }) + ); +} + +function* getCropData({ x, y, width, height }) { + const { logo }: ReturnType = yield select(selectMap); + const { + renderer: { data }, + }: ReturnType = yield select(selectEditor); + + const canvas = document.getElementById('renderer'); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext('2d'); + const image = yield imageFetcher(data); + + ctx.drawImage(image, -x, -y); + + if (logo && LOGOS[logo][1]) { + const logoImage = yield imageFetcher(LOGOS[logo][1]); + ctx.drawImage(logoImage, width - logoImage.width, height - logoImage.height); + } + + return yield canvas.toDataURL('image/jpeg'); +} + +function* cropAShotSaga(params) { + const { title, address }: ReturnType = yield select(selectMap); + + yield call(getCropData, params); + const canvas = document.getElementById('renderer') as HTMLCanvasElement; + + downloadCanvas(canvas, (title || address).replace(/\./gi, ' ')); + + return yield put(editorHideRenderer()); +} + +function* locationChangeSaga({ location }: ReturnType) { + const { + user: { id, random_url }, + }: ReturnType = yield select(selectUser); + + const { ready }: ReturnType = yield select(selectEditor); + + const { owner, address }: ReturnType = yield select(selectMap); + + if (!ready) return; + + const { path, mode } = getUrlData(location); + + if (address !== path) { + const map = yield call(loadMapSaga, path); + + if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { + return yield call(replaceAddressIfItsBusy, map.random_url, map.address); + } + } else if (mode === 'edit' && owner.id !== id) { + return yield call(replaceAddressIfItsBusy, random_url, address); + } else { + yield put(mapSetAddressOrigin('')); + } + + if (mode !== 'edit') { + yield put(editorSetEditing(false)); + // editor.stopEditing(); + } else { + yield put(editorSetEditing(true)); + // editor.startEditing(); + } +} + +function* keyPressedSaga({ key, target }: ReturnType): any { + if (target === 'INPUT' || target === 'TEXTAREA') { + return; + } + + if (key === 'Escape') { + const { + dialog_active, + mode, + renderer: { renderer_active }, + }: ReturnType = yield select(selectEditor); + + if (renderer_active) return yield put(editorHideRenderer()); + if (dialog_active) return yield put(editorSetDialogActive(false)); + if (mode !== MODES.NONE) return yield put(editorSetMode(MODES.NONE)); + } else if (key === 'Delete') { + const { editing } = yield select(selectEditor); + + if (!editing) return; + + const { mode } = yield select(selectUser); + + if (mode === MODES.TRASH) { + yield put(editorClearAll()); + } else { + yield put(editorSetMode(MODES.TRASH)); + } + } +} + +function* getGPXTrackSaga(): SagaIterator { + const { route, stickers, title, address }: ReturnType = yield select(selectMap); + // const { title, address }: = yield select(selectUser); + + if (!route || route.length <= 0) return; + + const track = getGPXString({ route, stickers, title: title || address }); + + return downloadGPXTrack({ track, title }); +} + +export function* editorSaga() { + yield takeEvery(EDITOR_ACTIONS.STOP_EDITING, stopEditingSaga); + yield takeLatest(EDITOR_ACTIONS.TAKE_A_SHOT, takeAShotSaga); + yield takeLatest(EDITOR_ACTIONS.CROP_A_SHOT, cropAShotSaga); + yield takeLatest(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); + yield takeLatest(EDITOR_ACTIONS.KEY_PRESSED, keyPressedSaga); + yield takeLatest(EDITOR_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); +} diff --git a/src/redux/editor/selectors.ts b/src/redux/editor/selectors.ts new file mode 100644 index 0000000..725c9af --- /dev/null +++ b/src/redux/editor/selectors.ts @@ -0,0 +1,7 @@ +import { IState } from "../store"; + +export const selectEditor = (state: IState) => state.editor; +export const selectEditorEditing = (state: IState) => state.editor.editing; +export const selectEditorMode = (state: IState) => state.editor.mode; +export const selectEditorActiveSticker = (state: IState) => state.editor.activeSticker; +export const selectEditorRenderer = (state: IState) => state.editor.renderer; \ No newline at end of file diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index 537caee..31d42cb 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -68,3 +68,8 @@ export const mapSetLogo = (logo: IMapReducer['logo']) => ({ type: MAP_ACTIONS.SET_LOGO, logo, }); + +export const mapSetAddressOrigin = (address_origin: IMapReducer['address_origin']) => ({ + type: MAP_ACTIONS.SET_ADDRESS_ORIGIN, + address_origin, +}); diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts index 477f3a2..c7ffed4 100644 --- a/src/redux/map/constants.ts +++ b/src/redux/map/constants.ts @@ -7,6 +7,7 @@ export const MAP_ACTIONS = { SET_TITLE: `${P}-SET_TILE`, SET_DESCRIPTION: `${P}-SETDESCRIPTION`, SET_ADDRESS: `${P}-SET_ADDRESS`, + SET_ADDRESS_ORIGIN: `${P}-SET_ADDRESS_ORIGIN`, SET_OWNER: `${P}-SET_OWNER`, SET_PUBLIC: `${P}-SET_PUBLIC`, SET_LOGO: `${P}-SET_LOGO`, diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts index baaa51e..ce4daf6 100644 --- a/src/redux/map/handlers.ts +++ b/src/redux/map/handlers.ts @@ -12,6 +12,7 @@ import { mapSetOwner, mapSetPublic, mapSetLogo, + mapSetAddressOrigin, } from './actions'; const setMap = (state: IMapReducer, { map }: ReturnType): IMapReducer => ({ @@ -86,6 +87,11 @@ const setLogo = (state: IMapReducer, { logo }: ReturnType): I logo, }); +const setAddressOrigin = (state, { address_origin }: ReturnType): IMapReducer => ({ + ...state, + address_origin +}); + export const MAP_HANDLERS = { [MAP_ACTIONS.SET_MAP]: setMap, [MAP_ACTIONS.SET_PROVIDER]: setProvider, @@ -99,4 +105,5 @@ export const MAP_HANDLERS = { [MAP_ACTIONS.SET_OWNER]: setOwner, [MAP_ACTIONS.SET_PUBLIC]: setPublic, [MAP_ACTIONS.SET_LOGO]: setLogo, + [MAP_ACTIONS.SET_ADDRESS_ORIGIN]: setAddressOrigin, }; diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index a72482d..4c726ff 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -12,6 +12,7 @@ export interface IMapReducer { title: string; logo: string; address: string; + address_origin: string; description: string; owner: { id: string }; is_public: boolean; @@ -24,6 +25,7 @@ export const MAP_INITIAL_STATE: IMapReducer = { stickers: [], title: '', address: '', + address_origin: '', description: '', owner: { id: null }, is_public: false, diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index c400922..c5c8906 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -1,39 +1,58 @@ -import { takeEvery, select, put, call, TakeEffect, race, take, takeLatest } from 'redux-saga/effects'; +import { + takeEvery, + select, + put, + call, + TakeEffect, + race, + take, + takeLatest, +} from 'redux-saga/effects'; import { MAP_ACTIONS } from './constants'; -import { mapClicked, mapAddSticker, mapSetProvider, mapSet, mapSetTitle, mapSetAddress, mapSetDescription, mapSetOwner, mapSetPublic } from './actions'; -import { selectUserMode, selectUserActiveSticker, selectUser, selectUserUser } from '~/redux/user/selectors'; +import { + mapClicked, + mapAddSticker, + mapSetProvider, + mapSet, + mapSetTitle, + mapSetAddressOrigin, +} from './actions'; +import { selectUser, selectUserUser } from '~/redux/user/selectors'; import { MODES } from '~/constants/modes'; import { - setMode, - setChanged, - setAddressOrigin, - setEditing, - setReady, - setActiveSticker, - setSaveError, - setSaveLoading, - sendSaveRequest, - setSaveSuccess, - setSaveOverwrite, -} from '~/redux/user/actions'; + editorSetMode, + editorSetChanged, + editorSetEditing, + editorSetReady, + editorSetActiveSticker, + editorSetSaveError, + editorSetSaveLoading, + editorSendSaveRequest, + editorSetSaveSuccess, + editorSetSaveOverwrite, +} from '~/redux/editor/actions'; import { pushLoaderState, getUrlData, pushPath, replacePath } from '~/utils/history'; -import { setReadySaga, searchSetSagaWorker } from '~/redux/user/sagas'; +import { searchSetSagaWorker } from '~/redux/user/sagas'; import { getStoredMap, postMap } from '~/utils/api'; import { Unwrap } from '~/utils/middleware'; -import { DEFAULT_PROVIDER } from '~/constants/providers'; import { USER_ACTIONS } from '~/redux/user/constants'; -import { selectMap } from './selectors'; +import { selectMap, selectMapProvider } from './selectors'; import { TIPS } from '~/constants/tips'; import { delay } from 'redux-saga'; +import { setReadySaga } from '../editor/sagas'; +import { selectEditor } from '../editor/selectors'; +import { EDITOR_ACTIONS } from '../editor/constants'; function* onMapClick({ latlng }: ReturnType) { - const mode = yield select(selectUserMode); - const { set, sticker } = yield select(selectUserActiveSticker); + const { + mode, + activeSticker: { set, sticker }, + }: ReturnType = yield select(selectEditor); switch (mode) { case MODES.STICKERS: yield put(mapAddSticker({ latlng, set, sticker, text: '', angle: 0 })); - yield put(setMode(MODES.NONE)); + yield put(editorSetMode(MODES.NONE)); break; default: @@ -64,7 +83,7 @@ function* onMapClick({ latlng }: ReturnType) { export function* replaceAddressIfItsBusy(destination, original) { if (original) { - yield put(setAddressOrigin(original)); + yield put(mapSetAddressOrigin(original)); } pushPath(`/${destination}/edit`); @@ -97,14 +116,15 @@ export function* loadMapSaga(path) { function* startEmptyEditorSaga() { const { user: { id, random_url }, - provider = DEFAULT_PROVIDER, - } = yield select(selectUser); + }: ReturnType = yield select(selectUser); + + const provider: ReturnType = yield select(selectMapProvider); // TODO: set owner { id } pushPath(`/${random_url}/edit`); - yield put(setChanged(false)); - yield put(setEditing(true)); + yield put(editorSetChanged(false)); + yield put(editorSetEditing(true)); return yield call(setReadySaga); } @@ -114,9 +134,9 @@ export function* mapInitSaga() { const { path, mode, hash } = getUrlData(); const { - provider, user: { id }, - } = yield select(selectUser); + }: ReturnType = yield select(selectUser); + const provider: ReturnType = yield select(selectMapProvider); yield put(mapSetProvider(provider)); @@ -139,14 +159,12 @@ export function* mapInitSaga() { yield call(setReadySaga); yield call(replaceAddressIfItsBusy, map.random_url, map.address); } else { - yield put(setAddressOrigin('')); + yield put(mapSetAddressOrigin('')); } - yield put(setEditing(true)); - // TODO: start editing + yield put(editorSetEditing(true)); } else { - yield put(setEditing(false)); - // TODO: stop editing + yield put(editorSetEditing(false)); } yield call(setReadySaga); @@ -155,7 +173,7 @@ export function* mapInitSaga() { } yield call(startEmptyEditorSaga); - yield put(setReady(true)); + yield put(editorSetReady(true)); pushLoaderState(100); @@ -163,7 +181,7 @@ export function* mapInitSaga() { } function* setActiveStickerSaga() { - yield put(setMode(MODES.STICKERS)); + yield put(editorSetMode(MODES.STICKERS)); } function* setTitleSaga({ title }: ReturnType) { @@ -172,10 +190,14 @@ function* setTitleSaga({ title }: ReturnType) { } } +function* startEditingSaga() { + const { path } = getUrlData(); + yield pushPath(`/${path}/edit`); +} + function* clearSaga({ type }) { switch (type) { - case USER_ACTIONS.CLEAR_POLY: - // TODO: clear router waypoints + case EDITOR_ACTIONS.CLEAR_POLY: yield put( mapSet({ route: [], @@ -183,7 +205,7 @@ function* clearSaga({ type }) { ); break; - case USER_ACTIONS.CLEAR_STICKERS: + case EDITOR_ACTIONS.CLEAR_STICKERS: yield put( mapSet({ stickers: [], @@ -191,8 +213,8 @@ function* clearSaga({ type }) { ); break; - case USER_ACTIONS.CLEAR_ALL: - yield put(setChanged(false)); + case EDITOR_ACTIONS.CLEAR_ALL: + yield put(editorSetChanged(false)); yield put( mapSet({ route: [], @@ -205,8 +227,8 @@ function* clearSaga({ type }) { break; } - yield put(setActiveSticker(null)); // TODO: move to maps - yield put(setMode(MODES.NONE)); + yield put(editorSetActiveSticker(null)); + yield put(editorSetMode(MODES.NONE)); } function* sendSaveRequestSaga({ @@ -215,17 +237,18 @@ function* sendSaveRequestSaga({ force, is_public, description, -}: ReturnType) { - const { route, stickers, provider } = yield select(selectMap); +}: ReturnType) { + const { route, stickers, provider }: ReturnType = yield select(selectMap); if (!route.length && !stickers.length) { - return yield put(setSaveError(TIPS.SAVE_EMPTY)); // TODO: move setSaveError to editor + return yield put(editorSetSaveError(TIPS.SAVE_EMPTY)); } - const { logo, distance } = yield select(selectUser); - const { token } = yield select(selectUserUser); + const { logo }: ReturnType = yield select(selectMap); + const { distance }: ReturnType = yield select(selectEditor); + const { token }: ReturnType = yield select(selectUserUser); - yield put(setSaveLoading(true)); // TODO: move setSaveLoading to maps + yield put(editorSetSaveLoading(true)); const { result, @@ -250,20 +273,21 @@ function* sendSaveRequestSaga({ description, }), timeout: delay(10000), - cancel: take(USER_ACTIONS.RESET_SAVE_DIALOG), + cancel: take(EDITOR_ACTIONS.RESET_SAVE_DIALOG), }); - yield put(setSaveLoading(false)); + yield put(editorSetSaveLoading(false)); - if (cancel) return yield put(setMode(MODES.NONE)); + if (cancel) return yield put(editorSetMode(MODES.NONE)); - if (result && result.data.code === 'already_exist') return yield put(setSaveOverwrite()); // TODO: move setSaveOverwrite to editor - if (result && result.data.code === 'conflict') return yield put(setSaveError(TIPS.SAVE_EXISTS)); + if (result && result.data.code === 'already_exist') return yield put(editorSetSaveOverwrite()); + if (result && result.data.code === 'conflict') + return yield put(editorSetSaveError(TIPS.SAVE_EXISTS)); if (timeout || !result || !result.data.route || !result.data.route.address) - return yield put(setSaveError(TIPS.SAVE_TIMED_OUT)); + return yield put(editorSetSaveError(TIPS.SAVE_TIMED_OUT)); - return yield put( // TODO: move setSaveSuccess to editor - setSaveSuccess({ + return yield put( + editorSetSaveSuccess({ address: result.data.route.address, title: result.data.route.title, is_public: result.data.route.is_public, @@ -279,18 +303,23 @@ function* setSaveSuccessSaga({ title, is_public, description, -}: ReturnType) { - const { id } = yield select(selectUser); - const { dialog_active } = yield select(selectUser); +}: ReturnType) { + const { id }: ReturnType = yield select(selectUserUser); + const { dialog_active }: ReturnType = yield select(selectEditor); replacePath(`/${address}/edit`); - yield put(mapSetTitle(title)); - yield put(mapSetAddress(address)); - yield put(mapSetPublic(is_public)); - yield put(mapSetDescription(description)); - yield put(setChanged(false)); - yield put(mapSetOwner({ id })); + yield put( + mapSet({ + title, + address, + is_public, + description, + owner: { id }, + }) + ); + + yield put(editorSetChanged(false)); if (dialog_active) { yield call(searchSetSagaWorker); @@ -298,27 +327,25 @@ function* setSaveSuccessSaga({ // yield editor.setInitialData(); // TODO: set initial data here - - return + + return; } export function* mapSaga() { // TODO: setChanged on set route, logo, provider, stickers - - yield takeEvery(USER_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); // TODO: move active sticker to maps + yield takeEvery(EDITOR_ACTIONS.START_EDITING, startEditingSaga); + yield takeEvery(EDITOR_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); yield takeEvery(MAP_ACTIONS.MAP_CLICKED, onMapClick); yield takeEvery(MAP_ACTIONS.SET_TITLE, setTitleSaga); - // yield takeEvery(USER_ACTIONS.SET_LOGO, setLogoSaga); - yield takeLatest(USER_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); - yield takeLatest(USER_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); + yield takeLatest(EDITOR_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); + yield takeLatest(EDITOR_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); yield takeEvery( - // TODO: move all actions to MAP [ - USER_ACTIONS.CLEAR_POLY, - USER_ACTIONS.CLEAR_STICKERS, - USER_ACTIONS.CLEAR_ALL, - USER_ACTIONS.CLEAR_CANCEL, + EDITOR_ACTIONS.CLEAR_POLY, + EDITOR_ACTIONS.CLEAR_STICKERS, + EDITOR_ACTIONS.CLEAR_ALL, + EDITOR_ACTIONS.CLEAR_CANCEL, ], clearSaga ); diff --git a/src/redux/store.ts b/src/redux/store.ts index 6da5577..b2a9195 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -4,13 +4,20 @@ import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import createSagaMiddleware from 'redux-saga'; + +import { createBrowserHistory } from 'history'; +import { editorLocationChanged } from '~/redux/editor/actions'; +import { PersistConfig, Persistor } from "redux-persist/es/types"; + + import { userReducer, IRootReducer } from '~/redux/user'; import { userSaga } from '~/redux/user/sagas'; -import { mapSaga } from '~/redux/map/sagas'; -import { createBrowserHistory } from 'history'; -import { locationChanged } from '~/redux/user/actions'; -import { PersistConfig, Persistor } from "redux-persist/es/types"; + +import { editor, IEditorState } from '~/redux/editor'; +import { editorSaga } from '~/redux/editor/sagas'; + import { map, IMapReducer } from '~/redux/map'; +import { mapSaga } from '~/redux/map/sagas'; const userPersistConfig: PersistConfig = { key: 'user', @@ -21,6 +28,7 @@ const userPersistConfig: PersistConfig = { export interface IState { user: IRootReducer map: IMapReducer, + editor: IEditorState, } // create the saga middleware export const sagaMiddleware = createSagaMiddleware(); @@ -36,14 +44,15 @@ export const store = createStore( combineReducers({ user: persistReducer(userPersistConfig, userReducer), map, - // routing: routerReducer + editor, }), - composeEnhancers(applyMiddleware(/* routerMiddleware(history), */ sagaMiddleware)) + composeEnhancers(applyMiddleware(sagaMiddleware)) ); export function configureStore(): { store: Store, persistor: Persistor } { sagaMiddleware.run(userSaga); sagaMiddleware.run(mapSaga); + sagaMiddleware.run(editorSaga); const persistor = persistStore(store); @@ -54,5 +63,5 @@ export const history = createBrowserHistory(); history.listen((location, action) => { if (action === 'REPLACE') return; - store.dispatch(locationChanged(location.pathname)); + store.dispatch(editorLocationChanged(location.pathname)); }); diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 19d416f..e8eab3b 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,81 +1,81 @@ import { USER_ACTIONS } from '~/redux/user/constants'; import { IUser } from "~/constants/auth"; -import { IRootState } from "~/redux/user"; -import { IRoute } from '~/redux/map/types'; +// import { IRootState } from "~/redux/user"; +// import { IRoute } from '~/redux/map/types'; export const setUser = (user: IUser) => ({ type: USER_ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: USER_ACTIONS.USER_LOGOUT }); -export const setEditing = (editing: IRootState['editing']) => ({ type: USER_ACTIONS.SET_EDITING, editing }); -export const setMode = (mode: IRootState['mode']) => ({ type: USER_ACTIONS.SET_MODE, mode }); -export const setDistance = (distance: IRootState['distance']) => ({ type: USER_ACTIONS.SET_DISTANCE, distance }); -export const setChanged = (changed: IRootState['changed']) => ({ type: USER_ACTIONS.SET_CHANGED, changed }); -export const setRouterPoints = routerPoints => ({ type: USER_ACTIONS.SET_ROUTER_POINTS, routerPoints }); -export const setActiveSticker = activeSticker => ({ type: USER_ACTIONS.SET_ACTIVE_STICKER, activeSticker }); +// export const setEditing = (editing: IRootState['editing']) => ({ type: USER_ACTIONS.SET_EDITING, editing }); +// export const setMode = (mode: IRootState['mode']) => ({ type: USER_ACTIONS.SET_MODE, mode }); +// export const setDistance = (distance: IRootState['distance']) => ({ type: USER_ACTIONS.SET_DISTANCE, distance }); +// export const setChanged = (changed: IRootState['changed']) => ({ type: USER_ACTIONS.SET_CHANGED, changed }); +// export const setRouterPoints = routerPoints => ({ type: USER_ACTIONS.SET_ROUTER_POINTS, routerPoints }); +// export const setActiveSticker = activeSticker => ({ type: USER_ACTIONS.SET_ACTIVE_STICKER, activeSticker }); // export const setLogo = logo => ({ type: USER_ACTIONS.SET_LOGO, logo }); // export const setTitle = title => ({ type: USER_ACTIONS.SET_TITLE, title }); // export const setDescription = description => ({ type: USER_ACTIONS.SET_DESCRIPTION, description }); // export const setAddress = address => ({ type: USER_ACTIONS.SET_ADDRESS, address }); -export const setAddressOrigin = address_origin => ({ type: USER_ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); +// export const setAddressOrigin = address_origin => ({ type: USER_ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); // export const setPublic = is_public => ({ type: USER_ACTIONS.SET_PUBLIC, is_public }); export const setStarred = is_published => ({ type: USER_ACTIONS.SET_STARRED, is_published }); -export const setSpeed = speed => ({ type: USER_ACTIONS.SET_SPEED, speed }); +// export const setSpeed = speed => ({ type: USER_ACTIONS.SET_SPEED, speed }); -export const startEditing = () => ({ type: USER_ACTIONS.START_EDITING }); -export const stopEditing = () => ({ type: USER_ACTIONS.STOP_EDITING }); +// export const startEditing = () => ({ type: USER_ACTIONS.START_EDITING }); +// export const stopEditing = () => ({ type: USER_ACTIONS.STOP_EDITING }); -export const routerCancel = () => ({ type: USER_ACTIONS.ROUTER_CANCEL }); -export const routerSubmit = () => ({ type: USER_ACTIONS.ROUTER_SUBMIT }); +// export const routerCancel = () => ({ type: USER_ACTIONS.ROUTER_CANCEL }); +// export const routerSubmit = () => ({ type: USER_ACTIONS.ROUTER_SUBMIT }); -export const clearPoly = () => ({ type: USER_ACTIONS.CLEAR_POLY }); -export const clearStickers = () => ({ type: USER_ACTIONS.CLEAR_STICKERS }); -export const clearAll = () => ({ type: USER_ACTIONS.CLEAR_ALL }); -export const clearCancel = () => ({ type: USER_ACTIONS.CLEAR_CANCEL }); +// export const clearPoly = () => ({ type: USER_ACTIONS.CLEAR_POLY }); +// export const clearStickers = () => ({ type: USER_ACTIONS.CLEAR_STICKERS }); +// export const clearAll = () => ({ type: USER_ACTIONS.CLEAR_ALL }); +// export const clearCancel = () => ({ type: USER_ACTIONS.CLEAR_CANCEL }); -export const sendSaveRequest = (payload: { - title: IRoute['title'], - address: IRoute['address'], - is_public: IRoute['is_public'], - description: IRoute['description'], - force: boolean, -}) => ({ - type: USER_ACTIONS.SEND_SAVE_REQUEST, - ...payload, -}); +// export const sendSaveRequest = (payload: { +// title: IRoute['title'], +// address: IRoute['address'], +// is_public: IRoute['is_public'], +// description: IRoute['description'], +// force: boolean, +// }) => ({ +// type: USER_ACTIONS.SEND_SAVE_REQUEST, +// ...payload, +// }); -export const resetSaveDialog = () => ({ type: USER_ACTIONS.RESET_SAVE_DIALOG }); +// export const resetSaveDialog = () => ({ type: USER_ACTIONS.RESET_SAVE_DIALOG }); -export const setSaveLoading = (save_loading: IRootState['save_loading']) => ({ type: USER_ACTIONS.SET_SAVE_LOADING, save_loading }); +// export const setSaveLoading = (save_loading: IRootState['save_loading']) => ({ type: USER_ACTIONS.SET_SAVE_LOADING, save_loading }); -export const setSaveSuccess = (payload: { - address: IRoute['address'], - title: IRoute['address'], - is_public: IRoute['is_public'], - description: IRoute['description'], +// export const setSaveSuccess = (payload: { +// address: IRoute['address'], +// title: IRoute['address'], +// is_public: IRoute['is_public'], +// description: IRoute['description'], - save_error: string, -}) => ({ type: USER_ACTIONS.SET_SAVE_SUCCESS, ...payload }); +// save_error: string, +// }) => ({ type: USER_ACTIONS.SET_SAVE_SUCCESS, ...payload }); -export const setSaveError = (save_error: IRootState['save_error']) => ({ type: USER_ACTIONS.SET_SAVE_ERROR, save_error }); -export const setSaveOverwrite = () => ({ type: USER_ACTIONS.SET_SAVE_OVERWRITE }); +// export const setSaveError = (save_error: IRootState['save_error']) => ({ type: USER_ACTIONS.SET_SAVE_ERROR, save_error }); +// export const setSaveOverwrite = () => ({ type: USER_ACTIONS.SET_SAVE_OVERWRITE }); -export const hideRenderer = () => ({ type: USER_ACTIONS.HIDE_RENDERER }); -export const setRenderer = payload => ({ type: USER_ACTIONS.SET_RENDERER, payload }); -export const takeAShot = () => ({ type: USER_ACTIONS.TAKE_A_SHOT }); -export const cropAShot = payload => ({ type: USER_ACTIONS.CROP_A_SHOT, ...payload }); +// export const hideRenderer = () => ({ type: USER_ACTIONS.HIDE_RENDERER }); +// export const setRenderer = payload => ({ type: USER_ACTIONS.SET_RENDERER, payload }); +// export const takeAShot = () => ({ type: USER_ACTIONS.TAKE_A_SHOT }); +// export const cropAShot = payload => ({ type: USER_ACTIONS.CROP_A_SHOT, ...payload }); // export const setProvider = provider => ({ type: USER_ACTIONS.SET_PROVIDER, provider }); // export const changeProvider = provider => ({ type: USER_ACTIONS.CHANGE_PROVIDER, provider }); -export const setDialog = dialog => ({ type: USER_ACTIONS.SET_DIALOG, dialog }); -export const setDialogActive = dialog_active => ({ type: USER_ACTIONS.SET_DIALOG_ACTIVE, dialog_active }); +// export const setDialog = dialog => ({ type: USER_ACTIONS.SET_DIALOG, dialog }); +// export const setDialogActive = dialog_active => ({ type: USER_ACTIONS.SET_DIALOG_ACTIVE, dialog_active }); export const openMapDialog = tab => ({ type: USER_ACTIONS.OPEN_MAP_DIALOG, tab }); -export const locationChanged = location => ({ type: USER_ACTIONS.LOCATION_CHANGED, location }); -export const setReady = ready => ({ type: USER_ACTIONS.SET_READY, ready }); +// export const locationChanged = location => ({ type: USER_ACTIONS.LOCATION_CHANGED, location }); +// export const setReady = ready => ({ type: USER_ACTIONS.SET_READY, ready }); export const gotVkUser = user => ({ type: USER_ACTIONS.GOT_VK_USER, user }); -export const keyPressed = ({ key, target: { tagName } }) => ({ type: USER_ACTIONS.KEY_PRESSED, key, target: tagName }); +// export const keyPressed = ({ key, target: { tagName } }) => ({ type: USER_ACTIONS.KEY_PRESSED, key, target: tagName }); export const searchSetTitle = title => ({ type: USER_ACTIONS.SEARCH_SET_TITLE, title }); export const searchSetDistance = distance => ({ type: USER_ACTIONS.SEARCH_SET_DISTANCE, distance }); @@ -85,15 +85,15 @@ export const searchSetLoading = loading => ({ type: USER_ACTIONS.SEARCH_SET_LOAD export const searchPutRoutes = payload => ({ type: USER_ACTIONS.SEARCH_PUT_ROUTES, ...payload }); -export const setMarkersShown = markers_shown => ({ type: USER_ACTIONS.SET_MARKERS_SHOWN, markers_shown }); -export const getGPXTrack = () => ({ type: USER_ACTIONS.GET_GPX_TRACK }); -export const setIsEmpty = is_empty => ({ type: USER_ACTIONS.SET_IS_EMPTY, is_empty }); +// export const getGPXTrack = () => ({ type: USER_ACTIONS.GET_GPX_TRACK }); +// export const setMarkersShown = markers_shown => ({ type: USER_ACTIONS.SET_MARKERS_SHOWN, markers_shown }); +// export const setIsEmpty = is_empty => ({ type: USER_ACTIONS.SET_IS_EMPTY, is_empty }); export const mapsLoadMore = () => ({ type: USER_ACTIONS.MAPS_LOAD_MORE }); export const mapsSetShift = (shift: number) => ({ type: USER_ACTIONS.MAPS_SET_SHIFT, shift }); -export const setFeature = (features: { [x: string]: boolean }) => ({ type: USER_ACTIONS.SET_FEATURE, features }); -export const setIsRouting = (is_routing: boolean) => ({ type: USER_ACTIONS.SET_IS_ROUTING, is_routing }); +// export const setFeature = (features: { [x: string]: boolean }) => ({ type: USER_ACTIONS.SET_FEATURE, features }); +// export const setIsRouting = (is_routing: boolean) => ({ type: USER_ACTIONS.SET_IS_ROUTING, is_routing }); export const dropRoute = (address: string) => ({ type: USER_ACTIONS.DROP_ROUTE, address }); export const modifyRoute = (address: string, { title, is_public }: { title: string, is_public: boolean }) => ({ diff --git a/src/redux/user/constants.ts b/src/redux/user/constants.ts index 34dea81..dcea9d0 100644 --- a/src/redux/user/constants.ts +++ b/src/redux/user/constants.ts @@ -1,61 +1,7 @@ -export interface IActions { - [x: string]: string, -} - -export const USER_ACTIONS: IActions = { +export const USER_ACTIONS = { SET_USER: 'SET_USER', USER_LOGOUT: 'USER_LOGOUT', - - SET_EDITING: 'SET_EDITING', - SET_MODE: 'SET_MODE', - SET_DISTANCE: 'SET_DISTANCE', - SET_CHANGED: 'SET_CHANGED', - SET_ROUTER_POINTS: 'SET_ROUTER_POINTS', - SET_ACTIVE_STICKER: 'SET_ACTIVE_STICKER', - SET_LOGO: 'SET_LOGO', - SET_TITLE: 'SET_TITLE', - SET_ADDRESS: 'SET_ADDRESS', - SET_ADDRESS_ORIGIN: 'SET_ADDRESS_ORIGIN', - SET_PUBLIC: 'SET_PUBLIC', - SET_STARRED: 'SET_STARRED', - SET_DESCRIPTION: 'SET_DESCRIPTION', - - START_EDITING: 'START_EDITING', - STOP_EDITING: 'STOP_EDITING', - - ROUTER_CANCEL: 'ROUTER_CANCEL', - ROUTER_SUBMIT: 'ROUTER_SUBMIT', - - CLEAR_POLY: 'CLEAR_POLY', - CLEAR_STICKERS: 'CLEAR_STICKERS', - CLEAR_ALL: 'CLEAR_ALL', - CLEAR_CANCEL: 'CLEAR_CANCEL', - - SEND_SAVE_REQUEST: 'SEND_SAVE_REQUEST', - SET_SAVE_LOADING: 'SET_SAVE_LOADING', - CANCEL_SAVE_REQUEST: 'CANCEL_SAVE_REQUEST', - RESET_SAVE_DIALOG: 'RESET_SAVE_DIALOG', - - SET_SAVE_SUCCESS: 'SET_SAVE_SUCCESS', - SET_SAVE_ERROR: 'SET_SAVE_ERROR', - SET_SAVE_OVERWRITE: 'SET_SAVE_OVERWRITE', - - SHOW_RENDERER: 'SHOW_RENDERER', - HIDE_RENDERER: 'HIDE_RENDERER', - SET_RENDERER: 'SET_RENDERER', - TAKE_A_SHOT: 'TAKE_A_SHOT', - CROP_A_SHOT: 'CROP_A_SHOT', - - SET_PROVIDER: 'SET_PROVIDER', - CHANGE_PROVIDER: 'CHANGE_PROVIDER', - - SET_DIALOG: 'SET_DIALOG', - SET_DIALOG_ACTIVE: 'SET_DIALOG_ACTIVE', - LOCATION_CHANGED: 'LOCATION_CHANGED', - SET_READY: 'SET_READY', - GOT_VK_USER: 'GOT_VK_USER', - KEY_PRESSED: 'KEY_PRESSED', IFRAME_LOGIN_VK: 'IFRAME_LOGIN_VK', @@ -68,21 +14,13 @@ export const USER_ACTIONS: IActions = { SEARCH_SET_LOADING: 'SEARCH_SET_LOADING', OPEN_MAP_DIALOG: 'OPEN_MAP_DIALOG', - SET_SPEED: 'SET_SPEED', - - SET_MARKERS_SHOWN: 'SET_MARKERS_SHOWN', - - GET_GPX_TRACK: 'GET_GPX_TRACK', - SET_IS_EMPTY: 'SET_IS_EMPTY', - MAPS_LOAD_MORE: 'MAPS_LOAD_MORE', MAPS_SET_SHIFT: 'MAPS_SET_SHIFT', - SET_FEATURE: 'SET_FEATURE', - SET_IS_ROUTING: 'SET_IS_ROUTING', - DROP_ROUTE: 'DROP_ROUTE', + SET_STARRED: 'SET_STARRED', MODIFY_ROUTE: 'MODIFY_ROUTE', + SET_ROUTE_STARRED: 'SET_ROUTE_STARRED', TOGGLE_ROUTE_STARRED: 'TOGGLE_ROUTE_STARRED', }; diff --git a/src/redux/user/handlers.ts b/src/redux/user/handlers.ts index 8d9cba9..3550434 100644 --- a/src/redux/user/handlers.ts +++ b/src/redux/user/handlers.ts @@ -1,6 +1,5 @@ import { IRootState } from "."; import * as ActionCreators from './actions' -import { TIPS } from "~/constants/tips"; import { TABS } from "~/constants/dialogs"; import { USER_ACTIONS } from "./constants"; @@ -10,11 +9,6 @@ export interface ActionHandler { (state: IRootState, payload: UnsafeReturnType): IRootState; } -const getEstimated = (distance: number, speed: number = 15): number => { - const time = (distance && (distance / speed)) || 0; - return (time && parseFloat(time.toFixed(1))); -}; - const setUser: ActionHandler = (state, { user }) => ({ ...state, user: { @@ -23,121 +17,6 @@ const setUser: ActionHandler = (state, { user }) }, }); -const setEditing: ActionHandler = (state, { editing }) => ({ - ...state, editing -}); - -const setChanged: ActionHandler = (state, { changed }) => ({ - ...state, - changed -}); - -const setMode: ActionHandler = (state, { mode }) => ({ - ...state, - mode -}); - -const setDistance: ActionHandler = (state, { distance }) => ({ - ...state, - distance, - estimated: getEstimated(distance, state.speed), -}); - -const setRouterPoints: ActionHandler = (state, { routerPoints }) => ({ - ...state, - routerPoints, -}); - -const setActiveSticker: ActionHandler = (state, { activeSticker }) => ({ - ...state, - activeSticker: activeSticker || { set: null, sticker: null } -}); - -// const setLogo: ActionHandler = (state, { logo }) => ({ -// ...state, -// logo -// }); - -// const setTitle: ActionHandler = (state, { title }) => ({ -// ...state, -// title -// }); - -// const setDescription: ActionHandler = (state, { description }) => ({ -// ...state, -// description -// }); - -// const setAddress: ActionHandler = (state, { address }) => ({ -// ...state, -// address -// }); - -const setAddressOrigin: ActionHandler = (state, { address_origin }) => ({ - ...state, - address_origin -}); - -const sendSaveRequest: ActionHandler = (state) => ({ - ...state, - save_processing: true, -}); - -const setSaveError: ActionHandler = (state, { save_error }) => ({ - ...state, save_error, save_finished: false, save_processing: false -}); - -const setSaveLoading: ActionHandler = (state, { save_loading }) => ({ - ...state, save_loading -}); - -const setSaveOverwrite: ActionHandler = (state) => ({ - ...state, - save_overwriting: true, - save_finished: false, - save_processing: false, - save_error: TIPS.SAVE_OVERWRITE, -}); - -const setSaveSuccess: ActionHandler = (state, { save_error }) => ({ - ...state, - save_overwriting: false, - save_finished: true, - save_processing: false, - save_error, -}); - -const resetSaveDialog: ActionHandler = (state) => ({ - ...state, save_overwriting: false, save_finished: false, save_processing: false, save_error: '', -}); - -const hideRenderer: ActionHandler = (state) => ({ - ...state, - renderer: { ...state.renderer, renderer_active: false } -}); - -const setRenderer: ActionHandler = (state, { payload }) => ({ - ...state, - renderer: { ...state.renderer, ...payload } -}); - -// const setProvider: ActionHandler = (state, { provider }) => ({ ...state, provider }); - -const setDialog: ActionHandler = (state, { dialog }) => ({ - ...state, - dialog, -}); - -const setDialogActive: ActionHandler = (state, { dialog_active }) => ({ - ...state, - dialog_active: dialog_active || !state.dialog_active, -}); - -const setReady: ActionHandler = (state, { ready = true }) => ({ - ...state, - ready, -}); - const searchSetTitle: ActionHandler = (state, { title = '' }) => ({ ...state, routes: { @@ -199,17 +78,8 @@ const searchSetLoading: ActionHandler = } }); -// const setPublic: ActionHandler = (state, { is_public = false }) => ({ ...state, is_public }); const setStarred: ActionHandler = (state, { is_published = false }) => ({ ...state, is_published }); -const setSpeed: ActionHandler = (state, { speed = 15 }) => ({ - ...state, - speed, - estimated: getEstimated(state.distance, speed), -}); - -const setMarkersShown: ActionHandler = (state, { markers_shown = true }) => ({ ...state, markers_shown }); -const setIsEmpty: ActionHandler = (state, { is_empty = true }) => ({ ...state, is_empty }); const mapsSetShift: ActionHandler = (state, { shift = 0 }) => ({ ...state, routes: { @@ -218,19 +88,6 @@ const mapsSetShift: ActionHandler = (state, } }); -const setFeature: ActionHandler = (state, { features }) => ({ - ...state, - features: { - ...state.features, - ...features, - } -}); - -const setIsRouting: ActionHandler = (state, { is_routing }) => ({ - ...state, - is_routing, -}); - const setRouteStarred: ActionHandler = (state, { address, is_published }) => ({ ...state, routes: { @@ -248,33 +105,6 @@ const setRouteStarred: ActionHandler = (s export const USER_HANDLERS = ({ [USER_ACTIONS.SET_USER]: setUser, - [USER_ACTIONS.SET_EDITING]: setEditing, - [USER_ACTIONS.SET_CHANGED]: setChanged, - [USER_ACTIONS.SET_MODE]: setMode, - [USER_ACTIONS.SET_DISTANCE]: setDistance, - [USER_ACTIONS.SET_ROUTER_POINTS]: setRouterPoints, - [USER_ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, - // [USER_ACTIONS.SET_LOGO]: setLogo, - // [USER_ACTIONS.SET_TITLE]: setTitle, - // [USER_ACTIONS.SET_DESCRIPTION]: setDescription, - // [USER_ACTIONS.SET_ADDRESS]: setAddress, - [USER_ACTIONS.SET_ADDRESS_ORIGIN]: setAddressOrigin, - - [USER_ACTIONS.SET_SAVE_ERROR]: setSaveError, - [USER_ACTIONS.SET_SAVE_LOADING]: setSaveLoading, - [USER_ACTIONS.SET_SAVE_OVERWRITE]: setSaveOverwrite, - [USER_ACTIONS.SET_SAVE_SUCCESS]: setSaveSuccess, - [USER_ACTIONS.SEND_SAVE_REQUEST]: sendSaveRequest, - [USER_ACTIONS.RESET_SAVE_DIALOG]: resetSaveDialog, - - [USER_ACTIONS.HIDE_RENDERER]: hideRenderer, - [USER_ACTIONS.SET_RENDERER]: setRenderer, - - // [USER_ACTIONS.SET_PROVIDER]: setProvider, - - [USER_ACTIONS.SET_DIALOG]: setDialog, - [USER_ACTIONS.SET_DIALOG_ACTIVE]: setDialogActive, - [USER_ACTIONS.SET_READY]: setReady, [USER_ACTIONS.SEARCH_SET_TITLE]: searchSetTitle, [USER_ACTIONS.SEARCH_SET_DISTANCE]: searchSetDistance, @@ -282,16 +112,10 @@ export const USER_HANDLERS = ({ [USER_ACTIONS.SEARCH_SET_TAB]: searchSetTab, [USER_ACTIONS.SEARCH_PUT_ROUTES]: searchPutRoutes, [USER_ACTIONS.SEARCH_SET_LOADING]: searchSetLoading, - // [USER_ACTIONS.SET_PUBLIC]: setPublic, - [USER_ACTIONS.SET_STARRED]: setStarred, - [USER_ACTIONS.SET_SPEED]: setSpeed, - [USER_ACTIONS.SET_MARKERS_SHOWN]: setMarkersShown, - [USER_ACTIONS.SET_IS_EMPTY]: setIsEmpty, [USER_ACTIONS.MAPS_SET_SHIFT]: mapsSetShift, - [USER_ACTIONS.SET_FEATURE]: setFeature, - [USER_ACTIONS.SET_IS_ROUTING]: setIsRouting, + [USER_ACTIONS.SET_STARRED]: setStarred, [USER_ACTIONS.SET_ROUTE_STARRED]: setRouteStarred, }); \ No newline at end of file diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 56e177e..09ff24e 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -1,8 +1,5 @@ import { createReducer } from 'reduxsauce'; import { DEFAULT_USER, IUser } from '~/constants/auth'; -import { MODES } from '~/constants/modes'; -import { DIALOGS, IDialogs } from '~/constants/dialogs'; -import { IStickers } from "~/constants/stickers"; import { USER_HANDLERS } from './handlers'; export interface IRouteListItem { @@ -15,50 +12,8 @@ export interface IRouteListItem { } export interface IRootReducer { - ready: boolean, + // ready: boolean, user: IUser, - editing: boolean, - mode: typeof MODES[keyof typeof MODES], - // logo: keyof typeof LOGOS, - routerPoints: number, - distance: number, - // description: string, - estimated: number, - speed: number, - activeSticker: { set?: keyof IStickers, sticker?: string }, - // title: string, - // address: string, - // address_origin: string, - changed: boolean, - // provider: keyof typeof PROVIDERS, - markers_shown: boolean, - - is_published: boolean, - // is_public: boolean, - is_empty: boolean, - is_routing: boolean, - - save_error: string, - save_finished: boolean, - save_overwriting: boolean, - save_processing: boolean, - save_loading: boolean, - - dialog: IDialogs[keyof IDialogs], - dialog_active: boolean, - - features: { - routing: boolean, - }, - - renderer: { - data: string, - width: number, - height: number - renderer_active: boolean, - info: string, - progress: number, - }, routes: { limit: 0, @@ -81,53 +36,8 @@ export interface IRootReducer { export type IRootState = Readonly; export const INITIAL_STATE: IRootReducer = { - ready: false, user: { ...DEFAULT_USER }, - mode: MODES.NONE, - // logo: DEFAULT_LOGO, - routerPoints: 0, - distance: 0, - // description: '', - estimated: 0, - speed: 15, - activeSticker: { set: null, sticker: null }, - // title: '', - // address: '', - // address_origin: '', - // provider: DEFAULT_PROVIDER, - - markers_shown: true, - changed: false, - editing: false, - - is_published: false, - // is_public: false, - is_empty: true, - is_routing: false, - - save_error: '', - save_finished: false, - save_overwriting: false, - save_processing: false, - save_loading: false, - - dialog: DIALOGS.NONE, - dialog_active: false, - - features: { - routing: false, - }, - - renderer: { - data: '', - width: 0, - height: 0, - renderer_active: false, - info: '', - progress: 0, - }, - routes: { limit: 0, loading: false, // <-- maybe delete this diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 241db78..5b067ef 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -19,23 +19,23 @@ import { sendRouteStarred, } from '~/utils/api'; import { - hideRenderer, - searchPutRoutes, - searchSetLoading, - setChanged, - setDialogActive, - setEditing, - setMode, - setReady, - setRenderer, + // hideRenderer, + // setChanged, + // setDialogActive, + // setEditing, + // setMode, + // setReady, + // setRenderer, + // setDialog, + // setAddressOrigin, + // clearAll, + // setFeature, searchSetTab, setUser, - setDialog, - setAddressOrigin, mapsSetShift, searchChangeDistance, - clearAll, - setFeature, + searchPutRoutes, + searchSetLoading, searchSetTitle, setRouteStarred, } from '~/redux/user/actions'; @@ -48,43 +48,22 @@ import { pushPath, } from '~/utils/history'; import { USER_ACTIONS } from '~/redux/user/constants'; -import { MODES } from '~/constants/modes'; import { DEFAULT_USER } from '~/constants/auth'; -import { - composeArrows, - composeDistMark, - composeImages, - composePoly, - composeStickers, - downloadCanvas, - fetchImages, - getPolyPlacement, - getStickersPlacement, - getTilePlacement, - imageFetcher, -} from '~/utils/renderer'; -import { LOGOS } from '~/constants/logos'; + import { DIALOGS, TABS } from '~/constants/dialogs'; import * as ActionCreators from '~/redux/user/actions'; -import { downloadGPXTrack, getGPXString } from '~/utils/gpx'; import { Unwrap } from '~/utils/middleware'; import { IState } from '~/redux/store'; import { selectUser, selectUserUser } from './selectors'; import { mapInitSaga, loadMapSaga, replaceAddressIfItsBusy } from '~/redux/map/sagas'; -import { LatLng } from 'leaflet'; -import { selectMap } from '~/redux/map/selectors'; +import { editorSetDialog, editorSetDialogActive } from '../editor/actions'; +import { selectEditor } from '../editor/selectors'; +import { EDITOR_ACTIONS } from '../editor/constants'; // const getUser = (state: IState) => state.user.user; // const selectUser = (state: IState) => state.user; -const hideLoader = () => { - document.getElementById('loader').style.opacity = String(0); - document.getElementById('loader').style.pointerEvents = 'none'; - - return true; -}; - function* generateGuestSaga() { const { data: { user, random_url }, @@ -95,52 +74,43 @@ function* generateGuestSaga() { return { ...user, random_url }; } -function* startEditingSaga() { - const { path } = getUrlData(); - yield pushPath(`/${path}/edit`); -} +// function* stopEditingSaga() { +// const { changed, editing, mode, address_origin } = yield select(selectUser); +// const { path } = getUrlData(); -function* stopEditingSaga() { - const { changed, editing, mode, address_origin } = yield select(selectUser); - const { path } = getUrlData(); +// if (!editing) return; +// if (changed && mode !== MODES.CONFIRM_CANCEL) { +// yield put(setMode(MODES.CONFIRM_CANCEL)); +// return; +// } - if (!editing) return; - if (changed && mode !== MODES.CONFIRM_CANCEL) { - yield put(setMode(MODES.CONFIRM_CANCEL)); - return; - } +// yield put(setMode(MODES.NONE)); +// yield put(setChanged(false)); - // TODO: cancel editing? - // yield editor.cancelEditing(); - yield put(setMode(MODES.NONE)); - yield put(setChanged(false)); - // TODO: dont close editor if theres no initial data - // yield put(setEditing(editor.hasEmptyHistory)); // don't close editor if no previous map +// yield pushPath(`/${address_origin || path}/`); +// } - yield pushPath(`/${address_origin || path}/`); -} +// function* checkOSRMServiceSaga() { +// const routing = yield call(checkOSRMService, [new LatLng(1,1), new LatLng(2,2)]); -function* checkOSRMServiceSaga() { - const routing = yield call(checkOSRMService, [new LatLng(1,1), new LatLng(2,2)]); +// yield put(setFeature({ routing })); +// } - yield put(setFeature({ routing })); -} +// export function* setReadySaga() { +// yield put(setReady(true)); +// hideLoader(); -export function* setReadySaga() { - yield put(setReady(true)); - hideLoader(); - - yield call(checkOSRMServiceSaga); - yield put(searchSetTab(TABS.MY)); -} +// yield call(checkOSRMServiceSaga); +// yield put(searchSetTab(TABS.MY)); +// } function* authCheckSaga({ key }: RehydrateAction) { if (key !== 'user') return; pushLoaderState(70); - const { id, token } = yield select(selectUserUser); - const { ready } = yield select(selectUser); + const { id, token }: ReturnType = yield select(selectUserUser); + const { ready }: ReturnType = yield select(selectEditor); if (window.location.search || true) { const { viewer_id, auth_key } = yield parseQuery(window.location.search); @@ -215,128 +185,127 @@ function* authCheckSaga({ key }: RehydrateAction) { // return true; // } +// function* getRenderData() { +// yield put(setRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); -function* getRenderData() { - yield put(setRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); +// const { route, stickers, provider }: ReturnType = yield select(selectMap); - const { route, stickers, provider }: ReturnType = yield select(selectMap); +// const canvas = document.getElementById('renderer'); +// canvas.width = window.innerWidth; +// canvas.height = window.innerHeight; +// const ctx = canvas.getContext('2d'); - const canvas = document.getElementById('renderer'); - canvas.width = window.innerWidth; - canvas.height = window.innerHeight; - const ctx = canvas.getContext('2d'); +// const geometry = getTilePlacement(); +// const points = getPolyPlacement(route); +// const sticker_points = getStickersPlacement(stickers); +// // TODO: get distance: +// const distance = 0; +// // const distance = editor.poly.poly.distance; - const geometry = getTilePlacement(); - const points = getPolyPlacement(route); - const sticker_points = getStickersPlacement(stickers); - // TODO: get distance: - const distance = 0; - // const distance = editor.poly.poly.distance; +// ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.clearRect(0, 0, canvas.width, canvas.height); +// const images = yield fetchImages(ctx, geometry, provider); - const images = yield fetchImages(ctx, geometry, provider); +// yield put(setRenderer({ info: 'Отрисовка', progress: 0.5 })); - yield put(setRenderer({ info: 'Отрисовка', progress: 0.5 })); +// yield composeImages({ geometry, images, ctx }); +// yield composePoly({ points, ctx }); +// yield composeArrows({ points, ctx }); +// yield composeDistMark({ ctx, points, distance }); +// yield composeStickers({ stickers: sticker_points, ctx }); - yield composeImages({ geometry, images, ctx }); - yield composePoly({ points, ctx }); - yield composeArrows({ points, ctx }); - yield composeDistMark({ ctx, points, distance }); - yield composeStickers({ stickers: sticker_points, ctx }); +// yield put(setRenderer({ info: 'Готово', progress: 1 })); - yield put(setRenderer({ info: 'Готово', progress: 1 })); +// return yield canvas.toDataURL('image/jpeg'); +// } - return yield canvas.toDataURL('image/jpeg'); -} +// function* takeAShotSaga() { +// const worker = call(getRenderData); -function* takeAShotSaga() { - const worker = call(getRenderData); +// const { result, timeout } = yield race({ +// result: worker, +// timeout: delay(500), +// }); - const { result, timeout } = yield race({ - result: worker, - timeout: delay(500), - }); +// if (timeout) yield put(setMode(MODES.SHOT_PREFETCH)); - if (timeout) yield put(setMode(MODES.SHOT_PREFETCH)); +// const data = yield result || worker; - const data = yield result || worker; +// yield put(setMode(MODES.NONE)); +// yield put( +// setRenderer({ +// data, +// renderer_active: true, +// width: window.innerWidth, +// height: window.innerHeight, +// }) +// ); +// } - yield put(setMode(MODES.NONE)); - yield put( - setRenderer({ - data, - renderer_active: true, - width: window.innerWidth, - height: window.innerHeight, - }) - ); -} +// function* getCropData({ x, y, width, height }) { +// const { +// logo, +// renderer: { data }, +// } = yield select(selectUser); +// const canvas = document.getElementById('renderer'); +// canvas.width = width; +// canvas.height = height; +// const ctx = canvas.getContext('2d'); +// const image = yield imageFetcher(data); -function* getCropData({ x, y, width, height }) { - const { - logo, - renderer: { data }, - } = yield select(selectUser); - const canvas = document.getElementById('renderer'); - canvas.width = width; - canvas.height = height; - const ctx = canvas.getContext('2d'); - const image = yield imageFetcher(data); +// ctx.drawImage(image, -x, -y); - ctx.drawImage(image, -x, -y); +// if (logo && LOGOS[logo][1]) { +// const logoImage = yield imageFetcher(LOGOS[logo][1]); +// ctx.drawImage(logoImage, width - logoImage.width, height - logoImage.height); +// } - if (logo && LOGOS[logo][1]) { - const logoImage = yield imageFetcher(LOGOS[logo][1]); - ctx.drawImage(logoImage, width - logoImage.width, height - logoImage.height); - } +// return yield canvas.toDataURL('image/jpeg'); +// } - return yield canvas.toDataURL('image/jpeg'); -} +// function* cropAShotSaga(params) { +// const { title, address } = yield select(selectUser); +// yield call(getCropData, params); +// const canvas = document.getElementById('renderer') as HTMLCanvasElement; -function* cropAShotSaga(params) { - const { title, address } = yield select(selectUser); - yield call(getCropData, params); - const canvas = document.getElementById('renderer') as HTMLCanvasElement; +// downloadCanvas(canvas, (title || address).replace(/\./gi, ' ')); - downloadCanvas(canvas, (title || address).replace(/\./gi, ' ')); +// return yield put(hideRenderer()); +// } - return yield put(hideRenderer()); -} +// function* locationChangeSaga({ location }: ReturnType) { +// const { +// address, +// ready, +// user: { id, random_url }, +// } = yield select(selectUser); -function* locationChangeSaga({ location }: ReturnType) { - const { - address, - ready, - user: { id, random_url }, - } = yield select(selectUser); +// const { owner }: ReturnType = yield select(selectMap) - const { owner }: ReturnType = yield select(selectMap) +// if (!ready) return; - if (!ready) return; +// const { path, mode } = getUrlData(location); - const { path, mode } = getUrlData(location); +// if (address !== path) { +// const map = yield call(loadMapSaga, path); - if (address !== path) { - const map = yield call(loadMapSaga, path); +// if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { +// return yield call(replaceAddressIfItsBusy, map.random_url, map.address); +// } +// } else if (mode === 'edit' && owner.id !== id) { +// return yield call(replaceAddressIfItsBusy, random_url, address); +// } else { +// yield put(setAddressOrigin('')); +// } - if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { - return yield call(replaceAddressIfItsBusy, map.random_url, map.address); - } - } else if (mode === 'edit' && owner.id !== id) { - return yield call(replaceAddressIfItsBusy, random_url, address); - } else { - yield put(setAddressOrigin('')); - } - - if (mode !== 'edit') { - yield put(setEditing(false)); - // editor.stopEditing(); - } else { - yield put(setEditing(true)); - // editor.startEditing(); - } -} +// if (mode !== 'edit') { +// yield put(setEditing(false)); +// // editor.stopEditing(); +// } else { +// yield put(setEditing(true)); +// // editor.startEditing(); +// } +// } function* gotVkUserSaga({ user: u }: ReturnType) { const { @@ -346,40 +315,40 @@ function* gotVkUserSaga({ user: u }: ReturnType yield put(setUser({ ...user, random_url })); } -function* keyPressedSaga({ key, target }: ReturnType): any { - if (target === 'INPUT' || target === 'TEXTAREA') { - return; - } +// function* keyPressedSaga({ key, target }: ReturnType): any { +// if (target === 'INPUT' || target === 'TEXTAREA') { +// return; +// } - if (key === 'Escape') { - const { - dialog_active, - mode, - renderer: { renderer_active }, - } = yield select(selectUser); +// if (key === 'Escape') { +// const { +// dialog_active, +// mode, +// renderer: { renderer_active }, +// } = yield select(selectUser); - if (renderer_active) return yield put(hideRenderer()); - if (dialog_active) return yield put(setDialogActive(false)); - if (mode !== MODES.NONE) return yield put(setMode(MODES.NONE)); - } else if (key === 'Delete') { - const { - user: { editing }, - } = yield select(); +// if (renderer_active) return yield put(hideRenderer()); +// if (dialog_active) return yield put(setDialogActive(false)); +// if (mode !== MODES.NONE) return yield put(setMode(MODES.NONE)); +// } else if (key === 'Delete') { +// const { +// user: { editing }, +// } = yield select(); - if (!editing) return; +// if (!editing) return; - const { mode } = yield select(selectUser); +// const { mode } = yield select(selectUser); - if (mode === MODES.TRASH) { - yield put(clearAll()); - } else { - yield put(setMode(MODES.TRASH)); - } - } -} +// if (mode === MODES.TRASH) { +// yield put(clearAll()); +// } else { +// yield put(setMode(MODES.TRASH)); +// } +// } +// } function* searchGetRoutes() { - const { token } = yield select(selectUserUser); + const { token }: ReturnType = yield select(selectUserUser); const { routes: { @@ -387,7 +356,7 @@ function* searchGetRoutes() { shift, filter: { title, distance, tab }, }, - } = yield select(selectUser); + }: ReturnType = yield select(selectUser); const result: Unwrap = yield getRouteList({ token, @@ -442,14 +411,17 @@ function* searchSetSaga() { function* openMapDialogSaga({ tab }: ReturnType) { const { - dialog_active, routes: { filter: { tab: current }, }, - } = yield select(selectUser); + }: ReturnType = yield select(selectUser); + + const { + dialog_active, + }: ReturnType = yield select(selectEditor); if (dialog_active && tab === current) { - return yield put(setDialogActive(false)); + return yield put(editorSetDialogActive(false)); } if (tab !== current) { @@ -457,8 +429,8 @@ function* openMapDialogSaga({ tab }: ReturnType = yield select(selectEditor); if (dialog_active) yield call(searchSetSagaWorker); return true; } -function* getGPXTrackSaga(): SagaIterator { - const { route, stickers }: ReturnType = yield select(selectMap); - const { title, address } = yield select(selectUser); +// function* getGPXTrackSaga(): SagaIterator { +// const { route, stickers }: ReturnType = yield select(selectMap); +// const { title, address } = yield select(selectUser); - if (!route || route.length <= 0) return; +// if (!route || route.length <= 0) return; - const track = getGPXString({ route, stickers, title: title || address }); +// const track = getGPXString({ route, stickers, title: title || address }); - return downloadGPXTrack({ track, title }); -} +// return downloadGPXTrack({ track, title }); +// } function* mapsLoadMoreSaga() { const { routes: { limit, list, shift, step, loading, filter }, - } = yield select(selectUser); + }: ReturnType = yield select(selectUser); if (loading || list.length >= limit || limit === 0) return; @@ -540,7 +512,7 @@ function* mapsLoadMoreSaga() { } function* dropRouteSaga({ address }: ReturnType): SagaIterator { - const { token } = yield select(selectUserUser); + const { token }: ReturnType = yield select(selectUserUser); const { routes: { list, @@ -549,7 +521,7 @@ function* dropRouteSaga({ address }: ReturnType limit, filter: { min, max }, }, - } = yield select(selectUser); + }: ReturnType = yield select(selectUser); const index = list.findIndex(el => el.address === address); @@ -574,7 +546,7 @@ function* modifyRouteSaga({ title, is_public, }: ReturnType): SagaIterator { - const { token } = yield select(selectUserUser); + const { token }: ReturnType = yield select(selectUserUser); const { routes: { list, @@ -606,12 +578,12 @@ function* modifyRouteSaga({ function* toggleRouteStarredSaga({ address, }: ReturnType) { + const { token }: ReturnType = yield select(selectUserUser); const { routes: { list }, - }: IState['user'] = yield select(selectUser); + }: ReturnType = yield select(selectUser); const route = list.find(el => el.address === address); - const { token } = yield select(selectUserUser); yield put(setRouteStarred(address, !route.is_published)); const result = yield sendRouteStarred({ @@ -624,24 +596,24 @@ function* toggleRouteStarredSaga({ } export function* userSaga() { + // yield takeEvery(USER_ACTIONS.STOP_EDITING, stopEditingSaga); + // yield takeLatest(USER_ACTIONS.TAKE_A_SHOT, takeAShotSaga); + // yield takeLatest(USER_ACTIONS.CROP_A_SHOT, cropAShotSaga); + // yield takeLatest(USER_ACTIONS.LOCATION_CHANGED, locationChangeSaga); + // yield takeLatest(USER_ACTIONS.KEY_PRESSED, keyPressedSaga); + // yield takeLatest(USER_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); + yield takeLatest(REHYDRATE, authCheckSaga); - yield takeEvery(USER_ACTIONS.START_EDITING, startEditingSaga); - yield takeEvery(USER_ACTIONS.STOP_EDITING, stopEditingSaga); - yield takeEvery(USER_ACTIONS.USER_LOGOUT, userLogoutSaga); // yield takeEvery(USER_ACTIONS.ROUTER_CANCEL, routerCancelSaga); // yield takeEvery(USER_ACTIONS.ROUTER_SUBMIT, routerSubmitSaga); - yield takeLatest(USER_ACTIONS.TAKE_A_SHOT, takeAShotSaga); - yield takeLatest(USER_ACTIONS.CROP_A_SHOT, cropAShotSaga); // yield takeEvery(USER_ACTIONS.CHANGE_PROVIDER, changeProviderSaga); - yield takeLatest(USER_ACTIONS.LOCATION_CHANGED, locationChangeSaga); yield takeLatest(USER_ACTIONS.GOT_VK_USER, gotVkUserSaga); - yield takeLatest(USER_ACTIONS.KEY_PRESSED, keyPressedSaga); // yield takeLatest(USER_ACTIONS.SET_TITLE, setTitleSaga); @@ -654,7 +626,6 @@ export function* userSaga() { yield takeLatest(USER_ACTIONS.SEARCH_SET_TAB, searchSetTabSaga); yield takeLatest(USER_ACTIONS.SET_USER, setUserSaga); - yield takeLatest(USER_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); yield takeLatest(USER_ACTIONS.MAPS_LOAD_MORE, mapsLoadMoreSaga); yield takeLatest(USER_ACTIONS.DROP_ROUTE, dropRouteSaga); diff --git a/src/redux/user/selectors.ts b/src/redux/user/selectors.ts index 4d9e268..6de1196 100644 --- a/src/redux/user/selectors.ts +++ b/src/redux/user/selectors.ts @@ -1,8 +1,4 @@ import { IState } from '~/redux/store' export const selectUser = (state: IState) => state.user; -export const selectUserUser = (state: IState) => state.user.user; -export const selectUserEditing = (state: IState) => state.user.editing; -export const selectUserMode = (state: IState) => state.user.mode; -export const selectUserActiveSticker = (state: IState) => state.user.activeSticker; -export const selectUserRenderer = (state: IState) => state.user.renderer; \ No newline at end of file +export const selectUserUser = (state: IState) => state.user.user; \ No newline at end of file diff --git a/src/utils/format.ts b/src/utils/format.ts index f086504..12452e7 100644 --- a/src/utils/format.ts +++ b/src/utils/format.ts @@ -164,4 +164,7 @@ export const toTranslit = (string: string = ''): string => export const parseDesc = (text: string = ''): string => text.replace(/(\n{2,})/gi, '\n\n'); -// export const colorizeTitle = (text: string): string => text.replace(/(\[[^\]^]+\])/, ``) +export const getEstimated = (distance: number, speed: number = 15): number => { + const time = (distance && (distance / speed)) || 0; + return (time && parseFloat(time.toFixed(1))); +}; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 48ad582..466a91b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,5 +23,8 @@ "./src/index.tsx", "./backend/**/*", "./custom.d.ts" + ], + "exclude": [ + "./src/_modules/**/*" ] } From 67eeaa7293b36f2560e7a3ac62983d14828d6b57 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 11:47:01 +0700 Subject: [PATCH 121/320] fixed trash dialog --- src/components/dialogs/TrashDialog.tsx | 45 +++++++++++++++++--------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index fcb19c9..e22abab 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -1,18 +1,27 @@ -import React from 'react'; -import { Icon } from '~/components/panels/Icon'; +import React, { FC } from 'react'; +import { connect } from 'react-redux'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; -type Props = { - clearPoly: () => void, - clearStickers: () => void, - clearAll: () => void, - clearCancel: () => void, +const mapStateToProps = () => ({}); +const mapDispatchToProps = { + editorClearPoly: EDITOR_ACTIONS.editorClearPoly, + editorClearStickers: EDITOR_ACTIONS.editorClearStickers, + editorClearAll: EDITOR_ACTIONS.editorClearAll, + editorClearCancel: EDITOR_ACTIONS.editorClearCancel, +}; - width: number, -} +type Props = ReturnType & + typeof mapDispatchToProps & { + width: number; + }; -export const TrashDialog = ({ - clearPoly, clearStickers, clearAll, clearCancel, width, -}: Props) => ( +const TrashDialogUnconnected: FC = ({ + editorClearPoly, + editorClearStickers, + editorClearAll, + editorClearCancel, + width, +}) => (
      @@ -22,21 +31,25 @@ export const TrashDialog = ({
      -
      +
      Маршрут
      -
      +
      Стикеры
      -
      +
      ВСЕ
      -
      +
      Отмена
      ); + +const TrashDialog = connect(mapStateToProps, mapDispatchToProps)(TrashDialogUnconnected); + +export { TrashDialog }; From 7bdf07cae561c7d43e2971f72be38e1ba7dd87b6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 12:44:25 +0700 Subject: [PATCH 122/320] fixed map clicks on sticker drag --- src/components/dialogs/RouterDialog.tsx | 64 +++++++++------ src/constants/map.ts | 18 +++++ src/containers/map/Map/index.tsx | 70 +++++++--------- src/containers/map/Sticker/index.tsx | 103 +++++++++++------------- src/containers/map/Stickers/index.tsx | 5 +- src/redux/editor/sagas.ts | 29 +++---- src/utils/renderer.ts | 2 +- 7 files changed, 150 insertions(+), 141 deletions(-) create mode 100644 src/constants/map.ts diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index a362d9e..0e11cd8 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -1,25 +1,20 @@ -import React from 'react'; +import React, { FC } from 'react'; import { Icon } from '~/components/panels/Icon'; -import * as EDITOR_ACTIONS from '~/redux/editor/actions' -import classnames from "classnames"; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import classnames from 'classnames'; +import { connect } from 'react-redux'; +import { selectEditor } from '~/redux/editor/selectors'; -type Props = { - routerPoints: number, - width: number, - is_routing: boolean, - - editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel, - editorRouterSubmit: typeof EDITOR_ACTIONS.editorRouterSubmit, -} - -const noPoints = ({ editorRouterCancel }: { editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel }) => ( +const noPoints = ({ + editorRouterCancel, +}: { + editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel; +}) => (
      -
      - Укажите первую точку на карте -
      +
      Укажите первую точку на карте
      @@ -33,7 +28,11 @@ const noPoints = ({ editorRouterCancel }: { editorRouterCancel: typeof EDITOR_AC ); -const firstPoint = ({ editorRouterCancel }: { editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel }) => ( +const firstPoint = ({ + editorRouterCancel, +}: { + editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel; +}) => (
      @@ -53,10 +52,11 @@ const firstPoint = ({ editorRouterCancel }: { editorRouterCancel: typeof EDITOR_ ); const draggablePoints = ({ - editorRouterCancel, editorRouterSubmit + editorRouterCancel, + editorRouterSubmit, }: { - editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel, - editorRouterSubmit: typeof EDITOR_ACTIONS.editorRouterSubmit, + editorRouterCancel: typeof EDITOR_ACTIONS.editorRouterCancel; + editorRouterSubmit: typeof EDITOR_ACTIONS.editorRouterSubmit; }) => (
      @@ -79,9 +79,23 @@ const draggablePoints = ({ ); -export const RouterDialog = ({ - routerPoints, editorRouterCancel, editorRouterSubmit, width, is_routing, -}: Props) => ( +const mapStateToProps = state => ({ + editor: selectEditor(state), +}); + +const mapDispatchToProps = { + editorRouterCancel: EDITOR_ACTIONS.editorRouterCancel, + editorRouterSubmit: EDITOR_ACTIONS.editorRouterSubmit, +}; + +type Props = ReturnType & typeof mapDispatchToProps & { width?: number }; + +const RouterDialogUnconnected: FC = ({ + editor: { routerPoints, is_routing }, + editorRouterCancel, + editorRouterSubmit, + width, +}) => (
      @@ -90,3 +104,7 @@ export const RouterDialog = ({ {routerPoints >= 2 && draggablePoints({ editorRouterCancel, editorRouterSubmit })}
      ); + +const RouterDialog = connect(mapStateToProps, mapDispatchToProps)(RouterDialogUnconnected); + +export { RouterDialog }; diff --git a/src/constants/map.ts b/src/constants/map.ts new file mode 100644 index 0000000..241fc28 --- /dev/null +++ b/src/constants/map.ts @@ -0,0 +1,18 @@ +import { Map } from 'leaflet'; + +export class MapContainer extends Map { + disableClicks = () => { + this.clickable = false; + }; + + enableClicks = () => { + this.clickable = true; + }; + + public clickable = true; +} + +export const MainMap = new MapContainer(document.getElementById('canvas')).setView( + [55.0153275, 82.9071235], + 13 +); diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index 2c42cb8..ba5a2b5 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -1,20 +1,18 @@ -import { Map as MapInterface, map } from "leaflet"; -import React from "react"; -import { createPortal } from "react-dom"; -import { - selectMapProvider, - selectMapRoute, - selectMapStickers -} from "~/redux/map/selectors"; -import { connect } from "react-redux"; -import * as MAP_ACTIONS from "~/redux/map/actions"; +import React from 'react'; -import { Route } from "~/containers/map/Route"; -import { TileLayer } from "~/containers/map/TileLayer"; -import { Stickers } from "~/containers/map/Stickers"; +import { MainMap } from '~/constants/map'; +import { Map as MapInterface } from 'leaflet'; +import { createPortal } from 'react-dom'; +import { selectMapProvider, selectMapRoute, selectMapStickers } from '~/redux/map/selectors'; +import { connect } from 'react-redux'; +import * as MAP_ACTIONS from '~/redux/map/actions'; + +import { Route } from '~/containers/map/Route'; +import { TileLayer } from '~/containers/map/TileLayer'; +import { Stickers } from '~/containers/map/Stickers'; import 'leaflet/dist/leaflet.css'; -import { selectEditorEditing } from "~/redux/editor/selectors"; +import { selectEditorEditing } from '~/redux/editor/selectors'; const mapStateToProps = state => ({ provider: selectMapProvider(state), @@ -27,15 +25,13 @@ const mapDispatchToProps = { mapSetRoute: MAP_ACTIONS.mapSetRoute, mapDropSticker: MAP_ACTIONS.mapDropSticker, mapSetSticker: MAP_ACTIONS.mapSetSticker, - mapClicked: MAP_ACTIONS.mapClicked + mapClicked: MAP_ACTIONS.mapClicked, }; type IProps = React.HTMLAttributes & ReturnType & typeof mapDispatchToProps & {}; -export let MainMap = map(document.getElementById('canvas')).setView([55.0153275, 82.9071235], 13); - const MapUnconnected: React.FC = ({ provider, route, @@ -45,44 +41,38 @@ const MapUnconnected: React.FC = ({ mapClicked, mapSetRoute, mapSetSticker, - mapDropSticker + mapDropSticker, }) => { - const ref = React.useRef(null); - const [layer, setLayer] = React.useState(null); + const onClick = React.useCallback( + event => { + if (!MainMap.clickable) return; - const onClick = React.useCallback(event => { - mapClicked(event.latlng); - }, [mapClicked]); + mapClicked(event.latlng); + }, + [mapClicked] + ); React.useEffect(() => { - if (!ref.current) return; - - setLayer(MainMap); - }, []); - - React.useEffect(() => { - if (!layer) return; - - layer.addEventListener("click", onClick) + MainMap.addEventListener('click', onClick); return () => { - layer.removeEventListener("click", onClick) - } - }, [layer, onClick]); + MainMap.removeEventListener('click', onClick); + }; + }, [MainMap, onClick]); return createPortal( -
      - - +
      + +
      , - document.getElementById("canvas") + document.getElementById('canvas') ); }; diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index f9964bf..6fc4599 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -1,14 +1,15 @@ -import React from "react"; -import { Map, marker, Marker } from "leaflet"; -import { IStickerDump } from "~/redux/map/types"; -import { STICKERS } from "~/constants/stickers"; -import { StickerDesc } from "~/components/StickerDesc"; -import classNames from "classnames"; -import { DomMarker } from "~/utils/DomMarker"; -import { createPortal } from "react-dom"; +import React from 'react'; +import { marker, Marker } from 'leaflet'; +import { IStickerDump } from '~/redux/map/types'; +import { STICKERS } from '~/constants/stickers'; +import { StickerDesc } from '~/components/StickerDesc'; +import classNames from 'classnames'; +import { DomMarker } from '~/utils/DomMarker'; +import { createPortal } from 'react-dom'; +import { MapContainer } from '~/constants/map'; interface IProps { - map: Map; + map: MapContainer; sticker: IStickerDump; index: number; is_editing: boolean; @@ -17,10 +18,8 @@ interface IProps { mapDropSticker: (index: number) => void; } -export const getLabelDirection = (angle: number): "left" | "right" => - angle % Math.PI >= -(Math.PI / 2) && angle % Math.PI <= Math.PI / 2 - ? "left" - : "right"; +export const getLabelDirection = (angle: number): 'left' | 'right' => + angle % Math.PI >= -(Math.PI / 2) && angle % Math.PI <= Math.PI / 2 ? 'left' : 'right'; const getX = e => e.touches && e.touches.length > 0 @@ -33,53 +32,56 @@ const Sticker: React.FC = ({ index, mapSetSticker, mapDropSticker, - is_editing + is_editing, }) => { const [layer, setLayer] = React.useState(null); const [dragging, setDragging] = React.useState(false); const [angle, setAngle] = React.useState(sticker.angle); - const element = React.useMemo(() => document.createElement("div"), []); + const element = React.useMemo(() => document.createElement('div'), []); const stickerArrow = React.useRef(null); const stickerImage = React.useRef(null); - const onChange = React.useCallback(state => mapSetSticker(index, state), [ - mapSetSticker, - index - ]); - const onDelete = React.useCallback(state => mapDropSticker(index), [ - mapSetSticker, - index - ]); + const onChange = React.useCallback(state => mapSetSticker(index, state), [mapSetSticker, index]); + const onDelete = React.useCallback(state => mapDropSticker(index), [mapSetSticker, index]); const onDragStart = React.useCallback(() => { layer.dragging.disable(); map.dragging.disable(); + map.disableClicks(); setDragging(true); }, [setDragging, layer, map]); const onDragStop = React.useCallback(() => { - layer.dragging.enable(); - map.dragging.enable(); - setDragging(false); onChange({ ...sticker, - angle + angle, }); + + layer.dragging.enable(); + map.dragging.enable(); + + setTimeout(map.enableClicks, 100); }, [setDragging, layer, map, sticker, angle]); + const onMoveStarted = React.useCallback(() => { + map.disableClicks(); + }, [onChange, sticker, map]); + const onMoveFinished = React.useCallback( event => { const target = event.target as Marker; onChange({ ...sticker, - latlng: target.getLatLng() + latlng: target.getLatLng(), }); + + map.enableClicks(); }, - [onChange, sticker] + [onChange, sticker, map] ); const onDrag = React.useCallback( @@ -98,7 +100,7 @@ const Sticker: React.FC = ({ text => onChange({ ...sticker, - text + text, }), [sticker, onChange] ); @@ -122,21 +124,25 @@ const Sticker: React.FC = ({ React.useEffect(() => { if (!layer) return; - layer.addEventListener("dragend", onMoveFinished); + layer.addEventListener('dragstart', onMoveStarted); + layer.addEventListener('dragend', onMoveFinished); - return () => layer.removeEventListener("dragend", onMoveFinished); - }, [layer, onMoveFinished]); + return () => { + layer.removeEventListener('dragstart', onMoveStarted); + layer.removeEventListener('dragend', onMoveFinished); + }; + }, [layer, onMoveFinished, onMoveStarted]); // Attaches and detaches handlers when user starts dragging React.useEffect(() => { if (dragging) { - document.addEventListener("mousemove", onDrag); - document.addEventListener("mouseup", onDragStop); + document.addEventListener('mousemove', onDrag); + document.addEventListener('mouseup', onDragStop); } return () => { - document.removeEventListener("mousemove", onDrag); - document.removeEventListener("mouseup", onDragStop); + document.removeEventListener('mousemove', onDrag); + document.removeEventListener('mouseup', onDragStop); }; }, [dragging, onDrag]); @@ -146,7 +152,7 @@ const Sticker: React.FC = ({ const icon = new DomMarker({ element, - className: "sticker-container" + className: 'sticker-container', }); const item = marker(sticker.latlng, { icon, draggable: true }).addTo(map); @@ -160,27 +166,20 @@ const Sticker: React.FC = ({ }, [element, map, sticker]); React.useEffect(() => { - element.className = is_editing - ? "sticker-container" - : "sticker-container inactive"; + element.className = is_editing ? 'sticker-container' : 'sticker-container inactive'; }, [element, is_editing]); return createPortal(
      -
      +
      = ({ onTouchEnd={onDragStop} /> -
      +
      , element ); }; -export { Sticker }; \ No newline at end of file +export { Sticker }; diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index 57984d7..6756bec 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -3,17 +3,16 @@ import { IStickerDump } from '~/redux/map/types'; import { FeatureGroup, Map } from 'leaflet'; import { Sticker } from '~/containers/map/Sticker'; import { mapSetSticker, mapDropSticker } from '~/redux/map/actions'; +import { MapContainer } from '~/constants/map'; interface IProps { stickers: IStickerDump[]; is_editing: boolean; - map: Map; + map: MapContainer; mapSetSticker: typeof mapSetSticker; mapDropSticker: typeof mapDropSticker; } -// const { FC, useContext, useState, useEffect } = React; - const Stickers: React.FC = React.memo( ({ stickers, is_editing, map, mapSetSticker, mapDropSticker }) => { const [layer, setLayer] = React.useState(null); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index c19fe1d..79df798 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -9,7 +9,6 @@ import { editorSetMode, editorSetReady, editorSetRenderer, - editorSetDialog, editorSetDialogActive, editorClearAll, editorSetFeature, @@ -172,40 +171,25 @@ function* cropAShotSaga(params) { } function* locationChangeSaga({ location }: ReturnType) { - const { - user: { id, random_url }, - }: ReturnType = yield select(selectUser); - const { ready }: ReturnType = yield select(selectEditor); - - const { owner, address }: ReturnType = yield select(selectMap); + const { address }: ReturnType = yield select(selectMap); if (!ready) return; const { path, mode } = getUrlData(location); if (address !== path) { - const map = yield call(loadMapSaga, path); - - if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { - return yield call(replaceAddressIfItsBusy, map.random_url, map.address); - } - } else if (mode === 'edit' && owner.id !== id) { - return yield call(replaceAddressIfItsBusy, random_url, address); - } else { - yield put(mapSetAddressOrigin('')); + yield call(loadMapSaga, path); } if (mode !== 'edit') { yield put(editorSetEditing(false)); - // editor.stopEditing(); } else { yield put(editorSetEditing(true)); - // editor.startEditing(); } } -function* keyPressedSaga({ key, target }: ReturnType): any { +function* keyPressedSaga({ key, target }: ReturnType) { if (target === 'INPUT' || target === 'TEXTAREA') { return; } @@ -237,7 +221,6 @@ function* keyPressedSaga({ key, target }: ReturnType): function* getGPXTrackSaga(): SagaIterator { const { route, stickers, title, address }: ReturnType = yield select(selectMap); - // const { title, address }: = yield select(selectUser); if (!route || route.length <= 0) return; @@ -246,6 +229,11 @@ function* getGPXTrackSaga(): SagaIterator { return downloadGPXTrack({ track, title }); } +function* routerCancel() { + yield put(editorSetMode(MODES.NONE)) + // TODO: clear router +} + export function* editorSaga() { yield takeEvery(EDITOR_ACTIONS.STOP_EDITING, stopEditingSaga); yield takeLatest(EDITOR_ACTIONS.TAKE_A_SHOT, takeAShotSaga); @@ -253,4 +241,5 @@ export function* editorSaga() { yield takeLatest(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); yield takeLatest(EDITOR_ACTIONS.KEY_PRESSED, keyPressedSaga); yield takeLatest(EDITOR_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); + yield takeLatest(EDITOR_ACTIONS.ROUTER_CANCEL, routerCancel); } diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 650999e..eee1a3a 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -13,7 +13,7 @@ import { middleCoordPx, } from '~/utils/geom'; import { Point } from 'leaflet'; -import { MainMap } from '~/containers/map/Map'; +import { MainMap } from '~/constants/map'; export interface ITilePlacement { minX: number; From c166eee586356303bcd8b97a0fe5b17bf2847845 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 12:58:11 +0700 Subject: [PATCH 123/320] drawing poly --- package-lock.json | 6127 +++++++++++++--------------- package.json | 1 + src/containers/map/Map/index.tsx | 2 +- src/containers/map/Route/index.tsx | 135 +- src/modules/InteractivePoly.ts | 5 + 5 files changed, 2841 insertions(+), 3429 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5deaf3f..67bd187 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,16 +10,16 @@ "integrity": "sha512-bfna97nmJV6nDJhXNPeEfxyMjWnt6+IjUAaDPiYRTBlm8L41n8nvw6UAqUCbvpFfU246gHPxW7sfWwqtF4FcYA==", "dev": true, "requires": { - "chokidar": "^2.0.3", - "commander": "^2.8.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "output-file-sync": "^2.0.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" + "chokidar": "2.1.1", + "commander": "2.8.1", + "convert-source-map": "1.6.0", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.3", + "lodash": "4.17.15", + "mkdirp": "0.5.1", + "output-file-sync": "2.0.1", + "slash": "2.0.0", + "source-map": "0.5.7" }, "dependencies": { "source-map": { @@ -36,7 +36,7 @@ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "7.0.0" } }, "@babel/generator": { @@ -45,11 +45,11 @@ "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", "dev": true, "requires": { - "@babel/types": "^7.3.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "@babel/types": "7.3.2", + "jsesc": "2.5.2", + "lodash": "4.17.15", + "source-map": "0.5.7", + "trim-right": "1.0.1" }, "dependencies": { "source-map": { @@ -66,7 +66,7 @@ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.2" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -75,8 +75,8 @@ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "7.1.0", + "@babel/types": "7.3.2" } }, "@babel/helper-call-delegate": { @@ -85,9 +85,9 @@ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-hoist-variables": "7.0.0", + "@babel/traverse": "7.2.3", + "@babel/types": "7.3.2" } }, "@babel/helper-define-map": { @@ -96,9 +96,9 @@ "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" + "@babel/helper-function-name": "7.1.0", + "@babel/types": "7.3.2", + "lodash": "4.17.15" } }, "@babel/helper-explode-assignable-expression": { @@ -107,8 +107,8 @@ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/traverse": "7.2.3", + "@babel/types": "7.3.2" } }, "@babel/helper-function-name": { @@ -117,9 +117,9 @@ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "7.0.0", + "@babel/template": "7.2.2", + "@babel/types": "7.3.2" } }, "@babel/helper-get-function-arity": { @@ -128,7 +128,7 @@ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.2" } }, "@babel/helper-hoist-variables": { @@ -137,7 +137,7 @@ "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.2" } }, "@babel/helper-member-expression-to-functions": { @@ -146,7 +146,7 @@ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.2" } }, "@babel/helper-module-imports": { @@ -155,7 +155,7 @@ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.2" } }, "@babel/helper-module-transforms": { @@ -164,12 +164,12 @@ "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/template": "^7.2.2", - "@babel/types": "^7.2.2", - "lodash": "^4.17.10" + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-simple-access": "7.1.0", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/template": "7.2.2", + "@babel/types": "7.3.2", + "lodash": "4.17.15" } }, "@babel/helper-optimise-call-expression": { @@ -178,7 +178,7 @@ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.2" } }, "@babel/helper-plugin-utils": { @@ -193,7 +193,7 @@ "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.15" } }, "@babel/helper-remap-async-to-generator": { @@ -202,11 +202,11 @@ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-wrap-function": "7.2.0", + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.3.2" } }, "@babel/helper-replace-supers": { @@ -215,10 +215,10 @@ "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.2.3", - "@babel/types": "^7.0.0" + "@babel/helper-member-expression-to-functions": "7.0.0", + "@babel/helper-optimise-call-expression": "7.0.0", + "@babel/traverse": "7.2.3", + "@babel/types": "7.3.2" } }, "@babel/helper-simple-access": { @@ -227,8 +227,8 @@ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", "dev": true, "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "7.2.2", + "@babel/types": "7.3.2" } }, "@babel/helper-split-export-declaration": { @@ -237,7 +237,7 @@ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.3.2" } }, "@babel/helper-wrap-function": { @@ -246,10 +246,10 @@ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "7.1.0", + "@babel/template": "7.2.2", + "@babel/traverse": "7.2.3", + "@babel/types": "7.3.2" } }, "@babel/highlight": { @@ -258,9 +258,9 @@ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "dev": true, "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "chalk": "2.4.2", + "esutils": "2.0.2", + "js-tokens": "4.0.0" } }, "@babel/parser": { @@ -275,9 +275,9 @@ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-remap-async-to-generator": "7.1.0", + "@babel/plugin-syntax-async-generators": "7.2.0" } }, "@babel/plugin-proposal-json-strings": { @@ -286,8 +286,8 @@ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-json-strings": "7.2.0" } }, "@babel/plugin-proposal-object-rest-spread": { @@ -296,8 +296,8 @@ "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -306,8 +306,8 @@ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "7.2.0" } }, "@babel/plugin-proposal-unicode-property-regex": { @@ -316,9 +316,9 @@ "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0", + "regexpu-core": "4.4.0" } }, "@babel/plugin-syntax-async-generators": { @@ -327,7 +327,7 @@ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-json-strings": { @@ -336,7 +336,7 @@ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -345,7 +345,7 @@ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-optional-catch-binding": { @@ -354,7 +354,7 @@ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-arrow-functions": { @@ -363,7 +363,7 @@ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-async-to-generator": { @@ -372,9 +372,9 @@ "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-remap-async-to-generator": "7.1.0" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -383,7 +383,7 @@ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-block-scoping": { @@ -392,8 +392,8 @@ "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.10" + "@babel/helper-plugin-utils": "7.0.0", + "lodash": "4.17.15" } }, "@babel/plugin-transform-classes": { @@ -402,14 +402,14 @@ "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-define-map": "7.1.0", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-optimise-call-expression": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.2.3", + "@babel/helper-split-export-declaration": "7.0.0", + "globals": "11.11.0" } }, "@babel/plugin-transform-computed-properties": { @@ -418,7 +418,7 @@ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-destructuring": { @@ -427,7 +427,7 @@ "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-dotall-regex": { @@ -436,9 +436,9 @@ "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0", + "regexpu-core": "4.4.0" } }, "@babel/plugin-transform-duplicate-keys": { @@ -447,7 +447,7 @@ "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-exponentiation-operator": { @@ -456,8 +456,8 @@ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-for-of": { @@ -466,7 +466,7 @@ "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-function-name": { @@ -475,8 +475,8 @@ "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "7.1.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-literals": { @@ -485,7 +485,7 @@ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-modules-amd": { @@ -494,8 +494,8 @@ "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-modules-commonjs": { @@ -504,9 +504,9 @@ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-simple-access": "7.1.0" } }, "@babel/plugin-transform-modules-systemjs": { @@ -515,8 +515,8 @@ "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-hoist-variables": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-modules-umd": { @@ -525,8 +525,8 @@ "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -535,7 +535,7 @@ "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", "dev": true, "requires": { - "regexp-tree": "^0.1.0" + "regexp-tree": "0.1.1" } }, "@babel/plugin-transform-new-target": { @@ -544,7 +544,7 @@ "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-object-super": { @@ -553,8 +553,8 @@ "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.2.3" } }, "@babel/plugin-transform-parameters": { @@ -563,9 +563,9 @@ "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.1.0", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-call-delegate": "7.1.0", + "@babel/helper-get-function-arity": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-regenerator": { @@ -574,7 +574,7 @@ "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", "dev": true, "requires": { - "regenerator-transform": "^0.13.3" + "regenerator-transform": "0.13.3" } }, "@babel/plugin-transform-shorthand-properties": { @@ -583,7 +583,7 @@ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-spread": { @@ -592,7 +592,7 @@ "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-sticky-regex": { @@ -601,8 +601,8 @@ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0" } }, "@babel/plugin-transform-template-literals": { @@ -611,8 +611,8 @@ "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-typeof-symbol": { @@ -621,7 +621,7 @@ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-unicode-regex": { @@ -630,9 +630,9 @@ "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0", + "regexpu-core": "4.4.0" } }, "@babel/preset-env": { @@ -641,49 +641,49 @@ "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.2.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.2.0", - "@babel/plugin-transform-dotall-regex": "^7.2.0", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.2.0", - "@babel/plugin-transform-function-name": "^7.2.0", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", - "@babel/plugin-transform-new-target": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.2.0", - "browserslist": "^4.3.4", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-proposal-async-generator-functions": "7.2.0", + "@babel/plugin-proposal-json-strings": "7.2.0", + "@babel/plugin-proposal-object-rest-spread": "7.3.2", + "@babel/plugin-proposal-optional-catch-binding": "7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "7.2.0", + "@babel/plugin-syntax-async-generators": "7.2.0", + "@babel/plugin-syntax-json-strings": "7.2.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "7.2.0", + "@babel/plugin-transform-arrow-functions": "7.2.0", + "@babel/plugin-transform-async-to-generator": "7.2.0", + "@babel/plugin-transform-block-scoped-functions": "7.2.0", + "@babel/plugin-transform-block-scoping": "7.2.0", + "@babel/plugin-transform-classes": "7.2.2", + "@babel/plugin-transform-computed-properties": "7.2.0", + "@babel/plugin-transform-destructuring": "7.3.2", + "@babel/plugin-transform-dotall-regex": "7.2.0", + "@babel/plugin-transform-duplicate-keys": "7.2.0", + "@babel/plugin-transform-exponentiation-operator": "7.2.0", + "@babel/plugin-transform-for-of": "7.2.0", + "@babel/plugin-transform-function-name": "7.2.0", + "@babel/plugin-transform-literals": "7.2.0", + "@babel/plugin-transform-modules-amd": "7.2.0", + "@babel/plugin-transform-modules-commonjs": "7.2.0", + "@babel/plugin-transform-modules-systemjs": "7.2.0", + "@babel/plugin-transform-modules-umd": "7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "7.3.0", + "@babel/plugin-transform-new-target": "7.0.0", + "@babel/plugin-transform-object-super": "7.2.0", + "@babel/plugin-transform-parameters": "7.2.0", + "@babel/plugin-transform-regenerator": "7.0.0", + "@babel/plugin-transform-shorthand-properties": "7.2.0", + "@babel/plugin-transform-spread": "7.2.2", + "@babel/plugin-transform-sticky-regex": "7.2.0", + "@babel/plugin-transform-template-literals": "7.2.0", + "@babel/plugin-transform-typeof-symbol": "7.2.0", + "@babel/plugin-transform-unicode-regex": "7.2.0", + "browserslist": "4.4.1", + "invariant": "2.2.4", + "js-levenshtein": "1.1.6", + "semver": "5.6.0" } }, "@babel/runtime": { @@ -691,7 +691,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "0.12.1" }, "dependencies": { "regenerator-runtime": { @@ -707,9 +707,9 @@ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.3.2", + "@babel/types": "7.3.2" } }, "@babel/traverse": { @@ -718,15 +718,15 @@ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" + "@babel/code-frame": "7.0.0", + "@babel/generator": "7.3.2", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/parser": "7.3.2", + "@babel/types": "7.3.2", + "debug": "4.1.1", + "globals": "11.11.0", + "lodash": "4.17.15" }, "dependencies": { "debug": { @@ -735,7 +735,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -752,9 +752,9 @@ "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" + "esutils": "2.0.2", + "lodash": "4.17.15", + "to-fast-properties": "2.0.0" }, "dependencies": { "to-fast-properties": { @@ -775,19 +775,6 @@ "resolved": "https://registry.npmjs.org/@mapbox/polyline/-/polyline-0.2.0.tgz", "integrity": "sha1-biWYB0SqIjMflLZFpULALT/P7pc=" }, - "@types/babel-types": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", - "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==" - }, - "@types/babylon": { - "version": "6.16.5", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", - "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", - "requires": { - "@types/babel-types": "*" - } - }, "@types/classnames": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.7.tgz", @@ -803,7 +790,7 @@ "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.4.3.tgz", "integrity": "sha512-jFRBSsPHi1EwQSwrN0cOJLdPhwOZsRl4IMxvm/2ShLh0YM5GfCtQXCzsrv8RE7DWL+AykXdYSAd9bFLWbZT4CQ==", "requires": { - "@types/geojson": "*" + "@types/geojson": "7946.0.6" } }, "@types/node": { @@ -826,8 +813,8 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.1.tgz", "integrity": "sha512-tD1ETKJcuhANOejRc/p7OgQ16DKnbGi0M3LccelKlPnUCDp2a5koVxZFoRN9HN+A+m84HB5VGN7I+r3nNhS3PA==", "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" + "@types/prop-types": "15.5.8", + "csstype": "2.6.2" } }, "@webassemblyjs/ast": { @@ -904,7 +891,7 @@ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "@xtuc/ieee754": "1.2.0" } }, "@webassemblyjs/leb128": { @@ -1014,25 +1001,21 @@ "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.21", "negotiator": "0.6.1" } }, "acorn": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true }, "acorn-dynamic-import": { "version": "4.0.0", @@ -1040,28 +1023,13 @@ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "requires": { - "acorn": "^4.0.4" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } - } - }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "^3.0.4" + "acorn": "3.3.0" } }, "add-dom-event-listener": { @@ -1069,7 +1037,7 @@ "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", "requires": { - "object-assign": "4.x" + "object-assign": "4.1.1" } }, "add-px-to-style": { @@ -1082,10 +1050,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ajv-errors": { @@ -1100,33 +1068,18 @@ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "^2.0.0" + "string-width": "2.1.1" } }, "ansi-colors": { @@ -1158,7 +1111,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "anymatch": { @@ -1167,8 +1120,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" }, "dependencies": { "normalize-path": { @@ -1177,7 +1130,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } } } @@ -1199,7 +1152,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "aria-query": { @@ -1209,7 +1162,7 @@ "dev": true, "requires": { "ast-types-flow": "0.0.7", - "commander": "^2.11.0" + "commander": "2.19.0" }, "dependencies": { "commander": { @@ -1253,7 +1206,8 @@ "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true }, "array-includes": { "version": "3.0.3", @@ -1261,8 +1215,8 @@ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "1.1.3", + "es-abstract": "1.13.0" } }, "array-union": { @@ -1271,7 +1225,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.3" } }, "array-uniq": { @@ -1289,14 +1243,15 @@ "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "optional": true }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "requires": { - "safer-buffer": "~2.1.0" + "safer-buffer": "2.1.2" } }, "asn1.js": { @@ -1305,9 +1260,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -1353,14 +1308,6 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", @@ -1384,12 +1331,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000936", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" }, "dependencies": { "browserslist": { @@ -1398,8 +1345,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" + "caniuse-db": "1.0.30000936", + "electron-to-chromium": "1.3.113" } } } @@ -1410,14 +1357,14 @@ "integrity": "sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g==", "dev": true, "requires": { - "chalk": "^2.4.1", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.1.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", - "webpack-log": "^1.2.0" + "chalk": "2.4.2", + "enhanced-resolve": "4.1.0", + "loader-utils": "1.2.3", + "lodash": "4.17.15", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "source-map-support": "0.5.10", + "webpack-log": "1.2.0" } }, "aws-sign2": { @@ -1436,7 +1383,7 @@ "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", "requires": { "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" + "is-buffer": "2.0.3" }, "dependencies": { "debug": { @@ -1452,7 +1399,7 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { - "debug": "=3.1.0" + "debug": "3.1.0" } }, "is-buffer": { @@ -1477,9 +1424,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" }, "dependencies": { "ansi-regex": { @@ -1500,11 +1447,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "js-tokens": { @@ -1519,7 +1466,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -1536,25 +1483,25 @@ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.6.0", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.15", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" }, "dependencies": { "json5": { @@ -1588,7 +1535,7 @@ "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" + "eslint-visitor-keys": "1.0.0" }, "dependencies": { "@babel/code-frame": { @@ -1607,10 +1554,10 @@ "dev": true, "requires": { "@babel/types": "7.0.0-beta.44", - "jsesc": "^2.5.1", - "lodash": "^4.2.0", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "jsesc": "2.5.2", + "lodash": "4.17.15", + "source-map": "0.5.7", + "trim-right": "1.0.1" } }, "@babel/helper-function-name": { @@ -1648,9 +1595,9 @@ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", "dev": true, "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^3.0.0" + "chalk": "2.4.2", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, "@babel/template": { @@ -1662,7 +1609,7 @@ "@babel/code-frame": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "lodash": "^4.2.0" + "lodash": "4.17.15" } }, "@babel/traverse": { @@ -1677,10 +1624,10 @@ "@babel/helper-split-export-declaration": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "debug": "^3.1.0", - "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.2.0" + "debug": "3.2.6", + "globals": "11.11.0", + "invariant": "2.2.4", + "lodash": "4.17.15" } }, "@babel/types": { @@ -1689,9 +1636,9 @@ "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" + "esutils": "2.0.2", + "lodash": "4.17.15", + "to-fast-properties": "2.0.0" } }, "babylon": { @@ -1706,7 +1653,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "js-tokens": { @@ -1741,14 +1688,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.15", + "source-map": "0.5.7", + "trim-right": "1.0.1" }, "dependencies": { "jsesc": { @@ -1771,9 +1718,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -1782,9 +1729,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-builder-react-jsx": { @@ -1793,9 +1740,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.2" } }, "babel-helper-call-delegate": { @@ -1804,10 +1751,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-define-map": { @@ -1816,10 +1763,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.15" } }, "babel-helper-explode-assignable-expression": { @@ -1828,9 +1775,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-explode-class": { @@ -1839,10 +1786,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-function-name": { @@ -1851,11 +1798,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-get-function-arity": { @@ -1864,8 +1811,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-hoist-variables": { @@ -1874,8 +1821,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-optimise-call-expression": { @@ -1884,8 +1831,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-regex": { @@ -1894,9 +1841,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.15" } }, "babel-helper-remap-async-to-generator": { @@ -1905,11 +1852,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-replace-supers": { @@ -1918,12 +1865,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helpers": { @@ -1932,8 +1879,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-loader": { @@ -1942,9 +1889,9 @@ "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==", "dev": true, "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" + "find-cache-dir": "1.0.0", + "loader-utils": "1.2.3", + "mkdirp": "0.5.1" } }, "babel-messages": { @@ -1953,7 +1900,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-check-es2015-constants": { @@ -1962,7 +1909,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-lodash": { @@ -1971,11 +1918,11 @@ "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0-beta.49", - "@babel/types": "^7.0.0-beta.49", - "glob": "^7.1.1", - "lodash": "^4.17.10", - "require-package-name": "^2.0.1" + "@babel/helper-module-imports": "7.0.0", + "@babel/types": "7.3.2", + "glob": "7.1.3", + "lodash": "4.17.15", + "require-package-name": "2.0.1" } }, "babel-plugin-ramda": { @@ -1984,8 +1931,8 @@ "integrity": "sha512-PZ/6fmNGshCU7Vt33JRWDDSQqZxOsav1DztZ+VBJFOamE3spyoKuIL9Ve0FQd/oXGlH5jHf/WrpCSGn0MR+YVw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "ramda": "*" + "@babel/helper-module-imports": "7.0.0", + "ramda": "0.26.1" } }, "babel-plugin-syntax-async-functions": { @@ -2054,9 +2001,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-async-to-generator": { @@ -2065,9 +2012,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-class-properties": { @@ -2076,10 +2023,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-decorators": { @@ -2088,11 +2035,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -2101,7 +2048,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -2110,7 +2057,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -2119,11 +2066,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.15" } }, "babel-plugin-transform-es2015-classes": { @@ -2132,15 +2079,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -2149,8 +2096,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-destructuring": { @@ -2159,7 +2106,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -2168,8 +2115,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-for-of": { @@ -2178,7 +2125,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -2187,9 +2134,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-literals": { @@ -2198,7 +2145,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -2207,9 +2154,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -2218,10 +2165,10 @@ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -2230,9 +2177,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -2241,9 +2188,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-object-super": { @@ -2252,8 +2199,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -2262,12 +2209,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -2276,8 +2223,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-spread": { @@ -2286,7 +2233,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -2295,9 +2242,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-template-literals": { @@ -2306,7 +2253,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -2315,7 +2262,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -2324,9 +2271,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" }, "dependencies": { "jsesc": { @@ -2341,9 +2288,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, "regjsgen": { @@ -2358,7 +2305,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" } } } @@ -2369,9 +2316,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -2380,8 +2327,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -2390,8 +2337,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -2400,7 +2347,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx": { @@ -2409,9 +2356,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -2420,8 +2367,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -2430,8 +2377,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-regenerator": { @@ -2440,7 +2387,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "^0.10.0" + "regenerator-transform": "0.10.1" }, "dependencies": { "regenerator-transform": { @@ -2449,9 +2396,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" } } } @@ -2462,7 +2409,7 @@ "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-strict-mode": { @@ -2471,8 +2418,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-preset-env": { @@ -2481,36 +2428,36 @@ "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "3.2.8", + "invariant": "2.2.4", + "semver": "5.6.0" }, "dependencies": { "browserslist": { @@ -2519,8 +2466,8 @@ "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "caniuse-lite": "1.0.30000936", + "electron-to-chromium": "1.3.113" } } } @@ -2531,7 +2478,7 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "^6.22.0" + "babel-plugin-transform-flow-strip-types": "6.22.0" } }, "babel-preset-react": { @@ -2540,12 +2487,12 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.3.13", - "babel-plugin-transform-react-display-name": "^6.23.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-plugin-transform-react-jsx-self": "^6.22.0", - "babel-plugin-transform-react-jsx-source": "^6.22.0", - "babel-preset-flow": "^6.23.0" + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" } }, "babel-preset-stage-2": { @@ -2554,10 +2501,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" } }, "babel-preset-stage-3": { @@ -2566,11 +2513,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" } }, "babel-register": { @@ -2579,13 +2526,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.6.4", + "home-or-tmp": "2.0.0", + "lodash": "4.17.15", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" }, "dependencies": { "source-map": { @@ -2600,7 +2547,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "^0.5.6" + "source-map": "0.5.7" } } } @@ -2610,8 +2557,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.6.4", + "regenerator-runtime": "0.11.1" } }, "babel-template": { @@ -2620,11 +2567,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.15" } }, "babel-traverse": { @@ -2633,15 +2580,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.15" }, "dependencies": { "globals": { @@ -2656,17 +2603,19 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.15", + "to-fast-properties": "1.0.3" } }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true }, "balanced-match": { "version": "1.0.0", @@ -2679,13 +2628,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.2", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -2694,7 +2643,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -2703,7 +2652,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2712,7 +2661,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2721,9 +2670,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -2740,14 +2689,6 @@ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -2759,7 +2700,7 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "big.js": { @@ -2767,11 +2708,6 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, - "bignumber.js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz", - "integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==" - }, "binary-extensions": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", @@ -2781,7 +2717,8 @@ "bluebird": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true }, "bmp-js": { "version": "0.0.3", @@ -2801,15 +2738,15 @@ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "~1.6.16" + "type-is": "1.6.16" } }, "bonjour": { @@ -2818,12 +2755,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "array-flatten": "2.1.2", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" }, "dependencies": { "array-flatten": { @@ -2843,9 +2780,8 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "optional": true, "requires": { - "hoek": "2.x.x" + "hoek": "2.16.3" } }, "boxen": { @@ -2854,13 +2790,13 @@ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.4.2", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.1" }, "dependencies": { "camelcase": { @@ -2876,7 +2812,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -2886,16 +2822,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -2904,7 +2840,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2921,12 +2857,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-cipher": { @@ -2935,9 +2871,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -2946,10 +2882,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-rsa": { @@ -2958,8 +2894,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -2968,13 +2904,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.3" } }, "browserify-zlib": { @@ -2983,7 +2919,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "~1.0.5" + "pako": "1.0.8" } }, "browserslist": { @@ -2991,16 +2927,11 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" + "caniuse-lite": "1.0.30000936", + "electron-to-chromium": "1.3.113", + "node-releases": "1.1.7" } }, - "bson": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", - "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" - }, "buffer-equal": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", @@ -3042,19 +2973,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "bluebird": "3.5.3", + "chownr": "1.1.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "4.1.5", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, "cache-base": { @@ -3063,15 +2994,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.1", + "to-object-path": "0.3.0", + "union-value": "1.0.1", + "unset-value": "1.0.0" } }, "caller-callsite": { @@ -3079,7 +3010,7 @@ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "requires": { - "callsites": "^2.0.0" + "callsites": "2.0.0" }, "dependencies": { "callsites": { @@ -3095,7 +3026,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "^0.2.0" + "callsites": "0.2.0" } }, "callsites": { @@ -3110,23 +3041,18 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "2.1.1", + "map-obj": "1.0.1" }, "dependencies": { "camelcase": { @@ -3143,10 +3069,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000936", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" }, "dependencies": { "browserslist": { @@ -3155,8 +3081,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" + "caniuse-db": "1.0.30000936", + "electron-to-chromium": "1.3.113" } } } @@ -3183,23 +3109,14 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" }, "dependencies": { "has-flag": { @@ -3212,19 +3129,11 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } }, - "character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", - "requires": { - "is-regex": "^1.0.3" - } - }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", @@ -3237,18 +3146,18 @@ "integrity": "sha512-gfw3p2oQV2wEt+8VuMlNsPjCxDxvvgnm/kz+uATu805mWVF8IJN7uz9DN7iBz+RMJISmiVbCOBFs9qBGMjtPfQ==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.0" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.7", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.1.0" } }, "chownr": { @@ -3263,7 +3172,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "ci-info": { @@ -3278,8 +3187,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "circular-json": { @@ -3294,7 +3203,7 @@ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, "requires": { - "chalk": "^1.1.3" + "chalk": "1.1.3" }, "dependencies": { "ansi-regex": { @@ -3315,11 +3224,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "strip-ansi": { @@ -3328,7 +3237,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -3345,10 +3254,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -3357,7 +3266,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -3367,31 +3276,12 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, - "clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", - "requires": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "clean-webpack-plugin": { "version": "0.1.19", "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", "requires": { - "rimraf": "^2.6.1" + "rimraf": "2.6.3" } }, "cli-boxes": { @@ -3406,7 +3296,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "2.0.0" } }, "cli-table3": { @@ -3415,9 +3305,9 @@ "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "dev": true, "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" + "colors": "1.3.3", + "object-assign": "4.1.1", + "string-width": "2.1.1" } }, "cli-width": { @@ -3426,16 +3316,6 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, "clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -3452,7 +3332,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "^1.1.2" + "q": "1.5.1" } }, "code-point-at": { @@ -3467,8 +3347,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color": { @@ -3477,9 +3357,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" + "clone": "1.0.4", + "color-convert": "1.9.3", + "color-string": "0.3.0" }, "dependencies": { "clone": { @@ -3509,7 +3389,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "^1.0.0" + "color-name": "1.1.3" } }, "colormin": { @@ -3518,9 +3398,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "^0.11.0", + "color": "0.11.4", "css-color-names": "0.0.4", - "has": "^1.0.1" + "has": "1.0.3" } }, "colors": { @@ -3534,15 +3414,16 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, "requires": { - "graceful-readlink": ">= 1.0.0" + "graceful-readlink": "1.0.1" } }, "commondir": { @@ -3576,7 +3457,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": "1.37.0" } }, "compression": { @@ -3585,13 +3466,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "2.0.15", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "1.0.1", "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "vary": "1.1.2" } }, "computed-style": { @@ -3610,10 +3491,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "config": { @@ -3621,7 +3502,7 @@ "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz", "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==", "requires": { - "json5": "^1.0.1" + "json5": "1.0.1" } }, "configstore": { @@ -3630,12 +3511,12 @@ "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "dev": true, "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "dot-prop": "4.2.0", + "graceful-fs": "4.1.15", + "make-dir": "1.3.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.4.3", + "xdg-basedir": "3.0.0" } }, "connect-history-api-fallback": { @@ -3650,18 +3531,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "^0.1.4" - } - }, - "constantinople": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", - "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", - "requires": { - "@types/babel-types": "^7.0.0", - "@types/babylon": "^6.16.2", - "babel-types": "^6.26.0", - "babylon": "^6.18.0" + "date-now": "0.1.4" } }, "constants-browserify": { @@ -3679,7 +3549,8 @@ "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true }, "content-type": { "version": "1.0.4", @@ -3692,7 +3563,7 @@ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.2" } }, "cookie": { @@ -3720,12 +3591,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "copy-descriptor": { @@ -3749,11 +3620,11 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz", "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==", "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "lodash.get": "^4.4.2", - "parse-json": "^4.0.0" + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.13.1", + "lodash.get": "4.4.2", + "parse-json": "4.0.0" }, "dependencies": { "esprima": { @@ -3766,8 +3637,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "parse-json": { @@ -3775,8 +3646,8 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" } } } @@ -3787,8 +3658,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-error-class": { @@ -3797,7 +3668,7 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "^1.0.0" + "capture-stack-trace": "1.0.1" } }, "create-hash": { @@ -3806,11 +3677,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -3819,12 +3690,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "croppr": { @@ -3838,11 +3709,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "cryptiles": { @@ -3851,7 +3722,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "optional": true, "requires": { - "boom": "2.x.x" + "boom": "2.10.1" } }, "crypto-browserify": { @@ -3860,17 +3731,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "crypto-random-string": { @@ -3884,8 +3755,8 @@ "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.5.0.tgz", "integrity": "sha512-hWYoWiOZ7Vr20etzLh3kpWgtC454tW5vn4I6rLANDgpzNSkO7UfOqyCEeaoBSG9CYWQpRkFWTWbWW8o3uZrNLw==", "requires": { - "babel-runtime": "6.x", - "component-classes": "^1.2.5" + "babel-runtime": "6.26.0", + "component-classes": "1.2.6" } }, "css-color-names": { @@ -3898,8 +3769,8 @@ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" + "postcss": "7.0.14", + "timsort": "0.3.0" }, "dependencies": { "has-flag": { @@ -3912,9 +3783,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -3922,7 +3793,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -3933,20 +3804,20 @@ "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "cssnano": "^3.10.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "object-assign": "^4.1.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.1", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.2.3", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.1", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.1", + "source-list-map": "2.0.1" } }, "css-select": { @@ -3955,10 +3826,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", + "boolbase": "1.0.0", + "css-what": "2.1.2", "domutils": "1.5.1", - "nth-check": "~1.0.1" + "nth-check": "1.0.2" } }, "css-select-base-adapter": { @@ -3972,9 +3843,9 @@ "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "cssesc": "0.1.0", + "fastparse": "1.1.2", + "regexpu-core": "1.0.0" }, "dependencies": { "jsesc": { @@ -3989,9 +3860,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, "regjsgen": { @@ -4006,7 +3877,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" } } } @@ -4016,8 +3887,8 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "1.1.4", + "source-map": "0.5.7" }, "dependencies": { "source-map": { @@ -4054,38 +3925,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.3", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.3", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.1", + "postcss-zindex": "2.2.0" } }, "cssnano-preset-default": { @@ -4093,36 +3964,36 @@ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" + "css-declaration-sorter": "4.0.1", + "cssnano-util-raw-cache": "4.0.1", + "postcss": "7.0.14", + "postcss-calc": "7.0.1", + "postcss-colormin": "4.0.3", + "postcss-convert-values": "4.0.1", + "postcss-discard-comments": "4.0.2", + "postcss-discard-duplicates": "4.0.2", + "postcss-discard-empty": "4.0.1", + "postcss-discard-overridden": "4.0.1", + "postcss-merge-longhand": "4.0.11", + "postcss-merge-rules": "4.0.3", + "postcss-minify-font-values": "4.0.2", + "postcss-minify-gradients": "4.0.2", + "postcss-minify-params": "4.0.2", + "postcss-minify-selectors": "4.0.2", + "postcss-normalize-charset": "4.0.1", + "postcss-normalize-display-values": "4.0.2", + "postcss-normalize-positions": "4.0.2", + "postcss-normalize-repeat-style": "4.0.2", + "postcss-normalize-string": "4.0.2", + "postcss-normalize-timing-functions": "4.0.2", + "postcss-normalize-unicode": "4.0.1", + "postcss-normalize-url": "4.0.1", + "postcss-normalize-whitespace": "4.0.2", + "postcss-ordered-values": "4.1.2", + "postcss-reduce-initial": "4.0.3", + "postcss-reduce-transforms": "4.0.2", + "postcss-svgo": "4.0.2", + "postcss-unique-selectors": "4.0.1" }, "dependencies": { "caniuse-api": { @@ -4130,10 +4001,10 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "browserslist": "4.4.1", + "caniuse-lite": "1.0.30000936", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" } }, "coa": { @@ -4141,9 +4012,9 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "@types/q": "1.5.1", + "chalk": "2.4.2", + "q": "1.5.1" } }, "color": { @@ -4151,8 +4022,8 @@ "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "1.9.3", + "color-string": "1.5.3" } }, "color-string": { @@ -4160,8 +4031,8 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "color-name": "1.1.3", + "simple-swizzle": "0.2.2" } }, "css-select": { @@ -4169,10 +4040,10 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", "requires": { - "boolbase": "^1.0.0", - "css-what": "^2.1.2", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "boolbase": "1.0.0", + "css-what": "2.1.2", + "domutils": "1.7.0", + "nth-check": "1.0.2" } }, "cssesc": { @@ -4193,8 +4064,8 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "1.1.4", + "source-map": "0.5.7" } }, "source-map": { @@ -4209,8 +4080,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.0", + "domelementtype": "1.3.1" } }, "esprima": { @@ -4228,7 +4099,7 @@ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", "requires": { - "html-comment-regex": "^1.1.0" + "html-comment-regex": "1.1.2" } }, "js-yaml": { @@ -4236,8 +4107,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "normalize-url": { @@ -4250,9 +4121,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "postcss-calc": { @@ -4260,10 +4131,10 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" + "css-unit-converter": "1.1.1", + "postcss": "7.0.14", + "postcss-selector-parser": "5.0.0", + "postcss-value-parser": "3.3.1" } }, "postcss-colormin": { @@ -4271,11 +4142,11 @@ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "4.4.1", + "color": "3.1.0", + "has": "1.0.3", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, "postcss-convert-values": { @@ -4283,8 +4154,8 @@ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, "postcss-discard-comments": { @@ -4292,7 +4163,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "requires": { - "postcss": "^7.0.0" + "postcss": "7.0.14" } }, "postcss-discard-duplicates": { @@ -4300,7 +4171,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "requires": { - "postcss": "^7.0.0" + "postcss": "7.0.14" } }, "postcss-discard-empty": { @@ -4308,7 +4179,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "requires": { - "postcss": "^7.0.0" + "postcss": "7.0.14" } }, "postcss-discard-overridden": { @@ -4316,7 +4187,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "requires": { - "postcss": "^7.0.0" + "postcss": "7.0.14" } }, "postcss-merge-longhand": { @@ -4325,9 +4196,9 @@ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "requires": { "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1", + "stylehacks": "4.0.3" } }, "postcss-merge-rules": { @@ -4335,12 +4206,12 @@ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" + "browserslist": "4.4.1", + "caniuse-api": "3.0.0", + "cssnano-util-same-parent": "4.0.1", + "postcss": "7.0.14", + "postcss-selector-parser": "3.1.1", + "vendors": "1.0.2" }, "dependencies": { "postcss-selector-parser": { @@ -4348,9 +4219,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } } } @@ -4360,8 +4231,8 @@ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, "postcss-minify-gradients": { @@ -4369,10 +4240,10 @@ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-util-get-arguments": "4.0.0", + "is-color-stop": "1.1.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, "postcss-minify-params": { @@ -4380,12 +4251,12 @@ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "browserslist": "4.4.1", + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1", + "uniqs": "2.0.0" } }, "postcss-minify-selectors": { @@ -4393,10 +4264,10 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "7.0.14", + "postcss-selector-parser": "3.1.1" }, "dependencies": { "postcss-selector-parser": { @@ -4404,9 +4275,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } } } @@ -4416,7 +4287,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "requires": { - "postcss": "^7.0.0" + "postcss": "7.0.14" } }, "postcss-normalize-url": { @@ -4424,10 +4295,10 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "is-absolute-url": "2.1.0", + "normalize-url": "3.3.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, "postcss-ordered-values": { @@ -4435,9 +4306,9 @@ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, "postcss-reduce-initial": { @@ -4445,10 +4316,10 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "browserslist": "4.4.1", + "caniuse-api": "3.0.0", + "has": "1.0.3", + "postcss": "7.0.14" } }, "postcss-reduce-transforms": { @@ -4456,10 +4327,10 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-util-get-match": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, "postcss-selector-parser": { @@ -4467,9 +4338,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, "postcss-svgo": { @@ -4477,10 +4348,10 @@ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" + "is-svg": "3.0.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1", + "svgo": "1.2.0" } }, "postcss-unique-selectors": { @@ -4488,9 +4359,9 @@ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "postcss": "7.0.14", + "uniqs": "2.0.0" } }, "supports-color": { @@ -4498,7 +4369,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "svgo": { @@ -4506,20 +4377,20 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", + "chalk": "2.4.2", + "coa": "2.0.2", + "css-select": "2.0.2", + "css-select-base-adapter": "0.1.1", "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", - "csso": "^3.5.1", - "js-yaml": "^3.12.0", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "css-url-regex": "1.1.0", + "csso": "3.5.1", + "js-yaml": "3.12.2", + "mkdirp": "0.5.1", + "object.values": "1.1.0", + "sax": "1.2.4", + "stable": "0.1.8", + "unquote": "1.1.1", + "util.promisify": "1.0.0" } } } @@ -4539,7 +4410,7 @@ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "requires": { - "postcss": "^7.0.0" + "postcss": "7.0.14" }, "dependencies": { "has-flag": { @@ -4552,9 +4423,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -4562,7 +4433,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -4578,8 +4449,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" + "clap": "1.2.3", + "source-map": "0.5.7" }, "dependencies": { "source-map": { @@ -4601,7 +4472,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "array-find-index": "1.0.2" } }, "cyclist": { @@ -4616,7 +4487,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "0.10.47" } }, "damerau-levenshtein": { @@ -4630,7 +4501,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "date-now": { @@ -4650,7 +4521,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -4682,8 +4554,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "^0.10.0", - "ip-regex": "^2.1.0" + "execa": "0.10.0", + "ip-regex": "2.1.0" }, "dependencies": { "execa": { @@ -4692,13 +4564,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "get-stream": { @@ -4714,7 +4586,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "object-keys": "^1.0.12" + "object-keys": "1.1.0" } }, "define-property": { @@ -4723,8 +4595,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -4733,7 +4605,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -4742,7 +4614,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -4751,9 +4623,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -4776,12 +4648,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.3" } }, "delayed-stream": { @@ -4800,14 +4672,15 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true }, "detect-file": { "version": "1.0.0", @@ -4821,7 +4694,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "detect-node": { @@ -4842,9 +4715,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" } }, "dns-equal": { @@ -4859,8 +4732,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "ip": "1.1.5", + "safe-buffer": "5.1.2" } }, "dns-txt": { @@ -4869,7 +4742,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "^1.0.0" + "buffer-indexof": "1.1.1" } }, "doctrine": { @@ -4878,14 +4751,9 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "^2.0.2" + "esutils": "2.0.2" } }, - "doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" - }, "dom-align": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.8.0.tgz", @@ -4897,7 +4765,7 @@ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "~0.4" + "utila": "0.4.0" } }, "dom-css": { @@ -4915,8 +4783,8 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "domelementtype": "1.1.3", + "entities": "1.1.2" }, "dependencies": { "domelementtype": { @@ -4932,7 +4800,7 @@ "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=", "dev": true, "requires": { - "urijs": "^1.16.1" + "urijs": "1.19.1" } }, "dom-walk": { @@ -4957,7 +4825,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "domutils": { @@ -4966,8 +4834,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.0", + "domelementtype": "1.3.1" } }, "dot-prop": { @@ -4975,7 +4843,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { - "is-obj": "^1.0.0" + "is-obj": "1.0.1" } }, "duplexer3": { @@ -4990,10 +4858,10 @@ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" } }, "ecc-jsbn": { @@ -5001,8 +4869,8 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "ee-first": { @@ -5021,13 +4889,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "emoji-regex": { @@ -5044,7 +4912,8 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true }, "end-of-stream": { "version": "1.4.1", @@ -5052,7 +4921,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "enhanced-resolve": { @@ -5061,9 +4930,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "4.1.15", + "memory-fs": "0.4.1", + "tapable": "1.1.1" } }, "entities": { @@ -5076,7 +4945,7 @@ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "error-ex": { @@ -5084,7 +4953,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es-abstract": { @@ -5092,12 +4961,12 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.0" } }, "es-to-primitive": { @@ -5105,9 +4974,9 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" } }, "es5-ext": { @@ -5116,9 +4985,9 @@ "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -5127,9 +4996,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.47", + "es6-symbol": "3.1.1" } }, "es6-promise": { @@ -5144,14 +5013,15 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.47" } }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", @@ -5164,44 +5034,44 @@ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.4.2", + "concat-stream": "1.6.2", + "cross-spawn": "5.1.0", + "debug": "3.2.6", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.3", + "globals": "11.11.0", + "ignore": "3.3.10", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.13.1", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.15", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.3", + "regexpp": "1.1.0", + "require-uncached": "1.0.3", + "semver": "5.6.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", "table": "4.0.2", - "text-table": "~0.2.0" + "text-table": "0.2.0" }, "dependencies": { "ajv": { @@ -5210,10 +5080,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "cross-spawn": { @@ -5222,9 +5092,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "debug": { @@ -5233,7 +5103,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "esprima": { @@ -5254,8 +5124,8 @@ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "json-schema-traverse": { @@ -5278,7 +5148,7 @@ "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==", "dev": true, "requires": { - "eslint-config-airbnb-base": "^12.1.0" + "eslint-config-airbnb-base": "12.1.0" } }, "eslint-config-airbnb-base": { @@ -5287,7 +5157,7 @@ "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", "dev": true, "requires": { - "eslint-restricted-globals": "^0.1.1" + "eslint-restricted-globals": "0.1.1" } }, "eslint-import-resolver-babel-module": { @@ -5296,8 +5166,8 @@ "integrity": "sha512-aPj0+pG0H3HCaMD9eRDYEzPdMyKrLE2oNhAzTXd2w86ZBe3s7drSrrPwVTfzO1CBp13FGk8S84oRmZHZvSo0mA==", "dev": true, "requires": { - "pkg-up": "^2.0.0", - "resolve": "^1.4.0" + "pkg-up": "2.0.0", + "resolve": "1.10.0" } }, "eslint-import-resolver-node": { @@ -5306,8 +5176,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" + "debug": "2.6.9", + "resolve": "1.10.0" } }, "eslint-import-resolver-webpack": { @@ -5316,17 +5186,17 @@ "integrity": "sha1-IxzhV4rVEk2leZ8Cm9M9KBN2I+M=", "dev": true, "requires": { - "array-find": "^1.0.0", - "debug": "^2.6.8", - "enhanced-resolve": "~0.9.0", - "find-root": "^1.1.0", - "has": "^1.0.1", - "interpret": "^1.0.0", - "is-absolute": "^0.2.3", - "lodash.get": "^4.4.2", - "node-libs-browser": "^1.0.0 || ^2.0.0", - "resolve": "^1.4.0", - "semver": "^5.3.0" + "array-find": "1.0.0", + "debug": "2.6.9", + "enhanced-resolve": "0.9.1", + "find-root": "1.1.0", + "has": "1.0.3", + "interpret": "1.2.0", + "is-absolute": "0.2.6", + "lodash.get": "4.4.2", + "node-libs-browser": "2.2.0", + "resolve": "1.10.0", + "semver": "5.6.0" }, "dependencies": { "enhanced-resolve": { @@ -5335,9 +5205,9 @@ "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" + "graceful-fs": "4.1.15", + "memory-fs": "0.2.0", + "tapable": "0.1.10" } }, "memory-fs": { @@ -5360,11 +5230,11 @@ "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", "dev": true, "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "loader-fs-cache": "1.0.1", + "loader-utils": "1.2.3", + "object-assign": "4.1.1", + "object-hash": "1.3.1", + "rimraf": "2.6.3" } }, "eslint-module-utils": { @@ -5373,8 +5243,8 @@ "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", "dev": true, "requires": { - "debug": "^2.6.8", - "pkg-dir": "^2.0.0" + "debug": "2.6.9", + "pkg-dir": "2.0.0" } }, "eslint-plugin-babel": { @@ -5383,16 +5253,7 @@ "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==", "dev": true, "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "eslint-plugin-flowtype": { - "version": "2.50.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz", - "integrity": "sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" + "eslint-rule-composer": "0.3.0" } }, "eslint-plugin-import": { @@ -5401,16 +5262,16 @@ "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", "dev": true, "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.9", + "contains-path": "0.1.0", + "debug": "2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", - "has": "^1.0.3", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.3.0", + "has": "1.0.3", + "lodash": "4.17.15", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0", + "resolve": "1.10.0" }, "dependencies": { "doctrine": { @@ -5419,8 +5280,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "2.0.2", + "isarray": "1.0.0" } } } @@ -5431,14 +5292,14 @@ "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", "dev": true, "requires": { - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" + "aria-query": "3.0.0", + "array-includes": "3.0.3", + "ast-types-flow": "0.0.7", + "axobject-query": "2.0.2", + "damerau-levenshtein": "1.0.4", + "emoji-regex": "7.0.3", + "has": "1.0.3", + "jsx-ast-utils": "2.0.1" } }, "eslint-plugin-react": { @@ -5447,13 +5308,13 @@ "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", "dev": true, "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "object.fromentries": "^2.0.0", - "prop-types": "^15.6.2", - "resolve": "^1.9.0" + "array-includes": "3.0.3", + "doctrine": "2.1.0", + "has": "1.0.3", + "jsx-ast-utils": "2.0.1", + "object.fromentries": "2.0.0", + "prop-types": "15.7.1", + "resolve": "1.10.0" } }, "eslint-restricted-globals": { @@ -5474,8 +5335,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "eslint-visitor-keys": { @@ -5490,8 +5351,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "acorn": "5.7.3", + "acorn-jsx": "3.0.1" }, "dependencies": { "acorn": { @@ -5514,7 +5375,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "4.2.0" } }, "esrecurse": { @@ -5523,7 +5384,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -5535,12 +5396,14 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, "eventemitter3": { "version": "3.1.0", @@ -5560,7 +5423,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "^1.0.0" + "original": "1.0.2" } }, "evp_bytestokey": { @@ -5569,8 +5432,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, "execa": { @@ -5579,13 +5442,13 @@ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "exif-parser": { @@ -5600,13 +5463,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -5615,7 +5478,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -5624,7 +5487,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -5635,50 +5498,52 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "homedir-polyfill": "1.0.1" } }, "express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", + "proxy-addr": "2.0.4", "qs": "6.5.2", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true } } }, @@ -5693,8 +5558,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -5703,7 +5568,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -5714,9 +5579,9 @@ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" + "chardet": "0.4.2", + "iconv-lite": "0.4.23", + "tmp": "0.0.33" } }, "extglob": { @@ -5725,14 +5590,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -5741,7 +5606,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -5750,7 +5615,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -5759,7 +5624,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -5768,7 +5633,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -5777,9 +5642,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -5822,7 +5687,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } }, "figgy-pudding": { @@ -5837,7 +5702,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "1.0.5" } }, "file-entry-cache": { @@ -5846,8 +5711,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "1.3.4", + "object-assign": "4.1.1" } }, "file-loader": { @@ -5856,8 +5721,8 @@ "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^0.4.5" + "loader-utils": "1.2.3", + "schema-utils": "0.4.7" } }, "file-saver": { @@ -5877,10 +5742,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -5889,7 +5754,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -5898,20 +5763,22 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" }, "dependencies": { "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true } } }, @@ -5921,9 +5788,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" } }, "find-root": { @@ -5938,7 +5805,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "findup-sync": { @@ -5947,10 +5814,10 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "detect-file": "1.0.0", + "is-glob": "3.1.0", + "micromatch": "3.1.10", + "resolve-dir": "1.0.1" }, "dependencies": { "is-glob": { @@ -5959,7 +5826,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -5970,10 +5837,10 @@ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "circular-json": "0.3.3", + "graceful-fs": "4.1.15", + "rimraf": "2.6.3", + "write": "0.2.1" } }, "flatten": { @@ -5982,20 +5849,14 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, - "flow-bin": { - "version": "0.73.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.73.0.tgz", - "integrity": "sha512-fNk2zBPSQ7X3PbQC+SqG68zps7zs2V+IDoW/E8jm2nM5MfYtN0jJKsoBtN8FuQJ1yoIHxWTFNG04aEKgl7pM2A==", - "dev": true - }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "follow-redirects": { @@ -6004,7 +5865,7 @@ "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", "dev": true, "requires": { - "debug": "=3.1.0" + "debug": "3.1.0" }, "dependencies": { "debug": { @@ -6024,7 +5885,7 @@ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { - "is-callable": "^1.1.3" + "is-callable": "1.1.4" } }, "for-in": { @@ -6043,15 +5904,16 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.21" } }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true }, "fragment-cache": { "version": "0.2.1", @@ -6059,13 +5921,14 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true }, "from2": { "version": "2.3.0", @@ -6073,8 +5936,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "fs-extra": { @@ -6083,9 +5946,9 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } }, "fs-readdir-recursive": { @@ -6100,10 +5963,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "graceful-fs": "4.1.15", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" } }, "fs.realpath": { @@ -6118,8 +5981,8 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.12.1", + "node-pre-gyp": "0.10.3" }, "dependencies": { "abbrev": { @@ -6131,8 +5994,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -6146,23 +6008,21 @@ "dev": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -6175,20 +6035,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -6229,7 +6086,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.5" } }, "fs.realpath": { @@ -6244,14 +6101,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" } }, "glob": { @@ -6260,12 +6117,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -6280,7 +6137,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ignore-walk": { @@ -6289,7 +6146,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -6298,15 +6155,14 @@ "dev": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -6318,9 +6174,8 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -6333,25 +6188,22 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "safe-buffer": "5.1.2", + "yallist": "3.0.3" } }, "minizlib": { @@ -6360,14 +6212,13 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.3.5" } }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -6384,9 +6235,9 @@ "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.24", + "sax": "1.2.4" } }, "node-pre-gyp": { @@ -6395,16 +6246,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.4", + "nopt": "4.0.1", + "npm-packlist": "1.2.0", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.3", + "semver": "5.6.0", + "tar": "4.4.8" } }, "nopt": { @@ -6413,8 +6264,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -6429,8 +6280,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.5" } }, "npmlog": { @@ -6439,17 +6290,16 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -6461,9 +6311,8 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -6484,8 +6333,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -6506,10 +6355,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -6526,13 +6375,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "rimraf": { @@ -6541,14 +6390,13 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" } }, "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -6584,11 +6432,10 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -6597,16 +6444,15 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -6621,13 +6467,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" } }, "util-deprecate": { @@ -6642,20 +6488,18 @@ "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "1.0.2" } }, "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -6688,7 +6532,7 @@ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "pump": "^3.0.0" + "pump": "3.0.0" } }, "get-value": { @@ -6702,7 +6546,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -6710,12 +6554,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-parent": { @@ -6724,8 +6568,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -6734,7 +6578,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -6744,8 +6588,8 @@ "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" + "min-document": "2.19.0", + "process": "0.5.2" } }, "global-dirs": { @@ -6754,7 +6598,7 @@ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "^1.3.4" + "ini": "1.3.5" } }, "global-modules": { @@ -6763,9 +6607,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" } }, "global-prefix": { @@ -6774,11 +6618,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.3.1" } }, "globals": { @@ -6793,11 +6637,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-union": "1.0.2", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { "pify": { @@ -6814,17 +6658,17 @@ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.2.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" }, "dependencies": { "get-stream": { @@ -6843,7 +6687,8 @@ "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true }, "handle-thing": { "version": "2.0.0", @@ -6861,8 +6706,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ajv": "6.9.1", + "har-schema": "2.0.0" } }, "harmony-reflect": { @@ -6876,7 +6721,7 @@ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "function-bind": "^1.1.1" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -6885,7 +6730,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" }, "dependencies": { "ansi-regex": { @@ -6913,9 +6758,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -6924,8 +6769,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "kind-of": { @@ -6934,7 +6779,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6945,8 +6790,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -6955,8 +6800,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "hawk": { @@ -6965,10 +6810,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "optional": true, "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" } }, "he": { @@ -6987,11 +6832,11 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", "requires": { - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "resolve-pathname": "2.2.0", + "value-equal": "0.4.0", + "warning": "3.0.0" } }, "hmac-drbg": { @@ -7000,16 +6845,15 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "optional": true + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "hoist-non-react-statics": { "version": "2.5.5", @@ -7022,8 +6866,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "homedir-polyfill": { @@ -7032,7 +6876,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "^1.0.0" + "parse-passwd": "1.0.0" } }, "hosted-git-info": { @@ -7047,10 +6891,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" } }, "hsl-regex": { @@ -7080,13 +6924,13 @@ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "camel-case": "3.0.0", + "clean-css": "4.2.1", + "commander": "2.17.1", + "he": "1.2.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.9" }, "dependencies": { "clean-css": { @@ -7095,7 +6939,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "~0.6.0" + "source-map": "0.6.1" } }, "commander": { @@ -7110,8 +6954,8 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" + "commander": "2.17.1", + "source-map": "0.6.1" } } } @@ -7122,12 +6966,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", + "html-minifier": "3.5.21", + "loader-utils": "0.2.17", + "lodash": "4.17.15", + "pretty-error": "2.1.1", + "tapable": "1.1.1", + "toposort": "1.0.7", "util.promisify": "1.0.0" }, "dependencies": { @@ -7149,10 +6993,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" } } } @@ -7163,10 +7007,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" + "domelementtype": "1.3.1", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" }, "dependencies": { "domutils": { @@ -7175,7 +7019,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "isarray": { @@ -7190,10 +7034,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "core-util-is": "1.0.2", + "inherits": "2.0.3", "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "string_decoder": "0.10.31" } }, "string_decoder": { @@ -7215,10 +7059,10 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.5.0" } }, "http-parser-js": { @@ -7233,9 +7077,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "eventemitter3": "3.1.0", + "follow-redirects": "1.6.1", + "requires-port": "1.0.0" } }, "http-proxy-middleware": { @@ -7244,10 +7088,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" + "http-proxy": "1.17.0", + "is-glob": "4.0.0", + "lodash": "4.17.15", + "micromatch": "3.1.10" } }, "http-signature": { @@ -7255,9 +7099,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" } }, "https-browserify": { @@ -7271,7 +7115,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "icss-replace-symbols": { @@ -7286,7 +7130,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "6.0.23" }, "dependencies": { "has-flag": { @@ -7301,9 +7145,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" } }, "supports-color": { @@ -7312,7 +7156,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -7323,7 +7167,7 @@ "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", "dev": true, "requires": { - "harmony-reflect": "^1.4.6" + "harmony-reflect": "1.6.1" } }, "ieee754": { @@ -7344,12 +7188,6 @@ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, "image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", @@ -7361,8 +7199,8 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "caller-path": "2.0.0", + "resolve-from": "3.0.0" }, "dependencies": { "caller-path": { @@ -7370,7 +7208,7 @@ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "requires": { - "caller-callsite": "^2.0.0" + "caller-callsite": "2.0.0" } }, "resolve-from": { @@ -7392,8 +7230,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" }, "dependencies": { "pkg-dir": { @@ -7402,7 +7240,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } } } @@ -7419,7 +7257,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "indexes-of": { @@ -7438,8 +7276,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -7459,20 +7297,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", + "ansi-escapes": "3.2.0", + "chalk": "2.4.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.15", "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" } }, "internal-ip": { @@ -7481,8 +7319,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "default-gateway": "2.7.2", + "ipaddr.js": "1.8.0" } }, "interpret": { @@ -7496,7 +7334,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } }, "invert-kv": { @@ -7520,7 +7358,8 @@ "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "dev": true }, "is": { "version": "3.3.0", @@ -7533,8 +7372,8 @@ "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", "dev": true, "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" + "is-relative": "0.2.1", + "is-windows": "0.2.0" }, "dependencies": { "is-windows": { @@ -7556,7 +7395,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-arrayish": { @@ -7570,13 +7409,14 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.13.0" } }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-callable": { "version": "1.1.4", @@ -7589,7 +7429,7 @@ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "ci-info": "1.6.0" } }, "is-color-stop": { @@ -7597,12 +7437,12 @@ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "css-color-names": "0.0.4", + "hex-color-regex": "1.1.0", + "hsl-regex": "1.0.0", + "hsla-regex": "1.0.0", + "rgb-regex": "1.0.1", + "rgba-regex": "1.0.0" } }, "is-data-descriptor": { @@ -7611,7 +7451,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-date-object": { @@ -7625,9 +7465,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -7643,22 +7483,6 @@ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, - "is-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", - "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", - "requires": { - "acorn": "~4.0.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -7677,7 +7501,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -7698,7 +7522,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-installed-globally": { @@ -7707,8 +7531,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" } }, "is-npm": { @@ -7723,7 +7547,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-obj": { @@ -7743,7 +7567,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { @@ -7752,7 +7576,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "1.0.2" } }, "is-plain-obj": { @@ -7767,13 +7591,14 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true }, "is-redirect": { "version": "1.0.0", @@ -7786,7 +7611,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "requires": { - "has": "^1.0.1" + "has": "1.0.3" } }, "is-relative": { @@ -7795,7 +7620,7 @@ "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", "dev": true, "requires": { - "is-unc-path": "^0.1.1" + "is-unc-path": "0.1.2" } }, "is-resolvable": { @@ -7821,7 +7646,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "html-comment-regex": "1.1.2" } }, "is-symbol": { @@ -7829,7 +7654,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "1.0.0" } }, "is-typedarray": { @@ -7843,7 +7668,7 @@ "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", "dev": true, "requires": { - "unc-path-regex": "^0.1.0" + "unc-path-regex": "0.1.2" } }, "is-utf8": { @@ -7867,7 +7692,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -7892,22 +7718,22 @@ "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", "dev": true, "requires": { - "bignumber.js": "^2.1.0", + "bignumber.js": "2.4.0", "bmp-js": "0.0.3", - "es6-promise": "^3.0.2", - "exif-parser": "^0.1.9", - "file-type": "^3.1.0", - "jpeg-js": "^0.2.0", - "load-bmfont": "^1.2.3", - "mime": "^1.3.4", + "es6-promise": "3.3.1", + "exif-parser": "0.1.12", + "file-type": "3.9.0", + "jpeg-js": "0.2.0", + "load-bmfont": "1.4.0", + "mime": "1.4.1", "mkdirp": "0.5.1", - "pixelmatch": "^4.0.0", - "pngjs": "^3.0.0", - "read-chunk": "^1.0.1", - "request": "^2.65.0", - "stream-to-buffer": "^0.1.0", - "tinycolor2": "^1.1.2", - "url-regex": "^3.0.0" + "pixelmatch": "4.0.2", + "pngjs": "3.4.0", + "read-chunk": "1.0.1", + "request": "2.88.0", + "stream-to-buffer": "0.1.0", + "tinycolor2": "1.4.1", + "url-regex": "3.2.0" }, "dependencies": { "bignumber.js": { @@ -7941,11 +7767,6 @@ "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" }, - "js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7957,8 +7778,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "argparse": "1.0.10", + "esprima": "2.7.3" } }, "jsbn": { @@ -7993,7 +7814,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "optional": true, "requires": { - "jsonify": "~0.0.0" + "jsonify": "0.0.0" } }, "json-stable-stringify-without-jsonify": { @@ -8018,7 +7839,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "requires": { - "minimist": "^1.2.0" + "minimist": "1.2.0" }, "dependencies": { "minimist": { @@ -8034,7 +7855,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.15" } }, "jsonify": { @@ -8054,29 +7875,15 @@ "verror": "1.10.0" } }, - "jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", - "requires": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, "jsx-ast-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", "dev": true, "requires": { - "array-includes": "^3.0.3" + "array-includes": "3.0.3" } }, - "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" - }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -8087,8 +7894,9 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "last-call-webpack-plugin": { @@ -8096,8 +7904,8 @@ "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" + "lodash": "4.17.15", + "webpack-sources": "1.3.0" } }, "latest-version": { @@ -8106,21 +7914,16 @@ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "package-json": "^4.0.0" + "package-json": "4.0.1" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "2.0.0" } }, "leaflet": { @@ -8134,24 +7937,22 @@ "integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==" }, "leaflet-editable-polyline": { - "version": "github:muerwre/leaflet-editable-polyline#a8e481464d9c286c3a0a1392f1f96f7e2af40489", - "from": "github:muerwre/leaflet-editable-polyline#master" + "version": "github:muerwre/leaflet-editable-polyline#a8e481464d9c286c3a0a1392f1f96f7e2af40489" }, "leaflet-geometryutil": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/leaflet-geometryutil/-/leaflet-geometryutil-0.9.1.tgz", "integrity": "sha512-DKYLzFBsEcmZSl1fXLM+Pd+7t5IHmY6Ps7XeSnWL1ngr1qxQfcVzhkJT9gxfZrmFWiL96c23xQ0aLcHocV2tVA==", "requires": { - "leaflet": ">=0.7.0" + "leaflet": "1.4.0" } }, "leaflet-routing-machine": { "version": "github:muerwre/leaflet-routing-machine#25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b", - "from": "github:muerwre/leaflet-routing-machine#no-osrm-text", "requires": { "@mapbox/corslite": "0.0.7", - "@mapbox/polyline": "^0.2.0", - "osrm-text-instructions": "^0.11.5" + "@mapbox/polyline": "0.2.0", + "osrm-text-instructions": "0.11.5" } }, "leaflet.markercluster": { @@ -8164,15 +7965,15 @@ "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", "requires": { - "clone": "^2.1.2", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.4.1", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "^2.83.0", - "source-map": "~0.6.0" + "clone": "2.1.2", + "errno": "0.1.7", + "graceful-fs": "4.1.15", + "image-size": "0.5.5", + "mime": "1.4.1", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.88.0", + "source-map": "0.6.1" } }, "less-loader": { @@ -8181,9 +7982,9 @@ "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", "dev": true, "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^3.0.0" + "clone": "2.1.2", + "loader-utils": "1.2.3", + "pify": "3.0.0" } }, "less-middleware": { @@ -8191,9 +7992,9 @@ "resolved": "https://registry.npmjs.org/less-middleware/-/less-middleware-2.2.1.tgz", "integrity": "sha512-1fDsyifwRGObMmqaZhkTDAmVnvgpZmdf6ZTSCbVv9vt+xhlzOz5TDNlLCbITsusEB3d0OKOEadwN9ic3PyOWCg==", "requires": { - "less": "~2.7.1", - "mkdirp": "~0.5.1", - "node.extend": "~2.0.0" + "less": "2.7.3", + "mkdirp": "0.5.1", + "node.extend": "2.0.2" }, "dependencies": { "ajv": { @@ -8202,8 +8003,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "optional": true, "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } }, "assert-plus": { @@ -8224,9 +8025,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "optional": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.21" } }, "har-schema": { @@ -8241,8 +8042,8 @@ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "optional": true, "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" + "ajv": "4.11.8", + "har-schema": "1.0.5" } }, "http-signature": { @@ -8251,9 +8052,9 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "optional": true, "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" } }, "less": { @@ -8261,14 +8062,14 @@ "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", "requires": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.2.11", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", + "errno": "0.1.7", + "graceful-fs": "4.1.15", + "image-size": "0.5.5", + "mime": "1.4.1", + "mkdirp": "0.5.1", + "promise": "7.3.1", "request": "2.81.0", - "source-map": "^0.5.3" + "source-map": "0.5.7" } }, "oauth-sign": { @@ -8301,28 +8102,28 @@ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "optional": true, "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" + "aws-sign2": "0.6.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.21", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "source-map": { @@ -8337,7 +8138,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "optional": true, "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" } } } @@ -8348,8 +8149,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "line-height": { @@ -8357,7 +8158,7 @@ "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.1.1.tgz", "integrity": "sha1-6GcF+/Cm9QYHrtZVANadstnbN+I=", "requires": { - "computed-style": "~0.1.3" + "computed-style": "0.1.4" } }, "load-bmfont": { @@ -8367,13 +8168,13 @@ "dev": true, "requires": { "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" + "mime": "1.4.1", + "parse-bmfont-ascii": "1.0.6", + "parse-bmfont-binary": "1.0.6", + "parse-bmfont-xml": "1.1.4", + "phin": "2.9.3", + "xhr": "2.5.0", + "xtend": "4.0.1" } }, "load-json-file": { @@ -8382,10 +8183,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" }, "dependencies": { "pify": { @@ -8402,7 +8203,7 @@ "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", "dev": true, "requires": { - "find-cache-dir": "^0.1.1", + "find-cache-dir": "0.1.1", "mkdirp": "0.5.1" }, "dependencies": { @@ -8412,9 +8213,9 @@ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" } }, "find-up": { @@ -8423,8 +8224,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "path-exists": { @@ -8433,7 +8234,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "pkg-dir": { @@ -8442,7 +8243,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "^1.0.0" + "find-up": "1.1.2" } } } @@ -8458,9 +8259,9 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" } }, "locate-path": { @@ -8469,8 +8270,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -8521,9 +8322,9 @@ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" } }, "lodash.memoize": { @@ -8542,8 +8343,8 @@ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.2.0" } }, "lodash.templatesettings": { @@ -8552,7 +8353,7 @@ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0" + "lodash._reinterpolate": "3.0.0" } }, "lodash.uniq": { @@ -8566,7 +8367,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "2.4.2" } }, "loglevel": { @@ -8581,21 +8382,16 @@ "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", "dev": true, "requires": { - "es6-symbol": "^3.1.1", - "object.assign": "^4.1.0" + "es6-symbol": "3.1.1", + "object.assign": "4.1.0" } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "js-tokens": "4.0.0" } }, "loud-rejection": { @@ -8604,8 +8400,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" } }, "lower-case": { @@ -8626,8 +8422,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "make-dir": { @@ -8636,7 +8432,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "make-error": { @@ -8651,7 +8447,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "p-defer": "1.0.0" } }, "map-cache": { @@ -8672,7 +8468,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "math-expression-evaluator": { @@ -8687,9 +8483,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "mdn-data": { @@ -8708,9 +8504,9 @@ "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "2.0.0" } }, "memory-fs": { @@ -8719,32 +8515,26 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.5.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" }, "dependencies": { "find-up": { @@ -8753,8 +8543,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "load-json-file": { @@ -8763,11 +8553,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" } }, "minimist": { @@ -8782,7 +8572,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "path-type": { @@ -8791,9 +8581,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.1.15", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "pify": { @@ -8808,9 +8598,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.5.0", + "path-type": "1.1.0" } }, "read-pkg-up": { @@ -8819,8 +8609,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" } }, "strip-bom": { @@ -8829,7 +8619,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } } } @@ -8837,12 +8627,14 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true }, "micromatch": { "version": "3.1.10", @@ -8850,19 +8642,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -8879,8 +8671,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mime": { @@ -8898,7 +8690,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.37.0" } }, "mimic-fn": { @@ -8912,7 +8704,7 @@ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "requires": { - "dom-walk": "^0.1.0" + "dom-walk": "0.1.1" } }, "mini-css-extract-plugin": { @@ -8921,9 +8713,9 @@ "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" + "loader-utils": "1.2.3", + "schema-utils": "1.0.0", + "webpack-sources": "1.3.0" }, "dependencies": { "ajv-keywords": { @@ -8938,9 +8730,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.9.1", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.4.0" } } } @@ -8962,7 +8754,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -8976,16 +8768,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" }, "dependencies": { "pump": { @@ -8994,8 +8786,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } } } @@ -9006,8 +8798,8 @@ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -9016,7 +8808,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -9029,106 +8821,18 @@ "minimist": "0.0.8" } }, - "mongodb": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.13.tgz", - "integrity": "sha512-sz2dhvBZQWf3LRNDhbd30KHVzdjZx9IKC0L+kSZ/gzYquCF5zPOgGqRz6sSCqYZtKP2ekB4nfLxhGtzGHnIKxA==", - "requires": { - "mongodb-core": "3.1.11", - "safe-buffer": "^5.1.2" - } - }, - "mongodb-core": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.11.tgz", - "integrity": "sha512-rD2US2s5qk/ckbiiGFHeu+yKYDXdJ1G87F6CG3YdaZpzdOm5zpoAZd/EKbPmFO6cQZ+XVXBXBJ660sSI0gc6qg==", - "requires": { - "bson": "^1.1.0", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "mongoose": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.4.11.tgz", - "integrity": "sha512-Ah/JaZj4vhYP2CEjIy1ictJguzGJczHMtUQmLrBUpnQ4WhhQl5jOo6JHzKiRJ/PdLV25y22kt8WOdsc0DIojww==", - "requires": { - "async": "2.6.1", - "bson": "~1.1.0", - "kareem": "2.3.0", - "mongodb": "3.1.13", - "mongodb-core": "3.1.11", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.5.1", - "mquery": "3.2.0", - "ms": "2.0.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "morgan": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", - "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", - "requires": { - "basic-auth": "~2.0.0", - "debug": "2.6.9", - "depd": "~1.1.2", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" - } - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "mpath": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz", - "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg==" - }, - "mquery": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", - "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "ms": { @@ -9142,8 +8846,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "dns-packet": "1.3.1", + "thunky": "1.0.3" } }, "multicast-dns-service-types": { @@ -9158,17 +8862,6 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "mysql": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.16.0.tgz", - "integrity": "sha512-dPbN2LHonQp7D5ja5DJXNbCLe/HRdu+f3v61aguzNRQIrmZLOeRoymBYyeThrR6ug+FqzDL95Gc9maqZUJS+Gw==", - "requires": { - "bignumber.js": "4.1.0", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "sqlstring": "2.3.1" - } - }, "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", @@ -9180,17 +8873,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -9210,7 +8903,8 @@ "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true }, "neo-async": { "version": "2.6.0", @@ -9236,7 +8930,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "lower-case": "1.1.4" } }, "node-forge": { @@ -9251,28 +8945,28 @@ "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.0.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", + "url": "0.11.0", + "util": "0.11.1", "vm-browserify": "0.0.4" }, "dependencies": { @@ -9282,9 +8976,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" } }, "process": { @@ -9306,7 +9000,7 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz", "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==", "requires": { - "semver": "^5.3.0" + "semver": "5.6.0" } }, "node.extend": { @@ -9314,93 +9008,8 @@ "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz", "integrity": "sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==", "requires": { - "has": "^1.0.3", - "is": "^3.2.1" - } - }, - "nodemon": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.2.tgz", - "integrity": "sha512-hRLYaw5Ihyw9zK7NF+9EUzVyS6Cvgc14yh8CAYr38tPxJa6UrOxwAQ351GwrgoanHCF0FalQFn6w5eoX/LGdJw==", - "dev": true, - "requires": { - "chokidar": "^2.1.5", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.6", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" + "has": "1.0.3", + "is": "3.3.0" } }, "normalize-package-data": { @@ -9409,10 +9018,10 @@ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "resolve": "1.10.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" } }, "normalize-path": { @@ -9433,10 +9042,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" } }, "npm-run-path": { @@ -9445,7 +9054,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "nth-check": { @@ -9453,7 +9062,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "requires": { - "boolbase": "~1.0.0" + "boolbase": "1.0.0" } }, "num2fraction": { @@ -9484,9 +9093,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -9495,7 +9104,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -9517,7 +9126,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.assign": { @@ -9526,10 +9135,10 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.1.0" } }, "object.fromentries": { @@ -9538,10 +9147,10 @@ "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", - "function-bind": "^1.1.1", - "has": "^1.0.1" + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1", + "has": "1.0.3" } }, "object.getownpropertydescriptors": { @@ -9549,8 +9158,8 @@ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "1.1.3", + "es-abstract": "1.13.0" } }, "object.pick": { @@ -9559,7 +9168,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "object.values": { @@ -9567,10 +9176,10 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1", + "has": "1.0.3" } }, "obuf": { @@ -9590,14 +9199,15 @@ "on-headers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -9606,7 +9216,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "opn": { @@ -9615,7 +9225,7 @@ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "is-wsl": "1.1.0" } }, "optimize-css-assets-webpack-plugin": { @@ -9623,8 +9233,8 @@ "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", "requires": { - "cssnano": "^4.1.0", - "last-call-webpack-plugin": "^3.0.0" + "cssnano": "4.1.10", + "last-call-webpack-plugin": "3.0.0" }, "dependencies": { "cssnano": { @@ -9632,10 +9242,10 @@ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "cosmiconfig": "5.1.0", + "cssnano-preset-default": "4.0.7", + "is-resolvable": "1.1.0", + "postcss": "7.0.14" } }, "has-flag": { @@ -9648,9 +9258,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -9658,7 +9268,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -9669,12 +9279,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" }, "dependencies": { "wordwrap": { @@ -9691,7 +9301,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "^1.4.3" + "url-parse": "1.4.4" } }, "os-browserify": { @@ -9712,9 +9322,9 @@ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.1.0" } }, "os-tmpdir": { @@ -9734,9 +9344,9 @@ "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "is-plain-obj": "^1.1.0", - "mkdirp": "^0.5.1" + "graceful-fs": "4.1.15", + "is-plain-obj": "1.1.0", + "mkdirp": "0.5.1" } }, "p-defer": { @@ -9763,7 +9373,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -9772,7 +9382,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-map": { @@ -9793,10 +9403,10 @@ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "got": "6.7.1", + "registry-auth-token": "3.4.0", + "registry-url": "3.1.0", + "semver": "5.6.0" } }, "pako": { @@ -9811,9 +9421,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "param-case": { @@ -9822,7 +9432,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "^2.2.0" + "no-case": "2.3.2" } }, "parse-asn1": { @@ -9831,12 +9441,12 @@ "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.2" } }, "parse-bmfont-ascii": { @@ -9857,8 +9467,8 @@ "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", "dev": true, "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" + "xml-parse-from-string": "1.0.1", + "xml2js": "0.4.22" } }, "parse-headers": { @@ -9867,8 +9477,8 @@ "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", "dev": true, "requires": { - "for-each": "^0.3.3", - "string.prototype.trim": "^1.1.2" + "for-each": "0.3.3", + "string.prototype.trim": "1.2.0" } }, "parse-json": { @@ -9877,7 +9487,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "parse-passwd": { @@ -9889,7 +9499,8 @@ "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true }, "pascalcase": { "version": "0.1.1", @@ -9935,12 +9546,14 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true }, "path-type": { "version": "2.0.0", @@ -9948,7 +9561,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "^2.0.0" + "pify": "2.3.0" }, "dependencies": { "pify": { @@ -9965,11 +9578,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "performance-now": { @@ -10001,7 +9614,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "pixelmatch": { @@ -10010,7 +9623,7 @@ "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", "dev": true, "requires": { - "pngjs": "^3.0.0" + "pngjs": "3.4.0" } }, "pkg-dir": { @@ -10019,7 +9632,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "2.1.0" }, "dependencies": { "find-up": { @@ -10028,7 +9641,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "locate-path": { @@ -10037,8 +9650,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -10047,7 +9660,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -10056,7 +9669,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-try": { @@ -10073,7 +9686,7 @@ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "2.1.0" }, "dependencies": { "find-up": { @@ -10082,7 +9695,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "locate-path": { @@ -10091,8 +9704,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -10101,7 +9714,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -10110,7 +9723,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-try": { @@ -10139,9 +9752,9 @@ "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" }, "dependencies": { "async": { @@ -10164,10 +9777,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "chalk": "1.1.3", + "js-base64": "2.5.1", + "source-map": "0.5.7", + "supports-color": "3.2.3" }, "dependencies": { "ansi-regex": { @@ -10188,11 +9801,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" }, "dependencies": { "supports-color": { @@ -10215,7 +9828,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -10226,9 +9839,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" } }, "postcss-colormin": { @@ -10237,9 +9850,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-convert-values": { @@ -10248,8 +9861,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-discard-comments": { @@ -10258,7 +9871,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "^5.0.14" + "postcss": "5.2.18" } }, "postcss-discard-duplicates": { @@ -10267,7 +9880,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-discard-empty": { @@ -10276,7 +9889,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "^5.0.14" + "postcss": "5.2.18" } }, "postcss-discard-overridden": { @@ -10285,7 +9898,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "^5.0.16" + "postcss": "5.2.18" } }, "postcss-discard-unused": { @@ -10294,8 +9907,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "postcss-filter-plugins": { @@ -10304,7 +9917,7 @@ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-merge-idents": { @@ -10313,9 +9926,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-merge-longhand": { @@ -10324,7 +9937,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-merge-rules": { @@ -10333,11 +9946,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.2" }, "dependencies": { "browserslist": { @@ -10346,8 +9959,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" + "caniuse-db": "1.0.30000936", + "electron-to-chromium": "1.3.113" } } } @@ -10364,9 +9977,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-minify-gradients": { @@ -10375,8 +9988,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-minify-params": { @@ -10385,10 +9998,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1", + "uniqs": "2.0.0" } }, "postcss-minify-selectors": { @@ -10397,10 +10010,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" } }, "postcss-modules-extract-imports": { @@ -10409,7 +10022,7 @@ "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "6.0.23" }, "dependencies": { "has-flag": { @@ -10424,9 +10037,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" } }, "supports-color": { @@ -10435,7 +10048,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10446,8 +10059,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "css-selector-tokenizer": "0.7.1", + "postcss": "6.0.23" }, "dependencies": { "has-flag": { @@ -10462,9 +10075,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" } }, "supports-color": { @@ -10473,7 +10086,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10484,8 +10097,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "css-selector-tokenizer": "0.7.1", + "postcss": "6.0.23" }, "dependencies": { "has-flag": { @@ -10500,9 +10113,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" } }, "supports-color": { @@ -10511,7 +10124,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10522,8 +10135,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.23" }, "dependencies": { "has-flag": { @@ -10538,9 +10151,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "5.5.0" } }, "supports-color": { @@ -10549,7 +10162,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10560,7 +10173,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "^5.0.5" + "postcss": "5.2.18" } }, "postcss-normalize-display-values": { @@ -10568,9 +10181,9 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" }, "dependencies": { "has-flag": { @@ -10583,9 +10196,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -10593,7 +10206,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10603,10 +10216,10 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-util-get-arguments": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" }, "dependencies": { "has-flag": { @@ -10619,9 +10232,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -10629,7 +10242,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10639,10 +10252,10 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-util-get-arguments": "4.0.0", + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" }, "dependencies": { "has-flag": { @@ -10655,9 +10268,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -10665,7 +10278,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10675,9 +10288,9 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "has": "1.0.3", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" }, "dependencies": { "has-flag": { @@ -10690,9 +10303,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -10700,7 +10313,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10710,9 +10323,9 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" }, "dependencies": { "has-flag": { @@ -10725,9 +10338,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -10735,7 +10348,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10745,9 +10358,9 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "4.4.1", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" }, "dependencies": { "has-flag": { @@ -10760,9 +10373,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -10770,7 +10383,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10781,10 +10394,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-normalize-whitespace": { @@ -10792,8 +10405,8 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" }, "dependencies": { "has-flag": { @@ -10806,9 +10419,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "supports-color": { @@ -10816,7 +10429,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -10827,8 +10440,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-reduce-idents": { @@ -10837,8 +10450,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-reduce-initial": { @@ -10847,7 +10460,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "^5.0.4" + "postcss": "5.2.18" } }, "postcss-reduce-transforms": { @@ -10856,9 +10469,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" + "has": "1.0.3", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1" } }, "postcss-selector-parser": { @@ -10867,9 +10480,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, "postcss-svgo": { @@ -10878,10 +10491,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.1", + "svgo": "0.7.2" } }, "postcss-unique-selectors": { @@ -10890,9 +10503,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "postcss-value-parser": { @@ -10906,9 +10519,9 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" + "has": "1.0.3", + "postcss": "5.2.18", + "uniqs": "2.0.0" } }, "prefix-style": { @@ -10940,8 +10553,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" + "renderkid": "2.0.2", + "utila": "0.4.0" } }, "private": { @@ -10958,7 +10571,8 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, "progress": { "version": "2.0.3", @@ -10970,8 +10584,9 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, "requires": { - "asap": "~2.0.3" + "asap": "2.0.6" } }, "promise-inflight": { @@ -10985,16 +10600,17 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.1.tgz", "integrity": "sha512-f8Lku2z9kERjOCcnDOPm68EBJAO2K00Q5mSgPAUE/gJuBgsYLbVy6owSrtcHj90zt8PvW+z0qaIIgsIhHOa1Qw==", "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "object-assign": "4.1.1", + "react-is": "16.8.1" } }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.8.0" } }, @@ -11014,12 +10630,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" }, - "pstree.remy": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", - "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", - "dev": true - }, "pt-sans-cyrillic": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/pt-sans-cyrillic/-/pt-sans-cyrillic-0.0.4.tgz", @@ -11031,136 +10641,22 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.3", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, - "pug": { - "version": "2.0.0-beta11", - "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta11.tgz", - "integrity": "sha1-Favmr1AEx+LPRhPksnRlyVRrXwE=", - "requires": { - "pug-code-gen": "^1.1.1", - "pug-filters": "^2.1.1", - "pug-lexer": "^3.0.0", - "pug-linker": "^2.0.2", - "pug-load": "^2.0.5", - "pug-parser": "^2.0.2", - "pug-runtime": "^2.0.3", - "pug-strip-comments": "^1.0.2" - } - }, - "pug-attrs": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", - "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", - "requires": { - "constantinople": "^3.0.1", - "js-stringify": "^1.0.1", - "pug-runtime": "^2.0.5" - } - }, - "pug-code-gen": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-1.1.1.tgz", - "integrity": "sha1-HPcnRO8qA56uajNAyqoRBYcSWOg=", - "requires": { - "constantinople": "^3.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.1", - "pug-attrs": "^2.0.2", - "pug-error": "^1.3.2", - "pug-runtime": "^2.0.3", - "void-elements": "^2.0.1", - "with": "^5.0.0" - } - }, - "pug-error": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", - "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" - }, - "pug-filters": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz", - "integrity": "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==", - "requires": { - "clean-css": "^3.3.0", - "constantinople": "^3.0.1", - "jstransformer": "1.0.0", - "pug-error": "^1.3.2", - "pug-walk": "^1.1.5", - "resolve": "^1.1.6", - "uglify-js": "^2.6.1" - } - }, - "pug-lexer": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-3.1.0.tgz", - "integrity": "sha1-/QhzdtSmdbT1n4/vQiiDQ06VgaI=", - "requires": { - "character-parser": "^2.1.1", - "is-expression": "^3.0.0", - "pug-error": "^1.3.2" - } - }, - "pug-linker": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-2.0.3.tgz", - "integrity": "sha1-szH/olc33eacEntWwQ/xf652bco=", - "requires": { - "pug-error": "^1.3.2", - "pug-walk": "^1.1.2" - } - }, - "pug-load": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", - "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", - "requires": { - "object-assign": "^4.1.0", - "pug-walk": "^1.1.8" - } - }, - "pug-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.2.tgz", - "integrity": "sha1-U6aAz9BQOdywwn0CkJS8SnkmibA=", - "requires": { - "pug-error": "^1.3.2", - "token-stream": "0.0.1" - } - }, - "pug-runtime": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", - "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" - }, - "pug-strip-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", - "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", - "requires": { - "pug-error": "^1.3.3" - } - }, - "pug-walk": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", - "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "pumpify": { @@ -11169,9 +10665,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "duplexify": "3.7.1", + "inherits": "2.0.3", + "pump": "2.0.1" }, "dependencies": { "pump": { @@ -11180,8 +10676,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } } } @@ -11207,8 +10703,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" } }, "querystring": { @@ -11234,7 +10730,7 @@ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "requires": { - "performance-now": "^2.1.0" + "performance-now": "2.1.0" } }, "raleway-cyrillic": { @@ -11243,16 +10739,23 @@ "integrity": "sha1-HcKzrqYwKwhTbs7jGIyS0li4jOE=" }, "ramda": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", - "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=" + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" }, "ramdasauce": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ramdasauce/-/ramdasauce-2.1.3.tgz", "integrity": "sha512-Ml3CPim4SKwmg5g9UI77lnRSeKr/kQw7YhQ6rfdMcBYy6DMlwmkEwQqjygJ3OhxPR+NfFfpjKl3Tf8GXckaqqg==", "requires": { - "ramda": "^0.24.1" + "ramda": "0.24.1" + }, + "dependencies": { + "ramda": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", + "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=" + } } }, "randombytes": { @@ -11261,7 +10764,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -11270,14 +10773,15 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true }, "raw-body": { "version": "2.3.3", @@ -11296,10 +10800,10 @@ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -11315,10 +10819,10 @@ "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.3.tgz", "integrity": "sha512-h5KgyB5IXYR7iKpYFcMr54cuQ2eozPCZ11kbXPG5+6CWvmyJ+c0R/yjndVndiNk2G3MKcTMbJNdDv5DIckLAxQ==", "requires": { - "babel-runtime": "^6.26.0", - "dom-align": "^1.7.0", - "prop-types": "^15.5.8", - "rc-util": "^4.0.4" + "babel-runtime": "6.26.0", + "dom-align": "1.8.0", + "prop-types": "15.7.1", + "rc-util": "4.6.0" } }, "rc-animate": { @@ -11326,12 +10830,12 @@ "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.6.0.tgz", "integrity": "sha512-JXDycchgbOI+7T/VKmFWnAIn042LLScK1fNkmNunb0jz5q5aPGCAybx2bTo7X5t31Jkj9OsxKNb/vZPDPWufCg==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "css-animation": "^1.3.2", - "prop-types": "15.x", - "raf": "^3.4.0", - "react-lifecycles-compat": "^3.0.4" + "babel-runtime": "6.26.0", + "classnames": "2.2.6", + "css-animation": "1.5.0", + "prop-types": "15.7.1", + "raf": "3.4.1", + "react-lifecycles-compat": "3.0.4" } }, "rc-slider": { @@ -11339,13 +10843,13 @@ "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.5.0.tgz", "integrity": "sha512-dw1kA7Dr6GOmPZFsy+yMxVyqmckeUtYVdfNOdQcI9O8mXkoCwlxXolMK9bW/TTlXCc8ztaXkJkyTVXl/Gkg5Tw==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "prop-types": "^15.5.4", - "rc-tooltip": "^3.7.0", - "rc-util": "^4.0.4", - "shallowequal": "^1.0.1", - "warning": "^3.0.0" + "babel-runtime": "6.26.0", + "classnames": "2.2.6", + "prop-types": "15.7.1", + "rc-tooltip": "3.7.3", + "rc-util": "4.6.0", + "shallowequal": "1.1.0", + "warning": "3.0.0" } }, "rc-tooltip": { @@ -11353,9 +10857,9 @@ "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-3.7.3.tgz", "integrity": "sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww==", "requires": { - "babel-runtime": "6.x", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.2" + "babel-runtime": "6.26.0", + "prop-types": "15.7.1", + "rc-trigger": "2.6.2" } }, "rc-trigger": { @@ -11363,12 +10867,12 @@ "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.2.tgz", "integrity": "sha512-op4xCu95/gdHVaysyxxiYxbY+Z+UcIBSUY9nQfLqm1FlitdtnAN+owD5iMPfnnsRXntgcQ5+RdYKNUFQT5DjzA==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "prop-types": "15.x", - "rc-align": "^2.4.0", - "rc-animate": "2.x", - "rc-util": "^4.4.0" + "babel-runtime": "6.26.0", + "classnames": "2.2.6", + "prop-types": "15.7.1", + "rc-align": "2.4.3", + "rc-animate": "2.6.0", + "rc-util": "4.6.0" } }, "rc-util": { @@ -11376,10 +10880,10 @@ "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.6.0.tgz", "integrity": "sha512-rbgrzm1/i8mgfwOI4t1CwWK7wGe+OwX+dNa7PVMgxZYPBADGh86eD4OcJO1UKGeajIMDUUKMluaZxvgraQIOmw==", "requires": { - "add-dom-event-listener": "^1.1.0", - "babel-runtime": "6.x", - "prop-types": "^15.5.10", - "shallowequal": "^0.2.2" + "add-dom-event-listener": "1.1.0", + "babel-runtime": "6.26.0", + "prop-types": "15.7.1", + "shallowequal": "0.2.2" }, "dependencies": { "shallowequal": { @@ -11387,7 +10891,7 @@ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", "requires": { - "lodash.keys": "^3.1.2" + "lodash.keys": "3.1.2" } } } @@ -11397,10 +10901,10 @@ "resolved": "https://registry.npmjs.org/react/-/react-16.8.1.tgz", "integrity": "sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.1" + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.1", + "scheduler": "0.13.1" } }, "react-dom": { @@ -11408,17 +10912,16 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.1.tgz", "integrity": "sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.1" + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.1", + "scheduler": "0.13.1" } }, "react-expandable-textarea": { "version": "github:muerwre/react-expandable-textarea#0cbcbbd875439090a2d48e711da241f2a83dd6b2", - "from": "github:muerwre/react-expandable-textarea", "requires": { - "classnames": "^2.2.6" + "classnames": "2.2.6" } }, "react-hot-loader": { @@ -11426,15 +10929,15 @@ "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.6.5.tgz", "integrity": "sha512-ZPAJEWVd8KDdm6dcK0iWrnJiGHruLrcbkIpqn/wQmNjnROpsm2nzrWh23Yh3I/XAjB+35pMa/ZgariwGqwFD9A==", "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^2.5.0", - "loader-utils": "^1.1.0", - "lodash.merge": "^4.6.1", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2", - "source-map": "^0.7.3" + "fast-levenshtein": "2.0.6", + "global": "4.3.2", + "hoist-non-react-statics": "2.5.5", + "loader-utils": "1.2.3", + "lodash.merge": "4.6.2", + "prop-types": "15.7.1", + "react-lifecycles-compat": "3.0.4", + "shallowequal": "1.1.0", + "source-map": "0.7.3" }, "dependencies": { "source-map": { @@ -11449,7 +10952,7 @@ "resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz", "integrity": "sha512-/oOa0QhZjXPqaD6sictN2edFMsd3kkMiE19Vcz5JDgHpzEJVqYcmq+V3mkwO88087kvKGe1URNksHEOt839Ubw==", "requires": { - "prop-types": "^15.5.8" + "prop-types": "15.7.1" } }, "react-is": { @@ -11467,9 +10970,9 @@ "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", "requires": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" + "performance-now": "0.2.0", + "prop-types": "15.7.1", + "raf": "3.4.1" }, "dependencies": { "performance-now": { @@ -11484,8 +10987,8 @@ "resolved": "https://registry.npmjs.org/react-rangeslider/-/react-rangeslider-2.2.0.tgz", "integrity": "sha512-5K7Woa+cyqZ5wiW5+KhqGV+3+FiFxGKQ9rUxTMh52sObXVYEeBbfxFrp1eBvS8mRIxnUbHz9ppnFP0LhwOyNeg==", "requires": { - "classnames": "^2.2.3", - "resize-observer-polyfill": "^1.4.2" + "classnames": "2.2.6", + "resize-observer-polyfill": "1.5.1" } }, "react-redux": { @@ -11493,13 +10996,13 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.1.tgz", "integrity": "sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg==", "requires": { - "@babel/runtime": "^7.1.2", - "hoist-non-react-statics": "^3.1.0", - "invariant": "^2.2.4", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.1", - "react-is": "^16.6.0", - "react-lifecycles-compat": "^3.0.0" + "@babel/runtime": "7.3.1", + "hoist-non-react-statics": "3.3.0", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "prop-types": "15.7.1", + "react-is": "16.8.1", + "react-lifecycles-compat": "3.0.4" }, "dependencies": { "hoist-non-react-statics": { @@ -11507,7 +11010,7 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", "requires": { - "react-is": "^16.7.0" + "react-is": "16.8.1" } } } @@ -11517,13 +11020,13 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" + "history": "4.7.2", + "hoist-non-react-statics": "2.5.5", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "path-to-regexp": "1.7.0", + "prop-types": "15.7.1", + "warning": "4.0.3" }, "dependencies": { "isarray": { @@ -11544,7 +11047,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } } } @@ -11554,9 +11057,9 @@ "resolved": "https://registry.npmjs.org/react-scrollbar/-/react-scrollbar-0.5.4.tgz", "integrity": "sha512-6t9ztrXipoJJcdS7qXOOXfdnuN16Y862Sy5m0vSDFG8hwmiaJ7JDSkRW4VGaYfgnIcYi7HGvCn/mimDz6uVgXQ==", "requires": { - "config": "^1.24.0", - "line-height": "^0.1.1", - "react-motion": "^0.5.2" + "config": "1.31.0", + "line-height": "0.1.1", + "react-motion": "0.5.2" } }, "reactrangeslider": { @@ -11576,9 +11079,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "load-json-file": "2.0.0", + "normalize-package-data": "2.5.0", + "path-type": "2.0.0" } }, "read-pkg-up": { @@ -11587,8 +11090,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "2.1.0", + "read-pkg": "2.0.0" }, "dependencies": { "find-up": { @@ -11597,7 +11100,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "locate-path": { @@ -11606,8 +11109,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -11616,7 +11119,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -11625,7 +11128,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-try": { @@ -11640,14 +11143,15 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -11656,9 +11160,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "graceful-fs": "4.1.15", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" } }, "redent": { @@ -11667,8 +11171,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "2.1.0", + "strip-indent": "1.0.1" } }, "reduce-css-calc": { @@ -11677,9 +11181,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" }, "dependencies": { "balanced-match": { @@ -11696,7 +11200,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "^0.4.2" + "balanced-match": "0.4.2" }, "dependencies": { "balanced-match": { @@ -11712,8 +11216,8 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" + "loose-envify": "1.4.0", + "symbol-observable": "1.2.0" } }, "redux-persist": { @@ -11731,8 +11235,15 @@ "resolved": "https://registry.npmjs.org/reduxsauce/-/reduxsauce-1.0.1.tgz", "integrity": "sha512-Vd9z0LAmOicVFTdmjEu82XhNfrg0Z8C6yVI0rKold5uS63kPyYiGVrYMsflbVO232zBy/Y3FWcC+FZVk9wBkwA==", "requires": { - "ramda": "^0.24.1", - "ramdasauce": "^2.0.0" + "ramda": "0.24.1", + "ramdasauce": "2.1.3" + }, + "dependencies": { + "ramda": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", + "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=" + } } }, "regenerate": { @@ -11747,7 +11258,7 @@ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "1.4.0" } }, "regenerator-runtime": { @@ -11761,7 +11272,7 @@ "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", "dev": true, "requires": { - "private": "^0.1.6" + "private": "0.1.8" } }, "regex-not": { @@ -11770,24 +11281,19 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, - "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" - }, "regexp-tree": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.1.tgz", "integrity": "sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw==", "dev": true, "requires": { - "cli-table3": "^0.5.0", - "colors": "^1.1.2", - "yargs": "^12.0.5" + "cli-table3": "0.5.1", + "colors": "1.3.3", + "yargs": "12.0.5" }, "dependencies": { "cliui": { @@ -11796,9 +11302,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "yargs": { @@ -11807,18 +11313,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.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 || ^4.0.0", - "yargs-parser": "^11.1.1" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "11.1.1" } } } @@ -11835,12 +11341,12 @@ "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" + "regenerate": "1.4.0", + "regenerate-unicode-properties": "7.0.0", + "regjsgen": "0.5.0", + "regjsparser": "0.6.0", + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.0.2" } }, "registry-auth-token": { @@ -11849,8 +11355,8 @@ "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "rc": "1.2.8", + "safe-buffer": "5.1.2" } }, "registry-url": { @@ -11859,7 +11365,7 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "^1.0.1" + "rc": "1.2.8" } }, "regjsgen": { @@ -11874,7 +11380,7 @@ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" }, "dependencies": { "jsesc": { @@ -11903,11 +11409,11 @@ "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", "dev": true, "requires": { - "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.4.0" }, "dependencies": { "ansi-regex": { @@ -11922,7 +11428,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -11936,7 +11442,8 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "repeating": { "version": "2.0.1", @@ -11944,7 +11451,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "request": { @@ -11952,26 +11459,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.21", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "require-directory": { @@ -11998,8 +11505,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" + "caller-path": "0.1.0", + "resolve-from": "1.0.1" }, "dependencies": { "resolve-from": { @@ -12010,15 +11517,6 @@ } } }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -12034,8 +11532,9 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, "requires": { - "path-parse": "^1.0.6" + "path-parse": "1.0.6" } }, "resolve-cwd": { @@ -12044,7 +11543,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" }, "dependencies": { "resolve-from": { @@ -12061,15 +11560,10 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" } }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, "resolve-pathname": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", @@ -12087,8 +11581,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, "ret": { @@ -12107,20 +11601,12 @@ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" } }, "ripemd160": { @@ -12129,8 +11615,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, "run-async": { @@ -12139,7 +11625,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "^2.1.0" + "is-promise": "2.1.0" } }, "run-queue": { @@ -12148,7 +11634,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "^1.1.1" + "aproba": "1.2.0" } }, "rx-lite": { @@ -12163,7 +11649,7 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "*" + "rx-lite": "4.0.8" } }, "safe-buffer": { @@ -12177,7 +11663,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -12185,15 +11671,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "saslprep": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", - "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -12204,8 +11681,8 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.1.tgz", "integrity": "sha512-VJKOkiKIN2/6NOoexuypwSrybx13MY7NSy9RNt8wPvZDMRT1CW6qlpF5jXRToXNHz3uWzbm2elNpZfXfGPqP9A==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "1.4.0", + "object-assign": "4.1.1" } }, "schema-utils": { @@ -12214,8 +11691,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.9.1", + "ajv-keywords": "3.4.0" }, "dependencies": { "ajv-keywords": { @@ -12231,7 +11708,7 @@ "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", "requires": { - "nan": "^2.0.8" + "nan": "2.12.1" } }, "select-hose": { @@ -12260,33 +11737,35 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "^5.0.3" + "semver": "5.6.0" } }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" }, "dependencies": { "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true } } }, @@ -12302,23 +11781,24 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "~1.3.4", + "accepts": "1.3.5", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.21", + "parseurl": "1.3.2" } }, "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -12340,10 +11820,10 @@ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -12352,7 +11832,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -12374,8 +11854,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "shallowequal": { @@ -12389,7 +11869,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -12409,7 +11889,7 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { - "is-arrayish": "^0.3.1" + "is-arrayish": "0.3.2" }, "dependencies": { "is-arrayish": { @@ -12431,28 +11911,23 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0" + "is-fullwidth-code-point": "2.0.0" } }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -12461,7 +11936,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -12470,7 +11945,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "source-map": { @@ -12487,9 +11962,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -12498,7 +11973,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -12507,7 +11982,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -12516,7 +11991,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -12525,9 +12000,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -12544,7 +12019,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "sntp": { @@ -12553,7 +12028,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "optional": true, "requires": { - "hoek": "2.x.x" + "hoek": "2.16.3" } }, "sockjs": { @@ -12562,8 +12037,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "faye-websocket": "0.10.0", + "uuid": "3.3.2" } }, "sockjs-client": { @@ -12572,12 +12047,12 @@ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.4" }, "dependencies": { "debug": { @@ -12586,7 +12061,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "faye-websocket": { @@ -12595,7 +12070,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } }, "ms": { @@ -12612,7 +12087,7 @@ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "^1.0.0" + "is-plain-obj": "1.1.0" } }, "source-list-map": { @@ -12631,11 +12106,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-support": { @@ -12644,8 +12119,8 @@ "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.1.1", + "source-map": "0.6.1" } }, "source-map-url": { @@ -12654,23 +12129,14 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.3" } }, "spdx-exceptions": { @@ -12685,8 +12151,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.3" } }, "spdx-license-ids": { @@ -12701,11 +12167,11 @@ "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "debug": "4.1.1", + "handle-thing": "2.0.0", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" }, "dependencies": { "debug": { @@ -12714,7 +12180,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -12731,12 +12197,12 @@ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "debug": "4.1.1", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.1.1", + "wbuf": "1.7.3" }, "dependencies": { "debug": { @@ -12745,7 +12211,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -12760,9 +12226,9 @@ "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -12773,7 +12239,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -12781,25 +12247,20 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "sqlstring": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" - }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "ssri": { @@ -12808,7 +12269,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "safe-buffer": "5.1.2" } }, "stable": { @@ -12822,8 +12283,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -12832,7 +12293,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -12848,8 +12309,8 @@ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "stream-each": { @@ -12858,8 +12319,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { @@ -12868,11 +12329,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, "stream-shift": { @@ -12893,7 +12354,7 @@ "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", "dev": true, "requires": { - "stream-to": "~0.2.0" + "stream-to": "0.2.2" } }, "strict-uri-encode": { @@ -12908,8 +12369,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "string.prototype.trim": { @@ -12918,17 +12379,18 @@ "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0", - "function-bind": "^1.1.1" + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1" } }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "stringstream": { @@ -12943,7 +12405,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, "strip-bom": { @@ -12964,7 +12426,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "^4.0.1" + "get-stdin": "4.0.1" } }, "strip-json-comments": { @@ -12979,8 +12441,8 @@ "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" + "loader-utils": "1.2.3", + "schema-utils": "0.4.7" } }, "stylehacks": { @@ -12988,9 +12450,9 @@ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "browserslist": "4.4.1", + "postcss": "7.0.14", + "postcss-selector-parser": "3.1.1" }, "dependencies": { "has-flag": { @@ -13003,9 +12465,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" } }, "postcss-selector-parser": { @@ -13013,9 +12475,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, "supports-color": { @@ -13023,7 +12485,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -13034,7 +12496,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } }, "svgo": { @@ -13043,13 +12505,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", - "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" }, "dependencies": { "colors": { @@ -13066,16 +12528,16 @@ "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==", "dev": true, "requires": { - "dom-urls": "^1.1.0", - "es6-promise": "^4.0.5", - "glob": "^7.1.1", - "lodash.defaults": "^4.2.0", - "lodash.template": "^4.4.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "pretty-bytes": "^4.0.2", - "sw-toolbox": "^3.4.0", - "update-notifier": "^2.3.0" + "dom-urls": "1.1.0", + "es6-promise": "4.2.8", + "glob": "7.1.3", + "lodash.defaults": "4.2.0", + "lodash.template": "4.5.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "pretty-bytes": "4.0.2", + "sw-toolbox": "3.6.0", + "update-notifier": "2.5.0" }, "dependencies": { "es6-promise": { @@ -13092,9 +12554,9 @@ "integrity": "sha512-K6E52DbYyzGNXGyv2LhI2Duomr3t/2FFMmnGdHZ1Ruk3ulFHDMASJtg3WpA3CXlWODZx189tTaOIO5mWkSKyVg==", "dev": true, "requires": { - "del": "^3.0.0", - "sw-precache": "^5.2.1", - "uglify-es": "^3.3.9" + "del": "3.0.0", + "sw-precache": "5.2.1", + "uglify-es": "3.3.9" }, "dependencies": { "commander": { @@ -13109,8 +12571,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" + "commander": "2.13.0", + "source-map": "0.6.1" } } } @@ -13121,8 +12583,8 @@ "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=", "dev": true, "requires": { - "path-to-regexp": "^1.0.1", - "serviceworker-cache-polyfill": "^4.0.0" + "path-to-regexp": "1.7.0", + "serviceworker-cache-polyfill": "4.0.0" }, "dependencies": { "isarray": { @@ -13153,12 +12615,12 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.4.2", + "lodash": "4.17.15", "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "string-width": "2.1.1" }, "dependencies": { "ajv": { @@ -13167,10 +12629,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "fast-deep-equal": { @@ -13199,7 +12661,7 @@ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "execa": "^0.7.0" + "execa": "0.7.0" }, "dependencies": { "cross-spawn": { @@ -13208,9 +12670,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "execa": { @@ -13219,13 +12681,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "get-stream": { @@ -13242,9 +12704,9 @@ "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.9" + "commander": "2.17.1", + "source-map": "0.6.1", + "source-map-support": "0.5.10" }, "dependencies": { "commander": { @@ -13261,14 +12723,14 @@ "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "11.3.2", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.6.1", + "source-map": "0.6.1", + "terser": "3.16.1", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" }, "dependencies": { "ajv-keywords": { @@ -13283,20 +12745,20 @@ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", "dev": true, "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "bluebird": "3.5.3", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, "find-cache-dir": { @@ -13305,9 +12767,9 @@ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "3.0.0" } }, "lru-cache": { @@ -13316,7 +12778,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "^3.0.2" + "yallist": "3.0.3" } }, "mississippi": { @@ -13325,16 +12787,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "pkg-dir": { @@ -13343,7 +12805,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } }, "schema-utils": { @@ -13352,9 +12814,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.9.1", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.4.0" } }, "ssri": { @@ -13363,7 +12825,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "3.5.1" } }, "yallist": { @@ -13397,8 +12859,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.6", + "xtend": "4.0.1" } }, "thunky": { @@ -13419,7 +12881,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "timsort": { @@ -13439,7 +12901,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "os-tmpdir": "1.0.2" } }, "to-arraybuffer": { @@ -13453,13 +12915,14 @@ "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz", "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=", "requires": { - "to-space-case": "^1.0.0" + "to-space-case": "1.0.0" } }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true }, "to-no-case": { "version": "1.0.2", @@ -13472,7 +12935,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -13481,10 +12944,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -13493,8 +12956,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, "to-space-case": { @@ -13502,36 +12965,22 @@ "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=", "requires": { - "to-no-case": "^1.0.0" + "to-no-case": "1.0.2" } }, - "token-stream": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", - "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" - }, "toposort": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", "dev": true }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.31", + "punycode": "1.4.1" }, "dependencies": { "punycode": { @@ -13559,11 +13008,11 @@ "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", "dev": true, "requires": { - "arg": "^4.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" + "arg": "4.1.0", + "diff": "3.5.0", + "make-error": "1.3.5", + "source-map-support": "0.5.10", + "yn": "3.0.0" } }, "tslib": { @@ -13577,9 +13026,9 @@ "resolved": "https://registry.npmjs.org/tt-react-custom-scrollbars/-/tt-react-custom-scrollbars-4.2.1-tt2.tgz", "integrity": "sha512-gMEVHHOClNJXM1d/p4PrLdXtCU2JzWRtcZdzUkXgck8sgzkxwFwSDNc3scnTk21sSKG2GSgf7G54sboXwsMVlg==", "requires": { - "dom-css": "^2.0.0", - "prop-types": "^15.5.10", - "raf": "^3.1.0" + "dom-css": "2.1.0", + "prop-types": "15.7.1", + "raf": "3.4.1" } }, "tty-browserify": { @@ -13593,7 +13042,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -13607,7 +13056,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-is": { @@ -13616,7 +13065,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.21" } }, "typedarray": { @@ -13641,43 +13090,20 @@ "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, "uglifyjs-webpack-plugin": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.7", + "serialize-javascript": "1.6.1", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" }, "dependencies": { "commander": { @@ -13692,8 +13118,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" + "commander": "2.13.0", + "source-map": "0.6.1" } } } @@ -13704,15 +13130,6 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -13725,8 +13142,8 @@ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "1.0.4", + "unicode-property-aliases-ecmascript": "1.0.4" } }, "unicode-match-property-value-ecmascript": { @@ -13747,10 +13164,10 @@ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "2.0.1" } }, "uniq": { @@ -13769,7 +13186,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "2.0.1" } }, "unique-slug": { @@ -13778,7 +13195,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "imurmurhash": "0.1.4" } }, "unique-string": { @@ -13787,7 +13204,7 @@ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { - "crypto-random-string": "^1.0.0" + "crypto-random-string": "1.0.0" } }, "universalify": { @@ -13812,8 +13229,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -13822,9 +13239,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -13864,16 +13281,16 @@ "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dev": true, "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" + "boxen": "1.3.0", + "chalk": "2.4.2", + "configstore": "3.1.2", + "import-lazy": "2.1.0", + "is-ci": "1.2.1", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" } }, "upper-case": { @@ -13887,7 +13304,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "urijs": { @@ -13926,8 +13343,8 @@ "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "dev": true, "requires": { - "querystringify": "^2.0.0", - "requires-port": "^1.0.0" + "querystringify": "2.1.0", + "requires-port": "1.0.0" } }, "url-parse-lax": { @@ -13936,7 +13353,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "^1.0.1" + "prepend-http": "1.0.4" } }, "url-regex": { @@ -13945,7 +13362,7 @@ "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", "dev": true, "requires": { - "ip-regex": "^1.0.1" + "ip-regex": "1.0.3" }, "dependencies": { "ip-regex": { @@ -13974,15 +13391,16 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.0.3" } }, "utila": { @@ -13994,7 +13412,8 @@ "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true }, "uuid": { "version": "3.3.2", @@ -14013,8 +13432,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.1.0", + "spdx-expression-parse": "3.0.0" } }, "value-equal": { @@ -14025,7 +13444,8 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true }, "vendors": { "version": "1.0.2", @@ -14037,9 +13457,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "vm-browserify": { @@ -14051,17 +13471,12 @@ "indexof": "0.0.1" } }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" - }, "warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } }, "watchpack": { @@ -14070,9 +13485,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "chokidar": "2.1.1", + "graceful-fs": "4.1.15", + "neo-async": "2.6.0" } }, "wbuf": { @@ -14081,7 +13496,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "1.0.1" } }, "webpack": { @@ -14094,26 +13509,26 @@ "@webassemblyjs/helper-module-context": "1.7.11", "@webassemblyjs/wasm-edit": "1.7.11", "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "acorn": "6.1.0", + "acorn-dynamic-import": "4.0.0", + "ajv": "6.9.1", + "ajv-keywords": "3.4.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.4.0", + "loader-utils": "1.2.3", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.0", + "node-libs-browser": "2.2.0", + "schema-utils": "1.0.0", + "tapable": "1.1.1", + "terser-webpack-plugin": "1.2.2", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" }, "dependencies": { "acorn": { @@ -14134,8 +13549,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "schema-utils": { @@ -14144,9 +13559,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.9.1", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.4.0" } } } @@ -14157,17 +13572,17 @@ "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", "dev": true, "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.4" + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "2.0.0", + "global-modules": "1.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "5.5.0", + "v8-compile-cache": "2.0.2", + "yargs": "12.0.5" }, "dependencies": { "cliui": { @@ -14176,9 +13591,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "has-flag": { @@ -14193,7 +13608,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "yargs": { @@ -14202,18 +13617,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.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 || ^4.0.0", - "yargs-parser": "^11.1.1" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "11.1.1" } } } @@ -14224,10 +13639,10 @@ "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", - "webpack-log": "^2.0.0" + "memory-fs": "0.4.1", + "mime": "2.4.0", + "range-parser": "1.2.0", + "webpack-log": "2.0.0" }, "dependencies": { "mime": { @@ -14242,8 +13657,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "ansi-colors": "3.2.3", + "uuid": "3.3.2" } } } @@ -14255,34 +13670,34 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", - "import-local": "^2.0.0", - "internal-ip": "^3.0.1", - "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", - "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", + "bonjour": "3.5.0", + "chokidar": "2.1.1", + "compression": "1.7.3", + "connect-history-api-fallback": "1.6.0", + "debug": "3.2.6", + "del": "3.0.0", + "express": "4.16.4", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "2.0.0", + "internal-ip": "3.0.1", + "ip": "1.1.5", + "killable": "1.0.1", + "loglevel": "1.6.1", + "opn": "5.4.0", + "portfinder": "1.0.20", + "schema-utils": "1.0.0", + "selfsigned": "1.10.4", + "semver": "5.6.0", + "serve-index": "1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", - "url": "^0.11.0", + "spdy": "4.0.0", + "strip-ansi": "3.0.1", + "supports-color": "5.5.0", + "url": "0.11.0", "webpack-dev-middleware": "3.4.0", - "webpack-log": "^2.0.0", + "webpack-log": "2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -14310,9 +13725,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" }, "dependencies": { "ansi-regex": { @@ -14327,7 +13742,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -14338,7 +13753,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "decamelize": { @@ -14368,9 +13783,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.9.1", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.4.0" } }, "strip-ansi": { @@ -14379,7 +13794,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "supports-color": { @@ -14388,7 +13803,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "webpack-log": { @@ -14397,8 +13812,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "ansi-colors": "3.2.3", + "uuid": "3.3.2" } }, "yargs": { @@ -14407,18 +13822,18 @@ "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.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 || ^4.0.0", - "yargs-parser": "^10.1.0" + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "10.1.0" } }, "yargs-parser": { @@ -14427,7 +13842,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -14443,10 +13858,10 @@ "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", "dev": true, "requires": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "loglevelnext": "^1.0.1", - "uuid": "^3.1.0" + "chalk": "2.4.2", + "log-symbols": "2.2.0", + "loglevelnext": "1.0.5", + "uuid": "3.3.2" } }, "webpack-manifest-plugin": { @@ -14455,9 +13870,9 @@ "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", "dev": true, "requires": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "tapable": "^1.0.0" + "fs-extra": "7.0.1", + "lodash": "4.17.15", + "tapable": "1.1.1" } }, "webpack-pwa-manifest": { @@ -14467,8 +13882,8 @@ "dev": true, "requires": { "css-color-names": "0.0.4", - "jimp": "^0.2.28", - "mime": "^1.6.0" + "jimp": "0.2.28", + "mime": "1.6.0" }, "dependencies": { "mime": { @@ -14484,8 +13899,8 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.1", + "source-map": "0.6.1" } }, "websocket-driver": { @@ -14494,8 +13909,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" + "http-parser-js": "0.5.0", + "websocket-extensions": "0.1.3" } }, "websocket-extensions": { @@ -14516,7 +13931,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -14531,35 +13946,16 @@ "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dev": true, "requires": { - "string-width": "^2.1.1" + "string-width": "2.1.1" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, - "with": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", - "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", - "requires": { - "acorn": "^3.1.0", - "acorn-globals": "^3.0.0" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" - }, "worker-farm": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "~0.1.7" + "errno": "0.1.7" } }, "wrap-ansi": { @@ -14568,8 +13964,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -14584,7 +13980,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -14593,9 +13989,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -14604,7 +14000,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -14620,7 +14016,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "^0.5.1" + "mkdirp": "0.5.1" } }, "write-file-atomic": { @@ -14629,9 +14025,9 @@ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "graceful-fs": "4.1.15", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" } }, "xdg-basedir": { @@ -14646,10 +14042,10 @@ "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", "dev": true, "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.2", + "xtend": "4.0.1" } }, "xml-parse-from-string": { @@ -14664,9 +14060,9 @@ "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", "dev": true, "requires": { - "sax": ">=0.6.0", - "util.promisify": "~1.0.0", - "xmlbuilder": "~11.0.0" + "sax": "1.2.4", + "util.promisify": "1.0.0", + "xmlbuilder": "11.0.1" } }, "xmlbuilder": { @@ -14699,25 +14095,14 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - }, "yargs-parser": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "5.0.0", + "decamelize": "1.2.0" }, "dependencies": { "camelcase": { diff --git a/package.json b/package.json index 396294f..0bd8aea 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,7 @@ "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", "raleway-cyrillic": "^4.0.2", + "ramda": "^0.26.1", "rc-slider": "8.5.0", "react": "16.8.1", "react-dom": "16.8.1", diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index ba5a2b5..dbce2f3 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -63,7 +63,7 @@ const MapUnconnected: React.FC = ({ return createPortal(
      - + void; -} +const mapStateToProps = state => ({ + editor: pick(['mode', 'editing'], selectEditor(state)), + map: pick(['route'], selectMap(state)), +}); -const Route: FC = memo(({ route, is_editing, mapSetRoute, map }) => { - const [layer, setLayer] = useState(null); +const mapDispatchToProps = { + mapSetRoute: MAP_ACTIONS.mapSetRoute, +}; - useEffect(() => { - if (!map) return; +type Props = ReturnType & + typeof mapDispatchToProps & { + }; - setLayer( - new InteractivePoly([], { - color: "url(#activePathGradient)", - weight: 6, - maxMarkers: isMobile() ? 20 : 100, - smoothFactor: 3, - }) - .addTo(map) +const RouteUnconnected: FC = memo( + ({ map: { route }, editor: { editing, mode }, mapSetRoute }) => { + const [layer, setLayer] = useState(null); + + useEffect(() => { + if (!MainMap) return; + + setLayer( + new InteractivePoly([], { + color: 'url(#activePathGradient)', + weight: 6, + maxMarkers: isMobile() ? 20 : 100, + smoothFactor: 3, + }).addTo(MainMap) // .on("distancechange", console.log) // .on("allvertexhide", console.log) // .on("allvertexshow", console.log) + ); + }, [MainMap]); + + const onRouteChanged = useCallback( + ({ latlngs }) => { + // console.log('THIS!'); + mapSetRoute(latlngs); + }, + [mapSetRoute] ); - }, [map]); + useEffect(() => { + if (!layer) return; - const onRouteChanged = useCallback( - ({ latlngs }) => { - // console.log('THIS!'); - mapSetRoute(latlngs) - }, - [mapSetRoute] - ); + layer.on('latlngschange', onRouteChanged); - useEffect(() => { - if (!layer) return; + return () => layer.off('latlngschange', onRouteChanged); + }, [layer, onRouteChanged]); - layer.on("latlngschange", onRouteChanged); + useEffect(() => { + if (!layer) return; - return () => layer.off("latlngschange", onRouteChanged); - }, [layer, onRouteChanged]); + const points = (route && route.length > 0 && route) || []; - useEffect(() => { - if (!layer) return; + layer.setPoints(points as LatLng[]); + }, [route, layer]); - const points = (route && route.length > 0 && route) || []; + useEffect(() => { + if (!layer) return; - layer.setPoints(points as LatLng[]); - }, [route, layer]); + if (editing) { + layer.editor.enable(); + } else { + layer.editor.disable(); + } + }, [editing, layer]); - useEffect(() => { - if (!layer) return; + useEffect(() => { + if (!layer) return; + + if (mode === MODES.POLY && !layer.is_drawing) { + layer.editor.continue(); + } - if (is_editing) { - layer.editor.enable(); - } else { - layer.editor.disable(); - } - }, [is_editing, layer]); + if (mode !== MODES.POLY && layer.is_drawing) { + layer.editor.stop(); + } + }, [mode, layer]); - return null; -}); + return null; + } +); + +const Route = connect(mapStateToProps, mapDispatchToProps)(RouteUnconnected); export { Route }; diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index c67c9e3..03cb8e0 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -182,6 +182,11 @@ export class InteractivePoly extends Polyline { this.is_drawing = true; this.drawing_direction = "backward"; this.startDrawing(); + }, + stop: () => { + this.stopDragHinting(); + this.is_drawing = false; + this.stopDrawing(); } }; From 42dbfb06810648385b8b4e7c196edd51f6b5c987 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 14:03:13 +0700 Subject: [PATCH 124/320] fixed setting distance --- src/containers/map/Route/index.tsx | 24 +++++++++++++++--------- src/modules/InteractivePoly.ts | 2 -- src/redux/editor/handlers.ts | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 6214680..383a37e 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -2,7 +2,7 @@ import React, { FC, useEffect, memo, useState, useCallback } from 'react'; import { IMapRoute } from '../../../redux/map/types'; import { InteractivePoly } from '~/modules/InteractivePoly'; import { isMobile } from '~/utils/window'; -import { LatLng, Map } from 'leaflet'; +import { LatLng, Map, LeafletEvent } from 'leaflet'; import { selectEditor } from '~/redux/editor/selectors'; import pick from 'ramda/es/pick'; import * as MAP_ACTIONS from '~/redux/map/actions'; @@ -10,6 +10,7 @@ import { connect } from 'react-redux'; import { selectMap } from '~/redux/map/selectors'; import { MainMap } from '~/constants/map'; import { MODES } from '~/constants/modes'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; const mapStateToProps = state => ({ editor: pick(['mode', 'editing'], selectEditor(state)), @@ -18,16 +19,20 @@ const mapStateToProps = state => ({ const mapDispatchToProps = { mapSetRoute: MAP_ACTIONS.mapSetRoute, + editorSetDistance: EDITOR_ACTIONS.editorSetDistance, }; -type Props = ReturnType & - typeof mapDispatchToProps & { - }; +type Props = ReturnType & typeof mapDispatchToProps & {}; const RouteUnconnected: FC = memo( - ({ map: { route }, editor: { editing, mode }, mapSetRoute }) => { + ({ map: { route }, editor: { editing, mode }, mapSetRoute, editorSetDistance }) => { const [layer, setLayer] = useState(null); + const onDistanceChange = useCallback( + ({ distance }) => editorSetDistance(distance), + [editorSetDistance] + ); + useEffect(() => { if (!MainMap) return; @@ -37,12 +42,13 @@ const RouteUnconnected: FC = memo( weight: 6, maxMarkers: isMobile() ? 20 : 100, smoothFactor: 3, - }).addTo(MainMap) - // .on("distancechange", console.log) + }) + .addTo(MainMap) + .on('distancechange', onDistanceChange) // .on("allvertexhide", console.log) // .on("allvertexshow", console.log) ); - }, [MainMap]); + }, [MainMap, onDistanceChange]); const onRouteChanged = useCallback( ({ latlngs }) => { @@ -80,7 +86,7 @@ const RouteUnconnected: FC = memo( useEffect(() => { if (!layer) return; - + if (mode === MODES.POLY && !layer.is_drawing) { layer.editor.continue(); } diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index 03cb8e0..0c6e064 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -184,8 +184,6 @@ export class InteractivePoly extends Polyline { this.startDrawing(); }, stop: () => { - this.stopDragHinting(); - this.is_drawing = false; this.stopDrawing(); } }; diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts index 17257a1..78c22a8 100644 --- a/src/redux/editor/handlers.ts +++ b/src/redux/editor/handlers.ts @@ -30,7 +30,7 @@ const setDistance = ( { distance }: ReturnType ): IEditorState => ({ ...state, - distance, + distance: parseFloat(distance.toFixed(1)), estimated: getEstimated(distance, state.speed), }); From 2be073078f65be9ad2adb17dcb3f3cac831f6256 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 16:55:41 +0700 Subject: [PATCH 125/320] fixed router --- src/components/dialogs/RouterDialog.tsx | 14 +++-- src/containers/map/Map/index.tsx | 3 +- src/containers/map/Router/index.tsx | 61 ++++++++++++++++++++ src/redux/editor/actions.ts | 5 ++ src/redux/editor/constants.ts | 2 + src/redux/editor/handlers.ts | 22 +++++++- src/redux/editor/index.ts | 74 ++++++++++++++----------- src/redux/editor/sagas.ts | 36 ++++++++++-- src/redux/editor/selectors.ts | 3 +- src/utils/osrm.ts | 65 ++++++++++++++++++++++ src/utils/simplify.ts | 18 +----- 11 files changed, 241 insertions(+), 62 deletions(-) create mode 100644 src/containers/map/Router/index.tsx create mode 100644 src/utils/osrm.ts diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index 0e11cd8..aa9510d 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -4,6 +4,7 @@ import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import classnames from 'classnames'; import { connect } from 'react-redux'; import { selectEditor } from '~/redux/editor/selectors'; +import pick from 'ramda/es/pick'; const noPoints = ({ editorRouterCancel, @@ -80,7 +81,7 @@ const draggablePoints = ({ ); const mapStateToProps = state => ({ - editor: selectEditor(state), + editor: pick(['router'], selectEditor(state)), }); const mapDispatchToProps = { @@ -91,7 +92,10 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & { width?: number }; const RouterDialogUnconnected: FC = ({ - editor: { routerPoints, is_routing }, + editor: { + router: { waypoints }, + is_routing, + }, editorRouterCancel, editorRouterSubmit, width, @@ -99,9 +103,9 @@ const RouterDialogUnconnected: FC = ({
      - {!routerPoints && noPoints({ editorRouterCancel })} - {routerPoints === 1 && firstPoint({ editorRouterCancel })} - {routerPoints >= 2 && draggablePoints({ editorRouterCancel, editorRouterSubmit })} + {!waypoints.length && noPoints({ editorRouterCancel })} + {waypoints.length === 1 && firstPoint({ editorRouterCancel })} + {waypoints.length >= 2 && draggablePoints({ editorRouterCancel, editorRouterSubmit })}
      ); diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index dbce2f3..fbb3897 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -1,13 +1,13 @@ import React from 'react'; import { MainMap } from '~/constants/map'; -import { Map as MapInterface } from 'leaflet'; import { createPortal } from 'react-dom'; import { selectMapProvider, selectMapRoute, selectMapStickers } from '~/redux/map/selectors'; import { connect } from 'react-redux'; import * as MAP_ACTIONS from '~/redux/map/actions'; import { Route } from '~/containers/map/Route'; +import { Router } from '~/containers/map/Router'; import { TileLayer } from '~/containers/map/TileLayer'; import { Stickers } from '~/containers/map/Stickers'; @@ -71,6 +71,7 @@ const MapUnconnected: React.FC = ({ mapDropSticker={mapDropSticker} is_editing={editing} /> +
      , document.getElementById('canvas') ); diff --git a/src/containers/map/Router/index.tsx b/src/containers/map/Router/index.tsx new file mode 100644 index 0000000..ad25411 --- /dev/null +++ b/src/containers/map/Router/index.tsx @@ -0,0 +1,61 @@ +import React, { FC, useEffect, useMemo, useCallback, memo } from 'react'; +import pick from 'ramda/es/pick'; +import { OsrmRouter } from '~/utils/osrm'; +import { connect } from 'react-redux'; +import { selectMap } from '~/redux/map/selectors'; +import { selectEditorRouter, selectEditorMode } from '~/redux/editor/selectors'; +import { MainMap } from '~/constants/map'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import { MODES } from '~/constants/modes'; + +const mapStateToProps = state => ({ + map: pick(['route'], selectMap(state)), + router: pick(['waypoints', 'points'], selectEditorRouter(state)), + mode: selectEditorMode(state), +}); + +const mapDispatchToProps = { + editorSetRouter: EDITOR_ACTIONS.editorSetRouter, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + +const RouterUnconnected: FC = memo( + ({ map: { route }, mode, router: { waypoints }, editorSetRouter }) => { + const updateWaypoints = useCallback( + ({ waypoints }) => editorSetRouter({ waypoints: waypoints.filter(wp => !!wp.latLng) }), + [editorSetRouter] + ); + + useEffect(() => { + OsrmRouter.on('waypointschanged', updateWaypoints).addTo(MainMap); + + return () => { + OsrmRouter.off('waypointschanged', updateWaypoints).setWaypoints([]); + }; + }, [MainMap, updateWaypoints, mode]); + + useEffect(() => { + if (mode !== MODES.ROUTER) return; + + const wp = OsrmRouter.getWaypoints() + .filter(point => point.latLng) + .map(point => point.latLng); + + if ( + !route.length || + !wp.length || + (route[route.length - 1].lat === wp[0].lat && route[route.length - 1].lng === wp[0].lng) + ) + return; + + OsrmRouter.setWaypoints([route[route.length - 1], ...wp]); + }, [route, mode, waypoints]); + + return null; + } +); + +const Router = connect(mapStateToProps, mapDispatchToProps)(RouterUnconnected); + +export { Router }; diff --git a/src/redux/editor/actions.ts b/src/redux/editor/actions.ts index 8e72985..0132a02 100644 --- a/src/redux/editor/actions.ts +++ b/src/redux/editor/actions.ts @@ -118,3 +118,8 @@ export const editorKeyPressed = ({ key, target: tagName, }); + +export const editorSetRouter = (router: Partial) => ({ + type: EDITOR_ACTIONS.SET_ROUTER, + router, +}); diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts index d0015a6..542b432 100644 --- a/src/redux/editor/constants.ts +++ b/src/redux/editor/constants.ts @@ -44,4 +44,6 @@ export const EDITOR_ACTIONS = { SET_FEATURE: `${P}-SET_FEATURE`, SET_IS_ROUTING: `${P}-SET_IS_ROUTING`, KEY_PRESSED: `${P}-KEY_PRESSED`, + + SET_ROUTER: `${P}-SET_ROUTER`, }; diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts index 78c22a8..a3f8910 100644 --- a/src/redux/editor/handlers.ts +++ b/src/redux/editor/handlers.ts @@ -113,7 +113,10 @@ const resetSaveDialog = (state): IEditorState => ({ save_error: '', }); -const setDialog = (state, { dialog }: ReturnType): IEditorState => ({ +const setDialog = ( + state, + { dialog }: ReturnType +): IEditorState => ({ ...state, dialog, }); @@ -126,7 +129,10 @@ const setDialogActive = ( dialog_active: dialog_active || !state.dialog_active, }); -const setReady = (state, { ready = true }: ReturnType): IEditorState => ({ +const setReady = ( + state, + { ready = true }: ReturnType +): IEditorState => ({ ...state, ready, }); @@ -169,6 +175,17 @@ const setIsRouting = ( is_routing, }); +const setRouter = ( + state, + { router }: ReturnType +): IEditorState => ({ + ...state, + router: { + ...state.router, + ...router, + }, +}); + export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_EDITING]: setEditing, [EDITOR_ACTIONS.SET_CHANGED]: setChanged, @@ -197,4 +214,5 @@ export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_FEATURE]: setFeature, [EDITOR_ACTIONS.SET_IS_ROUTING]: setIsRouting, + [EDITOR_ACTIONS.SET_ROUTER]: setRouter, }; diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 1bc7b0e..1024174 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -2,44 +2,51 @@ import { IDialogs } from '~/constants/dialogs'; import { MODES } from '~/constants/modes'; import { createReducer } from 'reduxsauce'; import { EDITOR_HANDLERS } from './handlers'; +import { ILatLng } from '../map/types'; export interface IEditorState { - changed: boolean, - editing: boolean, - ready: boolean, + changed: boolean; + editing: boolean; + ready: boolean; markers_shown: boolean; - - mode: typeof MODES[keyof typeof MODES], - dialog: IDialogs[keyof IDialogs], - dialog_active: boolean, + router: { + points: ILatLng[]; + waypoints: ILatLng[]; + }; - routerPoints: number, - distance: number, - estimated: number, - speed: number, - activeSticker: { set?: string, sticker?: string }, - is_empty: boolean, - is_published: boolean, - is_routing: boolean, - save_error: string, - save_finished: boolean, - save_overwriting: boolean, - save_processing: boolean, - save_loading: boolean, + mode: typeof MODES[keyof typeof MODES]; + + dialog: IDialogs[keyof IDialogs]; + dialog_active: boolean; + + routerPoints: number; + distance: number; + estimated: number; + speed: number; + activeSticker: { set?: string; sticker?: string }; + is_empty: boolean; + is_published: boolean; + is_routing: boolean; + + save_error: string; + save_finished: boolean; + save_overwriting: boolean; + save_processing: boolean; + save_loading: boolean; features: { - routing: boolean, - }, + routing: boolean; + }; renderer: { - data: string, - width: number, - height: number - renderer_active: boolean, - info: string, - progress: number, - }, + data: string; + width: number; + height: number; + renderer_active: boolean; + info: string; + progress: number; + }; } const EDITOR_INITIAL_STATE = { @@ -57,7 +64,10 @@ const EDITOR_INITIAL_STATE = { estimated: 0, speed: 15, activeSticker: { set: null, sticker: null }, - + router: { + waypoints: [], + points: [], + }, is_published: false, is_empty: true, is_routing: false, @@ -67,7 +77,7 @@ const EDITOR_INITIAL_STATE = { save_overwriting: false, save_processing: false, save_loading: false, - + features: { routing: false, }, @@ -80,6 +90,6 @@ const EDITOR_INITIAL_STATE = { info: '', progress: 0, }, -} +}; export const editor = createReducer(EDITOR_INITIAL_STATE, EDITOR_HANDLERS); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 79df798..7e2c4a6 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -1,7 +1,7 @@ import { call, put, takeEvery, takeLatest, select, race } from 'redux-saga/effects'; import { delay, SagaIterator } from 'redux-saga'; import { selectEditor } from '~/redux/editor/selectors'; - +import { simplify } from '~/utils/simplify'; import { editorHideRenderer, editorSetChanged, @@ -36,11 +36,15 @@ import { imageFetcher, downloadCanvas, } from '~/utils/renderer'; -import { selectMap } from '../map/selectors'; +import { selectMap, selectMapRoute } from '../map/selectors'; import { selectUser } from '../user/selectors'; import { LOGOS } from '~/constants/logos'; -import { loadMapSaga, replaceAddressIfItsBusy } from '../map/sagas'; -import { mapSetAddressOrigin } from '../map/actions'; +import { loadMapSaga } from '../map/sagas'; +import { mapClicked, mapSetRoute } from '../map/actions'; +import { MAP_ACTIONS } from '../map/constants'; +import { OsrmRouter } from '~/utils/osrm'; +import path from 'ramda/es/path'; +import { MainMap } from '~/constants/map'; const hideLoader = () => { document.getElementById('loader').style.opacity = String(0); @@ -230,10 +234,30 @@ function* getGPXTrackSaga(): SagaIterator { } function* routerCancel() { - yield put(editorSetMode(MODES.NONE)) + yield put(editorSetMode(MODES.NONE)); // TODO: clear router } +function* mapClick({ latlng }: ReturnType) { + const { mode }: ReturnType = yield select(selectEditor); + + if (mode === MODES.ROUTER) { + const wp = OsrmRouter.getWaypoints().filter(point => !!point.latLng); + OsrmRouter.setWaypoints([...wp, latlng]); + } +} + +function* routerSubmit() { + const route: ReturnType = yield select(selectMapRoute); + const latlngs = path(['_routes', 0, 'coordinates'], OsrmRouter); + + const coordinates = simplify({ map: MainMap, latlngs }); + + yield put(mapSetRoute([...route, ...coordinates])); + OsrmRouter.setWaypoints([]); + yield put(editorSetMode(MODES.NONE)); +} + export function* editorSaga() { yield takeEvery(EDITOR_ACTIONS.STOP_EDITING, stopEditingSaga); yield takeLatest(EDITOR_ACTIONS.TAKE_A_SHOT, takeAShotSaga); @@ -242,4 +266,6 @@ export function* editorSaga() { yield takeLatest(EDITOR_ACTIONS.KEY_PRESSED, keyPressedSaga); yield takeLatest(EDITOR_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); yield takeLatest(EDITOR_ACTIONS.ROUTER_CANCEL, routerCancel); + yield takeLatest(MAP_ACTIONS.MAP_CLICKED, mapClick); + yield takeLatest(EDITOR_ACTIONS.ROUTER_SUBMIT, routerSubmit); } diff --git a/src/redux/editor/selectors.ts b/src/redux/editor/selectors.ts index 725c9af..144a089 100644 --- a/src/redux/editor/selectors.ts +++ b/src/redux/editor/selectors.ts @@ -4,4 +4,5 @@ export const selectEditor = (state: IState) => state.editor; export const selectEditorEditing = (state: IState) => state.editor.editing; export const selectEditorMode = (state: IState) => state.editor.mode; export const selectEditorActiveSticker = (state: IState) => state.editor.activeSticker; -export const selectEditorRenderer = (state: IState) => state.editor.renderer; \ No newline at end of file +export const selectEditorRenderer = (state: IState) => state.editor.renderer; +export const selectEditorRouter = (state: IState) => state.editor.router; \ No newline at end of file diff --git a/src/utils/osrm.ts b/src/utils/osrm.ts new file mode 100644 index 0000000..fc5bcef --- /dev/null +++ b/src/utils/osrm.ts @@ -0,0 +1,65 @@ +import { Marker } from 'leaflet'; +import * as Routing from 'leaflet-routing-machine/src/index'; +import { CLIENT } from '~/config/frontend'; +import { DomMarker } from '~/utils/DomMarker'; +import { MainMap } from '~/constants/map'; + +const createWaypointMarker = (): DomMarker => { + const element = document.createElement('div'); + + // element.addEventListener('mousedown', this.lockPropagations); + // element.addEventListener('mouseup', this.unlockPropagations); + + return new DomMarker({ + element, + className: 'router-waypoint', + }); +}; + +const routeLine = r => + Routing.line(r, { + styles: [ + { color: 'white', opacity: 0.8, weight: 12 }, + { color: '#4597d0', opacity: 1, weight: 4, dashArray: '15,10' }, + ], + addWaypoints: true, + }); +// .on('linetouched', this.lockPropagations); + +export const OsrmRouter = Routing.control({ + serviceUrl: CLIENT.OSRM_URL, + profile: CLIENT.OSRM_PROFILE, + fitSelectedRoutes: false, + showAlternatives: false, + routeLine, + altLineOptions: { + styles: [{ color: '#4597d0', opacity: 1, weight: 3 }], + }, + show: false, + plan: Routing.plan([], { + createMarker: (i, wp) => { + const marker = new Marker(wp.latLng, { + draggable: true, + icon: createWaypointMarker(), + }) + .on('dragstart', () => MainMap.disableClicks()) + .on('dragend', () => MainMap.enableClicks()) + .on('contextmenu', ({ latlng }: any) => { + OsrmRouter.setWaypoints( + OsrmRouter.getWaypoints().filter( + point => + !point.latLng || (point.latLng.lat != latlng.lat && point.latLng.lng != latlng.lng) + ) + ); + }); + + return marker; + }, + routeWhileDragging: false, + }), + routeWhileDragging: false, + routingOptions: { + geometryOnly: false, + }, + useHints: false, +}); diff --git a/src/utils/simplify.ts b/src/utils/simplify.ts index 9e65df1..37f41ef 100644 --- a/src/utils/simplify.ts +++ b/src/utils/simplify.ts @@ -2,22 +2,8 @@ import { Map, LineUtil } from 'leaflet'; import { ILatLng } from "~/redux/map/types"; export const simplify = ({ map, latlngs }: { map: Map, latlngs: ILatLng[] }): ILatLng[] => { - const points = []; - const target = []; const zoom = 12; const mul = 0.7; // 0 - not simplifying, 1 - very rude. - // its better to estimate mul value by route length - - for (let i = 0; i < latlngs.length; i += 1) { - points.push(map.project({ lat: latlngs[i].lat, lng: latlngs[i].lng }, zoom)); - } - - const simplified = LineUtil.simplify(points, mul); - - // for (let i = 0; i < simplified.length; i += 1) { - // target.push(map.unproject(simplified[i], zoom)); - // } - // - // return target; - return simplified.map(item => map.unproject(item, zoom)); + const points = latlngs.map(({ lat, lng }) => map.project({ lat, lng }, zoom)); + return LineUtil.simplify(points, mul).map(item => map.unproject(item, zoom)); }; From bdbe28b854bb2ed8f0d4672ebbd33d3f8def04f3 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 17:09:56 +0700 Subject: [PATCH 126/320] fixed dragging polyline collision with router --- src/containers/map/Route/index.tsx | 39 ++++++++++++++++++------------ src/modules/InteractivePoly.ts | 5 ++++ src/utils/osrm.ts | 6 ++--- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 383a37e..601db62 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -28,26 +28,33 @@ const RouteUnconnected: FC = memo( ({ map: { route }, editor: { editing, mode }, mapSetRoute, editorSetDistance }) => { const [layer, setLayer] = useState(null); - const onDistanceChange = useCallback( - ({ distance }) => editorSetDistance(distance), - [editorSetDistance] - ); + const onDistanceChange = useCallback(({ distance }) => editorSetDistance(distance), [ + editorSetDistance, + ]); useEffect(() => { if (!MainMap) return; - setLayer( - new InteractivePoly([], { - color: 'url(#activePathGradient)', - weight: 6, - maxMarkers: isMobile() ? 20 : 100, - smoothFactor: 3, - }) - .addTo(MainMap) - .on('distancechange', onDistanceChange) - // .on("allvertexhide", console.log) - // .on("allvertexshow", console.log) - ); + const interactive = new InteractivePoly([], { + color: 'url(#activePathGradient)', + weight: 6, + maxMarkers: isMobile() ? 50 : 200, + smoothFactor: 3, + }) + .addTo(MainMap) + .on('distancechange', onDistanceChange) + .on('vertexdragstart', MainMap.disableClicks) + .on('vertexdragend', MainMap.enableClicks) + .on('vertexaddstart', MainMap.disableClicks) + .on('vertexaddend', MainMap.enableClicks); + // .on("allvertexhide", console.log) + // .on("allvertexshow", console.log) + + setLayer(interactive); + + return () => { + interactive.removeFrom(MainMap); + }; }, [MainMap, onDistanceChange]); const onRouteChanged = useCallback( diff --git a/src/modules/InteractivePoly.ts b/src/modules/InteractivePoly.ts index 0c6e064..7f55bf2 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/modules/InteractivePoly.ts @@ -239,6 +239,8 @@ export class InteractivePoly extends Polyline { this._map.on("mousemove", this.dragHintMove); this._map.on("mouseup", this.dragHintAddMarker); this._map.on("mouseout", this.stopDragHintMove); + + this.fire('vertexaddstart'); }; stopDragHintMove = (): void => { @@ -254,6 +256,7 @@ export class InteractivePoly extends Polyline { setTimeout(() => { this.is_dragging = false; + this.fire('vertexaddend'); }, 0); }; @@ -598,6 +601,8 @@ InteractivePoly.addInitHook(function() { vertexdragstart, vertexdragend, vertexdrag, + vertexaddstart + vertexaddend allvertexhide allvertexshow diff --git a/src/utils/osrm.ts b/src/utils/osrm.ts index fc5bcef..7028e24 100644 --- a/src/utils/osrm.ts +++ b/src/utils/osrm.ts @@ -7,8 +7,8 @@ import { MainMap } from '~/constants/map'; const createWaypointMarker = (): DomMarker => { const element = document.createElement('div'); - // element.addEventListener('mousedown', this.lockPropagations); - // element.addEventListener('mouseup', this.unlockPropagations); + element.addEventListener('mousedown', event => event.stopPropagation()); + element.addEventListener('mouseup', event => event.stopPropagation()); return new DomMarker({ element, @@ -37,7 +37,7 @@ export const OsrmRouter = Routing.control({ }, show: false, plan: Routing.plan([], { - createMarker: (i, wp) => { + createMarker: (_, wp) => { const marker = new Marker(wp.latLng, { draggable: true, icon: createWaypointMarker(), From cb07aa9fb08cfb615464078e4eadebd55e956701 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 9 Jan 2020 17:17:01 +0700 Subject: [PATCH 127/320] fixed marker hiding --- src/containers/map/Route/index.tsx | 16 +++++++++++----- src/utils/osrm.ts | 3 --- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 601db62..8b60d84 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -20,12 +20,19 @@ const mapStateToProps = state => ({ const mapDispatchToProps = { mapSetRoute: MAP_ACTIONS.mapSetRoute, editorSetDistance: EDITOR_ACTIONS.editorSetDistance, + editorSetMarkersShown: EDITOR_ACTIONS.editorSetMarkersShown, }; type Props = ReturnType & typeof mapDispatchToProps & {}; const RouteUnconnected: FC = memo( - ({ map: { route }, editor: { editing, mode }, mapSetRoute, editorSetDistance }) => { + ({ + map: { route }, + editor: { editing, mode }, + mapSetRoute, + editorSetDistance, + editorSetMarkersShown, + }) => { const [layer, setLayer] = useState(null); const onDistanceChange = useCallback(({ distance }) => editorSetDistance(distance), [ @@ -46,9 +53,9 @@ const RouteUnconnected: FC = memo( .on('vertexdragstart', MainMap.disableClicks) .on('vertexdragend', MainMap.enableClicks) .on('vertexaddstart', MainMap.disableClicks) - .on('vertexaddend', MainMap.enableClicks); - // .on("allvertexhide", console.log) - // .on("allvertexshow", console.log) + .on('vertexaddend', MainMap.enableClicks) + .on('allvertexhide', () => editorSetMarkersShown(false)) + .on('allvertexshow', () => editorSetMarkersShown(true)); setLayer(interactive); @@ -59,7 +66,6 @@ const RouteUnconnected: FC = memo( const onRouteChanged = useCallback( ({ latlngs }) => { - // console.log('THIS!'); mapSetRoute(latlngs); }, [mapSetRoute] diff --git a/src/utils/osrm.ts b/src/utils/osrm.ts index 7028e24..9f12dc8 100644 --- a/src/utils/osrm.ts +++ b/src/utils/osrm.ts @@ -7,9 +7,6 @@ import { MainMap } from '~/constants/map'; const createWaypointMarker = (): DomMarker => { const element = document.createElement('div'); - element.addEventListener('mousedown', event => event.stopPropagation()); - element.addEventListener('mouseup', event => event.stopPropagation()); - return new DomMarker({ element, className: 'router-waypoint', From 8adf64acb9687af149740741c7784da714cdf102 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 10 Jan 2020 09:21:37 +0700 Subject: [PATCH 128/320] cleanup --- src/_modules/InteractivePoly.ts | 2 - src/containers/map/Map/index.tsx | 7 +- src/containers/map/Route/index.tsx | 4 +- src/containers/map/Sticker/index.tsx | 8 +- src/redux/user/sagas.ts | 251 +----------------- .../InteractivePoly.ts => utils/polyline.ts} | 177 ++++++------ 6 files changed, 94 insertions(+), 355 deletions(-) rename src/{modules/InteractivePoly.ts => utils/polyline.ts} (74%) diff --git a/src/_modules/InteractivePoly.ts b/src/_modules/InteractivePoly.ts index 982cbb7..632d03e 100644 --- a/src/_modules/InteractivePoly.ts +++ b/src/_modules/InteractivePoly.ts @@ -560,8 +560,6 @@ InteractivePoly.addInitHook(function() { if (event.target instanceof InteractivePoly) { this.map = event.target._map; - this.map.on("touch", console.log); - this.markerLayer.addTo(event.target._map); this.hintMarker.addTo(event.target._map); this.constrLine.addTo(event.target._map); diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index fbb3897..be56cc9 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -34,12 +34,10 @@ type IProps = React.HTMLAttributes & const MapUnconnected: React.FC = ({ provider, - route, stickers, editing, mapClicked, - mapSetRoute, mapSetSticker, mapDropSticker, }) => { @@ -63,7 +61,7 @@ const MapUnconnected: React.FC = ({ return createPortal(
      - + = ({ mapDropSticker={mapDropSticker} is_editing={editing} /> + + +
      , document.getElementById('canvas') diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 8b60d84..c3a4fcc 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -1,6 +1,6 @@ import React, { FC, useEffect, memo, useState, useCallback } from 'react'; import { IMapRoute } from '../../../redux/map/types'; -import { InteractivePoly } from '~/modules/InteractivePoly'; +import { InteractivePoly } from '~/utils/polyline'; import { isMobile } from '~/utils/window'; import { LatLng, Map, LeafletEvent } from 'leaflet'; import { selectEditor } from '~/redux/editor/selectors'; @@ -45,7 +45,7 @@ const RouteUnconnected: FC = memo( const interactive = new InteractivePoly([], { color: 'url(#activePathGradient)', weight: 6, - maxMarkers: isMobile() ? 50 : 200, + maxMarkers: isMobile() ? 50 : 150, smoothFactor: 3, }) .addTo(MainMap) diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index 6fc4599..b9d74e9 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -11,6 +11,7 @@ import { MapContainer } from '~/constants/map'; interface IProps { map: MapContainer; sticker: IStickerDump; + onDragStart?: () => void; index: number; is_editing: boolean; @@ -53,7 +54,12 @@ const Sticker: React.FC = ({ setDragging(true); }, [setDragging, layer, map]); - const onDragStop = React.useCallback(() => { + const onDragStop = React.useCallback(event => { + event.stopPropagation(); + event.preventDefault(); + + if (!layer) return; + setDragging(false); onChange({ ...sticker, diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 5b067ef..2d8148c 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -50,19 +50,14 @@ import { import { USER_ACTIONS } from '~/redux/user/constants'; import { DEFAULT_USER } from '~/constants/auth'; -import { DIALOGS, TABS } from '~/constants/dialogs'; +import { DIALOGS } from '~/constants/dialogs'; import * as ActionCreators from '~/redux/user/actions'; import { Unwrap } from '~/utils/middleware'; -import { IState } from '~/redux/store'; import { selectUser, selectUserUser } from './selectors'; -import { mapInitSaga, loadMapSaga, replaceAddressIfItsBusy } from '~/redux/map/sagas'; +import { mapInitSaga } from '~/redux/map/sagas'; import { editorSetDialog, editorSetDialogActive } from '../editor/actions'; import { selectEditor } from '../editor/selectors'; -import { EDITOR_ACTIONS } from '../editor/constants'; - -// const getUser = (state: IState) => state.user.user; -// const selectUser = (state: IState) => state.user; function* generateGuestSaga() { const { @@ -74,36 +69,6 @@ function* generateGuestSaga() { return { ...user, random_url }; } -// function* stopEditingSaga() { -// const { changed, editing, mode, address_origin } = yield select(selectUser); -// const { path } = getUrlData(); - -// if (!editing) return; -// if (changed && mode !== MODES.CONFIRM_CANCEL) { -// yield put(setMode(MODES.CONFIRM_CANCEL)); -// return; -// } - -// yield put(setMode(MODES.NONE)); -// yield put(setChanged(false)); - -// yield pushPath(`/${address_origin || path}/`); -// } - -// function* checkOSRMServiceSaga() { -// const routing = yield call(checkOSRMService, [new LatLng(1,1), new LatLng(2,2)]); - -// yield put(setFeature({ routing })); -// } - -// export function* setReadySaga() { -// yield put(setReady(true)); -// hideLoader(); - -// yield call(checkOSRMServiceSaga); -// yield put(searchSetTab(TABS.MY)); -// } - function* authCheckSaga({ key }: RehydrateAction) { if (key !== 'user') return; @@ -155,158 +120,6 @@ function* authCheckSaga({ key }: RehydrateAction) { return yield call(mapInitSaga); } -// function* setModeSaga({ mode }: ReturnType) { - // return yield editor.changeMode(mode); - // console.log('change', mode); -// } - -// function* setLogoSaga({ logo }: { type: string; logo: string }) { -// const { mode } = yield select(selectUser); -// editor.logo = logo; - -// yield put(setChanged(true)); - -// if (mode === MODES.LOGO) { -// yield put(setMode(MODES.NONE)); -// } -// } - -// function* routerCancelSaga() { -// yield call(editor.router.cancelDrawing); -// yield put(setMode(MODES.NONE)); - -// return true; -// } - -// function* routerSubmitSaga() { -// yield call(editor.router.submitDrawing); -// yield put(setMode(MODES.NONE)); - -// return true; -// } - -// function* getRenderData() { -// yield put(setRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); - -// const { route, stickers, provider }: ReturnType = yield select(selectMap); - -// const canvas = document.getElementById('renderer'); -// canvas.width = window.innerWidth; -// canvas.height = window.innerHeight; -// const ctx = canvas.getContext('2d'); - -// const geometry = getTilePlacement(); -// const points = getPolyPlacement(route); -// const sticker_points = getStickersPlacement(stickers); -// // TODO: get distance: -// const distance = 0; -// // const distance = editor.poly.poly.distance; - -// ctx.clearRect(0, 0, canvas.width, canvas.height); - -// const images = yield fetchImages(ctx, geometry, provider); - -// yield put(setRenderer({ info: 'Отрисовка', progress: 0.5 })); - -// yield composeImages({ geometry, images, ctx }); -// yield composePoly({ points, ctx }); -// yield composeArrows({ points, ctx }); -// yield composeDistMark({ ctx, points, distance }); -// yield composeStickers({ stickers: sticker_points, ctx }); - -// yield put(setRenderer({ info: 'Готово', progress: 1 })); - -// return yield canvas.toDataURL('image/jpeg'); -// } - -// function* takeAShotSaga() { -// const worker = call(getRenderData); - -// const { result, timeout } = yield race({ -// result: worker, -// timeout: delay(500), -// }); - -// if (timeout) yield put(setMode(MODES.SHOT_PREFETCH)); - -// const data = yield result || worker; - -// yield put(setMode(MODES.NONE)); -// yield put( -// setRenderer({ -// data, -// renderer_active: true, -// width: window.innerWidth, -// height: window.innerHeight, -// }) -// ); -// } - -// function* getCropData({ x, y, width, height }) { -// const { -// logo, -// renderer: { data }, -// } = yield select(selectUser); -// const canvas = document.getElementById('renderer'); -// canvas.width = width; -// canvas.height = height; -// const ctx = canvas.getContext('2d'); -// const image = yield imageFetcher(data); - -// ctx.drawImage(image, -x, -y); - -// if (logo && LOGOS[logo][1]) { -// const logoImage = yield imageFetcher(LOGOS[logo][1]); -// ctx.drawImage(logoImage, width - logoImage.width, height - logoImage.height); -// } - -// return yield canvas.toDataURL('image/jpeg'); -// } - -// function* cropAShotSaga(params) { -// const { title, address } = yield select(selectUser); -// yield call(getCropData, params); -// const canvas = document.getElementById('renderer') as HTMLCanvasElement; - -// downloadCanvas(canvas, (title || address).replace(/\./gi, ' ')); - -// return yield put(hideRenderer()); -// } - -// function* locationChangeSaga({ location }: ReturnType) { -// const { -// address, -// ready, -// user: { id, random_url }, -// } = yield select(selectUser); - -// const { owner }: ReturnType = yield select(selectMap) - -// if (!ready) return; - -// const { path, mode } = getUrlData(location); - -// if (address !== path) { -// const map = yield call(loadMapSaga, path); - -// if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { -// return yield call(replaceAddressIfItsBusy, map.random_url, map.address); -// } -// } else if (mode === 'edit' && owner.id !== id) { -// return yield call(replaceAddressIfItsBusy, random_url, address); -// } else { -// yield put(setAddressOrigin('')); -// } - -// if (mode !== 'edit') { -// yield put(setEditing(false)); -// // editor.stopEditing(); -// } else { -// yield put(setEditing(true)); -// // editor.startEditing(); -// } -// } - function* gotVkUserSaga({ user: u }: ReturnType) { const { data: { user, random_url }, @@ -315,38 +128,6 @@ function* gotVkUserSaga({ user: u }: ReturnType yield put(setUser({ ...user, random_url })); } -// function* keyPressedSaga({ key, target }: ReturnType): any { -// if (target === 'INPUT' || target === 'TEXTAREA') { -// return; -// } - -// if (key === 'Escape') { -// const { -// dialog_active, -// mode, -// renderer: { renderer_active }, -// } = yield select(selectUser); - -// if (renderer_active) return yield put(hideRenderer()); -// if (dialog_active) return yield put(setDialogActive(false)); -// if (mode !== MODES.NONE) return yield put(setMode(MODES.NONE)); -// } else if (key === 'Delete') { -// const { -// user: { editing }, -// } = yield select(); - -// if (!editing) return; - -// const { mode } = yield select(selectUser); - -// if (mode === MODES.TRASH) { -// yield put(clearAll()); -// } else { -// yield put(setMode(MODES.TRASH)); -// } -// } -// } - function* searchGetRoutes() { const { token }: ReturnType = yield select(selectUserUser); @@ -425,7 +206,6 @@ function* openMapDialogSaga({ tab }: ReturnType = yield select(selectMap); -// const { title, address } = yield select(selectUser); - -// if (!route || route.length <= 0) return; - -// const track = getGPXString({ route, stickers, title: title || address }); - -// return downloadGPXTrack({ track, title }); -// } - function* mapsLoadMoreSaga() { const { routes: { limit, list, shift, step, loading, filter }, @@ -596,27 +365,11 @@ function* toggleRouteStarredSaga({ } export function* userSaga() { - // yield takeEvery(USER_ACTIONS.STOP_EDITING, stopEditingSaga); - // yield takeLatest(USER_ACTIONS.TAKE_A_SHOT, takeAShotSaga); - // yield takeLatest(USER_ACTIONS.CROP_A_SHOT, cropAShotSaga); - // yield takeLatest(USER_ACTIONS.LOCATION_CHANGED, locationChangeSaga); - // yield takeLatest(USER_ACTIONS.KEY_PRESSED, keyPressedSaga); - // yield takeLatest(USER_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); - yield takeLatest(REHYDRATE, authCheckSaga); yield takeEvery(USER_ACTIONS.USER_LOGOUT, userLogoutSaga); - - // yield takeEvery(USER_ACTIONS.ROUTER_CANCEL, routerCancelSaga); - // yield takeEvery(USER_ACTIONS.ROUTER_SUBMIT, routerSubmitSaga); - - - // yield takeEvery(USER_ACTIONS.CHANGE_PROVIDER, changeProviderSaga); - yield takeLatest(USER_ACTIONS.GOT_VK_USER, gotVkUserSaga); - // yield takeLatest(USER_ACTIONS.SET_TITLE, setTitleSaga); - yield takeLatest( [USER_ACTIONS.SEARCH_SET_TITLE, USER_ACTIONS.SEARCH_SET_DISTANCE], searchSetSaga diff --git a/src/modules/InteractivePoly.ts b/src/utils/polyline.ts similarity index 74% rename from src/modules/InteractivePoly.ts rename to src/utils/polyline.ts index 7f55bf2..7c8c23c 100644 --- a/src/modules/InteractivePoly.ts +++ b/src/utils/polyline.ts @@ -15,10 +15,10 @@ import { LatLng, LeafletMouseEvent, latLng, - LatLngLiteral -} from "leaflet"; + LatLngLiteral, +} from 'leaflet'; -import { distKm, distToSegment, getPolyLength, pointInArea } from "~/utils/geom"; +import { distKm, distToSegment, getPolyLength, pointInArea } from '~/utils/geom'; interface InteractivePolylineOptions extends PolylineOptions { maxMarkers?: number; @@ -36,7 +36,7 @@ export class InteractivePoly extends Polyline { this.constraintsStyle = { ...this.constraintsStyle, - ...options.constraintsStyle + ...options.constraintsStyle, }; this.maxMarkers = options.maxMarkers || this.maxMarkers; @@ -56,7 +56,7 @@ export class InteractivePoly extends Polyline { this.touchHinter.setLatLngs(latlngs); if (emitEvent) { - this.fire("latlngschange", { latlngs }); + this.fire('latlngschange', { latlngs }); } }; @@ -64,25 +64,25 @@ export class InteractivePoly extends Polyline { marker(latlng, { draggable: false, icon: divIcon({ - className: "leaflet-vertex-drag-helper", + className: 'leaflet-vertex-drag-helper', iconSize: [11, 11], - iconAnchor: [6, 6] - }) + iconAnchor: [6, 6], + }), }); createMarker = (latlng: LatLng): Marker => marker(latlng, { draggable: true, icon: divIcon({ - className: "leaflet-vertex-icon", + className: 'leaflet-vertex-icon', iconSize: [11, 11], - iconAnchor: [6, 6] - }) + iconAnchor: [6, 6], + }), }) - .on("contextmenu", this.dropMarker) - .on("drag", this.onMarkerDrag) - .on("dragstart", this.onMarkerDragStart) - .on("dragend", this.onMarkerDragEnd) + .on('contextmenu', this.dropMarker) + .on('drag', this.onMarkerDrag) + .on('dragstart', this.onMarkerDragStart) + .on('dragend', this.onMarkerDragEnd) .addTo(this.markerLayer); recreateMarkers = () => { @@ -110,14 +110,14 @@ export class InteractivePoly extends Polyline { if (this._map.hasLayer(this.markerLayer)) return; this._map.addLayer(this.markerLayer); - this.fire("allvertexshow"); + this.fire('allvertexshow'); }; hideAllMarkers = (): void => { if (!this._map.hasLayer(this.markerLayer)) return; this._map.removeLayer(this.markerLayer); - this.fire("allvertexhide"); + this.fire('allvertexhide'); }; showVisibleMarkers = (): void => { @@ -130,10 +130,7 @@ export class InteractivePoly extends Polyline { (obj, marker) => { const { lat, lng } = marker.getLatLng(); const is_hidden = - lat > northEast.lat || - lng > northEast.lng || - lat < southWest.lat || - lng < southWest.lng; + lat > northEast.lat || lng > northEast.lng || lat < southWest.lat || lng < southWest.lng; return is_hidden ? { ...obj, hidden: [...obj.hidden, marker] } @@ -151,8 +148,7 @@ export class InteractivePoly extends Polyline { }); hidden.forEach(marker => { - if (this.markerLayer.hasLayer(marker)) - this.markerLayer.removeLayer(marker); + if (this.markerLayer.hasLayer(marker)) this.markerLayer.removeLayer(marker); }); }; @@ -163,7 +159,7 @@ export class InteractivePoly extends Polyline { this.stopDragHinting(); this.stopDrawing(); this.touchHinter.removeFrom(this._map); - this.fire("editordisable"); + this.fire('editordisable'); }, enable: () => { this.is_editing = true; @@ -171,21 +167,21 @@ export class InteractivePoly extends Polyline { this.startDragHinting(); this.touchHinter.addTo(this._map); - this.fire("editorenable"); + this.fire('editorenable'); }, continue: () => { this.is_drawing = true; - this.drawing_direction = "forward"; + this.drawing_direction = 'forward'; this.startDrawing(); }, prepend: () => { this.is_drawing = true; - this.drawing_direction = "backward"; + this.drawing_direction = 'backward'; this.startDrawing(); }, stop: () => { this.stopDrawing(); - } + }, }; moveDragHint = ({ latlng }: LeafletMouseEvent): void => { @@ -193,8 +189,7 @@ export class InteractivePoly extends Polyline { }; hideDragHint = (): void => { - if (this._map.hasLayer(this.hintMarker)) - this._map.removeLayer(this.hintMarker); + if (this._map.hasLayer(this.hintMarker)) this._map.removeLayer(this.hintMarker); }; showDragHint = (): void => { @@ -202,17 +197,17 @@ export class InteractivePoly extends Polyline { }; startDragHinting = (): void => { - this.touchHinter.on("mousemove", this.moveDragHint); - this.touchHinter.on("mousedown", this.startDragHintMove); - this.touchHinter.on("mouseover", this.showDragHint); - this.touchHinter.on("mouseout", this.hideDragHint); + this.touchHinter.on('mousemove', this.moveDragHint); + this.touchHinter.on('mousedown', this.startDragHintMove); + this.touchHinter.on('mouseover', this.showDragHint); + this.touchHinter.on('mouseout', this.hideDragHint); }; stopDragHinting = (): void => { - this.touchHinter.off("mousemove", this.moveDragHint); - this.touchHinter.off("mousedown", this.startDragHintMove); - this.touchHinter.off("mouseover", this.showDragHint); - this.touchHinter.off("mouseout", this.hideDragHint); + this.touchHinter.off('mousemove', this.moveDragHint); + this.touchHinter.off('mousedown', this.startDragHintMove); + this.touchHinter.off('mouseover', this.showDragHint); + this.touchHinter.off('mouseout', this.hideDragHint); }; startDragHintMove = (event: LeafletMouseEvent): void => { @@ -236,9 +231,9 @@ export class InteractivePoly extends Polyline { this.is_dragging = true; - this._map.on("mousemove", this.dragHintMove); - this._map.on("mouseup", this.dragHintAddMarker); - this._map.on("mouseout", this.stopDragHintMove); + this._map.on('mousemove', this.dragHintMove); + this._map.on('mouseup', this.dragHintAddMarker); + this._map.on('mouseout', this.stopDragHintMove); this.fire('vertexaddstart'); }; @@ -248,9 +243,9 @@ export class InteractivePoly extends Polyline { this.constrLine.removeFrom(this._map); - this._map.off("mousemove", this.dragHintMove); - this._map.off("mouseup", this.dragHintAddMarker); - this._map.off("mouseout", this.stopDragHintMove); + this._map.off('mousemove', this.dragHintMove); + this._map.off('mouseup', this.dragHintAddMarker); + this._map.off('mouseout', this.stopDragHintMove); if (this.is_drawing) this.startDrawing(); @@ -263,11 +258,7 @@ export class InteractivePoly extends Polyline { dragHintAddMarker = ({ latlng }: LeafletMouseEvent): void => { this.dragHintChangeDistance(this.hint_prev_marker, latlng); - this.markers.splice( - this.hint_prev_marker + 1, - 0, - this.createMarker(latlng) - ); + this.markers.splice(this.hint_prev_marker + 1, 0, this.createMarker(latlng)); this.insertLatLng(latlng, this.hint_prev_marker + 1); this.hideDragHint(); this.stopDragHintMove(); @@ -285,7 +276,7 @@ export class InteractivePoly extends Polyline { this.distance += current_distance - initial_distance; - this.fire("distancechange", { distance: this.distance }); + this.fire('distancechange', { distance: this.distance }); }; dragHintFindNearest = (latlng: LatLng): any => { @@ -314,17 +305,13 @@ export class InteractivePoly extends Polyline { this.setConstraints([ this.markers[this.hint_prev_marker].getLatLng(), event.latlng, - this.markers[this.hint_prev_marker + 1].getLatLng() + this.markers[this.hint_prev_marker + 1].getLatLng(), ]); }; onMarkerDrag = ({ target }: { target: Marker }) => { const coords = new Array(0) - .concat( - (this.vertex_index > 0 && - this.markers[this.vertex_index - 1].getLatLng()) || - [] - ) + .concat((this.vertex_index > 0 && this.markers[this.vertex_index - 1].getLatLng()) || []) .concat(target.getLatLng()) .concat( (this.vertex_index < this.markers.length - 1 && @@ -334,7 +321,7 @@ export class InteractivePoly extends Polyline { this.setConstraints(coords); - this.fire("vertexdrag", { index: this.vertex_index, vertex: target }); + this.fire('vertexdrag', { index: this.vertex_index, vertex: target }); }; onMarkerDragStart = ({ target }: { target: Marker }) => { @@ -350,7 +337,7 @@ export class InteractivePoly extends Polyline { this.is_dragging = true; this.constrLine.addTo(this._map); - this.fire("vertexdragstart", { index: this.vertex_index, vertex: target }); + this.fire('vertexdragstart', { index: this.vertex_index, vertex: target }); }; onMarkerDragEnd = ({ target }: { target: Marker }): void => { @@ -370,7 +357,7 @@ export class InteractivePoly extends Polyline { if (this.is_drawing) this.startDrawing(); - this.fire("vertexdragend", { index: this.vertex_index, vertex: target }); + this.fire('vertexdragend', { index: this.vertex_index, vertex: target }); }; markerDragChangeDistance = ( @@ -379,8 +366,7 @@ export class InteractivePoly extends Polyline { current: LatLngLiteral ): void => { const prev = index > 0 ? this.markers[index - 1] : null; - const next = - index <= this.markers.length + 1 ? this.markers[index + 1] : null; + const next = index <= this.markers.length + 1 ? this.markers[index + 1] : null; const initial_distance = ((prev && distKm(prev.getLatLng(), initial)) || 0) + @@ -392,21 +378,21 @@ export class InteractivePoly extends Polyline { this.distance += current_distance - initial_distance; - this.fire("distancechange", { distance: this.distance }); + this.fire('distancechange', { distance: this.distance }); }; startDrawing = (): void => { this.is_drawing = true; this.setConstraints([]); this.constrLine.addTo(this._map); - this._map.on("mousemove", this.onDrawingMove); - this._map.on("click", this.onDrawingClick); + this._map.on('mousemove', this.onDrawingMove); + this._map.on('click', this.onDrawingClick); }; stopDrawing = (): void => { this.constrLine.removeFrom(this._map); - this._map.off("mousemove", this.onDrawingMove); - this._map.off("click", this.onDrawingClick); + this._map.off('mousemove', this.onDrawingMove); + this._map.off('click', this.onDrawingClick); this.is_drawing = false; }; @@ -416,11 +402,10 @@ export class InteractivePoly extends Polyline { return; } - if (!this._map.hasLayer(this.constrLine)) - this._map.addLayer(this.constrLine); + if (!this._map.hasLayer(this.constrLine)) this._map.addLayer(this.constrLine); const marker = - this.drawing_direction === "forward" + this.drawing_direction === 'forward' ? this.markers[this.markers.length - 1] : this.markers[0]; @@ -438,7 +423,7 @@ export class InteractivePoly extends Polyline { this.drawingChangeDistance(latlng); - if (this.drawing_direction === "forward") { + if (this.drawing_direction === 'forward') { latlngs.push(latlng); this.markers.push(this.createMarker(latlng)); } else { @@ -447,7 +432,7 @@ export class InteractivePoly extends Polyline { } this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); + this.fire('latlngschange', { latlngs }); this.showVisibleMarkers(); this.startDrawing(); }; @@ -457,31 +442,28 @@ export class InteractivePoly extends Polyline { if (latlngs.length < 1) { this.distance = 0; - this.fire("distancechange", { distance: this.distance }); + this.fire('distancechange', { distance: this.distance }); return; } - const point = - this.drawing_direction === "forward" - ? latlngs[latlngs.length - 1] - : latlngs[0]; + const point = this.drawing_direction === 'forward' ? latlngs[latlngs.length - 1] : latlngs[0]; this.distance += distKm(point, latlng); - this.fire("distancechange", { distance: this.distance }); + this.fire('distancechange', { distance: this.distance }); }; replaceLatlng = (latlng: LatLng, index: number): void => { const latlngs = this.getLatLngs() as LatLngLiteral[]; latlngs.splice(index, 1, latlng); this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); + this.fire('latlngschange', { latlngs }); }; insertLatLng = (latlng, index): void => { const latlngs = this.getLatLngs(); latlngs.splice(index, 0, latlng); this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); + this.fire('latlngschange', { latlngs }); }; setConstraints = (coords: LatLng[]) => { @@ -492,7 +474,7 @@ export class InteractivePoly extends Polyline { const index = this.markers.indexOf(target); const latlngs = this.getLatLngs(); - if (typeof index === "undefined" || latlngs.length <= 2) return; + if (typeof index === 'undefined' || latlngs.length <= 2) return; this.dropMarkerDistanceChange(index); this._map.removeLayer(this.markers[index]); @@ -500,7 +482,7 @@ export class InteractivePoly extends Polyline { latlngs.splice(index, 1); this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); + this.fire('latlngschange', { latlngs }); }; dropMarkerDistanceChange = (index: number): void => { @@ -511,39 +493,38 @@ export class InteractivePoly extends Polyline { const next = index <= latlngs.length + 1 ? latlngs[index + 1] : null; const initial_distance = - ((prev && distKm(prev, current)) || 0) + - ((next && distKm(next, current)) || 0); + ((prev && distKm(prev, current)) || 0) + ((next && distKm(next, current)) || 0); const current_distance = (prev && next && distKm(prev, next)) || 0; this.distance += current_distance - initial_distance; - this.fire("distancechange", { distance: this.distance }); + this.fire('distancechange', { distance: this.distance }); }; recalcDistance = () => { const latlngs = this.getLatLngs() as LatLngLiteral[]; this.distance = getPolyLength(latlngs); - this.fire("distancechange", { distance: this.distance }); + this.fire('distancechange', { distance: this.distance }); }; markers: Marker[] = []; - maxMarkers: InteractivePolylineOptions["maxMarkers"] = 2; + maxMarkers: InteractivePolylineOptions['maxMarkers'] = 2; markerLayer: LayerGroup = new LayerGroup(); - constraintsStyle: InteractivePolylineOptions["constraintsStyle"] = { + constraintsStyle: InteractivePolylineOptions['constraintsStyle'] = { weight: 6, - color: "red", - dashArray: "10, 12", + color: 'red', + dashArray: '10, 12', opacity: 0.5, - interactive: false + interactive: false, }; touchHinter: Polyline = new Polyline([], { weight: 24, smoothFactor: 3, - className: "touch-hinter-poly" + className: 'touch-hinter-poly', }); hintMarker: Marker = this.createHintMarker(latLng({ lat: 0, lng: 0 })); @@ -554,7 +535,7 @@ export class InteractivePoly extends Polyline { is_dragging: boolean = false; is_drawing: boolean = false; - drawing_direction: "forward" | "backward" = "forward"; + drawing_direction: 'forward' | 'backward' = 'forward'; vertex_index?: number = null; hint_prev_marker: number = null; @@ -562,20 +543,20 @@ export class InteractivePoly extends Polyline { } InteractivePoly.addInitHook(function() { - this.once("add", event => { + this.once('add', event => { if (event.target instanceof InteractivePoly) { this.map = event.target._map; - this.map.on("touch", console.log); + this.map.on('touch', console.log); this.markerLayer.addTo(event.target._map); this.hintMarker.addTo(event.target._map); this.constrLine.addTo(event.target._map); this.touchHinter.addTo(event.target._map); - this.map.on("moveend", this.updateMarkers); + this.map.on('moveend', this.updateMarkers); - this.on("latlngschange", this.updateTouchHinter); + this.on('latlngschange', this.updateTouchHinter); if (window.innerWidth < 768) { this.touchHinter.setStyle({ weight: 32 }); @@ -583,14 +564,14 @@ InteractivePoly.addInitHook(function() { } }); - this.once("remove", event => { + this.once('remove', event => { if (event.target instanceof InteractivePoly) { this.markerLayer.removeFrom(this._map); this.hintMarker.removeFrom(this._map); this.constrLine.removeFrom(this._map); this.touchHinter.removeFrom(this._map); - this.map.off("moveend", this.updateMarkers); + this.map.off('moveend', this.updateMarkers); } }); }); From 9760002fad493506cc95d57190fb0098ade1ac3d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 10 Jan 2020 12:26:33 +0700 Subject: [PATCH 129/320] fixed map setting on load --- src/redux/editor/sagas.ts | 21 ++---- src/redux/map/sagas.ts | 147 +++++++++++++++++--------------------- 2 files changed, 72 insertions(+), 96 deletions(-) diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 7e2c4a6..e934af1 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -39,7 +39,7 @@ import { import { selectMap, selectMapRoute } from '../map/selectors'; import { selectUser } from '../user/selectors'; import { LOGOS } from '~/constants/logos'; -import { loadMapSaga } from '../map/sagas'; +import { loadMapSaga, startEmptyEditorSaga, loadMapFromPath } from '../map/sagas'; import { mapClicked, mapSetRoute } from '../map/actions'; import { MAP_ACTIONS } from '../map/constants'; import { OsrmRouter } from '~/utils/osrm'; @@ -58,7 +58,8 @@ function* stopEditingSaga() { const { address_origin }: ReturnType = yield select(selectMap); const { path } = getUrlData(); - if (!editing) return; + // if (!editing) return; + if (changed && mode !== MODES.CONFIRM_CANCEL) { yield put(editorSetMode(MODES.CONFIRM_CANCEL)); return; @@ -176,21 +177,10 @@ function* cropAShotSaga(params) { function* locationChangeSaga({ location }: ReturnType) { const { ready }: ReturnType = yield select(selectEditor); - const { address }: ReturnType = yield select(selectMap); if (!ready) return; - const { path, mode } = getUrlData(location); - - if (address !== path) { - yield call(loadMapSaga, path); - } - - if (mode !== 'edit') { - yield put(editorSetEditing(false)); - } else { - yield put(editorSetEditing(true)); - } + yield call(loadMapFromPath); } function* keyPressedSaga({ key, target }: ReturnType) { @@ -259,10 +249,11 @@ function* routerSubmit() { } export function* editorSaga() { + yield takeEvery(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); + yield takeEvery(EDITOR_ACTIONS.STOP_EDITING, stopEditingSaga); yield takeLatest(EDITOR_ACTIONS.TAKE_A_SHOT, takeAShotSaga); yield takeLatest(EDITOR_ACTIONS.CROP_A_SHOT, cropAShotSaga); - yield takeLatest(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); yield takeLatest(EDITOR_ACTIONS.KEY_PRESSED, keyPressedSaga); yield takeLatest(EDITOR_ACTIONS.GET_GPX_TRACK, getGPXTrackSaga); yield takeLatest(EDITOR_ACTIONS.ROUTER_CANCEL, routerCancel); diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index c5c8906..570b6ac 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -30,12 +30,12 @@ import { editorSendSaveRequest, editorSetSaveSuccess, editorSetSaveOverwrite, + editorClearAll, } from '~/redux/editor/actions'; import { pushLoaderState, getUrlData, pushPath, replacePath } from '~/utils/history'; import { searchSetSagaWorker } from '~/redux/user/sagas'; import { getStoredMap, postMap } from '~/utils/api'; import { Unwrap } from '~/utils/middleware'; -import { USER_ACTIONS } from '~/redux/user/constants'; import { selectMap, selectMapProvider } from './selectors'; import { TIPS } from '~/constants/tips'; import { delay } from 'redux-saga'; @@ -59,28 +59,6 @@ function* onMapClick({ latlng }: ReturnType) { } } -// function* changeProviderSaga({ provider }: ReturnType) { -// const { provider: current_provider } = yield select(selectUser); - -// yield put(mapSetProvider(provider)); - -// if (current_provider === provider) return; - -// yield put(setChanged(true)); - -// return put(setMode(MODES.NONE)); -// } - -// function* setLogoSaga({ logo }: { type: string; logo: string }) { -// const { mode } = yield select(selectUser); - -// yield put(setChanged(true)); - -// if (mode === MODES.LOGO) { -// yield put(setMode(MODES.NONE)); -// } -// } - export function* replaceAddressIfItsBusy(destination, original) { if (original) { yield put(mapSetAddressOrigin(original)); @@ -95,15 +73,16 @@ export function* loadMapSaga(path) { }: Unwrap = yield call(getStoredMap, { name: path }); if (route && !error) { - // TODO: set initial data - // TODO: fit bounds - yield put( mapSet({ provider: route.provider, route: route.route, stickers: route.stickers, title: route.title, + address: route.address, + description: route.description, + is_public: route.is_public, + logo: route.logo, }) ); @@ -113,26 +92,49 @@ export function* loadMapSaga(path) { return null; } -function* startEmptyEditorSaga() { +export function* startEmptyEditorSaga() { + yield put(editorSetReady(false)); + const { user: { id, random_url }, }: ReturnType = yield select(selectUser); - const provider: ReturnType = yield select(selectMapProvider); + const { path, mode } = getUrlData(); - // TODO: set owner { id } - pushPath(`/${random_url}/edit`); + if (!path || !mode || mode !== 'edit') { + pushPath(`/${random_url}/edit`); + } - yield put(editorSetChanged(false)); + yield put(editorClearAll()); + yield put(mapSet({ owner: { id } })); yield put(editorSetEditing(true)); + yield put(editorSetReady(true)); +} - return yield call(setReadySaga); +export function* loadMapFromPath() { + const { path, mode } = getUrlData(); + + if (path) { + const map = yield call(loadMapSaga, path); + + if (!map) { + yield call(setReadySaga); + return yield call(startEmptyEditorSaga); + } + + yield put(editorSetEditing(mode && mode === 'edit')); + yield call(setReadySaga); + return; + } + + yield call(setReadySaga); + yield call(startEmptyEditorSaga); } export function* mapInitSaga() { pushLoaderState(90); - const { path, mode, hash } = getUrlData(); + const { hash } = getUrlData(); const { user: { id }, }: ReturnType = yield select(selectUser); @@ -150,34 +152,8 @@ export function* mapInitSaga() { } } - if (path) { - const map = yield call(loadMapSaga, path); - - if (map && map.route) { - if (mode && mode === 'edit') { - if (map && map.route && map.route.owner && mode === 'edit' && map.route.owner !== id) { - yield call(setReadySaga); - yield call(replaceAddressIfItsBusy, map.random_url, map.address); - } else { - yield put(mapSetAddressOrigin('')); - } - - yield put(editorSetEditing(true)); - } else { - yield put(editorSetEditing(false)); - } - - yield call(setReadySaga); - return true; - } - } - - yield call(startEmptyEditorSaga); - yield put(editorSetReady(true)); - + yield call(loadMapFromPath); pushLoaderState(100); - - return true; } function* setActiveStickerSaga() { @@ -195,32 +171,44 @@ function* startEditingSaga() { yield pushPath(`/${path}/edit`); } +function* clearPolySaga() { + yield put( + mapSet({ + route: [], + }) + ); +} + +function* clearStickersSaga() { + yield put( + mapSet({ + stickers: [], + }) + ); +} + +function* clearAllSaga() { + yield put(editorSetChanged(false)); + yield put( + mapSet({ + route: [], + stickers: [], + }) + ); +} + function* clearSaga({ type }) { switch (type) { case EDITOR_ACTIONS.CLEAR_POLY: - yield put( - mapSet({ - route: [], - }) - ); + yield call(clearPolySaga); break; case EDITOR_ACTIONS.CLEAR_STICKERS: - yield put( - mapSet({ - stickers: [], - }) - ); + yield call(clearStickersSaga); break; case EDITOR_ACTIONS.CLEAR_ALL: - yield put(editorSetChanged(false)); - yield put( - mapSet({ - route: [], - stickers: [], - }) - ); + yield call(clearAllSaga); break; default: @@ -248,7 +236,7 @@ function* sendSaveRequestSaga({ const { distance }: ReturnType = yield select(selectEditor); const { token }: ReturnType = yield select(selectUserUser); - yield put(editorSetSaveLoading(true)); + yield put(editorSetSaveLoading(true)); const { result, @@ -325,9 +313,6 @@ function* setSaveSuccessSaga({ yield call(searchSetSagaWorker); } - // yield editor.setInitialData(); - // TODO: set initial data here - return; } From 65885acb75aa77719d2358c5653c9d7badefc34f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 10 Jan 2020 12:30:32 +0700 Subject: [PATCH 130/320] fixed repeating map requests --- src/redux/map/sagas.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 570b6ac..37950ee 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -118,16 +118,14 @@ export function* loadMapFromPath() { const map = yield call(loadMapSaga, path); if (!map) { - yield call(setReadySaga); - return yield call(startEmptyEditorSaga); + yield call(startEmptyEditorSaga); + return } yield put(editorSetEditing(mode && mode === 'edit')); - yield call(setReadySaga); return; } - yield call(setReadySaga); yield call(startEmptyEditorSaga); } @@ -153,6 +151,7 @@ export function* mapInitSaga() { } yield call(loadMapFromPath); + yield call(setReadySaga); pushLoaderState(100); } From afc965420027a25c08c9ed57e61348fec7294e89 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 10 Jan 2020 14:32:12 +0700 Subject: [PATCH 131/320] fixed dialog witdths --- src/components/dialogs/CancelDialog.tsx | 2 +- src/components/dialogs/RouterDialog.tsx | 2 +- src/components/dialogs/SaveDialog.tsx | 24 ++--- src/components/dialogs/StickersDialog.tsx | 2 +- src/components/dialogs/TrashDialog.tsx | 2 +- src/containers/map/Stickers/index.tsx | 2 +- src/redux/editor/actions.ts | 23 +---- src/redux/editor/constants.ts | 4 +- src/redux/editor/handlers.ts | 45 ++------- src/redux/editor/index.ts | 28 +++--- src/redux/editor/selectors.ts | 1 + src/redux/map/sagas.ts | 107 +++++++++++++--------- src/styles/panel.less | 5 + 13 files changed, 115 insertions(+), 132 deletions(-) diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index ef01f87..153645d 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -25,7 +25,7 @@ export class CancelDialog extends React.Component { const { width } = this.props; return ( -
      +
      diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index aa9510d..0718ab5 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -100,7 +100,7 @@ const RouterDialogUnconnected: FC = ({ editorRouterSubmit, width, }) => ( -
      +
      {!waypoints.length && noPoints({ editorRouterCancel })} diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index 22ef43a..3262905 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -11,11 +11,11 @@ import ExpandableTextarea from 'react-expandable-textarea'; import { connect } from 'react-redux'; import { selectMap } from '~/redux/map/selectors'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; -import { selectEditor } from '~/redux/editor/selectors'; +import { selectEditorSave } from '~/redux/editor/selectors'; const mapStateToProps = state => ({ map: selectMap(state), - editor: selectEditor(state), + save: selectEditorSave(state), }); const mapDispatchToProps = { @@ -94,7 +94,7 @@ class SaveDialogUnconnected extends React.Component { render() { const { title, is_public, description } = this.state; const { - editor: { save_error, save_finished, save_overwriting, save_loading }, + save: { error, finished, overwriting, loading }, width, } = this.props; const { host, protocol } = getUrlData(); @@ -102,7 +102,7 @@ class SaveDialogUnconnected extends React.Component { return (
      -
      +
      @@ -112,7 +112,7 @@ class SaveDialogUnconnected extends React.Component { value={title} onChange={this.setTitle} autoFocus - readOnly={save_finished} + readOnly={finished} />
      @@ -126,7 +126,7 @@ class SaveDialogUnconnected extends React.Component { type="text" value={this.getAddress()} onChange={this.setAddress} - readOnly={save_finished} + readOnly={finished} onCopy={this.onCopy} />
      @@ -143,7 +143,7 @@ class SaveDialogUnconnected extends React.Component { onChange={this.setDescription} />
      -
      {save_error || TIPS.SAVE_INFO}
      +
      {error || TIPS.SAVE_INFO}
      { {is_public ? ' В каталоге карт' : ' Только по ссылке'}
      - {!save_finished && ( + {!finished && (
      Отмена
      )} - {!save_finished && !save_overwriting && ( + {!finished && !overwriting && (
      Сохранить
      )} - {save_overwriting && ( + {overwriting && (
      Перезаписать
      )} - {save_finished && ( + {finished && (
      Скопировать
      )} - {save_finished && ( + {finished && (
      Отлично!
      diff --git a/src/components/dialogs/StickersDialog.tsx b/src/components/dialogs/StickersDialog.tsx index 9506678..be9dede 100644 --- a/src/components/dialogs/StickersDialog.tsx +++ b/src/components/dialogs/StickersDialog.tsx @@ -15,7 +15,7 @@ type Props = ReturnType & }; const StickersDialogUnconnected = ({ editorSetActiveSticker, width }: Props) => ( -
      +
      {Object.keys(STICKERS).map(set => (
      diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index e22abab..4779091 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -22,7 +22,7 @@ const TrashDialogUnconnected: FC = ({ editorClearCancel, width, }) => ( -
      +
      Удалить:
      diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index 6756bec..ee40980 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -30,7 +30,7 @@ const Stickers: React.FC = React.memo( ({ type: EDITOR_ACTIONS.RESET_SAVE_DIALOG }); -export const editorSetSaveLoading = (save_loading: IEditorState['save_loading']) => ({ - type: EDITOR_ACTIONS.SET_SAVE_LOADING, - save_loading, -}); - -export const editorSetSaveSuccess = (payload: { - address: IRoute['address']; - title: IRoute['address']; - is_public: IRoute['is_public']; - description: IRoute['description']; - - save_error: string; -}) => ({ type: EDITOR_ACTIONS.SET_SAVE_SUCCESS, ...payload }); - -export const editorSetSaveError = (save_error: IEditorState['save_error']) => ({ - type: EDITOR_ACTIONS.SET_SAVE_ERROR, - save_error, -}); -export const editorSetSaveOverwrite = () => ({ type: EDITOR_ACTIONS.SET_SAVE_OVERWRITE }); +export const editorSetSave = (save: Partial) => ({ + type: EDITOR_ACTIONS.SET_SAVE, + save, +}) export const editorHideRenderer = () => ({ type: EDITOR_ACTIONS.HIDE_RENDERER }); export const editorSetRenderer = payload => ({ type: EDITOR_ACTIONS.SET_RENDERER, payload }); diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts index 542b432..7a749b6 100644 --- a/src/redux/editor/constants.ts +++ b/src/redux/editor/constants.ts @@ -23,9 +23,7 @@ export const EDITOR_ACTIONS = { CANCEL_SAVE_REQUEST: `${P}-CANCEL_SAVE_REQUEST`, RESET_SAVE_DIALOG: `${P}-RESET_SAVE_DIALOG`, - SET_SAVE_SUCCESS: `${P}-SET_SAVE_SUCCESS`, - SET_SAVE_ERROR: `${P}-SET_SAVE_ERROR`, - SET_SAVE_OVERWRITE: `${P}-SET_SAVE_OVERWRITE`, + SET_SAVE: `${P}-SET_SAVE`, SHOW_RENDERER: `${P}-SHOW_RENDERER`, HIDE_RENDERER: `${P}-HIDE_RENDERER`, diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts index a3f8910..1266457 100644 --- a/src/redux/editor/handlers.ts +++ b/src/redux/editor/handlers.ts @@ -68,41 +68,12 @@ const sendSaveRequest = (state): IEditorState => ({ save_processing: true, }); -const setSaveError = ( - state, - { save_error }: ReturnType -): IEditorState => ({ +const setSave = (state, { save }: ReturnType): IEditorState => ({ ...state, - save_error, - save_finished: false, - save_processing: false, -}); - -const setSaveLoading = ( - state, - { save_loading }: ReturnType -): IEditorState => ({ - ...state, - save_loading, -}); - -const setSaveOverwrite = (state): IEditorState => ({ - ...state, - save_overwriting: true, - save_finished: false, - save_processing: false, - save_error: TIPS.SAVE_OVERWRITE, -}); - -const setSaveSuccess = ( - state, - { save_error }: ReturnType -): IEditorState => ({ - ...state, - save_overwriting: false, - save_finished: true, - save_processing: false, - save_error, + save: { + ...state.save, + ...save, + }, }); const resetSaveDialog = (state): IEditorState => ({ @@ -194,10 +165,8 @@ export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_ROUTER_POINTS]: setRouterPoints, [EDITOR_ACTIONS.SET_ACTIVE_STICKER]: setActiveSticker, - [EDITOR_ACTIONS.SET_SAVE_ERROR]: setSaveError, - [EDITOR_ACTIONS.SET_SAVE_LOADING]: setSaveLoading, - [EDITOR_ACTIONS.SET_SAVE_OVERWRITE]: setSaveOverwrite, - [EDITOR_ACTIONS.SET_SAVE_SUCCESS]: setSaveSuccess, + [EDITOR_ACTIONS.SET_SAVE]: setSave, + [EDITOR_ACTIONS.SEND_SAVE_REQUEST]: sendSaveRequest, [EDITOR_ACTIONS.RESET_SAVE_DIALOG]: resetSaveDialog, diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 1024174..e188c53 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -29,12 +29,6 @@ export interface IEditorState { is_published: boolean; is_routing: boolean; - save_error: string; - save_finished: boolean; - save_overwriting: boolean; - save_processing: boolean; - save_loading: boolean; - features: { routing: boolean; }; @@ -47,6 +41,14 @@ export interface IEditorState { info: string; progress: number; }; + + save: { + error: string; + finished: boolean; + overwriting: boolean; + processing: boolean; + loading: boolean; + }; } const EDITOR_INITIAL_STATE = { @@ -72,12 +74,6 @@ const EDITOR_INITIAL_STATE = { is_empty: true, is_routing: false, - save_error: '', - save_finished: false, - save_overwriting: false, - save_processing: false, - save_loading: false, - features: { routing: false, }, @@ -90,6 +86,14 @@ const EDITOR_INITIAL_STATE = { info: '', progress: 0, }, + + save: { + error: null, + finished: false, + overwriting: false, + processing: false, + loading: false, + }, }; export const editor = createReducer(EDITOR_INITIAL_STATE, EDITOR_HANDLERS); diff --git a/src/redux/editor/selectors.ts b/src/redux/editor/selectors.ts index 144a089..bd87246 100644 --- a/src/redux/editor/selectors.ts +++ b/src/redux/editor/selectors.ts @@ -1,6 +1,7 @@ import { IState } from "../store"; export const selectEditor = (state: IState) => state.editor; +export const selectEditorSave = (state: IState) => state.editor.save; export const selectEditorEditing = (state: IState) => state.editor.editing; export const selectEditorMode = (state: IState) => state.editor.mode; export const selectEditorActiveSticker = (state: IState) => state.editor.activeSticker; diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 37950ee..816dca5 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -25,11 +25,8 @@ import { editorSetEditing, editorSetReady, editorSetActiveSticker, - editorSetSaveError, - editorSetSaveLoading, editorSendSaveRequest, - editorSetSaveSuccess, - editorSetSaveOverwrite, + editorSetSave, editorClearAll, } from '~/redux/editor/actions'; import { pushLoaderState, getUrlData, pushPath, replacePath } from '~/utils/history'; @@ -51,7 +48,7 @@ function* onMapClick({ latlng }: ReturnType) { switch (mode) { case MODES.STICKERS: - yield put(mapAddSticker({ latlng, set, sticker, text: '', angle: 0 })); + yield put(mapAddSticker({ latlng, set, sticker, text: '', angle: 2.11 })); yield put(editorSetMode(MODES.NONE)); break; @@ -119,7 +116,7 @@ export function* loadMapFromPath() { if (!map) { yield call(startEmptyEditorSaga); - return + return; } yield put(editorSetEditing(mode && mode === 'edit')); @@ -228,14 +225,16 @@ function* sendSaveRequestSaga({ const { route, stickers, provider }: ReturnType = yield select(selectMap); if (!route.length && !stickers.length) { - return yield put(editorSetSaveError(TIPS.SAVE_EMPTY)); + return yield put( + editorSetSave({ error: TIPS.SAVE_EMPTY, loading: false, overwriting: false, finished: false }) + ); } const { logo }: ReturnType = yield select(selectMap); const { distance }: ReturnType = yield select(selectEditor); const { token }: ReturnType = yield select(selectUserUser); - yield put(editorSetSaveLoading(true)); + yield put(editorSetSave({ loading: true })); const { result, @@ -263,58 +262,80 @@ function* sendSaveRequestSaga({ cancel: take(EDITOR_ACTIONS.RESET_SAVE_DIALOG), }); - yield put(editorSetSaveLoading(false)); + yield put(editorSetSave({ loading: false })); if (cancel) return yield put(editorSetMode(MODES.NONE)); - if (result && result.data.code === 'already_exist') return yield put(editorSetSaveOverwrite()); + if (result && result.data.code === 'already_exist') + return yield put(editorSetSave({ overwriting: true })); if (result && result.data.code === 'conflict') - return yield put(editorSetSaveError(TIPS.SAVE_EXISTS)); + return yield put( + editorSetSave({ + error: TIPS.SAVE_EXISTS, + loading: false, + overwriting: false, + finished: false, + }) + ); if (timeout || !result || !result.data.route || !result.data.route.address) - return yield put(editorSetSaveError(TIPS.SAVE_TIMED_OUT)); + return yield put( + editorSetSave({ + error: TIPS.SAVE_TIMED_OUT, + loading: false, + overwriting: false, + finished: false, + }) + ); - return yield put( - editorSetSaveSuccess({ + yield put( + mapSet({ address: result.data.route.address, title: result.data.route.title, is_public: result.data.route.is_public, description: result.data.route.description, - - save_error: TIPS.SAVE_SUCCESS, }) ); -} - -function* setSaveSuccessSaga({ - address, - title, - is_public, - description, -}: ReturnType) { - const { id }: ReturnType = yield select(selectUserUser); - const { dialog_active }: ReturnType = yield select(selectEditor); - - replacePath(`/${address}/edit`); yield put( - mapSet({ - title, - address, - is_public, - description, - owner: { id }, + editorSetSave({ + error: TIPS.SAVE_SUCCESS, + loading: false, + overwriting: false, + finished: true, }) ); - - yield put(editorSetChanged(false)); - - if (dialog_active) { - yield call(searchSetSagaWorker); - } - - return; } +// function* setSaveSuccessSaga({ +// address, +// title, +// is_public, +// description, +// }: ReturnType) { +// const { id }: ReturnType = yield select(selectUserUser); +// const { dialog_active }: ReturnType = yield select(selectEditor); + +// replacePath(`/${address}/edit`); + +// yield put( +// mapSet({ +// title, +// address, +// is_public, +// description, +// owner: { id }, +// }) +// ); + +// yield put(editorSetChanged(false)); + +// if (dialog_active) { +// yield call(searchSetSagaWorker); +// } + +// return; +// } + export function* mapSaga() { // TODO: setChanged on set route, logo, provider, stickers yield takeEvery(EDITOR_ACTIONS.START_EDITING, startEditingSaga); @@ -322,7 +343,7 @@ export function* mapSaga() { yield takeEvery(MAP_ACTIONS.MAP_CLICKED, onMapClick); yield takeEvery(MAP_ACTIONS.SET_TITLE, setTitleSaga); yield takeLatest(EDITOR_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); - yield takeLatest(EDITOR_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); + // yield takeLatest(EDITOR_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); yield takeEvery( [ diff --git a/src/styles/panel.less b/src/styles/panel.less index af1b513..16ca071 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -247,6 +247,11 @@ background: #222222; border-radius: @panel_radius; + &.bottom.right { + width: 100%; + max-width: 500px; + } + &.top { bottom: auto; top: 52px; From 0314edd5509ebd38a1d4bf48b7be6486c007e80a Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 10 Jan 2020 14:45:17 +0700 Subject: [PATCH 132/320] fixed sticker text issues --- src/containers/map/Sticker/index.tsx | 21 +++++++++++++-------- src/containers/map/Stickers/index.tsx | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index b9d74e9..914e374 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { marker, Marker } from 'leaflet'; import { IStickerDump } from '~/redux/map/types'; import { STICKERS } from '~/constants/stickers'; @@ -6,7 +6,7 @@ import { StickerDesc } from '~/components/StickerDesc'; import classNames from 'classnames'; import { DomMarker } from '~/utils/DomMarker'; import { createPortal } from 'react-dom'; -import { MapContainer } from '~/constants/map'; +import { MapContainer, MainMap } from '~/constants/map'; interface IProps { map: MapContainer; @@ -154,22 +154,27 @@ const Sticker: React.FC = ({ // Initial leaflet marker creation, when element (dom element div) is ready React.useEffect(() => { - if (!map) return; - const icon = new DomMarker({ element, className: 'sticker-container', }); - const item = marker(sticker.latlng, { icon, draggable: true }).addTo(map); - + const item = marker(sticker.latlng, { icon, draggable: true }) + setLayer(item); return () => { - item.removeFrom(map); item.remove(); }; - }, [element, map, sticker]); + }, [element]); + + useEffect(() => { + if (!layer) return; + + layer.addTo(MainMap); + + return () => layer.removeFrom(MainMap) + }, [layer]); React.useEffect(() => { element.className = is_editing ? 'sticker-container' : 'sticker-container inactive'; diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index ee40980..6756bec 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -30,7 +30,7 @@ const Stickers: React.FC = React.memo( Date: Mon, 13 Jan 2020 17:43:38 +0700 Subject: [PATCH 133/320] added map fitting --- src/components/dialogs/CancelDialog.tsx | 6 ++-- src/components/dialogs/RouterDialog.tsx | 5 ++- src/components/dialogs/SaveDialog.tsx | 12 +++++--- src/components/dialogs/TrashDialog.tsx | 20 ++++++------ src/constants/map.ts | 21 ++++++++++++- src/containers/map/Route/index.tsx | 4 +-- src/containers/map/Sticker/index.tsx | 41 +++++++++++++------------ src/redux/editor/actions.ts | 6 +++- src/redux/editor/constants.ts | 2 +- src/redux/editor/index.ts | 2 +- src/redux/editor/sagas.ts | 12 ++++++++ src/redux/map/sagas.ts | 40 ++++++------------------ 12 files changed, 93 insertions(+), 78 deletions(-) diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index 153645d..0684caf 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -10,7 +10,7 @@ const mapDispatchToProps = { editorStopEditing, }; -type Props = ReturnType & typeof mapDispatchToProps & { width?: number }; +type Props = ReturnType & typeof mapDispatchToProps & { }; export class CancelDialog extends React.Component { cancel = () => { @@ -22,10 +22,8 @@ export class CancelDialog extends React.Component { }; render() { - const { width } = this.props; - return ( -
      +
      diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index 0718ab5..467f91a 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -89,7 +89,7 @@ const mapDispatchToProps = { editorRouterSubmit: EDITOR_ACTIONS.editorRouterSubmit, }; -type Props = ReturnType & typeof mapDispatchToProps & { width?: number }; +type Props = ReturnType & typeof mapDispatchToProps & { }; const RouterDialogUnconnected: FC = ({ editor: { @@ -98,9 +98,8 @@ const RouterDialogUnconnected: FC = ({ }, editorRouterCancel, editorRouterSubmit, - width, }) => ( -
      +
      {!waypoints.length && noPoints({ editorRouterCancel })} diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index 3262905..08a54ad 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -2,7 +2,6 @@ import React from 'react'; import { copyToClipboard, getUrlData } from '~/utils/history'; import { toTranslit, parseDesc } from '~/utils/format'; import { TIPS } from '~/constants/tips'; -import { MODES } from '~/constants/modes'; import { Icon } from '~/components/panels/Icon'; import { Switch } from '~/components/Switch'; @@ -12,6 +11,7 @@ import { connect } from 'react-redux'; import { selectMap } from '~/redux/map/selectors'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import { selectEditorSave } from '~/redux/editor/selectors'; +import { MODES } from '~/constants/modes'; const mapStateToProps = state => ({ map: selectMap(state), @@ -19,11 +19,12 @@ const mapStateToProps = state => ({ }); const mapDispatchToProps = { + editorCancelSave: EDITOR_ACTIONS.editorCancelSave, editorSetMode: EDITOR_ACTIONS.editorSetMode, editorSendSaveRequest: EDITOR_ACTIONS.editorSendSaveRequest, }; -type Props = ReturnType & typeof mapDispatchToProps & { width: number }; +type Props = ReturnType & typeof mapDispatchToProps & { }; interface State { address: string; @@ -91,16 +92,19 @@ class SaveDialogUnconnected extends React.Component { this.setState({ is_public: !this.state.is_public }); }; + componentWillUnmount = () => { + this.props.editorCancelSave() + }; + render() { const { title, is_public, description } = this.state; const { save: { error, finished, overwriting, loading }, - width, } = this.props; const { host, protocol } = getUrlData(); return ( -
      +
      diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index 4779091..e203b32 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -25,21 +25,19 @@ const TrashDialogUnconnected: FC = ({
      -
      Удалить:
      +
      Все изменения будут удалены!
      -
      -
      - Маршрут -
      -
      - Стикеры -
      -
      - ВСЕ -
      +
      + Маршрут +
      +
      + Стикеры +
      +
      + ВСЕ
      diff --git a/src/constants/map.ts b/src/constants/map.ts index 241fc28..de1e028 100644 --- a/src/constants/map.ts +++ b/src/constants/map.ts @@ -1,6 +1,12 @@ -import { Map } from 'leaflet'; +import { Map, LayerGroup, Layer, FeatureGroup } from 'leaflet'; export class MapContainer extends Map { + constructor(props) { + super(props); + this.routeLayer.addTo(this); + this.stickerLayer.addTo(this); + } + disableClicks = () => { this.clickable = false; }; @@ -9,10 +15,23 @@ export class MapContainer extends Map { this.clickable = true; }; + getVisibleBounds = () => { + const layers = [this.routeLayer, this.stickerLayer]; + for (let i = 0; i < layers.length; i += 1) { + const bounds = layers[i].getBounds(); + if (Object.keys(bounds).length == 2) return bounds; + } + }; + public clickable = true; + + public routeLayer = new FeatureGroup(); + public stickerLayer = new FeatureGroup(); } export const MainMap = new MapContainer(document.getElementById('canvas')).setView( [55.0153275, 82.9071235], 13 ); + +console.log('MAP', MainMap); diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index c3a4fcc..2fb157e 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -48,7 +48,7 @@ const RouteUnconnected: FC = memo( maxMarkers: isMobile() ? 50 : 150, smoothFactor: 3, }) - .addTo(MainMap) + .addTo(MainMap.routeLayer) .on('distancechange', onDistanceChange) .on('vertexdragstart', MainMap.disableClicks) .on('vertexdragend', MainMap.enableClicks) @@ -60,7 +60,7 @@ const RouteUnconnected: FC = memo( setLayer(interactive); return () => { - interactive.removeFrom(MainMap); + MainMap.routeLayer.removeLayer(interactive); }; }, [MainMap, onDistanceChange]); diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index 914e374..77a98db 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -54,23 +54,26 @@ const Sticker: React.FC = ({ setDragging(true); }, [setDragging, layer, map]); - const onDragStop = React.useCallback(event => { - event.stopPropagation(); - event.preventDefault(); + const onDragStop = React.useCallback( + event => { + event.stopPropagation(); + event.preventDefault(); - if (!layer) return; + if (!layer) return; - setDragging(false); - onChange({ - ...sticker, - angle, - }); + setDragging(false); + onChange({ + ...sticker, + angle, + }); - layer.dragging.enable(); - map.dragging.enable(); - - setTimeout(map.enableClicks, 100); - }, [setDragging, layer, map, sticker, angle]); + layer.dragging.enable(); + map.dragging.enable(); + + setTimeout(map.enableClicks, 100); + }, + [setDragging, layer, map, sticker, angle] + ); const onMoveStarted = React.useCallback(() => { map.disableClicks(); @@ -159,8 +162,8 @@ const Sticker: React.FC = ({ className: 'sticker-container', }); - const item = marker(sticker.latlng, { icon, draggable: true }) - + const item = marker(sticker.latlng, { icon, draggable: true }); + setLayer(item); return () => { @@ -170,10 +173,10 @@ const Sticker: React.FC = ({ useEffect(() => { if (!layer) return; - - layer.addTo(MainMap); - return () => layer.removeFrom(MainMap) + layer.addTo(MainMap.stickerLayer); + + return () => MainMap.stickerLayer.removeLayer(layer); }, [layer]); React.useEffect(() => { diff --git a/src/redux/editor/actions.ts b/src/redux/editor/actions.ts index 195f487..b8f5b67 100644 --- a/src/redux/editor/actions.ts +++ b/src/redux/editor/actions.ts @@ -48,7 +48,11 @@ export const editorResetSaveDialog = () => ({ type: EDITOR_ACTIONS.RESET_SAVE_DI export const editorSetSave = (save: Partial) => ({ type: EDITOR_ACTIONS.SET_SAVE, save, -}) +}); + +export const editorCancelSave = () => ({ + type: EDITOR_ACTIONS.CANCEL_SAVE, +}); export const editorHideRenderer = () => ({ type: EDITOR_ACTIONS.HIDE_RENDERER }); export const editorSetRenderer = payload => ({ type: EDITOR_ACTIONS.SET_RENDERER, payload }); diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts index 7a749b6..d28a407 100644 --- a/src/redux/editor/constants.ts +++ b/src/redux/editor/constants.ts @@ -20,8 +20,8 @@ export const EDITOR_ACTIONS = { SEND_SAVE_REQUEST: `${P}-SEND_SAVE_REQUEST`, SET_SAVE_LOADING: `${P}-SET_SAVE_LOADING`, - CANCEL_SAVE_REQUEST: `${P}-CANCEL_SAVE_REQUEST`, RESET_SAVE_DIALOG: `${P}-RESET_SAVE_DIALOG`, + CANCEL_SAVE: `${P}-CANCEL_SAVE`, SET_SAVE: `${P}-SET_SAVE`, diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index e188c53..8b8a11f 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -51,7 +51,7 @@ export interface IEditorState { }; } -const EDITOR_INITIAL_STATE = { +export const EDITOR_INITIAL_STATE = { changed: false, editing: false, ready: false, diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index e934af1..7a13e07 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -14,6 +14,7 @@ import { editorSetFeature, editorLocationChanged, editorKeyPressed, + editorSetSave, } from '~/redux/editor/actions'; import { getUrlData, pushPath } from '~/utils/history'; import { MODES } from '~/constants/modes'; @@ -45,6 +46,7 @@ import { MAP_ACTIONS } from '../map/constants'; import { OsrmRouter } from '~/utils/osrm'; import path from 'ramda/es/path'; import { MainMap } from '~/constants/map'; +import { EDITOR_INITIAL_STATE } from '.'; const hideLoader = () => { document.getElementById('loader').style.opacity = String(0); @@ -181,6 +183,7 @@ function* locationChangeSaga({ location }: ReturnType) { @@ -248,6 +251,14 @@ function* routerSubmit() { yield put(editorSetMode(MODES.NONE)); } +function* cancelSave() { + yield put( + editorSetSave({ + ...EDITOR_INITIAL_STATE.save, + }) + ); +} + export function* editorSaga() { yield takeEvery(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); @@ -259,4 +270,5 @@ export function* editorSaga() { yield takeLatest(EDITOR_ACTIONS.ROUTER_CANCEL, routerCancel); yield takeLatest(MAP_ACTIONS.MAP_CLICKED, mapClick); yield takeLatest(EDITOR_ACTIONS.ROUTER_SUBMIT, routerSubmit); + yield takeLatest(EDITOR_ACTIONS.CANCEL_SAVE, cancelSave); } diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 816dca5..f91d52a 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -39,6 +39,7 @@ import { delay } from 'redux-saga'; import { setReadySaga } from '../editor/sagas'; import { selectEditor } from '../editor/selectors'; import { EDITOR_ACTIONS } from '../editor/constants'; +import { MainMap } from '~/constants/map'; function* onMapClick({ latlng }: ReturnType) { const { @@ -149,6 +150,7 @@ export function* mapInitSaga() { yield call(loadMapFromPath); yield call(setReadySaga); + MainMap.fitBounds(MainMap.getVisibleBounds(), { animate: false }); pushLoaderState(100); } @@ -234,7 +236,7 @@ function* sendSaveRequestSaga({ const { distance }: ReturnType = yield select(selectEditor); const { token }: ReturnType = yield select(selectUserUser); - yield put(editorSetSave({ loading: true })); + yield put(editorSetSave({ loading: true, overwriting: false, finished: false, error: null })); const { result, @@ -268,6 +270,7 @@ function* sendSaveRequestSaga({ if (result && result.data.code === 'already_exist') return yield put(editorSetSave({ overwriting: true })); + if (result && result.data.code === 'conflict') return yield put( editorSetSave({ @@ -277,6 +280,7 @@ function* sendSaveRequestSaga({ finished: false, }) ); + if (timeout || !result || !result.data.route || !result.data.route.address) return yield put( editorSetSave({ @@ -296,6 +300,10 @@ function* sendSaveRequestSaga({ }) ); + yield put(editorSetReady(false)); + pushPath(`/${address}/edit`); + yield put(editorSetReady(true)); + yield put( editorSetSave({ error: TIPS.SAVE_SUCCESS, @@ -306,36 +314,6 @@ function* sendSaveRequestSaga({ ); } -// function* setSaveSuccessSaga({ -// address, -// title, -// is_public, -// description, -// }: ReturnType) { -// const { id }: ReturnType = yield select(selectUserUser); -// const { dialog_active }: ReturnType = yield select(selectEditor); - -// replacePath(`/${address}/edit`); - -// yield put( -// mapSet({ -// title, -// address, -// is_public, -// description, -// owner: { id }, -// }) -// ); - -// yield put(editorSetChanged(false)); - -// if (dialog_active) { -// yield call(searchSetSagaWorker); -// } - -// return; -// } - export function* mapSaga() { // TODO: setChanged on set route, logo, provider, stickers yield takeEvery(EDITOR_ACTIONS.START_EDITING, startEditingSaga); From 0b0b8b9cc09e3054da4a3f8a47607193211a806c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 13 Jan 2020 18:00:06 +0700 Subject: [PATCH 134/320] added km marks --- src/containers/map/KmMarks/index.tsx | 37 +++++++ src/containers/map/Map/index.tsx | 2 + src/utils/marks.ts | 156 +++++++++++++++++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 src/containers/map/KmMarks/index.tsx create mode 100644 src/utils/marks.ts diff --git a/src/containers/map/KmMarks/index.tsx b/src/containers/map/KmMarks/index.tsx new file mode 100644 index 0000000..f7c5054 --- /dev/null +++ b/src/containers/map/KmMarks/index.tsx @@ -0,0 +1,37 @@ +import React, { FC, useEffect, useState } from 'react'; +import { KmMarksLayer } from '~/utils/marks'; +import { MainMap } from '~/constants/map'; +import { selectMap } from '~/redux/map/selectors'; +import pick from 'ramda/es/pick'; +import { connect } from 'react-redux'; + +const mapStateToProps = state => ({ + map: pick(['route'], selectMap(state)), +}); + +const mapDispatchToProps = {}; +type Props = ReturnType & typeof mapDispatchToProps & {}; + +const KmMarksUnconnected: FC = ({ + map: { route }, +}) => { + const [layer, setLayer] = useState(null); + + useEffect(() => { + const layer = new KmMarksLayer([]); + layer.addTo(MainMap); + setLayer(layer); + return () => MainMap.removeLayer(layer); + }, [MainMap]); + + useEffect(() => { + if (!layer) return; + + layer.setLatLngs(route); + }, [layer, route]); + return null; +}; + +const KmMarks = connect(mapStateToProps, mapDispatchToProps)(KmMarksUnconnected); + +export { KmMarks }; diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index be56cc9..faa91db 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -10,6 +10,7 @@ import { Route } from '~/containers/map/Route'; import { Router } from '~/containers/map/Router'; import { TileLayer } from '~/containers/map/TileLayer'; import { Stickers } from '~/containers/map/Stickers'; +import { KmMarks } from '~/containers/map/KmMarks'; import 'leaflet/dist/leaflet.css'; import { selectEditorEditing } from '~/redux/editor/selectors'; @@ -73,6 +74,7 @@ const MapUnconnected: React.FC = ({ +
      , document.getElementById('canvas') ); diff --git a/src/utils/marks.ts b/src/utils/marks.ts new file mode 100644 index 0000000..6ab49dc --- /dev/null +++ b/src/utils/marks.ts @@ -0,0 +1,156 @@ +import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from "leaflet"; +import { arrowClusterIcon, createArrow } from "~/utils/arrow"; +import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; +import { allwaysPositiveAngleDeg, angleBetweenPoints, distKm } from "~/utils/geom"; +import classNames from 'classnames'; + +interface KmMarksOptions { + showMiddleMarkers: boolean, + showEndMarker: boolean, + kmMarksStep: number, +} + +class KmMarksLayer extends LayerGroup { + constructor(latlngs?: LatLngLiteral[], options?: KmMarksOptions){ + super(); + + this.options = { + showMiddleMarkers: true, + showEndMarker: true, + kmMarksStep: 10, + ...(options || {}), + } as KmMarksOptions; + } + + setLatLngs = (latlngs: LatLngLiteral[]): void => { + if (!this.map) return; + this.marksLayer.clearLayers(); + this.endMarker.clearLayers(); + + this.distance = 0; + + if (latlngs.length <= 1) return; + + if (this.options.showMiddleMarkers) this.drawMiddleMarkers(latlngs); + if (this.options.showEndMarker) this.drawEndMarker(latlngs); + }; + + drawMiddleMarkers = (latlngs: LatLngLiteral[]) => { + const kmMarks = {}; + let last_km_mark = 0; + + this.distance = latlngs.reduce((dist, current, index) => { + if (index >= latlngs.length - 1) return dist; + + const next = latlngs[index + 1]; + const diff = distKm(current, next); + const sum = dist + diff; + const rounded = Math.floor(sum / this.options.kmMarksStep) * this.options.kmMarksStep; + const count = Math.floor((rounded - last_km_mark) / this.options.kmMarksStep); + + if (rounded > last_km_mark) { + const angle = angleBetweenPoints( + this.map.latLngToContainerPoint(current), + this.map.latLngToContainerPoint(next), + ); + + for (let i = 1; i <= count; i += 1) { + const step = last_km_mark + (i * this.options.kmMarksStep); + const shift = (step - dist) / diff; + + const coords = { + lat: current.lat - ((current.lat - next.lat) * shift), + lng: current.lng - ((current.lng - next.lng) * shift), + }; + + kmMarks[step] = { ...coords, angle }; + this.marksLayer.addLayer(this.createMiddleMarker(coords, angle, step)); + } + + last_km_mark = rounded; + } + + return sum; + }, 0); + + }; + + createMiddleMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => marker(latlng, { + draggable: false, + interactive: false, + icon: divIcon({ + html: ` +
      + ${distance} +
      + `, + className: 'leaflet-km-marker', + iconSize: [11, 11], + iconAnchor: [6, 6] + }) + }); + + createEndMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => marker(latlng, { + draggable: false, + interactive: false, + icon: divIcon({ + html: ` +
      + ${parseFloat(distance.toFixed(1))} +
      + `, + className: classNames('leaflet-km-marker end-marker', { right: (angle > -90 && angle < 90) }), + iconSize: [11, 11], + iconAnchor: [6, 6] + }), + zIndexOffset: -100, + }); + + drawEndMarker = (latlngs: LatLngLiteral[]): void => { + this.endMarker.clearLayers(); + + const current = latlngs[latlngs.length - 2]; + const next = latlngs[latlngs.length - 1 + ]; + + const angle = angleBetweenPoints( + this.map.latLngToContainerPoint(current), + this.map.latLngToContainerPoint(next), + ); + + this.endMarker.addLayer(this.createEndMarker(next, angle, this.distance)); + }; + + options: KmMarksOptions; + map: Map; + marksLayer: MarkerClusterGroup = new MarkerClusterGroup({ + spiderfyOnMaxZoom: false, + showCoverageOnHover: false, + zoomToBoundsOnClick: false, + animate: false, + maxClusterRadius: 120, + iconCreateFunction: arrowClusterIcon, + }); + endMarker: LayerGroup = new LayerGroup(); + distance: number = 0; +} + + +KmMarksLayer.addInitHook(function () { + this.once('add', (event) => { + if (event.target instanceof KmMarksLayer) { + this.map = event.target._map; + this.marksLayer.addTo(this.map); + this.endMarker.addTo(this.map); + } + }); + + this.once('remove', (event) => { + if (event.target instanceof KmMarksLayer) { + this.marksLayer.removeFrom(this.map); + this.endMarker.removeFrom(this.map); + } + }); +}); + +export { KmMarksLayer }; \ No newline at end of file From 2e9b332012e45aa16a305715e3fb37f50c23986a Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 13 Jan 2020 18:01:22 +0700 Subject: [PATCH 135/320] removed unused console.log --- src/constants/map.ts | 2 -- src/containers/map/KmMarks/index.tsx | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/constants/map.ts b/src/constants/map.ts index de1e028..ca1e9f7 100644 --- a/src/constants/map.ts +++ b/src/constants/map.ts @@ -33,5 +33,3 @@ export const MainMap = new MapContainer(document.getElementById('canvas')).setVi [55.0153275, 82.9071235], 13 ); - -console.log('MAP', MainMap); diff --git a/src/containers/map/KmMarks/index.tsx b/src/containers/map/KmMarks/index.tsx index f7c5054..2b06992 100644 --- a/src/containers/map/KmMarks/index.tsx +++ b/src/containers/map/KmMarks/index.tsx @@ -26,7 +26,7 @@ const KmMarksUnconnected: FC = ({ useEffect(() => { if (!layer) return; - + layer.setLatLngs(route); }, [layer, route]); return null; From 34f98fb08b9cea20955f38a4ad5a9538320925f7 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 10:40:33 +0700 Subject: [PATCH 136/320] faster distance calc --- src/_modules/InteractivePoly.ts | 24 +++---- src/_modules/KmMarks.ts | 4 +- src/constants/map.ts | 10 ++- src/redux/editor/sagas.ts | 2 +- src/redux/map/sagas.ts | 5 +- src/utils/geom.ts | 109 ++++++++++++++++++-------------- src/utils/marks.ts | 5 +- src/utils/polyline.ts | 22 +++---- 8 files changed, 101 insertions(+), 80 deletions(-) diff --git a/src/_modules/InteractivePoly.ts b/src/_modules/InteractivePoly.ts index 632d03e..2d021ab 100644 --- a/src/_modules/InteractivePoly.ts +++ b/src/_modules/InteractivePoly.ts @@ -18,7 +18,7 @@ import { LatLngLiteral } from "leaflet"; -import { distKm, distToSegment, getPolyLength, pointInArea } from "~/utils/geom"; +import { distKmHaversine, distToSegment, getPolyLength, pointInArea } from "~/utils/geom"; interface InteractivePolylineOptions extends PolylineOptions { maxMarkers?: number; @@ -271,11 +271,11 @@ export class InteractivePoly extends Polyline { const prev = this.markers[index]; const next = this.markers[index + 1]; - const initial_distance = distKm(prev.getLatLng(), next.getLatLng()); + const initial_distance = distKmHaversine(prev.getLatLng(), next.getLatLng()); const current_distance = - ((prev && distKm(prev.getLatLng(), current)) || 0) + - ((next && distKm(next.getLatLng(), current)) || 0); + ((prev && distKmHaversine(prev.getLatLng(), current)) || 0) + + ((next && distKmHaversine(next.getLatLng(), current)) || 0); this.distance += current_distance - initial_distance; @@ -377,12 +377,12 @@ export class InteractivePoly extends Polyline { index <= this.markers.length + 1 ? this.markers[index + 1] : null; const initial_distance = - ((prev && distKm(prev.getLatLng(), initial)) || 0) + - ((next && distKm(next.getLatLng(), initial)) || 0); + ((prev && distKmHaversine(prev.getLatLng(), initial)) || 0) + + ((next && distKmHaversine(next.getLatLng(), initial)) || 0); const current_distance = - ((prev && distKm(prev.getLatLng(), current)) || 0) + - ((next && distKm(next.getLatLng(), current)) || 0); + ((prev && distKmHaversine(prev.getLatLng(), current)) || 0) + + ((next && distKmHaversine(next.getLatLng(), current)) || 0); this.distance += current_distance - initial_distance; @@ -460,7 +460,7 @@ export class InteractivePoly extends Polyline { ? latlngs[latlngs.length - 1] : latlngs[0]; - this.distance += distKm(point, latlng); + this.distance += distKmHaversine(point, latlng); this.fire("distancechange", { distance: this.distance }); }; @@ -505,10 +505,10 @@ export class InteractivePoly extends Polyline { const next = index <= latlngs.length + 1 ? latlngs[index + 1] : null; const initial_distance = - ((prev && distKm(prev, current)) || 0) + - ((next && distKm(next, current)) || 0); + ((prev && distKmHaversine(prev, current)) || 0) + + ((next && distKmHaversine(next, current)) || 0); - const current_distance = (prev && next && distKm(prev, next)) || 0; + const current_distance = (prev && next && distKmHaversine(prev, next)) || 0; this.distance += current_distance - initial_distance; diff --git a/src/_modules/KmMarks.ts b/src/_modules/KmMarks.ts index 7e25910..d44aa70 100644 --- a/src/_modules/KmMarks.ts +++ b/src/_modules/KmMarks.ts @@ -1,7 +1,7 @@ import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from "leaflet"; import { arrowClusterIcon, createArrow } from "~/utils/arrow"; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { allwaysPositiveAngleDeg, angleBetweenPoints, distKm } from "~/utils/geom"; +import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from "~/utils/geom"; import classNames from 'classnames'; interface KmMarksOptions { @@ -43,7 +43,7 @@ class Component extends LayerGroup { if (index >= latlngs.length - 1) return dist; const next = latlngs[index + 1]; - const diff = distKm(current, next); + const diff = distKmHaversine(current, next); const sum = dist + diff; const rounded = Math.floor(sum / this.options.kmMarksStep) * this.options.kmMarksStep; const count = Math.floor((rounded - last_km_mark) / this.options.kmMarksStep); diff --git a/src/constants/map.ts b/src/constants/map.ts index ca1e9f7..61b47cc 100644 --- a/src/constants/map.ts +++ b/src/constants/map.ts @@ -1,4 +1,4 @@ -import { Map, LayerGroup, Layer, FeatureGroup } from 'leaflet'; +import { Map, FeatureGroup, FitBoundsOptions } from 'leaflet'; export class MapContainer extends Map { constructor(props) { @@ -21,8 +21,16 @@ export class MapContainer extends Map { const bounds = layers[i].getBounds(); if (Object.keys(bounds).length == 2) return bounds; } + return null; }; + fitVisibleBounds = (options: FitBoundsOptions) => { + const bounds = this.getVisibleBounds(); + + if (!bounds) return; + this.fitBounds(bounds, options) + } + public clickable = true; public routeLayer = new FeatureGroup(); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 7a13e07..4d58586 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -183,7 +183,7 @@ function* locationChangeSaga({ location }: ReturnType) { diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index f91d52a..65df3bd 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -29,8 +29,7 @@ import { editorSetSave, editorClearAll, } from '~/redux/editor/actions'; -import { pushLoaderState, getUrlData, pushPath, replacePath } from '~/utils/history'; -import { searchSetSagaWorker } from '~/redux/user/sagas'; +import { pushLoaderState, getUrlData, pushPath } from '~/utils/history'; import { getStoredMap, postMap } from '~/utils/api'; import { Unwrap } from '~/utils/middleware'; import { selectMap, selectMapProvider } from './selectors'; @@ -150,7 +149,7 @@ export function* mapInitSaga() { yield call(loadMapFromPath); yield call(setReadySaga); - MainMap.fitBounds(MainMap.getVisibleBounds(), { animate: false }); + MainMap.fitVisibleBounds({ animate: false }); pushLoaderState(100); } diff --git a/src/utils/geom.ts b/src/utils/geom.ts index 6517084..b3120ad 100644 --- a/src/utils/geom.ts +++ b/src/utils/geom.ts @@ -1,25 +1,26 @@ -import { LatLng, LatLngLiteral, point, Point, PointExpression } from "leaflet"; +import { LatLng, LatLngLiteral, point, Point, PointExpression } from 'leaflet'; interface ILatLng { - lat: number, - lng: number, + lat: number; + lng: number; } export const middleCoord = (l1: ILatLng, l2: ILatLng): ILatLng => ({ - lat: (l2.lat + ((l1.lat - l2.lat) / 2)), - lng: (l2.lng + ((l1.lng - l2.lng) / 2)) + lat: l2.lat + (l1.lat - l2.lat) / 2, + lng: l2.lng + (l1.lng - l2.lng) / 2, }); -export const middleCoordPx = (p1: Point, p2: Point): Point => point({ - x: (p1.x + ((p2.x - p1.x) / 2)), - y: (p1.y + ((p2.y - p1.y) / 2)) -}); +export const middleCoordPx = (p1: Point, p2: Point): Point => + point({ + x: p1.x + (p2.x - p1.x) / 2, + y: p1.y + (p2.y - p1.y) / 2, + }); -export const deg2rad = (deg: number): number => ((deg * Math.PI) / 180); -export const rad2deg = (rad: number): number => ((rad / Math.PI) * 180); +export const deg2rad = (deg: number): number => (deg * Math.PI) / 180; +export const rad2deg = (rad: number): number => (rad / Math.PI) * 180; export const findDistancePx = (p1: Point, p2: Point): number => { - return Math.sqrt(((p1.x - p2.x) ** 2) + ((p1.y - p2.y) ** 2)); + return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2); }; export const findDistance = (t1: number, n1: number, t2: number, n2: number): number => { @@ -34,40 +35,56 @@ export const findDistance = (t1: number, n1: number, t2: number, n2: number): nu const dlon = lon2 - lon1; // here's the heavy lifting - const a = (Math.sin(dlat / 2) ** 2) + - (Math.cos(lat1) * Math.cos(lat2) * (Math.sin(dlon / 2) ** 2)); + const a = Math.sin(dlat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dlon / 2) ** 2; const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); // great circle distance in radians const dk = c * 6373; // great circle distance in km - return (Math.round(dk * 1000) / 1000); + return Math.round(dk * 1000) / 1000; }; -export const distKm = (A: LatLngLiteral, B: LatLngLiteral): number => findDistance(A.lat, A.lng, B.lat, B.lng); +// probably faster one +export const findDistanceHaversine = (t1: number, n1: number, t2: number, n2: number): number => { + const R = 6371; // km + const dLat = ((t2 - t1) * Math.PI) / 180; + var dLon = ((n2 - n1) * Math.PI) / 180; + var a = + Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos((t1 * Math.PI) / 180) * + Math.cos((t2 * Math.PI) / 180) * + Math.sin(dLon / 2) * + Math.sin(dLon / 2); + var c = 2 * Math.asin(Math.sqrt(a)); + return R * c; +}; -export const getLabelDirection = (angle: number): 'left' | 'right' => ( - ((angle % Math.PI) >= -(Math.PI / 2) && (angle % Math.PI) <= (Math.PI / 2)) ? 'left' : 'right' -); +export const distKm = (A: LatLngLiteral, B: LatLngLiteral): number => + findDistance(A.lat, A.lng, B.lat, B.lng); + +export const distKmHaversine = (A: LatLngLiteral, B: LatLngLiteral): number => + findDistanceHaversine(A.lat, A.lng, B.lat, B.lng); + +export const getLabelDirection = (angle: number): 'left' | 'right' => + angle % Math.PI >= -(Math.PI / 2) && angle % Math.PI <= Math.PI / 2 ? 'left' : 'right'; export const getPolyLength = (latlngs: LatLngLiteral[]): number => { if (latlngs.length < 2) return 0; - return latlngs.reduce((dist, item, index) => ( - index < (latlngs.length - 1) - ? dist + distKm(item, latlngs[index + 1]) - : dist - ), 0) + return latlngs.reduce( + (dist, item, index) => + index < latlngs.length - 1 ? dist + distKmHaversine(item, latlngs[index + 1]) : dist, + 0 + ); }; // if C between A and B -export const pointInArea = (A: LatLng, B: LatLng, C: LatLng, radius: number = 0.001): boolean => ( +export const pointInArea = (A: LatLng, B: LatLng, C: LatLng, radius: number = 0.001): boolean => C.lng <= Math.max(A.lng + radius, B.lng + radius) && C.lat <= Math.max(A.lat + radius, B.lat + radius) && C.lat >= Math.min(A.lat - radius, B.lat - radius) && - C.lng >= Math.min(A.lng - radius, B.lng - radius) -); + C.lng >= Math.min(A.lng - radius, B.lng - radius); - -export const dist2 = (A: LatLngLiteral, B: LatLngLiteral): number => (((A.lat - B.lat) ** 2) + ((A.lng - B.lng) ** 2)); +export const dist2 = (A: LatLngLiteral, B: LatLngLiteral): number => + (A.lat - B.lat) ** 2 + (A.lng - B.lng) ** 2; const distToSegmentSquared = (A: LatLng, B: LatLng, C: LatLng): number => { const l2 = dist2(A, B); @@ -75,29 +92,27 @@ const distToSegmentSquared = (A: LatLng, B: LatLng, C: LatLng): number => { const t = Math.max( 0, - Math.min( - 1, - (((C.lat - A.lat) * (B.lat - A.lat) + (C.lng - A.lng) * (B.lng - A.lng)) / l2) - ) + Math.min(1, ((C.lat - A.lat) * (B.lat - A.lat) + (C.lng - A.lng) * (B.lng - A.lng)) / l2) ); - return dist2( - C, - { - lat: A.lat + t * (B.lat - A.lat), - lng: A.lng + t * (B.lng - A.lng) - }); + return dist2(C, { + lat: A.lat + t * (B.lat - A.lat), + lng: A.lng + t * (B.lng - A.lng), + }); }; -export const distToSegment = (A: LatLng, B: LatLng, C: LatLng): number => Math.sqrt(distToSegmentSquared(A, B, C)); +export const distToSegment = (A: LatLng, B: LatLng, C: LatLng): number => + Math.sqrt(distToSegmentSquared(A, B, C)); -export const pointBetweenPoints = (A: LatLng, B: LatLng, C: LatLng): boolean => (distToSegment(A, B, C) < 0.01); +export const pointBetweenPoints = (A: LatLng, B: LatLng, C: LatLng): boolean => + distToSegment(A, B, C) < 0.01; -export const angleBetweenPoints = (A: Point, B: Point): number => parseFloat(((Math.atan2(B.y - A.y, B.x - A.x))* 180 / Math.PI).toFixed()); -export const angleBetweenPointsRad = (A: Point, B: Point): number => ((Math.atan2(B.x - A.x, B.y - A.y))); +export const angleBetweenPoints = (A: Point, B: Point): number => + parseFloat(((Math.atan2(B.y - A.y, B.x - A.x) * 180) / Math.PI).toFixed()); +export const angleBetweenPointsRad = (A: Point, B: Point): number => + Math.atan2(B.x - A.x, B.y - A.y); -export const allwaysPositiveAngleDeg = (angle: number): number => ( - (angle >= -90 && angle <= 90) ? angle : (180 + angle) -); +export const allwaysPositiveAngleDeg = (angle: number): number => + angle >= -90 && angle <= 90 ? angle : 180 + angle; -export const nearestInt = (value: number, parts: number): number => (value - (value % parts)); +export const nearestInt = (value: number, parts: number): number => value - (value % parts); diff --git a/src/utils/marks.ts b/src/utils/marks.ts index 6ab49dc..bd6b147 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -1,7 +1,7 @@ import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from "leaflet"; import { arrowClusterIcon, createArrow } from "~/utils/arrow"; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { allwaysPositiveAngleDeg, angleBetweenPoints, distKm } from "~/utils/geom"; +import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from "~/utils/geom"; import classNames from 'classnames'; interface KmMarksOptions { @@ -43,7 +43,7 @@ class KmMarksLayer extends LayerGroup { if (index >= latlngs.length - 1) return dist; const next = latlngs[index + 1]; - const diff = distKm(current, next); + const diff = distKmHaversine(current, next); const sum = dist + diff; const rounded = Math.floor(sum / this.options.kmMarksStep) * this.options.kmMarksStep; const count = Math.floor((rounded - last_km_mark) / this.options.kmMarksStep); @@ -72,7 +72,6 @@ class KmMarksLayer extends LayerGroup { return sum; }, 0); - }; createMiddleMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => marker(latlng, { diff --git a/src/utils/polyline.ts b/src/utils/polyline.ts index 7c8c23c..f209dd2 100644 --- a/src/utils/polyline.ts +++ b/src/utils/polyline.ts @@ -18,7 +18,7 @@ import { LatLngLiteral, } from 'leaflet'; -import { distKm, distToSegment, getPolyLength, pointInArea } from '~/utils/geom'; +import { distKmHaversine, distToSegment, getPolyLength, pointInArea } from '~/utils/geom'; interface InteractivePolylineOptions extends PolylineOptions { maxMarkers?: number; @@ -268,11 +268,11 @@ export class InteractivePoly extends Polyline { const prev = this.markers[index]; const next = this.markers[index + 1]; - const initial_distance = distKm(prev.getLatLng(), next.getLatLng()); + const initial_distance = distKmHaversine(prev.getLatLng(), next.getLatLng()); const current_distance = - ((prev && distKm(prev.getLatLng(), current)) || 0) + - ((next && distKm(next.getLatLng(), current)) || 0); + ((prev && distKmHaversine(prev.getLatLng(), current)) || 0) + + ((next && distKmHaversine(next.getLatLng(), current)) || 0); this.distance += current_distance - initial_distance; @@ -369,12 +369,12 @@ export class InteractivePoly extends Polyline { const next = index <= this.markers.length + 1 ? this.markers[index + 1] : null; const initial_distance = - ((prev && distKm(prev.getLatLng(), initial)) || 0) + - ((next && distKm(next.getLatLng(), initial)) || 0); + ((prev && distKmHaversine(prev.getLatLng(), initial)) || 0) + + ((next && distKmHaversine(next.getLatLng(), initial)) || 0); const current_distance = - ((prev && distKm(prev.getLatLng(), current)) || 0) + - ((next && distKm(next.getLatLng(), current)) || 0); + ((prev && distKmHaversine(prev.getLatLng(), current)) || 0) + + ((next && distKmHaversine(next.getLatLng(), current)) || 0); this.distance += current_distance - initial_distance; @@ -448,7 +448,7 @@ export class InteractivePoly extends Polyline { const point = this.drawing_direction === 'forward' ? latlngs[latlngs.length - 1] : latlngs[0]; - this.distance += distKm(point, latlng); + this.distance += distKmHaversine(point, latlng); this.fire('distancechange', { distance: this.distance }); }; @@ -493,9 +493,9 @@ export class InteractivePoly extends Polyline { const next = index <= latlngs.length + 1 ? latlngs[index + 1] : null; const initial_distance = - ((prev && distKm(prev, current)) || 0) + ((next && distKm(next, current)) || 0); + ((prev && distKmHaversine(prev, current)) || 0) + ((next && distKmHaversine(next, current)) || 0); - const current_distance = (prev && next && distKm(prev, next)) || 0; + const current_distance = (prev && next && distKmHaversine(prev, next)) || 0; this.distance += current_distance - initial_distance; From 1a00b98ba3ae22cf5b6c94592e41a729dc7cbc17 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 10:47:25 +0700 Subject: [PATCH 137/320] setting changed on actual map change --- src/containers/map/Map/index.tsx | 9 ++++++--- src/redux/editor/sagas.ts | 7 ++----- src/redux/map/sagas.ts | 9 +++++++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index faa91db..f775db1 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -13,13 +13,15 @@ import { Stickers } from '~/containers/map/Stickers'; import { KmMarks } from '~/containers/map/KmMarks'; import 'leaflet/dist/leaflet.css'; -import { selectEditorEditing } from '~/redux/editor/selectors'; +import { selectEditorEditing, selectEditorMode } from '~/redux/editor/selectors'; +import { MODES } from '~/constants/modes'; const mapStateToProps = state => ({ provider: selectMapProvider(state), route: selectMapRoute(state), stickers: selectMapStickers(state), editing: selectEditorEditing(state), + mode: selectEditorMode(state), }); const mapDispatchToProps = { @@ -37,6 +39,7 @@ const MapUnconnected: React.FC = ({ provider, stickers, editing, + mode, mapClicked, mapSetSticker, @@ -44,11 +47,11 @@ const MapUnconnected: React.FC = ({ }) => { const onClick = React.useCallback( event => { - if (!MainMap.clickable) return; + if (!MainMap.clickable || mode === MODES.NONE) return; mapClicked(event.latlng); }, - [mapClicked] + [mapClicked, mode] ); React.useEffect(() => { diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 4d58586..7023438 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -5,7 +5,6 @@ import { simplify } from '~/utils/simplify'; import { editorHideRenderer, editorSetChanged, - editorSetEditing, editorSetMode, editorSetReady, editorSetRenderer, @@ -40,7 +39,7 @@ import { import { selectMap, selectMapRoute } from '../map/selectors'; import { selectUser } from '../user/selectors'; import { LOGOS } from '~/constants/logos'; -import { loadMapSaga, startEmptyEditorSaga, loadMapFromPath } from '../map/sagas'; +import { loadMapFromPath } from '../map/sagas'; import { mapClicked, mapSetRoute } from '../map/actions'; import { MAP_ACTIONS } from '../map/constants'; import { OsrmRouter } from '~/utils/osrm'; @@ -56,12 +55,10 @@ const hideLoader = () => { }; function* stopEditingSaga() { - const { changed, editing, mode }: ReturnType = yield select(selectEditor); + const { changed, mode }: ReturnType = yield select(selectEditor); const { address_origin }: ReturnType = yield select(selectMap); const { path } = getUrlData(); - // if (!editing) return; - if (changed && mode !== MODES.CONFIRM_CANCEL) { yield put(editorSetMode(MODES.CONFIRM_CANCEL)); return; diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 65df3bd..849fb5e 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -313,7 +313,16 @@ function* sendSaveRequestSaga({ ); } +function* setChanged() { + const { changed } = yield select(selectEditor); + if (changed) return; + + yield put(editorSetChanged(true)); +} + export function* mapSaga() { + yield takeEvery([MAP_ACTIONS.SET_ROUTE, MAP_ACTIONS.SET_STICKER], setChanged); + // TODO: setChanged on set route, logo, provider, stickers yield takeEvery(EDITOR_ACTIONS.START_EDITING, startEditingSaga); yield takeEvery(EDITOR_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); From 56fd8ec4cd0346faccf704d5f1feb1d6e1b0495e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:08:26 +0700 Subject: [PATCH 138/320] fixed cancel dialog --- src/components/dialogs/CancelDialog.tsx | 5 ++++- src/redux/editor/sagas.ts | 4 ++-- src/styles/map.less | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index 0684caf..463f551 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -3,6 +3,7 @@ import React from 'react'; import { MODES } from '~/constants/modes'; import { Icon } from '~/components/panels/Icon'; import { editorSetMode, editorStopEditing } from '~/redux/editor/actions'; +import { connect } from 'react-redux'; const mapStateToProps = () => ({}); const mapDispatchToProps = { @@ -12,7 +13,7 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & { }; -export class CancelDialog extends React.Component { +class CancelDialogUnconnected extends React.Component { cancel = () => { this.props.editorStopEditing(); }; @@ -46,3 +47,5 @@ export class CancelDialog extends React.Component { ); } } + +export const CancelDialog = connect(mapStateToProps, mapDispatchToProps)(CancelDialogUnconnected) \ No newline at end of file diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 7023438..ca4919b 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -56,7 +56,6 @@ const hideLoader = () => { function* stopEditingSaga() { const { changed, mode }: ReturnType = yield select(selectEditor); - const { address_origin }: ReturnType = yield select(selectMap); const { path } = getUrlData(); if (changed && mode !== MODES.CONFIRM_CANCEL) { @@ -66,8 +65,9 @@ function* stopEditingSaga() { yield put(editorSetMode(MODES.NONE)); yield put(editorSetChanged(false)); + yield put(editorSetReady(true)); - yield pushPath(`/${address_origin || path}/`); + yield pushPath(`/${path}/`); } function* checkOSRMServiceSaga() { diff --git a/src/styles/map.less b/src/styles/map.less index 17fffb2..8ee85fc 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -292,4 +292,8 @@ width: 100%; height: 100%; } +} + +.leaflet-pane { + user-select: none; } \ No newline at end of file From 0710ecdf013f15adf6224b600e55e0eb6445760b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:15:46 +0700 Subject: [PATCH 139/320] faster sticker rotation and angle update fix --- src/containers/map/Sticker/index.tsx | 48 ++++++++++++++++++---------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index 77a98db..10ac97b 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import React, { useEffect, useCallback, useRef } from 'react'; import { marker, Marker } from 'leaflet'; import { IStickerDump } from '~/redux/map/types'; import { STICKERS } from '~/constants/stickers'; @@ -37,7 +37,7 @@ const Sticker: React.FC = ({ }) => { const [layer, setLayer] = React.useState(null); const [dragging, setDragging] = React.useState(false); - const [angle, setAngle] = React.useState(sticker.angle); + let angle = useRef(sticker.angle); const element = React.useMemo(() => document.createElement('div'), []); const stickerArrow = React.useRef(null); @@ -46,6 +46,18 @@ const Sticker: React.FC = ({ const onChange = React.useCallback(state => mapSetSticker(index, state), [mapSetSticker, index]); const onDelete = React.useCallback(state => mapDropSticker(index), [mapSetSticker, index]); + const updateAngle = useCallback(ang => { + if (!stickerImage.current || !stickerArrow.current) return; + + const x = Math.cos(ang + Math.PI) * 56 - 30; + const y = Math.sin(ang + Math.PI) * 56 - 30; + + stickerImage.current.style.left = String(6 + x); + stickerImage.current.style.top = String(6 + y); + + stickerArrow.current.style.transform = `rotate(${ang + Math.PI}rad)`; + }, [stickerArrow, stickerImage, angle]); + const onDragStart = React.useCallback(() => { layer.dragging.disable(); map.dragging.disable(); @@ -64,7 +76,7 @@ const Sticker: React.FC = ({ setDragging(false); onChange({ ...sticker, - angle, + angle: angle.current, }); layer.dragging.enable(); @@ -99,10 +111,10 @@ const Sticker: React.FC = ({ const { x, y } = element.getBoundingClientRect() as DOMRect; const { pageX, pageY } = getX(event); - - setAngle(parseFloat(Math.atan2(y - pageY, x - pageX).toFixed(2))); + angle.current = parseFloat(Math.atan2(y - pageY, x - pageX).toFixed(2)); + updateAngle(angle.current); }, - [element] + [element, updateAngle, angle] ); const onTextChange = React.useCallback( @@ -113,21 +125,25 @@ const Sticker: React.FC = ({ }), [sticker, onChange] ); + + const direction = React.useMemo(() => getLabelDirection(sticker.angle), [sticker.angle]); - const direction = React.useMemo(() => getLabelDirection(angle), [angle]); - + useEffect(() => { + updateAngle(sticker.angle); + angle.current = sticker.angle; + }, [sticker.angle]) // Updates html element accroding to current angle - React.useEffect(() => { - if (!stickerImage.current || !stickerArrow.current) return; + // React.useEffect(() => { + // if (!stickerImage.current || !stickerArrow.current) return; - const x = Math.cos(angle + Math.PI) * 56 - 30; - const y = Math.sin(angle + Math.PI) * 56 - 30; + // const x = Math.cos(angle + Math.PI) * 56 - 30; + // const y = Math.sin(angle + Math.PI) * 56 - 30; - stickerImage.current.style.left = String(6 + x); - stickerImage.current.style.top = String(6 + y); + // stickerImage.current.style.left = String(6 + x); + // stickerImage.current.style.top = String(6 + y); - stickerArrow.current.style.transform = `rotate(${angle + Math.PI}rad)`; - }, [stickerArrow, stickerImage, angle]); + // stickerArrow.current.style.transform = `rotate(${angle + Math.PI}rad)`; + // }, [stickerArrow, stickerImage, angle]); // Attaches onMoveFinished event to item React.useEffect(() => { From bf4ecc68c80c006c56f055984e731a9c84f8dc8c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:26:12 +0700 Subject: [PATCH 140/320] fixed insecure route list on user login --- src/redux/user/actions.ts | 79 +------------------------------------ src/redux/user/constants.ts | 1 + src/redux/user/sagas.ts | 51 ++++++++---------------- 3 files changed, 18 insertions(+), 113 deletions(-) diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index e8eab3b..81f970f 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,82 +1,13 @@ import { USER_ACTIONS } from '~/redux/user/constants'; import { IUser } from "~/constants/auth"; -// import { IRootState } from "~/redux/user"; -// import { IRoute } from '~/redux/map/types'; export const setUser = (user: IUser) => ({ type: USER_ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: USER_ACTIONS.USER_LOGOUT }); +export const userLogin = () => ({ type: USER_ACTIONS.USER_LOGIN }); -// export const setEditing = (editing: IRootState['editing']) => ({ type: USER_ACTIONS.SET_EDITING, editing }); -// export const setMode = (mode: IRootState['mode']) => ({ type: USER_ACTIONS.SET_MODE, mode }); -// export const setDistance = (distance: IRootState['distance']) => ({ type: USER_ACTIONS.SET_DISTANCE, distance }); -// export const setChanged = (changed: IRootState['changed']) => ({ type: USER_ACTIONS.SET_CHANGED, changed }); -// export const setRouterPoints = routerPoints => ({ type: USER_ACTIONS.SET_ROUTER_POINTS, routerPoints }); -// export const setActiveSticker = activeSticker => ({ type: USER_ACTIONS.SET_ACTIVE_STICKER, activeSticker }); -// export const setLogo = logo => ({ type: USER_ACTIONS.SET_LOGO, logo }); -// export const setTitle = title => ({ type: USER_ACTIONS.SET_TITLE, title }); -// export const setDescription = description => ({ type: USER_ACTIONS.SET_DESCRIPTION, description }); -// export const setAddress = address => ({ type: USER_ACTIONS.SET_ADDRESS, address }); -// export const setAddressOrigin = address_origin => ({ type: USER_ACTIONS.SET_ADDRESS_ORIGIN, address_origin }); -// export const setPublic = is_public => ({ type: USER_ACTIONS.SET_PUBLIC, is_public }); export const setStarred = is_published => ({ type: USER_ACTIONS.SET_STARRED, is_published }); -// export const setSpeed = speed => ({ type: USER_ACTIONS.SET_SPEED, speed }); - -// export const startEditing = () => ({ type: USER_ACTIONS.START_EDITING }); -// export const stopEditing = () => ({ type: USER_ACTIONS.STOP_EDITING }); - -// export const routerCancel = () => ({ type: USER_ACTIONS.ROUTER_CANCEL }); -// export const routerSubmit = () => ({ type: USER_ACTIONS.ROUTER_SUBMIT }); - -// export const clearPoly = () => ({ type: USER_ACTIONS.CLEAR_POLY }); -// export const clearStickers = () => ({ type: USER_ACTIONS.CLEAR_STICKERS }); -// export const clearAll = () => ({ type: USER_ACTIONS.CLEAR_ALL }); -// export const clearCancel = () => ({ type: USER_ACTIONS.CLEAR_CANCEL }); - -// export const sendSaveRequest = (payload: { -// title: IRoute['title'], -// address: IRoute['address'], -// is_public: IRoute['is_public'], -// description: IRoute['description'], -// force: boolean, -// }) => ({ -// type: USER_ACTIONS.SEND_SAVE_REQUEST, -// ...payload, -// }); - -// export const resetSaveDialog = () => ({ type: USER_ACTIONS.RESET_SAVE_DIALOG }); - -// export const setSaveLoading = (save_loading: IRootState['save_loading']) => ({ type: USER_ACTIONS.SET_SAVE_LOADING, save_loading }); - -// export const setSaveSuccess = (payload: { -// address: IRoute['address'], -// title: IRoute['address'], -// is_public: IRoute['is_public'], -// description: IRoute['description'], - -// save_error: string, -// }) => ({ type: USER_ACTIONS.SET_SAVE_SUCCESS, ...payload }); - -// export const setSaveError = (save_error: IRootState['save_error']) => ({ type: USER_ACTIONS.SET_SAVE_ERROR, save_error }); -// export const setSaveOverwrite = () => ({ type: USER_ACTIONS.SET_SAVE_OVERWRITE }); - -// export const hideRenderer = () => ({ type: USER_ACTIONS.HIDE_RENDERER }); -// export const setRenderer = payload => ({ type: USER_ACTIONS.SET_RENDERER, payload }); -// export const takeAShot = () => ({ type: USER_ACTIONS.TAKE_A_SHOT }); -// export const cropAShot = payload => ({ type: USER_ACTIONS.CROP_A_SHOT, ...payload }); - -// export const setProvider = provider => ({ type: USER_ACTIONS.SET_PROVIDER, provider }); -// export const changeProvider = provider => ({ type: USER_ACTIONS.CHANGE_PROVIDER, provider }); - -// export const setDialog = dialog => ({ type: USER_ACTIONS.SET_DIALOG, dialog }); -// export const setDialogActive = dialog_active => ({ type: USER_ACTIONS.SET_DIALOG_ACTIVE, dialog_active }); export const openMapDialog = tab => ({ type: USER_ACTIONS.OPEN_MAP_DIALOG, tab }); - -// export const locationChanged = location => ({ type: USER_ACTIONS.LOCATION_CHANGED, location }); -// export const setReady = ready => ({ type: USER_ACTIONS.SET_READY, ready }); - export const gotVkUser = user => ({ type: USER_ACTIONS.GOT_VK_USER, user }); -// export const keyPressed = ({ key, target: { tagName } }) => ({ type: USER_ACTIONS.KEY_PRESSED, key, target: tagName }); - export const searchSetTitle = title => ({ type: USER_ACTIONS.SEARCH_SET_TITLE, title }); export const searchSetDistance = distance => ({ type: USER_ACTIONS.SEARCH_SET_DISTANCE, distance }); export const searchChangeDistance = distance => ({ type: USER_ACTIONS.SEARCH_CHANGE_DISTANCE, distance }); @@ -84,17 +15,9 @@ export const searchSetTab = tab => ({ type: USER_ACTIONS.SEARCH_SET_TAB, tab }); export const searchSetLoading = loading => ({ type: USER_ACTIONS.SEARCH_SET_LOADING, loading }); export const searchPutRoutes = payload => ({ type: USER_ACTIONS.SEARCH_PUT_ROUTES, ...payload }); - -// export const getGPXTrack = () => ({ type: USER_ACTIONS.GET_GPX_TRACK }); -// export const setMarkersShown = markers_shown => ({ type: USER_ACTIONS.SET_MARKERS_SHOWN, markers_shown }); -// export const setIsEmpty = is_empty => ({ type: USER_ACTIONS.SET_IS_EMPTY, is_empty }); - export const mapsLoadMore = () => ({ type: USER_ACTIONS.MAPS_LOAD_MORE }); export const mapsSetShift = (shift: number) => ({ type: USER_ACTIONS.MAPS_SET_SHIFT, shift }); -// export const setFeature = (features: { [x: string]: boolean }) => ({ type: USER_ACTIONS.SET_FEATURE, features }); -// export const setIsRouting = (is_routing: boolean) => ({ type: USER_ACTIONS.SET_IS_ROUTING, is_routing }); - export const dropRoute = (address: string) => ({ type: USER_ACTIONS.DROP_ROUTE, address }); export const modifyRoute = (address: string, { title, is_public }: { title: string, is_public: boolean }) => ({ type: USER_ACTIONS.MODIFY_ROUTE, address, title, is_public diff --git a/src/redux/user/constants.ts b/src/redux/user/constants.ts index dcea9d0..e7cae5b 100644 --- a/src/redux/user/constants.ts +++ b/src/redux/user/constants.ts @@ -1,6 +1,7 @@ export const USER_ACTIONS = { SET_USER: 'SET_USER', USER_LOGOUT: 'USER_LOGOUT', + USER_LOGIN: 'USER_LOGIN', GOT_VK_USER: 'GOT_VK_USER', IFRAME_LOGIN_VK: 'IFRAME_LOGIN_VK', diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 2d8148c..744dd87 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -1,16 +1,8 @@ import { REHYDRATE, RehydrateAction } from 'redux-persist'; import { delay, SagaIterator } from 'redux-saga'; -import { - takeLatest, - select, - call, - put, - takeEvery, - race, -} from 'redux-saga/effects'; +import { takeLatest, select, call, put, takeEvery } from 'redux-saga/effects'; import { checkIframeToken, - checkOSRMService, checkUserToken, dropRoute, getGuestToken, @@ -19,17 +11,6 @@ import { sendRouteStarred, } from '~/utils/api'; import { - // hideRenderer, - // setChanged, - // setDialogActive, - // setEditing, - // setMode, - // setReady, - // setRenderer, - // setDialog, - // setAddressOrigin, - // clearAll, - // setFeature, searchSetTab, setUser, mapsSetShift, @@ -38,19 +19,14 @@ import { searchSetLoading, searchSetTitle, setRouteStarred, + userLogin, } from '~/redux/user/actions'; -import { - getUrlData, - parseQuery, - pushLoaderState, - pushNetworkInitError, - pushPath, -} from '~/utils/history'; +import { parseQuery, pushLoaderState, pushNetworkInitError } from '~/utils/history'; import { USER_ACTIONS } from '~/redux/user/constants'; import { DEFAULT_USER } from '~/constants/auth'; -import { DIALOGS } from '~/constants/dialogs'; +import { DIALOGS, TABS } from '~/constants/dialogs'; import * as ActionCreators from '~/redux/user/actions'; import { Unwrap } from '~/utils/middleware'; @@ -126,6 +102,7 @@ function* gotVkUserSaga({ user: u }: ReturnType }: Unwrap = yield call(checkUserToken, u); yield put(setUser({ ...user, random_url })); + yield put(userLogin()); } function* searchGetRoutes() { @@ -197,9 +174,7 @@ function* openMapDialogSaga({ tab }: ReturnType = yield select(selectUser); - const { - dialog_active, - }: ReturnType = yield select(selectEditor); + const { dialog_active }: ReturnType = yield select(selectEditor); if (dialog_active && tab === current) { return yield put(editorSetDialogActive(false)); @@ -281,7 +256,7 @@ function* mapsLoadMoreSaga() { } function* dropRouteSaga({ address }: ReturnType): SagaIterator { - const { token }: ReturnType = yield select(selectUserUser); + const { token }: ReturnType = yield select(selectUserUser); const { routes: { list, @@ -290,7 +265,7 @@ function* dropRouteSaga({ address }: ReturnType limit, filter: { min, max }, }, - }: ReturnType = yield select(selectUser); + }: ReturnType = yield select(selectUser); const index = list.findIndex(el => el.address === address); @@ -315,7 +290,7 @@ function* modifyRouteSaga({ title, is_public, }: ReturnType): SagaIterator { - const { token }: ReturnType = yield select(selectUserUser); + const { token }: ReturnType = yield select(selectUserUser); const { routes: { list, @@ -347,7 +322,7 @@ function* modifyRouteSaga({ function* toggleRouteStarredSaga({ address, }: ReturnType) { - const { token }: ReturnType = yield select(selectUserUser); + const { token }: ReturnType = yield select(selectUserUser); const { routes: { list }, }: ReturnType = yield select(selectUser); @@ -364,6 +339,10 @@ function* toggleRouteStarredSaga({ if (!result) return yield put(setRouteStarred(address, route.is_published)); } +export function* updateUserRoutes() { + yield put(searchSetTab(TABS.MY)); +} + export function* userSaga() { yield takeLatest(REHYDRATE, authCheckSaga); @@ -384,4 +363,6 @@ export function* userSaga() { yield takeLatest(USER_ACTIONS.DROP_ROUTE, dropRouteSaga); yield takeLatest(USER_ACTIONS.MODIFY_ROUTE, modifyRouteSaga); yield takeLatest(USER_ACTIONS.TOGGLE_ROUTE_STARRED, toggleRouteStarredSaga); + + yield takeLatest([USER_ACTIONS.USER_LOGIN, USER_ACTIONS.USER_LOGOUT], updateUserRoutes); } From ce128306cc071aaf527522305633b93e6d601c59 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:30:52 +0700 Subject: [PATCH 141/320] redeploy --- src/modules/Map.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/modules/Map.ts diff --git a/src/modules/Map.ts b/src/modules/Map.ts new file mode 100644 index 0000000..354845a --- /dev/null +++ b/src/modules/Map.ts @@ -0,0 +1,36 @@ +import { + Map as MapInterface, + map, + tileLayer, + TileLayer, +} from 'leaflet'; + +import 'leaflet/dist/leaflet.css'; +import { PROVIDER } from '$config/frontend'; // +import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; + +interface Props { + container: string +} + +export class Map { + constructor({ container }: Props) { + this.map = map(container).setView([55.0153275, 82.9071235], 13); + // todo: change coords? + + this.tileLayer.addTo(this.map); + } + + map: MapInterface; + tileLayer: TileLayer = tileLayer(PROVIDER.url, { + attribution: 'Независимое Велосообщество', + maxNativeZoom: 18, + maxZoom: 18, + }); + + setProvider = (provider: string): void => { + const { url } = (provider && PROVIDERS[provider] && PROVIDERS[provider]) || PROVIDERS[DEFAULT_PROVIDER]; + + this.tileLayer.setUrl(url); + } +} From 8c9a7fa33973a85b2fbfd687108dfb6d38b04feb Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:47:43 +0700 Subject: [PATCH 142/320] fixed create reducer --- src/redux/editor/index.ts | 2 +- src/redux/map/index.ts | 2 +- src/redux/user/index.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 8b8a11f..83df6a3 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -1,6 +1,6 @@ import { IDialogs } from '~/constants/dialogs'; import { MODES } from '~/constants/modes'; -import { createReducer } from 'reduxsauce'; +import createReducer from 'reduxsauce/lib/createReducer'; import { EDITOR_HANDLERS } from './handlers'; import { ILatLng } from '../map/types'; diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index 4c726ff..a836d29 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -1,4 +1,4 @@ -import { createReducer } from 'reduxsauce'; +import createReducer from 'reduxsauce/lib/createReducer'; import { MAP_HANDLERS } from './handlers'; import { DEFAULT_PROVIDER } from '~/constants/providers'; import { IMapRoute } from './types'; diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 09ff24e..1492dda 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -1,4 +1,4 @@ -import { createReducer } from 'reduxsauce'; +import createReducer from 'reduxsauce/lib/createReducer'; import { DEFAULT_USER, IUser } from '~/constants/auth'; import { USER_HANDLERS } from './handlers'; From 27884b1201dd80aee8a3a47ba4ddd40ab81d05fb Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:48:17 +0700 Subject: [PATCH 143/320] redeploy --- src/redux/editor/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 83df6a3..5afaaa5 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -1,6 +1,6 @@ +import createReducer from 'reduxsauce/lib/createReducer'; import { IDialogs } from '~/constants/dialogs'; import { MODES } from '~/constants/modes'; -import createReducer from 'reduxsauce/lib/createReducer'; import { EDITOR_HANDLERS } from './handlers'; import { ILatLng } from '../map/types'; @@ -11,7 +11,7 @@ export interface IEditorState { markers_shown: boolean; router: { - points: ILatLng[]; + points: ILatLng[]; waypoints: ILatLng[]; }; From 1307ff407e127ce9be8c6031b867679cc7f908a7 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 11:55:41 +0700 Subject: [PATCH 144/320] refactored stickers --- src/containers/map/Map/index.tsx | 1 - src/containers/map/Sticker/index.tsx | 34 ++++++++------------------- src/containers/map/Stickers/index.tsx | 15 ++++++------ 3 files changed, 18 insertions(+), 32 deletions(-) diff --git a/src/containers/map/Map/index.tsx b/src/containers/map/Map/index.tsx index f775db1..1671d2d 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/containers/map/Map/index.tsx @@ -68,7 +68,6 @@ const MapUnconnected: React.FC = ({ void; index: number; @@ -28,7 +27,6 @@ const getX = e => : { pageX: e.pageX, pageY: e.pageY }; const Sticker: React.FC = ({ - map, sticker, index, mapSetSticker, @@ -60,11 +58,11 @@ const Sticker: React.FC = ({ const onDragStart = React.useCallback(() => { layer.dragging.disable(); - map.dragging.disable(); - map.disableClicks(); + MainMap.dragging.disable(); + MainMap.disableClicks(); setDragging(true); - }, [setDragging, layer, map]); + }, [setDragging, layer, MainMap]); const onDragStop = React.useCallback( event => { @@ -80,16 +78,16 @@ const Sticker: React.FC = ({ }); layer.dragging.enable(); - map.dragging.enable(); + MainMap.dragging.enable(); - setTimeout(map.enableClicks, 100); + setTimeout(MainMap.enableClicks, 100); }, - [setDragging, layer, map, sticker, angle] + [setDragging, layer, MainMap, sticker, angle] ); const onMoveStarted = React.useCallback(() => { - map.disableClicks(); - }, [onChange, sticker, map]); + MainMap.disableClicks(); + }, [onChange, sticker, MainMap]); const onMoveFinished = React.useCallback( event => { @@ -100,9 +98,9 @@ const Sticker: React.FC = ({ latlng: target.getLatLng(), }); - map.enableClicks(); + MainMap.enableClicks(); }, - [onChange, sticker, map] + [onChange, sticker, MainMap] ); const onDrag = React.useCallback( @@ -132,18 +130,6 @@ const Sticker: React.FC = ({ updateAngle(sticker.angle); angle.current = sticker.angle; }, [sticker.angle]) - // Updates html element accroding to current angle - // React.useEffect(() => { - // if (!stickerImage.current || !stickerArrow.current) return; - - // const x = Math.cos(angle + Math.PI) * 56 - 30; - // const y = Math.sin(angle + Math.PI) * 56 - 30; - - // stickerImage.current.style.left = String(6 + x); - // stickerImage.current.style.top = String(6 + y); - - // stickerArrow.current.style.transform = `rotate(${angle + Math.PI}rad)`; - // }, [stickerArrow, stickerImage, angle]); // Attaches onMoveFinished event to item React.useEffect(() => { diff --git a/src/containers/map/Stickers/index.tsx b/src/containers/map/Stickers/index.tsx index 6756bec..bd6fa33 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/containers/map/Stickers/index.tsx @@ -3,32 +3,33 @@ import { IStickerDump } from '~/redux/map/types'; import { FeatureGroup, Map } from 'leaflet'; import { Sticker } from '~/containers/map/Sticker'; import { mapSetSticker, mapDropSticker } from '~/redux/map/actions'; -import { MapContainer } from '~/constants/map'; +import { MapContainer, MainMap } from '~/constants/map'; interface IProps { stickers: IStickerDump[]; is_editing: boolean; - map: MapContainer; mapSetSticker: typeof mapSetSticker; mapDropSticker: typeof mapDropSticker; } const Stickers: React.FC = React.memo( - ({ stickers, is_editing, map, mapSetSticker, mapDropSticker }) => { + ({ stickers, is_editing, mapSetSticker, mapDropSticker }) => { const [layer, setLayer] = React.useState(null); React.useEffect(() => { - if (!map) return; + if (!MainMap) return; - setLayer(new FeatureGroup().addTo(map)); - }, [map]); + const item = new FeatureGroup().addTo(MainMap.stickerLayer); + setLayer(item); + + return () => MainMap.stickerLayer.removeLayer(item); + }, [MainMap]); return (
      {layer && stickers.map((sticker, index) => ( Date: Tue, 14 Jan 2020 12:09:06 +0700 Subject: [PATCH 145/320] cleaned up stickers --- src/sprites/stickers/stickers-base.svg | 3768 +----------------------- 1 file changed, 8 insertions(+), 3760 deletions(-) diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index e83521d..3f320f8 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -15,46 +15,10 @@ viewBox="0 0 4000 72.000001" id="svg22003" version="1.1" - inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + inkscape:version="0.92.4 5da689c313, 2019-01-14" sodipodi:docname="stickers-base.svg"> - - - - - - - - - - - - - - - - @@ -646,42 +598,6 @@ x="31.911509" y="1008.8047" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3356,187 +3023,6 @@ style="opacity:1;fill:none;fill-opacity:1;stroke:#53536c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - @@ -4717,96 +4203,6 @@ sodipodi:nodetypes="csc" /> - - - - - -   - - - - @@ -5972,1145 +5368,6 @@ r="0.62856489" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -7623,328 +5880,6 @@ y="1024.8033" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -8209,152 +6144,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -9342,69 +7131,12 @@ rx="1.5182086" ry="1.8187517" /> - - - - - - - - - @@ -9526,162 +7258,6 @@ inkscape:connector-curvature="0" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -9902,610 +7478,6 @@ sodipodi:nodetypes="csscsccsc" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fieldbeachgrassa @@ -11102,709 +8053,6 @@ inkscape:connector-curvature="0" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From d8b51e0b1a20aef6330003b74d784d700d34aa5c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 12:29:05 +0700 Subject: [PATCH 146/320] optimized marks calculation speed --- src/utils/marks.ts | 95 ++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 45 deletions(-) diff --git a/src/utils/marks.ts b/src/utils/marks.ts index bd6b147..34d8fd0 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -1,29 +1,30 @@ -import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from "leaflet"; -import { arrowClusterIcon, createArrow } from "~/utils/arrow"; +import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from 'leaflet'; +import { arrowClusterIcon, createArrow } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from "~/utils/geom"; +import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from '~/utils/geom'; import classNames from 'classnames'; interface KmMarksOptions { - showMiddleMarkers: boolean, - showEndMarker: boolean, - kmMarksStep: number, + showMiddleMarkers: boolean; + showEndMarker: boolean; + kmMarksStep: number; } class KmMarksLayer extends LayerGroup { - constructor(latlngs?: LatLngLiteral[], options?: KmMarksOptions){ + constructor(latlngs?: LatLngLiteral[], options?: KmMarksOptions) { super(); this.options = { showMiddleMarkers: true, showEndMarker: true, - kmMarksStep: 10, + kmMarksStep: 20, ...(options || {}), } as KmMarksOptions; } setLatLngs = (latlngs: LatLngLiteral[]): void => { if (!this.map) return; + this.marksLayer.clearLayers(); this.endMarker.clearLayers(); @@ -36,7 +37,7 @@ class KmMarksLayer extends LayerGroup { }; drawMiddleMarkers = (latlngs: LatLngLiteral[]) => { - const kmMarks = {}; + const marks = []; let last_km_mark = 0; this.distance = latlngs.reduce((dist, current, index) => { @@ -51,20 +52,20 @@ class KmMarksLayer extends LayerGroup { if (rounded > last_km_mark) { const angle = angleBetweenPoints( this.map.latLngToContainerPoint(current), - this.map.latLngToContainerPoint(next), + this.map.latLngToContainerPoint(next) ); + // if segment is too long, we'll add multiple markers on it for (let i = 1; i <= count; i += 1) { - const step = last_km_mark + (i * this.options.kmMarksStep); + const step = last_km_mark + i * this.options.kmMarksStep; const shift = (step - dist) / diff; const coords = { - lat: current.lat - ((current.lat - next.lat) * shift), - lng: current.lng - ((current.lng - next.lng) * shift), + lat: current.lat - (current.lat - next.lat) * shift, + lng: current.lng - (current.lng - next.lng) * shift, }; - kmMarks[step] = { ...coords, angle }; - this.marksLayer.addLayer(this.createMiddleMarker(coords, angle, step)); + marks.push(this.createMiddleMarker(coords, angle, step)); } last_km_mark = rounded; @@ -72,49 +73,54 @@ class KmMarksLayer extends LayerGroup { return sum; }, 0); + + this.marksLayer.addLayers(marks); }; - createMiddleMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => marker(latlng, { - draggable: false, - interactive: false, - icon: divIcon({ - html: ` -
      + createMiddleMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => + marker(latlng, { + draggable: false, + interactive: false, + icon: divIcon({ + html: ` +
      ${distance}
      `, - className: 'leaflet-km-marker', - iconSize: [11, 11], - iconAnchor: [6, 6] - }) - }); + className: 'leaflet-km-marker', + iconSize: [11, 11], + iconAnchor: [6, 6], + }), + }); - createEndMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => marker(latlng, { - draggable: false, - interactive: false, - icon: divIcon({ - html: ` + createEndMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => + marker(latlng, { + draggable: false, + interactive: false, + icon: divIcon({ + html: `
      ${parseFloat(distance.toFixed(1))}
      `, - className: classNames('leaflet-km-marker end-marker', { right: (angle > -90 && angle < 90) }), - iconSize: [11, 11], - iconAnchor: [6, 6] - }), - zIndexOffset: -100, - }); + className: classNames('leaflet-km-marker end-marker', { right: angle > -90 && angle < 90 }), + iconSize: [11, 11], + iconAnchor: [6, 6], + }), + zIndexOffset: -100, + }); drawEndMarker = (latlngs: LatLngLiteral[]): void => { this.endMarker.clearLayers(); const current = latlngs[latlngs.length - 2]; - const next = latlngs[latlngs.length - 1 - ]; + const next = latlngs[latlngs.length - 1]; const angle = angleBetweenPoints( this.map.latLngToContainerPoint(current), - this.map.latLngToContainerPoint(next), + this.map.latLngToContainerPoint(next) ); this.endMarker.addLayer(this.createEndMarker(next, angle, this.distance)); @@ -134,9 +140,8 @@ class KmMarksLayer extends LayerGroup { distance: number = 0; } - -KmMarksLayer.addInitHook(function () { - this.once('add', (event) => { +KmMarksLayer.addInitHook(function() { + this.once('add', event => { if (event.target instanceof KmMarksLayer) { this.map = event.target._map; this.marksLayer.addTo(this.map); @@ -144,7 +149,7 @@ KmMarksLayer.addInitHook(function () { } }); - this.once('remove', (event) => { + this.once('remove', event => { if (event.target instanceof KmMarksLayer) { this.marksLayer.removeFrom(this.map); this.endMarker.removeFrom(this.map); @@ -152,4 +157,4 @@ KmMarksLayer.addInitHook(function () { }); }); -export { KmMarksLayer }; \ No newline at end of file +export { KmMarksLayer }; From a06326fb1c72c4788977cdc1c3766f83083f3214 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 12:38:11 +0700 Subject: [PATCH 147/320] better change handling on map change --- src/redux/map/actions.ts | 5 +++++ src/redux/map/constants.ts | 1 + src/redux/map/handlers.ts | 10 ++++++++++ src/redux/map/sagas.ts | 40 +++++++++++++++++++------------------- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index 31d42cb..e02e400 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -18,6 +18,11 @@ export const mapSetRoute = (route: IMapReducer['route']) => ({ route, }); +export const mapSetStickers = (stickers: IStickerDump[]) => ({ + type: MAP_ACTIONS.SET_STICKERS, + stickers, +}); + export const mapSetSticker = (index: number, sticker: IStickerDump) => ({ type: MAP_ACTIONS.SET_STICKER, index, diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts index c7ffed4..253eeb9 100644 --- a/src/redux/map/constants.ts +++ b/src/redux/map/constants.ts @@ -14,6 +14,7 @@ export const MAP_ACTIONS = { ADD_STICKER: `${P}-ADD_STICKER`, SET_STICKER: `${P}-SET_STICKER`, + SET_STICKERS: `${P}-SET_STICKERS`, DROP_STICKER: `${P}-DROP_STICKER`, MAP_CLICKED: `${P}-MAP_CLICKED` diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts index ce4daf6..144ef83 100644 --- a/src/redux/map/handlers.ts +++ b/src/redux/map/handlers.ts @@ -13,6 +13,7 @@ import { mapSetPublic, mapSetLogo, mapSetAddressOrigin, + mapSetStickers, } from './actions'; const setMap = (state: IMapReducer, { map }: ReturnType): IMapReducer => ({ @@ -33,6 +34,14 @@ const setRoute = (state: IMapReducer, { route }: ReturnType) route, }); +const setStickers = ( + state: IMapReducer, + { stickers }: ReturnType +): IMapReducer => ({ + ...state, + stickers, +}); + const setSticker = ( state: IMapReducer, { sticker, index }: ReturnType @@ -97,6 +106,7 @@ export const MAP_HANDLERS = { [MAP_ACTIONS.SET_PROVIDER]: setProvider, [MAP_ACTIONS.SET_ROUTE]: setRoute, [MAP_ACTIONS.SET_STICKER]: setSticker, + [MAP_ACTIONS.SET_STICKERS]: setStickers, [MAP_ACTIONS.DROP_STICKER]: dropSticker, [MAP_ACTIONS.ADD_STICKER]: addSticker, [MAP_ACTIONS.SET_TITLE]: setTitle, diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 849fb5e..8deecd2 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -16,6 +16,8 @@ import { mapSet, mapSetTitle, mapSetAddressOrigin, + mapSetRoute, + mapSetStickers, } from './actions'; import { selectUser, selectUserUser } from '~/redux/user/selectors'; import { MODES } from '~/constants/modes'; @@ -32,7 +34,7 @@ import { import { pushLoaderState, getUrlData, pushPath } from '~/utils/history'; import { getStoredMap, postMap } from '~/utils/api'; import { Unwrap } from '~/utils/middleware'; -import { selectMap, selectMapProvider } from './selectors'; +import { selectMap, selectMapProvider, selectMapRoute, selectMapStickers } from './selectors'; import { TIPS } from '~/constants/tips'; import { delay } from 'redux-saga'; import { setReadySaga } from '../editor/sagas'; @@ -169,29 +171,26 @@ function* startEditingSaga() { } function* clearPolySaga() { - yield put( - mapSet({ - route: [], - }) - ); + const route: ReturnType = yield select(selectMapRoute) + if (!route.length) return; + yield put(mapSetRoute([])); } function* clearStickersSaga() { - yield put( - mapSet({ - stickers: [], - }) - ); + const stickers: ReturnType = yield select(selectMapStickers) + if (!stickers.length) return; + yield put(mapSetStickers([])); } function* clearAllSaga() { + const route: ReturnType = yield select(selectMapRoute) + const stickers: ReturnType = yield select(selectMapStickers) + + if (!stickers.length && !route.length) return; + yield put(editorSetChanged(false)); - yield put( - mapSet({ - route: [], - stickers: [], - }) - ); + yield put(mapSetRoute([])); + yield put(mapSetStickers([])); } function* clearSaga({ type }) { @@ -321,15 +320,16 @@ function* setChanged() { } export function* mapSaga() { - yield takeEvery([MAP_ACTIONS.SET_ROUTE, MAP_ACTIONS.SET_STICKER], setChanged); + yield takeEvery( + [MAP_ACTIONS.SET_ROUTE, MAP_ACTIONS.SET_STICKER, MAP_ACTIONS.SET_STICKERS], + setChanged + ); - // TODO: setChanged on set route, logo, provider, stickers yield takeEvery(EDITOR_ACTIONS.START_EDITING, startEditingSaga); yield takeEvery(EDITOR_ACTIONS.SET_ACTIVE_STICKER, setActiveStickerSaga); yield takeEvery(MAP_ACTIONS.MAP_CLICKED, onMapClick); yield takeEvery(MAP_ACTIONS.SET_TITLE, setTitleSaga); yield takeLatest(EDITOR_ACTIONS.SEND_SAVE_REQUEST, sendSaveRequestSaga); - // yield takeLatest(EDITOR_ACTIONS.SET_SAVE_SUCCESS, setSaveSuccessSaga); yield takeEvery( [ From 7e537d87acc93b0688518cb247a0fa322a738d23 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 12:54:06 +0700 Subject: [PATCH 148/320] fixed layer moving --- src/containers/map/Sticker/index.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index 2f100be..c8567fb 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -131,6 +131,11 @@ const Sticker: React.FC = ({ angle.current = sticker.angle; }, [sticker.angle]) + useEffect(() => { + if (!layer) return; + layer.setLatLng(sticker.latlng) + }, [layer, sticker.latlng]) + // Attaches onMoveFinished event to item React.useEffect(() => { if (!layer) return; From 2dd14f42294eb6af782416834de829c89b1f02c6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 14 Jan 2020 12:55:41 +0700 Subject: [PATCH 149/320] fixed km marks step --- src/utils/marks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/marks.ts b/src/utils/marks.ts index 34d8fd0..a22498b 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -17,7 +17,7 @@ class KmMarksLayer extends LayerGroup { this.options = { showMiddleMarkers: true, showEndMarker: true, - kmMarksStep: 20, + kmMarksStep: 10, ...(options || {}), } as KmMarksOptions; } From 586e09f2b55325332ba2160ebb22c776bd84cda8 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 10:10:42 +0700 Subject: [PATCH 150/320] changed panel radius --- src/styles/colors.less | 2 +- src/styles/panel.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/styles/colors.less b/src/styles/colors.less index 5e25d6a..5cb2b6b 100644 --- a/src/styles/colors.less +++ b/src/styles/colors.less @@ -14,7 +14,7 @@ @red_primary: #ff7034; @red_secondary: #ff3344; -@panel_radius: 6px; +@panel_radius: 8px; @button_radius: 6px; @color_primary: #4597d0; diff --git a/src/styles/panel.less b/src/styles/panel.less index 16ca071..a2d6d9c 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -16,7 +16,7 @@ .control-sep { height: 36px; background: #222222; - width: 6px; + width: 4px; @media (max-width: @mobile_breakpoint) { margin-left: -1px; From 18cbeed06ef15454cdb8c5d4abc271c61adf7f56 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 10:28:00 +0700 Subject: [PATCH 151/320] fixed distance on render --- src/redux/editor/sagas.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index ca4919b..237c4a5 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -88,6 +88,7 @@ function* getRenderData() { yield put(editorSetRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); const { route, stickers, provider }: ReturnType = yield select(selectMap); + const { distance }: ReturnType = yield select(selectEditor); const canvas = document.getElementById('renderer'); canvas.width = window.innerWidth; @@ -97,9 +98,6 @@ function* getRenderData() { const geometry = getTilePlacement(); const points = getPolyPlacement(route); const sticker_points = getStickersPlacement(stickers); - // TODO: get distance: - const distance = 0; - // const distance = editor.poly.poly.distance; ctx.clearRect(0, 0, canvas.width, canvas.height); @@ -225,7 +223,6 @@ function* getGPXTrackSaga(): SagaIterator { function* routerCancel() { yield put(editorSetMode(MODES.NONE)); - // TODO: clear router } function* mapClick({ latlng }: ReturnType) { From 23b8f5dea63ba5fee87103a0053c86d2a9ea032e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 10:33:48 +0700 Subject: [PATCH 152/320] fixed gpx downloading --- src/components/panels/UserPanel.tsx | 26 +++++++++++++++++++------- src/redux/editor/sagas.ts | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index b39d60a..d4049fc 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -20,11 +20,20 @@ import { DIALOGS, TABS } from '~/constants/dialogs'; import { Tooltip } from '~/components/panels/Tooltip'; import { TitleDialog } from '~/components/dialogs/TitleDialog'; -const mapStateToProps = ({ user: { user }, editor: { dialog, dialog_active, is_empty } }) => ({ - dialog, - dialog_active, - user, - is_empty, +const mapStateToProps = ({ + user: { user }, + editor: { dialog, dialog_active }, + map: { route, stickers }, +}) => ({ + editor: { + dialog, + dialog_active, + }, + user: { user }, + map: { + route, + stickers, + } }); const mapDispatchToProps = { @@ -91,7 +100,7 @@ export class UserPanelUnconnected extends PureComponent { openAppInfoDialog = () => { this.setMenuOpened(); this.props.editorSetDialog(DIALOGS.APP_INFO); - this.props.editorSetDialogActive(this.props.dialog !== DIALOGS.APP_INFO); + this.props.editorSetDialogActive(this.props.editor.dialog !== DIALOGS.APP_INFO); }; openOauthFrame = () => { @@ -109,10 +118,12 @@ export class UserPanelUnconnected extends PureComponent { render() { const { - props: { user, dialog, dialog_active, is_empty }, + props: { user: { user }, editor: { dialog, dialog_active }, map: { route, stickers } }, state: { menuOpened }, } = this; + const is_empty = !route.length && !stickers.length; + return (
      @@ -154,6 +165,7 @@ export class UserPanelUnconnected extends PureComponent {
      + {!is_empty && (
      diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 237c4a5..24ddb3a 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -214,7 +214,7 @@ function* keyPressedSaga({ key, target }: ReturnType) { function* getGPXTrackSaga(): SagaIterator { const { route, stickers, title, address }: ReturnType = yield select(selectMap); - if (!route || route.length <= 0) return; + if (!route.length && !stickers.length) return; const track = getGPXString({ route, stickers, title: title || address }); From b6bf3176499c446f37547de64c91561a1fd577b5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 11:04:43 +0700 Subject: [PATCH 153/320] map dialog optimizations --- src/components/dialogs/MapListDialog.tsx | 63 +++------- src/components/maps/RouteRowWrapper.tsx | 132 ++++++++++---------- src/components/search/MapListDialogHead.tsx | 61 +++++++++ 3 files changed, 146 insertions(+), 110 deletions(-) create mode 100644 src/components/search/MapListDialogHead.tsx diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index bc6328b..66d296d 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { PureComponent } from 'react'; import { connect } from 'react-redux'; import { RouteRowWrapper } from '~/components/maps/RouteRowWrapper'; import { Scroll } from '~/components/Scroll'; @@ -17,14 +17,13 @@ import { editorSetDialogActive } from '~/redux/editor/actions'; import { isMobile } from '~/utils/window'; import classnames from 'classnames'; -import Range from 'rc-slider/lib/Range'; import { TABS, TABS_TITLES } from '~/constants/dialogs'; import { Icon } from '~/components/panels/Icon'; import { pushPath } from '~/utils/history'; import { IRouteListItem } from '~/redux/user'; import { ROLES } from '~/constants/auth'; import { IState } from '~/redux/store'; - +import { MapListDialogHead } from '~/components/search/MapListDialogHead'; const mapStateToProps = ({ editor: { editing }, @@ -37,7 +36,6 @@ const mapStateToProps = ({ return { routes, editing, - marks: {}, ready: false, role, }; @@ -48,16 +46,6 @@ const mapStateToProps = ({ routes, editing, ready: true, - marks: [...new Array(Math.floor((routes.filter.max - routes.filter.min) / 25) + 1)].reduce( - (obj, el, i) => ({ - ...obj, - [routes.filter.min + i * 25]: ` ${routes.filter.min + i * 25}${ - routes.filter.min + i * 25 >= 200 ? '+' : '' - } - `, - }), - {} - ), }; }; @@ -72,7 +60,7 @@ const mapDispatchToProps = { toggleRouteStarred, }; -type Props = ReturnType & typeof mapDispatchToProps & {} +type Props = ReturnType & typeof mapDispatchToProps & {}; export interface State { menu_target: IRouteListItem['address']; @@ -82,7 +70,7 @@ export interface State { is_dropping: boolean; } -class MapListDialogUnconnected extends React.Component { +class MapListDialogUnconnected extends PureComponent { state = { menu_target: null, editor_target: null, @@ -178,8 +166,8 @@ class MapListDialogUnconnected extends React.Component { loading, filter: { min, max, title, distance, tab }, }, - marks, - }: Props = this.props; + }: // marks, + Props = this.props; const { editor_target, menu_target, is_editing, is_dropping } = this.state; @@ -192,6 +180,7 @@ class MapListDialogUnconnected extends React.Component {
      )} + {ready && !loading && list.length === 0 && (
      @@ -200,6 +189,7 @@ class MapListDialogUnconnected extends React.Component { ТУТ ПУСТО
      И ОДИНОКО
      )} +
      {Object.values(TABS).map( item => @@ -214,32 +204,16 @@ class MapListDialogUnconnected extends React.Component { ) )}
      -
      -
      - -
      - {ready && Object.keys(marks).length > 2 ? ( - = max} - /> - ) : ( -
      - )} -
      -
      + +
      @@ -276,7 +250,6 @@ class MapListDialogUnconnected extends React.Component { } } - const MapListDialog = connect(mapStateToProps, mapDispatchToProps)(MapListDialogUnconnected); export { MapListDialog }; diff --git a/src/components/maps/RouteRowWrapper.tsx b/src/components/maps/RouteRowWrapper.tsx index 0bd8c06..f02ed56 100644 --- a/src/components/maps/RouteRowWrapper.tsx +++ b/src/components/maps/RouteRowWrapper.tsx @@ -1,10 +1,10 @@ -import React from "react"; -import classnames from "classnames"; -import { MapListDialog } from "~/components/dialogs/MapListDialog"; -import { RouteRowView } from "~/components/maps/RouteRowView"; -import { RouteRowEditor } from "~/components/maps/RouteRowEditor"; -import { RouteRowDrop } from "~/components/maps/RouteRowDrop"; -import { ReactElement } from "react"; +import React, { FC, memo } from 'react'; +import classnames from 'classnames'; +import { MapListDialog } from '~/components/dialogs/MapListDialog'; +import { RouteRowView } from '~/components/maps/RouteRowView'; +import { RouteRowEditor } from '~/components/maps/RouteRowEditor'; +import { RouteRowDrop } from '~/components/maps/RouteRowDrop'; +import { ReactElement } from 'react'; interface Props { address: string; @@ -28,64 +28,66 @@ interface Props { modifyRoute: typeof MapListDialog.modifyRoute; toggleStarred: typeof MapListDialog.toggleStarred; - is_editing_mode: "edit" | "drop"; + is_editing_mode: 'edit' | 'drop'; } -export const RouteRowWrapper = ({ - title, - distance, - address, - openRoute, - tab, - startEditing, - showMenu, - showDropCard, - is_public, - is_editing_target, - is_menu_target, - is_editing_mode, - dropRoute, - stopEditing, - modifyRoute, - hideMenu, - is_admin, - is_published, - toggleStarred -}: Props): ReactElement => ( -
      - {is_editing_target && is_editing_mode === "edit" && ( - - )} - {is_editing_target && is_editing_mode === "drop" && ( - - )} - {!is_editing_target && ( - - )} -
      +export const RouteRowWrapper: FC = memo( + ({ + title, + distance, + address, + openRoute, + tab, + startEditing, + showMenu, + showDropCard, + is_public, + is_editing_target, + is_menu_target, + is_editing_mode, + dropRoute, + stopEditing, + modifyRoute, + hideMenu, + is_admin, + is_published, + toggleStarred, + }) => ( +
      + {is_editing_target && is_editing_mode === 'edit' && ( + + )} + {is_editing_target && is_editing_mode === 'drop' && ( + + )} + {!is_editing_target && ( + + )} +
      + ) ); diff --git a/src/components/search/MapListDialogHead.tsx b/src/components/search/MapListDialogHead.tsx new file mode 100644 index 0000000..409abc8 --- /dev/null +++ b/src/components/search/MapListDialogHead.tsx @@ -0,0 +1,61 @@ +import React, { FC, memo, useMemo, ChangeEvent, ChangeEventHandler } from 'react'; +import Range from 'rc-slider/lib/Range'; + +interface Props { + ready: boolean; + min: number; + max: number; + search: string; + distance: [number, number]; + onDistanceChange: (val: [number, number]) => void; + onSearchChange: ChangeEventHandler; +} + +const MapListDialogHead: FC = memo( + ({ min, max, ready, distance, search, onSearchChange, onDistanceChange }) => { + const marks = useMemo( + () => + [...new Array(Math.floor((max - min) / 25) + 1)].reduce( + (obj, el, i) => ({ + ...obj, + [min + i * 25]: min + i * 25 < 200 ? ` ${min + i * 25}` : ` ${min + i * 25}+`, + }), + {} + ), + [] + ); + + return ( +
      +
      + + +
      + + {ready && Object.keys(marks).length > 2 ? ( + = max} + /> + ) : ( +
      + )} +
      +
      + ); + } +); + +export { MapListDialogHead }; From 69d1d749cf8e3585c4cd7e825137d41fee58beeb Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 11:49:24 +0700 Subject: [PATCH 154/320] refactored rerendering speed --- package-lock.json | 38 +- package.json | 11 +- src/_modules/Editor.ts | 462 ------------- src/_modules/InteractivePoly.ts | 606 ------------------ src/_modules/KmMarks.ts | 156 ----- src/_modules/Map.ts | 36 -- src/_modules/Poly.ts | 119 ---- src/_modules/Router.ts | 174 ----- src/_modules/Sticker.tsx | 236 ------- src/_modules/Stickers.ts | 117 ---- src/components/dialogs/MapListDialog.tsx | 11 +- src/components/dialogs/RouterDialog.tsx | 5 +- src/components/maps/RouteRowDrop.tsx | 36 +- src/components/panels/DistanceBar.tsx | 48 +- src/components/panels/EditorPanel.tsx | 18 +- src/components/panels/Icon.tsx | 7 +- src/components/panels/TopLeftPanel.tsx | 6 +- src/components/panels/TopRightPanel.tsx | 17 +- src/components/panels/UserPanel.tsx | 21 +- src/components/user/UserButton.tsx | 17 +- src/containers/App.tsx | 10 +- src/containers/LeftDialog.tsx | 16 +- src/containers/map/Route/index.tsx | 2 +- src/containers/map/Router/index.tsx | 4 +- src/containers/map/Sticker/index.tsx | 2 +- src/redux/editor/sagas.ts | 4 +- src/utils/arrow.ts | 5 - src/{_modules => utils/map}/Arrows.ts | 0 src/utils/{ => map}/DomMarker.js | 2 +- .../{polyline.ts => map/InteractivePoly.ts} | 1 - src/utils/{osrm.ts => map/OsrmRouter.ts} | 2 +- src/utils/{ => map}/clusterIcon.ts | 0 32 files changed, 144 insertions(+), 2045 deletions(-) delete mode 100644 src/_modules/Editor.ts delete mode 100644 src/_modules/InteractivePoly.ts delete mode 100644 src/_modules/KmMarks.ts delete mode 100644 src/_modules/Map.ts delete mode 100644 src/_modules/Poly.ts delete mode 100644 src/_modules/Router.ts delete mode 100644 src/_modules/Sticker.tsx delete mode 100644 src/_modules/Stickers.ts rename src/{_modules => utils/map}/Arrows.ts (100%) rename src/utils/{ => map}/DomMarker.js (94%) rename src/utils/{polyline.ts => map/InteractivePoly.ts} (99%) rename src/utils/{osrm.ts => map/OsrmRouter.ts} (96%) rename src/utils/{ => map}/clusterIcon.ts (100%) diff --git a/package-lock.json b/package-lock.json index 67bd187..23cd49a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -778,17 +778,20 @@ "@types/classnames": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.7.tgz", - "integrity": "sha512-rzOhiQ55WzAiFgXRtitP/ZUT8iVNyllEpylJ5zHzR4vArUvMB39GTk+Zon/uAM0JxEFAWnwsxC2gH8s+tZ3Myg==" + "integrity": "sha512-rzOhiQ55WzAiFgXRtitP/ZUT8iVNyllEpylJ5zHzR4vArUvMB39GTk+Zon/uAM0JxEFAWnwsxC2gH8s+tZ3Myg==", + "dev": true }, "@types/geojson": { "version": "7946.0.6", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.6.tgz", - "integrity": "sha512-f6qai3iR62QuMPPdgyH+LyiXTL2n9Rf62UniJjV7KHrbiwzLTZUKsdq0mFSTxAHbO7JvwxwC4tH0m1UnweuLrA==" + "integrity": "sha512-f6qai3iR62QuMPPdgyH+LyiXTL2n9Rf62UniJjV7KHrbiwzLTZUKsdq0mFSTxAHbO7JvwxwC4tH0m1UnweuLrA==", + "dev": true }, "@types/leaflet": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.4.3.tgz", "integrity": "sha512-jFRBSsPHi1EwQSwrN0cOJLdPhwOZsRl4IMxvm/2ShLh0YM5GfCtQXCzsrv8RE7DWL+AykXdYSAd9bFLWbZT4CQ==", + "dev": true, "requires": { "@types/geojson": "7946.0.6" } @@ -796,22 +799,34 @@ "@types/node": { "version": "11.9.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.0.tgz", - "integrity": "sha512-ry4DOrC+xenhQbzk1iIPzCZGhhPGEFv7ia7Iu6XXSLVluiJIe9FfG7Iu3mObH9mpxEXCWLCMU4JWbCCR9Oy1Zg==" + "integrity": "sha512-ry4DOrC+xenhQbzk1iIPzCZGhhPGEFv7ia7Iu6XXSLVluiJIe9FfG7Iu3mObH9mpxEXCWLCMU4JWbCCR9Oy1Zg==", + "dev": true }, "@types/prop-types": { "version": "15.5.8", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz", - "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==" + "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==", + "dev": true }, "@types/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" }, + "@types/ramda": { + "version": "0.26.39", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.26.39.tgz", + "integrity": "sha512-3bu32X02VpjJhsYPUWkdOQGoBXjb/UveZgGg4IYMm+SPAXio96BOYrRhVELfM4AoP00sxoi/f2tqrXdwtR4jjg==", + "dev": true, + "requires": { + "ts-toolbelt": "4.14.6" + } + }, "@types/react": { "version": "16.8.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.1.tgz", "integrity": "sha512-tD1ETKJcuhANOejRc/p7OgQ16DKnbGi0M3LccelKlPnUCDp2a5koVxZFoRN9HN+A+m84HB5VGN7I+r3nNhS3PA==", + "dev": true, "requires": { "@types/prop-types": "15.5.8", "csstype": "2.6.2" @@ -4464,7 +4479,8 @@ "csstype": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.2.tgz", - "integrity": "sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow==" + "integrity": "sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow==", + "dev": true }, "currently-unhandled": { "version": "0.4.1", @@ -13015,6 +13031,12 @@ "yn": "3.0.0" } }, + "ts-toolbelt": { + "version": "4.14.6", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.6.tgz", + "integrity": "sha512-SONcnRd93+LuYGfn/CZg5A5qhCODohZslAVZKHHu5bnwUxoXLqd2k2VIdwRUXYfKnY+UCeNbI2pTPz+Dno6Mpg==", + "dev": true + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -13085,9 +13107,9 @@ "integrity": "sha512-NLpRc/FY+jPfWL0aUXQzjxPyF0Xug2om6akaoRLQ18KGwP2yYNBJu9vkv2q1q+Cx/+edy2Qf6O8xXnYY/xwz1A==" }, "typescript": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", - "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", + "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", "dev": true }, "uglifyjs-webpack-plugin": { diff --git a/package.json b/package.json index 0bd8aea..5c75fc7 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,11 @@ "devDependencies": { "@babel/cli": "^7.0.0-rc.1", "@babel/preset-env": "^7.0.0-rc.1", + "@types/ramda": "^0.26.39", + "@types/classnames": "^2.2.7", + "@types/leaflet": "^1.4.3", + "@types/node": "^11.9.0", + "@types/react": "16.8.1", "awesome-typescript-loader": "^5.2.1", "babel-core": "^6.26.0", "babel-eslint": "^8.2.3", @@ -43,7 +48,7 @@ "style-loader": "^0.21.0", "sw-precache-webpack-plugin": "^0.11.5", "ts-node": "^8.0.1", - "typescript": "^3.2.4", + "typescript": "^3.7.4", "uglifyjs-webpack-plugin": "^1.3.0", "webpack": "^4.6.0", "webpack-cli": "^3.2.3", @@ -52,10 +57,6 @@ "webpack-pwa-manifest": "^4.0.0" }, "dependencies": { - "@types/classnames": "^2.2.7", - "@types/leaflet": "^1.4.3", - "@types/node": "^11.9.0", - "@types/react": "16.8.1", "axios": "^0.18.0", "babel-runtime": "^6.26.0", "body-parser": "^1.18.3", diff --git a/src/_modules/Editor.ts b/src/_modules/Editor.ts deleted file mode 100644 index 79bd824..0000000 --- a/src/_modules/Editor.ts +++ /dev/null @@ -1,462 +0,0 @@ -import { Map } from '~/modules/Map'; -import { Poly } from '~/modules/Poly'; -import { MODES } from '~/constants/modes'; -import { ILatLng, Stickers } from '~/modules/Stickers'; -import { Router } from '~/modules/Router'; -import { DEFAULT_LOGO, ILogos, LOGOS } from '~/constants/logos'; - -import { getUrlData } from '~/utils/history'; -import { store } from '~/redux/store'; -import { - resetSaveDialog, - setActiveSticker, - setChanged, - setDistance, - setIsEmpty, setIsRouting, - setMarkersShown, - setMode, - setRouterPoints, setStarred, -} from '~/redux/user/actions'; -import { - mapSetAddress, - mapSetDescription, - mapSetLogo, - mapSetPublic, - mapSetTitle, - mapSetProvider, -} from '~/redux/map/actions'; -import { DEFAULT_PROVIDER, IProvider, PROVIDERS } from '~/constants/providers'; -import { STICKERS } from '~/constants/stickers'; -import { IRootState } from "~/redux/user"; -import { DEFAULT_USER, IUser } from "~/constants/auth"; - -interface IEditor { - map: Map; - poly: Poly; - stickers: Stickers; - router: Router; - - logo: keyof ILogos; - owner: number; - initialData: { - version: number, - title: IRootState['title'], - owner: number, - address: IRootState['address'], - path: any, - route: any, - stickers: any, - provider: IRootState['provider'], - is_public: IRootState['is_public'], - is_published: IRootState['is_published'], - description: IRootState['description'], - logo: IRootState['logo'], - }; - activeSticker: IRootState['activeSticker']; - mode: IRootState['mode']; - provider: IProvider; - switches: { - [x: string]: { - start?: () => any, - stop?: () => any, - toggle?: () => any, - } - }; - clickHandlers: { - [x: string]: (event) => void - }; - user: IUser; -} - -export class Editor { - constructor() { - this.logo = DEFAULT_LOGO; - this.owner = null; - this.map = new Map({ container: 'map' }); - this.activeSticker = {}; - this.mode = MODES.NONE; - this.provider = PROVIDERS[DEFAULT_PROVIDER]; - - const { - triggerOnChange, lockMapClicks, routerMoveStart, pushPolyPoints, - map: { map } - } = this; - - this.poly = new Poly({ - map, routerMoveStart, lockMapClicks, setDistance: this.setDistance, triggerOnChange, editor: this, - }); - - this.stickers = new Stickers({ - map, - lockMapClicks, - triggerOnChange, - editor: this - }); - - this.router = new Router({ - map, - lockMapClicks, - pushPolyPoints, - setRouterPoints: this.setRouterPoints, - setIsRouting: this.setIsRouting, - }); - - this.switches = { - [MODES.POLY]: { - start: this.startPoly, - stop: this.poly.stop, - toggle: this.clearMode, - }, - [MODES.ROUTER]: { - toggle: this.clearMode, - start: this.routerSetStart, - }, - [MODES.STICKERS]: { - toggle: this.clearSticker, - }, - [MODES.STICKERS_SELECT]: { - toggle: this.clearSticker, - }, - [MODES.TRASH]: { - toggle: this.clearMode, - }, - [MODES.CONFIRM_CANCEL]: { - toggle: this.cancelEditing, - }, - [MODES.LOGO]: { - toggle: this.clearMode, - }, - [MODES.SAVE]: { - toggle: this.clearMode, - stop: this.resetSaveDialog, - }, - [MODES.PROVIDER]: { - toggle: this.clearMode, - } - }; - - this.clickHandlers = { - [MODES.STICKERS]: this.createStickerOnClick, - [MODES.ROUTER]: this.router.pushWaypointOnClick, - }; - - map.addEventListener('mouseup', this.onClick); - // map.addEventListener('touchend', this.onClick); - map.addEventListener('dragstart', () => lockMapClicks(true)); - map.addEventListener('dragstop', () => lockMapClicks(false)); - } - - map: IEditor['map']; - poly: IEditor['poly']; - stickers: IEditor['stickers']; - router: IEditor['router']; - - logo: IEditor['logo'] = DEFAULT_LOGO; - owner: IEditor['owner'] = null; - initialData: IEditor['initialData'] = { - version: null, - title: null, - owner: null, - address: null, - path: null, - route: null, - stickers: null, - provider: null, - is_public: false, - is_published: false, - description: '', - logo: null, - }; - activeSticker: IEditor['activeSticker']; - mode: IEditor['mode']; - provider: IEditor['provider']; - switches: IEditor['switches']; - clickHandlers: IEditor['clickHandlers']; - user: IEditor['user'] = DEFAULT_USER; - - getState = (): IRootState => store.getState().user; - - getUser = () => this.getState().user; - getMode = () => this.getState().mode; - getProvider = () => this.getState().provider; - getTitle = () => this.getState().title; - getEditing = () => this.getState().editing; - getChanged = () => this.getState().changed; - getRouterPoints = () => this.getState().routerPoints; - getDistance = () => this.getState().distance; - getIsEmpty = () => this.getState().is_empty; - - mapSetLogo: typeof mapSetLogo = logo => store.dispatch(mapSetLogo(logo)); - setMode: typeof setMode = value => store.dispatch(setMode(value)); - setRouterPoints: typeof setRouterPoints = value => store.dispatch(setRouterPoints(value)); - setActiveSticker: typeof setActiveSticker = value => store.dispatch(setActiveSticker(value)); - mapSetTitle: typeof mapSetTitle = value => store.dispatch(mapSetTitle(value)); - mapSetDescription: typeof mapSetDescription = value => store.dispatch(mapSetDescription(value)); - mapSetAddress: typeof mapSetAddress = value => store.dispatch(mapSetAddress(value)); - mapSetPublic: typeof mapSetPublic = value => store.dispatch(mapSetPublic(value)); - setStarred: typeof setStarred = value => store.dispatch(setStarred(value)); - setIsEmpty: typeof setIsEmpty = value => store.dispatch(setIsEmpty(value)); - setIsRouting: typeof setIsRouting = value => store.dispatch(setIsRouting(value)); - - setMarkersShown = (value: boolean): void => { - if (this.getState().markers_shown !== value) store.dispatch(setMarkersShown(value)); - }; - - resetSaveDialog = (): void => { store.dispatch(resetSaveDialog()); }; - - setDistance = (value: number): void => { - if (this.getDistance() !== value) store.dispatch(setDistance(value)); - }; - - setChanged = (value: boolean): void => { - if (this.getChanged() !== value) store.dispatch(setChanged(value)); - }; - - clearMode = (): void => { this.setMode(MODES.NONE); }; - clearChanged = (): void => { store.dispatch(setChanged(false)); }; - - startPoly = (): void => { - if (this.getRouterPoints()) this.router.clearAll(); - this.poly.continue(); - }; - - triggerOnChange = (): void => { - if (this.isEmpty !== this.getIsEmpty()) this.setIsEmpty(this.isEmpty); - if (this.getEditing() && !this.getChanged()) this.setChanged(true); - }; - - createStickerOnClick = (e): void => { - if (!e || !e.latlng || !this.activeSticker) return; - const { latlng }: { latlng: ILatLng } = e; - - this.stickers.createSticker({ latlng, sticker: this.activeSticker.sticker, set: this.activeSticker.set }); - this.setActiveSticker(null); - this.setChanged(true); - // this.setMode(MODES.STICKERS_SELECT); - }; - - changeMode = (mode: IRootState['mode']): void => { - if (this.mode === mode) { - if (this.switches[mode] && this.switches[mode].toggle) { - // if we have special function on mode when it clicked again - this.switches[mode].toggle(); - } else { - this.disableMode(mode); - // this.setMode(MODES.NONE); - this.mode = MODES.NONE; - } - } else { - this.disableMode(this.mode); - // this.setMode(mode); - this.mode = mode; - this.enableMode(mode); - } - }; - - enableMode = (mode: IRootState['mode']): void => { - if (this.switches[mode] && this.switches[mode].start) this.switches[mode].start(); - }; - - disableMode = (mode: IRootState['mode']): void => { - if (this.switches[mode] && this.switches[mode].stop) this.switches[mode].stop(); - }; - - onClick = (e): void => { - if (e.originalEvent.which === 3) return; // skip right / middle click - if (this.clickHandlers[this.mode]) this.clickHandlers[this.mode](e); - }; - - lockMapClicks = (lock: boolean): void => { - if (lock) { - this.map.map.removeEventListener('mouseup', this.onClick); - this.map.map.addEventListener('mouseup', this.unlockMapClicks); - } else { - this.map.map.removeEventListener('mouseup', this.unlockMapClicks); - this.map.map.addEventListener('mouseup', this.onClick); - } - }; - - unlockMapClicks = (): void => { - this.lockMapClicks(false); - }; - - routerSetStart = (): void => { - const { latlngs } = this.poly; - - if (!latlngs || !latlngs.length) return; - - this.router.startFrom(latlngs[latlngs.length - 1]); - }; - - routerMoveStart = (): void => { - const { _latlngs } = this.poly.poly; - - if (_latlngs) this.router.moveStart(_latlngs[_latlngs.length - 1]); - }; - - pushPolyPoints = (latlngs: Array): void => { - this.poly.pushPoints(latlngs); - }; - - clearSticker = (): void => { - if (this.activeSticker) { - this.setActiveSticker(null); - } else { - this.setMode(MODES.NONE); - } - }; - - clearAll = (): void => { - this.poly.clearAll(); - this.router.clearAll(); - this.stickers.clearAll(); - - this.setIsEmpty(true); - }; - - setData = ({ - route = [], - stickers = [], - owner, - title, - address, - provider = DEFAULT_PROVIDER, - logo = DEFAULT_LOGO, - is_public, - is_published, - description, - }: Partial): void => { - this.mapSetTitle(title || ''); - const { id } = this.getUser(); - - if (address && id && owner && id === owner) { - this.mapSetAddress(address); - } - - if (route) this.poly.setPoints(route); - - this.stickers.clearAll(); - - if (stickers) { - stickers.map(sticker => - sticker.set && STICKERS[sticker.set].url && - this.stickers.createSticker({ - latlng: sticker.latlng, - angle: sticker.angle, - sticker: sticker.sticker, - set: sticker.set, - text: sticker.text, - }) - ); - } - - this.mapSetPublic(is_public); - this.setStarred(is_published); - this.mapSetDescription(description); - - this.mapSetLogo((logo && LOGOS[DEFAULT_LOGO] && logo) || DEFAULT_LOGO); - this.setProvider((provider && PROVIDERS[provider] && provider) || DEFAULT_PROVIDER); - - if (owner) this.owner = owner; - }; - - fitDrawing = (): void => { - if (!this.poly.isEmpty) { - const poly_bounds = this.poly.poly.getBounds(); - - if (poly_bounds && Object.values(poly_bounds).length) { - this.map.map.fitBounds(poly_bounds); - return; - } - } - - if (!this.stickers.isEmpty) { - const stickers_bounds = this.stickers.layer.getBounds(); - - if (stickers_bounds && Object.values(stickers_bounds).length) { - this.map.map.fitBounds(stickers_bounds); - return; - } - } - - // no bounds to fit. better do something later - }; - - setInitialData = (): void => { - const { path } = getUrlData(); - const { id } = this.getUser(); - const { is_public, logo, is_published , description} = this.getState(); - const { route, stickers, provider } = this.dumpData(); - - this.initialData = { - version: 2, - title: this.getTitle(), - owner: this.owner, - address: (this.owner === id ? path : null), - path, - route, - stickers, - provider, - is_public, - logo, - is_published, - description, - }; - }; - - startEditing = (): void => { - const { id } = this.getUser(); - - this.setInitialData(); - this.owner = id; - - this.poly.enableEditor(); - this.stickers.startEditing(); - }; - - stopEditing = (): void => { - this.poly.poly.editor.disable(); - this.stickers.stopEditing(); - this.router.clearAll(); - }; - - cancelEditing = (): void => { - if (this.hasEmptyHistory) { - this.clearAll(); - this.startEditing(); - this.clearChanged(); - return; - } else { - this.setData(this.initialData); - } - - this.stopEditing(); - this.clearChanged(); - }; - - dumpData = () => ({ - route: this.poly.dumpData(), - stickers: this.stickers.dumpData(), - provider: this.getProvider(), - }); - - setProvider: typeof mapSetProvider = provider => store.dispatch(mapSetProvider(provider)); - - get isEmpty(): boolean { - const { route, stickers } = this.dumpData(); - - return (!route || route.length <= 1) && (!stickers || stickers.length <= 0); - } - - get hasEmptyHistory(): boolean { - const { route, stickers } = this.initialData; - - return (!route || route.length < 1) && (!stickers || stickers.length <= 0); - }; -} - -export const editor = new Editor(); - -// for debug purposes -declare let window: any; -window.editor = editor; diff --git a/src/_modules/InteractivePoly.ts b/src/_modules/InteractivePoly.ts deleted file mode 100644 index 2d021ab..0000000 --- a/src/_modules/InteractivePoly.ts +++ /dev/null @@ -1,606 +0,0 @@ -/* - done IMPORTANT: select closest point on drag instead of first - done add touch hint poly - done approx radius for dragFindNearest -*/ - -import { - LatLngExpression, - Marker, - Polyline, - PolylineOptions, - marker, - divIcon, - LayerGroup, - LatLng, - LeafletMouseEvent, - latLng, - LatLngLiteral -} from "leaflet"; - -import { distKmHaversine, distToSegment, getPolyLength, pointInArea } from "~/utils/geom"; - -interface InteractivePolylineOptions extends PolylineOptions { - maxMarkers?: number; - constraintsStyle?: PolylineOptions; - kmMarksEnabled?: boolean; - kmMarksStep?: number; -} - -export class InteractivePoly extends Polyline { - constructor( - latlngs: LatLngExpression[] | LatLngExpression[][], - options?: InteractivePolylineOptions - ) { - super(latlngs, options); - - this.constraintsStyle = { - ...this.constraintsStyle, - ...options.constraintsStyle - }; - this.maxMarkers = options.maxMarkers || this.maxMarkers; - - this.constrLine = new Polyline([], this.constraintsStyle); - - this.startDragHinting(); - } - - updateTouchHinter = ({ latlngs }: { latlngs: LatLngLiteral[] }): void => { - this.touchHinter.setLatLngs(latlngs); - }; - - setPoints = (latlngs: LatLng[], emitEvent = false) => { - this.setLatLngs(latlngs); - this.recreateMarkers(); - this.recalcDistance(); - this.touchHinter.setLatLngs(latlngs); - - if (emitEvent) { - this.fire("latlngschange", { latlngs }); - } - }; - - createHintMarker = (latlng: LatLng): Marker => - marker(latlng, { - draggable: false, - icon: divIcon({ - className: "leaflet-vertex-drag-helper", - iconSize: [11, 11], - iconAnchor: [6, 6] - }) - }); - - createMarker = (latlng: LatLng): Marker => - marker(latlng, { - draggable: true, - icon: divIcon({ - className: "leaflet-vertex-icon", - iconSize: [11, 11], - iconAnchor: [6, 6] - }) - }) - .on("contextmenu", this.dropMarker) - .on("drag", this.onMarkerDrag) - .on("dragstart", this.onMarkerDragStart) - .on("dragend", this.onMarkerDragEnd) - .addTo(this.markerLayer); - - recreateMarkers = () => { - this.clearAllMarkers(); - const latlngs = this.getLatLngs(); - - if (!latlngs || latlngs.length === 0) return; - - latlngs.forEach(latlng => this.markers.push(this.createMarker(latlng))); - - this.updateMarkers(); - }; - - clearAllMarkers = (): void => { - this.markerLayer.clearLayers(); - this.markers = []; - }; - - updateMarkers = (): void => { - this.showVisibleMarkers(); - }; - - showAllMarkers = (): void => { - if (!this.is_editing) return; - if (this._map.hasLayer(this.markerLayer)) return; - - this._map.addLayer(this.markerLayer); - this.fire("allvertexshow"); - }; - - hideAllMarkers = (): void => { - if (!this._map.hasLayer(this.markerLayer)) return; - - this._map.removeLayer(this.markerLayer); - this.fire("allvertexhide"); - }; - - showVisibleMarkers = (): void => { - if (!this.is_editing) return; - - const northEast = this._map.getBounds().getNorthEast(); - const southWest = this._map.getBounds().getSouthWest(); - - const { visible, hidden } = this.markers.reduce( - (obj, marker) => { - const { lat, lng } = marker.getLatLng(); - const is_hidden = - lat > northEast.lat || - lng > northEast.lng || - lat < southWest.lat || - lng < southWest.lng; - - return is_hidden - ? { ...obj, hidden: [...obj.hidden, marker] } - : { ...obj, visible: [...obj.visible, marker] }; - }, - { visible: [], hidden: [] } - ); - - if (visible.length > this.maxMarkers) return this.hideAllMarkers(); - - this.showAllMarkers(); - - visible.forEach(marker => { - if (!this.markerLayer.hasLayer(marker)) this.markerLayer.addLayer(marker); - }); - - hidden.forEach(marker => { - if (this.markerLayer.hasLayer(marker)) - this.markerLayer.removeLayer(marker); - }); - }; - - editor = { - disable: () => { - this.hideAllMarkers(); - this.is_editing = false; - this.stopDragHinting(); - this.stopDrawing(); - this.touchHinter.removeFrom(this._map); - this.fire("editordisable"); - }, - enable: () => { - this.is_editing = true; - this.showVisibleMarkers(); - this.startDragHinting(); - this.touchHinter.addTo(this._map); - - this.fire("editorenable"); - }, - continue: () => { - this.is_drawing = true; - this.drawing_direction = "forward"; - this.startDrawing(); - }, - prepend: () => { - this.is_drawing = true; - this.drawing_direction = "backward"; - this.startDrawing(); - } - }; - - moveDragHint = ({ latlng }: LeafletMouseEvent): void => { - this.hintMarker.setLatLng(latlng); - }; - - hideDragHint = (): void => { - if (this._map.hasLayer(this.hintMarker)) - this._map.removeLayer(this.hintMarker); - }; - - showDragHint = (): void => { - this._map.addLayer(this.hintMarker); - }; - - startDragHinting = (): void => { - this.touchHinter.on("mousemove", this.moveDragHint); - this.touchHinter.on("mousedown", this.startDragHintMove); - this.touchHinter.on("mouseover", this.showDragHint); - this.touchHinter.on("mouseout", this.hideDragHint); - }; - - stopDragHinting = (): void => { - this.touchHinter.off("mousemove", this.moveDragHint); - this.touchHinter.off("mousedown", this.startDragHintMove); - this.touchHinter.off("mouseover", this.showDragHint); - this.touchHinter.off("mouseout", this.hideDragHint); - }; - - startDragHintMove = (event: LeafletMouseEvent): void => { - event.originalEvent.stopPropagation(); - event.originalEvent.preventDefault(); - - if (this.is_drawing) { - this.stopDrawing(); - this.is_drawing = true; - } - - const prev = this.dragHintFindNearest(event.latlng); - - if (prev < 0) return; - - this.hint_prev_marker = prev; - - this.constrLine.setLatLngs([]).addTo(this._map); - - this._map.dragging.disable(); - - this.is_dragging = true; - - this._map.on("mousemove", this.dragHintMove); - this._map.on("mouseup", this.dragHintAddMarker); - this._map.on("mouseout", this.stopDragHintMove); - }; - - stopDragHintMove = (): void => { - this._map.dragging.enable(); - - this.constrLine.removeFrom(this._map); - - this._map.off("mousemove", this.dragHintMove); - this._map.off("mouseup", this.dragHintAddMarker); - this._map.off("mouseout", this.stopDragHintMove); - - if (this.is_drawing) this.startDrawing(); - - setTimeout(() => { - this.is_dragging = false; - }, 0); - }; - - dragHintAddMarker = ({ latlng }: LeafletMouseEvent): void => { - this.dragHintChangeDistance(this.hint_prev_marker, latlng); - - this.markers.splice( - this.hint_prev_marker + 1, - 0, - this.createMarker(latlng) - ); - this.insertLatLng(latlng, this.hint_prev_marker + 1); - this.hideDragHint(); - this.stopDragHintMove(); - }; - - dragHintChangeDistance = (index: number, current: LatLngLiteral): void => { - const prev = this.markers[index]; - const next = this.markers[index + 1]; - - const initial_distance = distKmHaversine(prev.getLatLng(), next.getLatLng()); - - const current_distance = - ((prev && distKmHaversine(prev.getLatLng(), current)) || 0) + - ((next && distKmHaversine(next.getLatLng(), current)) || 0); - - this.distance += current_distance - initial_distance; - - this.fire("distancechange", { distance: this.distance }); - }; - - dragHintFindNearest = (latlng: LatLng): any => { - const latlngs = this.getLatLngs() as LatLng[]; - - const neighbours = latlngs - .filter((current, index) => { - const next = latlngs[index + 1] as LatLng; - - return next && pointInArea(current, next, latlng); - }) - .map(el => latlngs.indexOf(el)) - .sort( - (a, b) => - distToSegment(latlngs[a], latlngs[a + 1], latlng) - - distToSegment(latlngs[b], latlngs[b + 1], latlng) - ); - - return neighbours.length > 0 ? neighbours[0] : -1; - }; - - dragHintMove = (event: LeafletMouseEvent): void => { - event.originalEvent.stopPropagation(); - event.originalEvent.preventDefault(); - - this.setConstraints([ - this.markers[this.hint_prev_marker].getLatLng(), - event.latlng, - this.markers[this.hint_prev_marker + 1].getLatLng() - ]); - }; - - onMarkerDrag = ({ target }: { target: Marker }) => { - const coords = new Array(0) - .concat( - (this.vertex_index > 0 && - this.markers[this.vertex_index - 1].getLatLng()) || - [] - ) - .concat(target.getLatLng()) - .concat( - (this.vertex_index < this.markers.length - 1 && - this.markers[this.vertex_index + 1].getLatLng()) || - [] - ); - - this.setConstraints(coords); - - this.fire("vertexdrag", { index: this.vertex_index, vertex: target }); - }; - - onMarkerDragStart = ({ target }: { target: Marker }) => { - if (this.is_drawing) { - this.stopDrawing(); - this.is_drawing = true; - } - - if (this.is_dragging) this.stopDragHintMove(); - - this.vertex_index = this.markers.indexOf(target); - - this.is_dragging = true; - this.constrLine.addTo(this._map); - - this.fire("vertexdragstart", { index: this.vertex_index, vertex: target }); - }; - - onMarkerDragEnd = ({ target }: { target: Marker }): void => { - const latlngs = this.getLatLngs() as LatLngLiteral[]; - this.markerDragChangeDistance( - this.vertex_index, - latlngs[this.vertex_index], - target.getLatLng() - ); - - this.replaceLatlng(target.getLatLng(), this.vertex_index); - - this.is_dragging = false; - this.constrLine.removeFrom(this._map); - - this.vertex_index = null; - - if (this.is_drawing) this.startDrawing(); - - this.fire("vertexdragend", { index: this.vertex_index, vertex: target }); - }; - - markerDragChangeDistance = ( - index: number, - initial: LatLngLiteral, - current: LatLngLiteral - ): void => { - const prev = index > 0 ? this.markers[index - 1] : null; - const next = - index <= this.markers.length + 1 ? this.markers[index + 1] : null; - - const initial_distance = - ((prev && distKmHaversine(prev.getLatLng(), initial)) || 0) + - ((next && distKmHaversine(next.getLatLng(), initial)) || 0); - - const current_distance = - ((prev && distKmHaversine(prev.getLatLng(), current)) || 0) + - ((next && distKmHaversine(next.getLatLng(), current)) || 0); - - this.distance += current_distance - initial_distance; - - this.fire("distancechange", { distance: this.distance }); - }; - - startDrawing = (): void => { - this.is_drawing = true; - this.setConstraints([]); - this.constrLine.addTo(this._map); - this._map.on("mousemove", this.onDrawingMove); - this._map.on("click", this.onDrawingClick); - }; - - stopDrawing = (): void => { - this.constrLine.removeFrom(this._map); - this._map.off("mousemove", this.onDrawingMove); - this._map.off("click", this.onDrawingClick); - this.is_drawing = false; - }; - - onDrawingMove = ({ latlng }: LeafletMouseEvent): void => { - if (this.markers.length === 0) { - this.setConstraints([]); - return; - } - - if (!this._map.hasLayer(this.constrLine)) - this._map.addLayer(this.constrLine); - - const marker = - this.drawing_direction === "forward" - ? this.markers[this.markers.length - 1] - : this.markers[0]; - - this.setConstraints([latlng, marker.getLatLng()]); - }; - - onDrawingClick = (event: LeafletMouseEvent): void => { - if (this.is_dragging) return; - - const { latlng } = event; - - this.stopDrawing(); - - const latlngs = this.getLatLngs() as any[]; - - this.drawingChangeDistance(latlng); - - if (this.drawing_direction === "forward") { - latlngs.push(latlng); - this.markers.push(this.createMarker(latlng)); - } else { - latlngs.unshift(latlng); - this.markers.unshift(this.createMarker(latlng)); - } - - this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); - this.showVisibleMarkers(); - this.startDrawing(); - }; - - drawingChangeDistance = (latlng: LatLngLiteral): void => { - const latlngs = this.getLatLngs() as LatLngLiteral[]; - - if (latlngs.length < 1) { - this.distance = 0; - this.fire("distancechange", { distance: this.distance }); - return; - } - - const point = - this.drawing_direction === "forward" - ? latlngs[latlngs.length - 1] - : latlngs[0]; - - this.distance += distKmHaversine(point, latlng); - this.fire("distancechange", { distance: this.distance }); - }; - - replaceLatlng = (latlng: LatLng, index: number): void => { - const latlngs = this.getLatLngs() as LatLngLiteral[]; - latlngs.splice(index, 1, latlng); - this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); - }; - - insertLatLng = (latlng, index): void => { - const latlngs = this.getLatLngs(); - latlngs.splice(index, 0, latlng); - this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); - }; - - setConstraints = (coords: LatLng[]) => { - this.constrLine.setLatLngs(coords); - }; - - dropMarker = ({ target }: LeafletMouseEvent): void => { - const index = this.markers.indexOf(target); - const latlngs = this.getLatLngs(); - - if (typeof index === "undefined" || latlngs.length <= 2) return; - - this.dropMarkerDistanceChange(index); - this._map.removeLayer(this.markers[index]); - this.markers.splice(index, 1); - latlngs.splice(index, 1); - - this.setLatLngs(latlngs); - this.fire("latlngschange", { latlngs }); - }; - - dropMarkerDistanceChange = (index: number): void => { - const latlngs = this.getLatLngs() as LatLngLiteral[]; - - const prev = index > 0 ? latlngs[index - 1] : null; - const current = latlngs[index]; - const next = index <= latlngs.length + 1 ? latlngs[index + 1] : null; - - const initial_distance = - ((prev && distKmHaversine(prev, current)) || 0) + - ((next && distKmHaversine(next, current)) || 0); - - const current_distance = (prev && next && distKmHaversine(prev, next)) || 0; - - this.distance += current_distance - initial_distance; - - this.fire("distancechange", { distance: this.distance }); - }; - - recalcDistance = () => { - const latlngs = this.getLatLngs() as LatLngLiteral[]; - this.distance = getPolyLength(latlngs); - - this.fire("distancechange", { distance: this.distance }); - }; - - markers: Marker[] = []; - maxMarkers: InteractivePolylineOptions["maxMarkers"] = 2; - markerLayer: LayerGroup = new LayerGroup(); - - constraintsStyle: InteractivePolylineOptions["constraintsStyle"] = { - weight: 6, - color: "red", - dashArray: "10, 12", - opacity: 0.5, - interactive: false - }; - - touchHinter: Polyline = new Polyline([], { - weight: 24, - smoothFactor: 3, - className: "touch-hinter-poly" - }); - - hintMarker: Marker = this.createHintMarker(latLng({ lat: 0, lng: 0 })); - - constrLine: Polyline; - - is_editing: boolean = true; - is_dragging: boolean = false; - is_drawing: boolean = false; - - drawing_direction: "forward" | "backward" = "forward"; - vertex_index?: number = null; - - hint_prev_marker: number = null; - distance: number = 0; -} - -InteractivePoly.addInitHook(function() { - this.once("add", event => { - if (event.target instanceof InteractivePoly) { - this.map = event.target._map; - - this.markerLayer.addTo(event.target._map); - this.hintMarker.addTo(event.target._map); - this.constrLine.addTo(event.target._map); - this.touchHinter.addTo(event.target._map); - - this.map.on("moveend", this.updateMarkers); - - this.on("latlngschange", this.updateTouchHinter); - - if (window.innerWidth < 768) { - this.touchHinter.setStyle({ weight: 32 }); - } - } - }); - - this.once("remove", event => { - if (event.target instanceof InteractivePoly) { - this.markerLayer.removeFrom(this._map); - this.hintMarker.removeFrom(this._map); - this.constrLine.removeFrom(this._map); - this.touchHinter.removeFrom(this._map); - - this.map.off("moveend", this.updateMarkers); - } - }); -}); - -// export const InteractivePoly = Component; -/* - events: - vertexdragstart, - vertexdragend, - vertexdrag, - - allvertexhide - allvertexshow - - editordisable - editorenable - - distancechange - - latlngschange - */ diff --git a/src/_modules/KmMarks.ts b/src/_modules/KmMarks.ts deleted file mode 100644 index d44aa70..0000000 --- a/src/_modules/KmMarks.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from "leaflet"; -import { arrowClusterIcon, createArrow } from "~/utils/arrow"; -import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from "~/utils/geom"; -import classNames from 'classnames'; - -interface KmMarksOptions { - showMiddleMarkers: boolean, - showEndMarker: boolean, - kmMarksStep: number, -} - -class Component extends LayerGroup { - constructor(latlngs?: LatLngLiteral[], options?: KmMarksOptions){ - super(); - - this.options = { - showMiddleMarkers: true, - showEndMarker: true, - kmMarksStep: 10, - ...(options || {}), - } as KmMarksOptions; - } - - setLatLngs = (latlngs: LatLngLiteral[]): void => { - if (!this.map) return; - this.marksLayer.clearLayers(); - this.endMarker.clearLayers(); - - this.distance = 0; - - if (latlngs.length <= 1) return; - - if (this.options.showMiddleMarkers) this.drawMiddleMarkers(latlngs); - if (this.options.showEndMarker) this.drawEndMarker(latlngs); - }; - - drawMiddleMarkers = (latlngs: LatLngLiteral[]) => { - const kmMarks = {}; - let last_km_mark = 0; - - this.distance = latlngs.reduce((dist, current, index) => { - if (index >= latlngs.length - 1) return dist; - - const next = latlngs[index + 1]; - const diff = distKmHaversine(current, next); - const sum = dist + diff; - const rounded = Math.floor(sum / this.options.kmMarksStep) * this.options.kmMarksStep; - const count = Math.floor((rounded - last_km_mark) / this.options.kmMarksStep); - - if (rounded > last_km_mark) { - const angle = angleBetweenPoints( - this.map.latLngToContainerPoint(current), - this.map.latLngToContainerPoint(next), - ); - - for (let i = 1; i <= count; i += 1) { - const step = last_km_mark + (i * this.options.kmMarksStep); - const shift = (step - dist) / diff; - - const coords = { - lat: current.lat - ((current.lat - next.lat) * shift), - lng: current.lng - ((current.lng - next.lng) * shift), - }; - - kmMarks[step] = { ...coords, angle }; - this.marksLayer.addLayer(this.createMiddleMarker(coords, angle, step)); - } - - last_km_mark = rounded; - } - - return sum; - }, 0); - - }; - - createMiddleMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => marker(latlng, { - draggable: false, - interactive: false, - icon: divIcon({ - html: ` -
      - ${distance} -
      - `, - className: 'leaflet-km-marker', - iconSize: [11, 11], - iconAnchor: [6, 6] - }) - }); - - createEndMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => marker(latlng, { - draggable: false, - interactive: false, - icon: divIcon({ - html: ` -
      - ${parseFloat(distance.toFixed(1))} -
      - `, - className: classNames('leaflet-km-marker end-marker', { right: (angle > -90 && angle < 90) }), - iconSize: [11, 11], - iconAnchor: [6, 6] - }), - zIndexOffset: -100, - }); - - drawEndMarker = (latlngs: LatLngLiteral[]): void => { - this.endMarker.clearLayers(); - - const current = latlngs[latlngs.length - 2]; - const next = latlngs[latlngs.length - 1 - ]; - - const angle = angleBetweenPoints( - this.map.latLngToContainerPoint(current), - this.map.latLngToContainerPoint(next), - ); - - this.endMarker.addLayer(this.createEndMarker(next, angle, this.distance)); - }; - - options: KmMarksOptions; - map: Map; - marksLayer: MarkerClusterGroup = new MarkerClusterGroup({ - spiderfyOnMaxZoom: false, - showCoverageOnHover: false, - zoomToBoundsOnClick: false, - animate: false, - maxClusterRadius: 120, - iconCreateFunction: arrowClusterIcon, - }); - endMarker: LayerGroup = new LayerGroup(); - distance: number = 0; -} - - -Component.addInitHook(function () { - this.once('add', (event) => { - if (event.target instanceof KmMarks) { - this.map = event.target._map; - this.marksLayer.addTo(this.map); - this.endMarker.addTo(this.map); - } - }); - - this.once('remove', (event) => { - if (event.target instanceof KmMarks) { - this.marksLayer.removeFrom(this.map); - this.endMarker.removeFrom(this.map); - } - }); -}); - -export const KmMarks = Component; diff --git a/src/_modules/Map.ts b/src/_modules/Map.ts deleted file mode 100644 index 25ceece..0000000 --- a/src/_modules/Map.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { - Map as MapInterface, - map, - tileLayer, - TileLayer, -} from 'leaflet'; - -import 'leaflet/dist/leaflet.css'; -import { PROVIDER } from '~/config/frontend'; -import { DEFAULT_PROVIDER, PROVIDERS } from '~/constants/providers'; - -interface Props { - container: string -} - -export class Map { - constructor({ container }: Props) { - this.map = map(container).setView([55.0153275, 82.9071235], 13); - // todo: change coords? - - this.tileLayer.addTo(this.map); - } - - map: MapInterface; - tileLayer: TileLayer = tileLayer(PROVIDER.url, { - attribution: 'Независимое Велосообщество', - maxNativeZoom: 18, - maxZoom: 18, - }); - - setProvider = (provider: string): void => { - const { url } = (provider && PROVIDERS[provider] && PROVIDERS[provider]) || PROVIDERS[DEFAULT_PROVIDER]; - - this.tileLayer.setUrl(url); - } -} diff --git a/src/_modules/Poly.ts b/src/_modules/Poly.ts deleted file mode 100644 index fa10316..0000000 --- a/src/_modules/Poly.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { Map, LatLng } from 'leaflet'; -import { simplify } from '~/utils/simplify'; -import { editor, Editor } from "~/modules/Editor"; -import { ILatLng } from "~/modules/Stickers"; -import { InteractivePoly } from "~/modules/InteractivePoly"; -import { Arrows } from "~/modules/Arrows"; -import { KmMarks } from "~/modules/KmMarks"; -import { isMobile } from "~/utils/window"; - -interface Props { - map: Map; - editor: Editor; - routerMoveStart: typeof editor.routerMoveStart, - lockMapClicks: typeof editor.lockMapClicks, - setDistance: typeof editor.setDistance, - triggerOnChange: typeof editor.triggerOnChange, -} - -export class Poly { - constructor({ - map, routerMoveStart, lockMapClicks, setDistance, triggerOnChange, editor, - }: Props) { - this.poly = new InteractivePoly([ ], { - color: 'url(#activePathGradient)', - weight: 6, - maxMarkers: isMobile() ? 20 : 100, - smoothFactor: 3, - }) - .on('distancechange', this.onDistanceUpdate) - .on('allvertexhide', this.onVertexHide) - .on('allvertexshow', this.onVertexShow) - .on('latlngschange', this.updateMarks) - - this.poly.addTo(map); - this.editor = editor; - - this.map = map; - - this.routerMoveStart = routerMoveStart; - this.setDistance = setDistance; - this.triggerOnChange = triggerOnChange; - this.lockMapClicks = lockMapClicks; - - this.arrows = new Arrows({}).addTo(map); - this.kmMarks = new KmMarks().addTo(map); - } - - onDistanceUpdate = (event) => { - const { distance } = event as { distance: number }; - this.setDistance(parseFloat(distance.toFixed(2))); - }; - - onVertexHide = (): void => this.editor.setMarkersShown(false); - onVertexShow = (): void => this.editor.setMarkersShown(true); - - updateMarks = event => { - // this.editor.setChanged(true); - this.editor.triggerOnChange(); - - const { latlngs } = event; - this.arrows.setLatLngs(latlngs); - this.kmMarks.setLatLngs(latlngs); - }; - - continue = (): void => { - this.poly.editor.continue(); - }; - - stop = (): void => { - this.poly.stopDrawing(); - }; - - enableEditor = (): void => { - this.poly.editor.enable(); - }; - - setPoints = (latlngs: Array): void => { - if (!latlngs || latlngs.length <= 1) return; - this.poly.setPoints(latlngs); - }; - - pushPoints = (latlngs: Array): void => { - const { map } = this; - const simplified = simplify({ map, latlngs }); - const summary = [ - ...this.poly.getLatLngs(), - ...simplified, - ]; - - this.poly.setPoints(summary); - }; - - clearAll = (): void => { - this.poly.setPoints([]); - }; - - dumpData = (): Array => this.latlngs; - - get latlngs(): Array { - return ( - this.poly && this.poly.getLatLngs().length - && this.poly.getLatLngs().map(el => ({ ...el }))) || []; - } - - get isEmpty(): boolean { - return (!this.latlngs || Object.values(this.latlngs).length <= 0); - } - - arrows; - poly; - kmMarks; - - editor: Props['editor']; - map: Props['map']; - routerMoveStart: Props['routerMoveStart']; - setDistance: Props['setDistance']; - triggerOnChange: Props['triggerOnChange']; - lockMapClicks: Props['lockMapClicks']; -} diff --git a/src/_modules/Router.ts b/src/_modules/Router.ts deleted file mode 100644 index a8cf47a..0000000 --- a/src/_modules/Router.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { Map, Marker } from 'leaflet'; -import * as Routing from 'leaflet-routing-machine/src/index'; -import { CLIENT } from '~/config/frontend'; -import { DomMarker } from '~/utils/DomMarker'; -import { editor } from "~/modules/Editor"; - -interface ILatLng { - lat: number, lng: number -} - -interface IWaypoint { - latLng: ILatLng -} - -interface Props { - setIsRouting: typeof editor.setIsRouting, - map: Map, - setRouterPoints: typeof editor.setRouterPoints, - pushPolyPoints: typeof editor.pushPolyPoints, - lockMapClicks: typeof editor.lockMapClicks; -} - -export class Router { - constructor({ - map, lockMapClicks, setRouterPoints, pushPolyPoints, setIsRouting, - }: Props) { - this.waypoints = []; - this.lockMapClicks = lockMapClicks; - this.setRouterPoints = setRouterPoints; - this.pushPolyPoints = pushPolyPoints; - this.setIsRouting = setIsRouting; - - const routeLine = r => Routing.line(r, { - styles: [ - { color: 'white', opacity: 0.8, weight: 6 }, - { color: '#4597d0', opacity: 1, weight: 4, dashArray: '15,10' } - ], - addWaypoints: true, - }).on('linetouched', this.lockPropagations); - - this.router = Routing.control({ - serviceUrl: CLIENT.OSRM_URL, - profile: CLIENT.OSRM_PROFILE, - fitSelectedRoutes: false, - showAlternatives: false, - routeLine, - altLineOptions: { - styles: [{ color: '#4597d0', opacity: 1, weight: 3 }] - }, - show: false, - plan: Routing.plan([], { - createMarker: (i, wp) => new Marker(wp.latLng, { - draggable: true, - icon: this.createWaypointMarker(), - }), - routeWhileDragging: false, - }), - routeWhileDragging: false, - routingOptions: { - geometryOnly: false, - }, - useHints: false, - }) - .on('routingstart', this.showSpinner) - .on('routesfound routingerror routeselected routingzoomend', this.hideSpinner) - .on('waypointschanged', this.updateWaypointsCount); - - this.router.addTo(map); - } - - showSpinner = () => { - this.setIsRouting(true); - }; - - hideSpinner = () => { - this.setIsRouting(false); - }; - - pushWaypointOnClick = ({ latlng: { lat, lng } }: { latlng: ILatLng }): void => { - const waypoints = this.router.getWaypoints().filter(({ latLng }) => !!latLng); - this.router.setWaypoints([...waypoints, { lat, lng }]); - }; - - createWaypointMarker = (): DomMarker => { - const element = document.createElement('div'); - - element.addEventListener('mousedown', this.lockPropagations); - element.addEventListener('mouseup', this.unlockPropagations); - - return new DomMarker({ - element, - className: 'router-waypoint', - }); - }; - - lockPropagations = (): void => { - window.addEventListener('mouseup', this.unlockPropagations); - this.lockMapClicks(true); - }; - - unlockPropagations = (e): void => { - if (e && e.preventPropagations) { - e.preventDefault(); - e.preventPropagations(); - } - - window.removeEventListener('mouseup', this.unlockPropagations); - setTimeout(() => this.lockMapClicks(false), 0); - }; - - startFrom = (latlngs: ILatLng): void => { - const waypoints = this.router.getWaypoints(); - - if (waypoints && waypoints.length) { - waypoints[0] = { ...latlngs }; - this.router.setWaypoints(waypoints); - return; - } - - this.router.setWaypoints([{ ...latlngs }]); - }; - - moveStart = (latlng: ILatLng): void => { - const waypoints = this.router.getWaypoints(); - const { latLng }: { latLng: ILatLng } = (waypoints[0] || {}); - - if (!latLng || !latlng) return; - - if ( - latlng.lat.toFixed(5) === latLng.lat.toFixed(5) && - latlng.lng.toFixed(5) === latLng.lng.toFixed(5) - ) { - return; - } - - waypoints[0] = { ...latlng }; - - this.router.setWaypoints(waypoints); - }; - - updateWaypointsCount = (): void => { - const waypoints = this.router.getWaypoints().filter(({ latLng }) => !!latLng); - this.setRouterPoints(waypoints.length); - }; - - cancelDrawing = (): void => { - this.router.setWaypoints([]); - }; - - submitDrawing = (): void => { - const [route] = this.router._routes; - if (!route) return; - - const { coordinates } = route; - this.pushPolyPoints(coordinates); - - this.router.setWaypoints([]); - - // UNCOMMENT THIS TO CONTINUE DRAWING - // const waypoints = this.router.getWaypoints().filter(({ latLng }) => !!latLng); - // this.router.setWaypoints(waypoints[waypoints.length - 1]); - }; - - clearAll = (): void => { - this.router.setWaypoints([]); - }; - - waypoints: Array = []; - setIsRouting: Props['setIsRouting']; - lockMapClicks: Props['lockMapClicks']; - setRouterPoints: Props['setRouterPoints']; - pushPolyPoints: Props['pushPolyPoints']; - router: Routing; -} diff --git a/src/_modules/Sticker.tsx b/src/_modules/Sticker.tsx deleted file mode 100644 index ceec2c1..0000000 --- a/src/_modules/Sticker.tsx +++ /dev/null @@ -1,236 +0,0 @@ -import { Map, Marker, marker } from 'leaflet'; -import React from 'react'; -import { DomMarker } from '~/utils/DomMarker'; - -import { STICKERS } from '~/constants/stickers'; -import ReactDOM from 'react-dom'; -import { StickerDesc } from '~/components/StickerDesc'; -import classnames from 'classnames'; -import { getLabelDirection } from '~/utils/geom'; -import { ILatLng } from "~/modules/Stickers"; -import { IRootState } from "~/redux/user"; -import { Editor, editor } from "~/modules/Editor"; - -const getX = e => ( - e.touches && e.touches.length > 0 - ? { pageX: e.touches[0].pageX, pageY: e.touches[0].pageY } - : { pageX: e.pageX, pageY: e.pageY } -); - - -export interface IStickerDump { - latlng: ILatLng, - set: IRootState['activeSticker']['set'], - sticker: IRootState['activeSticker']['sticker'], - angle?: number, - text?: string, -} - -interface Props { - latlng: ILatLng; - map: Map; - sticker: IRootState['activeSticker']['sticker']; - set: IRootState['activeSticker']['set']; - angle?: number; - text?: string; - editor: Editor, - - deleteSticker: (sticker: this) => void; - - triggerOnChange: typeof editor.triggerOnChange; - lockMapClicks: typeof editor.lockMapClicks; -} - -export class Sticker { - constructor({ - latlng, deleteSticker, map, lockMapClicks, sticker, set, triggerOnChange, angle = 2.2, text = '', editor, - }: Props) { - this.text = text; - this.latlng = latlng; - this.angle = parseFloat(((angle && (angle % Math.PI)) || 2.2).toFixed(2)); - this.map = map; - this.sticker = sticker; - this.set = set; - this.triggerOnChange = triggerOnChange; - this.direction = getLabelDirection(this.angle); - this.deleteSticker = deleteSticker; - this.lockMapClicks = lockMapClicks; - this.editor = editor; - this.element = document.createElement('div'); - - ReactDOM.render( - -
      { this.stickerArrow = el; }} - /> -
      { this.stickerImage = el; }} - > - -
      -
      -
      - , - this.element - ); - - const mark = new DomMarker({ - element: this.element, - className: 'sticker-container', - }); - - this.marker = marker(latlng, { icon: mark, draggable: true }); - - this.marker.on('add', this.updateModeOnAdd); - - this.element.addEventListener('mouseup', this.onDragStop); - this.element.addEventListener('mouseup', this.preventPropagations); - - this.element.addEventListener('touchend', this.onDragStop); - this.element.addEventListener('touchend', this.preventPropagations); - - this.marker.on('dragend', this.triggerOnChange); - - this.setAngle(this.angle); - } - - updateModeOnAdd = () => { - if (this.editor.getEditing()) { - this.startEditing(); - } else { - this.stopEditing(); - } - }; - - setText = (text: Props['text']): void => { - this.text = text; - }; - - onDelete = (): void => { - if (!this.isDragging) this.deleteSticker(this); - }; - - onDragStart = (e): void => { - this.preventPropagations(e); - this.marker.dragging.disable(); - - this.isDragging = true; - - this.lockMapClicks(true); - - window.addEventListener('mousemove', this.onDrag); - window.addEventListener('touchmove', this.onDrag); - - window.addEventListener('mouseup', this.onDragStop); - window.addEventListener('touchend', this.onDragStop); - }; - - preventPropagations = (e): void => { - if (!e || !e.stopPropagation) return; - - e.stopPropagation(); - e.preventDefault(); - }; - - onDragStop = (e): void => { - this.preventPropagations(e); - this.marker.dragging.enable(); - - this.triggerOnChange(); - this.isDragging = false; - - window.removeEventListener('mousemove', this.onDrag); - window.removeEventListener('touchmove', this.onDrag); - - window.removeEventListener('mouseup', this.onDragStop); - window.removeEventListener('touchend', this.onDragStop); - - this.lockMapClicks(false); - }; - - onDrag = (e: DragEvent): void => { - this.preventPropagations(e); - this.estimateAngle(e); - }; - - estimateAngle = (e): void => { - const { x, y } = this.element.getBoundingClientRect() as DOMRect; - const { pageX, pageY } = getX(e); - - this.angle = parseFloat(Math.atan2((y - pageY), (x - pageX)).toFixed(2)); - - this.setAngle(this.angle); - }; - - setAngle = (angle: Props['angle']): void => { - if (!this.stickerImage) return; - - const direction = getLabelDirection(angle); - - if (direction !== this.direction) { - this.direction = direction; - this.stickerImage.className = `sticker-label ${direction}`; - } - - const rad = 56; - - const x = ((Math.cos(angle + Math.PI) * rad) - 30); - const y = ((Math.sin(angle + Math.PI) * rad) - 30); - - this.stickerImage.style.left = String(6 + x); - this.stickerImage.style.top = String(6 + y); - - this.stickerArrow.style.transform = `rotate(${angle + Math.PI}rad)`; - }; - - dumpData = (): IStickerDump => ({ - angle: this.angle, - latlng: { ...this.marker.getLatLng() }, - sticker: this.sticker, - set: this.set, - text: this.text, - }); - - stopEditing = (): void => { - this.element.className = 'sticker-container inactive'; - }; - - startEditing = (): void => { - this.element.className = 'sticker-container'; - }; - - element: HTMLDivElement = document.createElement('div'); - stickerImage: HTMLDivElement; - stickerArrow: HTMLDivElement; - marker: Marker; - isDragging: boolean = false; - direction: string; - editor: Editor; - - text: Props['text']; - latlng: Props['latlng']; - angle: Props['angle']; - map: Props['map']; - sticker: Props['sticker']; - set: Props['set']; - triggerOnChange: Props['triggerOnChange']; - - deleteSticker: Props['deleteSticker']; - lockMapClicks: Props['lockMapClicks']; -} diff --git a/src/_modules/Stickers.ts b/src/_modules/Stickers.ts deleted file mode 100644 index 4b42d74..0000000 --- a/src/_modules/Stickers.ts +++ /dev/null @@ -1,117 +0,0 @@ -import {FeatureGroup, LayerGroup, layerGroup, Map} from 'leaflet'; -import { IStickerDump, Sticker } from '~/modules/Sticker'; -import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { clusterIcon } from '~/utils/clusterIcon'; -import { editor, Editor } from "~/modules/Editor"; -import { STICKERS } from "~/constants/stickers"; - -export interface ILatLng { - lat: number, - lng: number, -} - -interface Props { - editor: Editor; - map: Map; - - triggerOnChange: typeof editor.triggerOnChange; - lockMapClicks: typeof editor.lockMapClicks; -} - -export class Stickers { - constructor({ map, lockMapClicks, triggerOnChange, editor }: Props) { - this.map = map; - this.triggerOnChange = triggerOnChange; - this.editor = editor; - - // this.clusterLayer.addTo(map); - // this.clusterLayer.on('animationend', this.onSpiderify); - - this.lockMapClicks = lockMapClicks; - this.stickers = []; - - this.layer.addTo(this.map); - } - - createSticker = ({ - latlng, sticker, angle = 2.2, text = '', set - }: IStickerDump): void => { - - if (!STICKERS[set] || !STICKERS[set].layers || !STICKERS[set].layers[sticker]) return; - - const marker = new Sticker({ - latlng, - angle, - deleteSticker: this.deleteStickerByReference, - map: this.map, - lockMapClicks: this.lockMapClicks, - sticker, - set, - triggerOnChange: this.triggerOnChange, - text, - editor: this.editor, - }); - - this.stickers.push(marker); - - marker.marker.addTo(this.layer); - - this.triggerOnChange(); - }; - - deleteStickerByReference = (ref: Sticker): void => { - const index = this.stickers.indexOf(ref); - - if (index < 0) return; - - // this.clusterLayer.removeLayer(ref.marker); - this.layer.removeLayer(ref.marker); - this.stickers.splice(index, 1); - - this.triggerOnChange(); - }; - - clearAll = (): void => { - const target = [...this.stickers]; - target.map(sticker => { - this.deleteStickerByReference(sticker); - return true; - }); - }; - - dumpData = (): Array => this.stickers.map(sticker => sticker.dumpData()); - - startEditing = (): void => { - this.stickers.map(sticker => sticker.startEditing()); - }; - - stopEditing = (): void => { - this.stickers.map(sticker => sticker.stopEditing()); - }; - - get isEmpty(): boolean { - return !this.stickers || this.stickers.length === 0 - }; - // clusterLayer: LayerGroup = new LayerGroup(); - - // uncomment to enable clustering - - // clusterLayer: MarkerClusterGroup = new MarkerClusterGroup({ - // spiderfyOnMaxZoom: false, - // showCoverageOnHover: false, - // zoomToBoundsOnClick: true, - // animate: false, - // maxClusterRadius: 8, - // // disableClusteringAtZoom: 13, - // iconCreateFunction: clusterIcon, - // }); - - editor: Props['editor']; - map: Props['map']; - - stickers: Array = []; - layer: FeatureGroup = new FeatureGroup(); - - triggerOnChange: Props['triggerOnChange']; - lockMapClicks: Props['lockMapClicks']; -} diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index 66d296d..a351192 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -32,20 +32,11 @@ const mapStateToProps = ({ user: { role }, }, }: IState) => { - if (routes.filter.max >= 9999) { - return { - routes, - editing, - ready: false, - role, - }; - } - return { role, routes, editing, - ready: true, + ready: routes.filter.max < 9999, }; }; diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index 467f91a..d75c166 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -89,18 +89,17 @@ const mapDispatchToProps = { editorRouterSubmit: EDITOR_ACTIONS.editorRouterSubmit, }; -type Props = ReturnType & typeof mapDispatchToProps & { }; +type Props = ReturnType & typeof mapDispatchToProps & {}; const RouterDialogUnconnected: FC = ({ editor: { router: { waypoints }, - is_routing, }, editorRouterCancel, editorRouterSubmit, }) => (
      -
      +
      {!waypoints.length && noPoints({ editorRouterCancel })} {waypoints.length === 1 && firstPoint({ editorRouterCancel })} diff --git a/src/components/maps/RouteRowDrop.tsx b/src/components/maps/RouteRowDrop.tsx index e85d756..5b03e4f 100644 --- a/src/components/maps/RouteRowDrop.tsx +++ b/src/components/maps/RouteRowDrop.tsx @@ -1,29 +1,25 @@ // @flow -import React from 'react'; -import { Icon } from '~/components/panels/Icon'; -import { MapListDialog } from "~/components/dialogs/MapListDialog"; -import { Tooltip } from "~/components/panels/Tooltip"; -import { ReactElement } from "react"; +import React, { FC, memo } from 'react'; +import { MapListDialog } from '~/components/dialogs/MapListDialog'; +import { ReactElement } from 'react'; interface Props { - address: string, - stopEditing: typeof MapListDialog.stopEditing, - dropRoute: typeof MapListDialog.dropRoute, + address: string; + stopEditing: typeof MapListDialog.stopEditing; + dropRoute: typeof MapListDialog.dropRoute; } -export const RouteRowDrop = ({ - address, stopEditing, dropRoute, -}: Props): ReactElement => ( -
      -
      +export const RouteRowDrop: FC = memo(({ address, stopEditing, dropRoute }) => ( +
      +
      -
      Удалить
      -
      Отмена
      +
      + Удалить +
      +
      + Отмена +
      -); +)); diff --git a/src/components/panels/DistanceBar.tsx b/src/components/panels/DistanceBar.tsx index 866537d..5c33ead 100644 --- a/src/components/panels/DistanceBar.tsx +++ b/src/components/panels/DistanceBar.tsx @@ -4,27 +4,24 @@ import { Icon } from '~/components/panels/Icon'; import { connect } from 'react-redux'; import Slider from 'rc-slider/lib/Slider'; import { editorSetSpeed } from '~/redux/editor/actions'; -import { Tooltip } from "~/components/panels/Tooltip"; -import { isMobile } from "~/utils/window"; +import { Tooltip } from '~/components/panels/Tooltip'; +import { isMobile } from '~/utils/window'; import { IState } from '~/redux/store'; +import pick from 'ramda/es/pick'; +import { selectEditor } from '~/redux/editor/selectors'; -function mapStateToProps(state) { - const { - editor: { distance, estimated, speed }, - }: IState = state; - - return { distance, estimated, speed }; -} +const mapStateToProps = (state: IState) => + pick(['distance', 'estimated', 'speed'], selectEditor(state)); const mapDispatchToProps = { editorSetSpeed }; type Props = ReturnType & typeof mapDispatchToProps & {}; interface State { - dialogOpened: boolean, + dialogOpened: boolean; } -class Component extends React.PureComponent { +class DistanceBarUnconnected extends React.PureComponent { constructor(props) { super(props); this.state = { @@ -36,10 +33,15 @@ class Component extends React.PureComponent { min: number = 5; max: number = 30; - marks: { [x: number]: string } = [...Array((Math.floor(this.max - this.min) / this.step) + 1)].reduce((obj, el, index) => ({ - ...obj, - [this.min + (index * this.step)]: String(this.min + (index * this.step)), - }), { }); + marks: { [x: number]: string } = [ + ...Array(Math.floor(this.max - this.min) / this.step + 1), + ].reduce( + (obj, el, index) => ({ + ...obj, + [this.min + index * this.step]: String(this.min + index * this.step), + }), + {} + ); toggleDialog = () => { if (isMobile()) return; @@ -51,10 +53,12 @@ class Component extends React.PureComponent { const { props: { distance, estimated, speed }, state: { dialogOpened }, - min, max, step, marks, + min, + max, + step, + marks, } = this; - return (
      @@ -65,8 +69,7 @@ class Component extends React.PureComponent {
      {toHours(estimated)}
      - { - dialogOpened && + {dialogOpened && (
      { />
      - } + )}
      ); } } -export const DistanceBar = connect( - mapStateToProps, - mapDispatchToProps -)(Component); +export const DistanceBar = connect(mapStateToProps, mapDispatchToProps)(DistanceBarUnconnected); diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index ef4bf4d..54382b0 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -4,7 +4,6 @@ import classnames from 'classnames'; import { Icon } from '~/components/panels/Icon'; import { EditorDialog } from '~/components/panels/EditorDialog'; -import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { editorSetMode, @@ -16,10 +15,10 @@ import { import { Tooltip } from '~/components/panels/Tooltip'; import { IState } from '~/redux/store'; import { selectEditor } from '~/redux/editor/selectors'; +import pick from 'ramda/es/pick'; -const mapStateToProps = (state: IState) => ({ - editor: selectEditor(state), -}); +const mapStateToProps = (state: IState) => + pick(['mode', 'changed', 'editing', 'features'], selectEditor(state)); const mapDispatchToProps = { editorSetMode, @@ -54,18 +53,15 @@ class EditorPanelUnconnected extends PureComponent { startRouterMode = () => this.props.editorSetMode(MODES.ROUTER); startTrashMode = () => this.props.editorSetMode(MODES.TRASH); startSaveMode = () => { - // if (!this.props.changed) return; this.props.editorSetMode(MODES.SAVE); }; render() { const { - editor: { - mode, - changed, - editing, - features: { routing }, - }, + mode, + changed, + editing, + features: { routing }, } = this.props; return ( diff --git a/src/components/panels/Icon.tsx b/src/components/panels/Icon.tsx index 62354f1..a381018 100644 --- a/src/components/panels/Icon.tsx +++ b/src/components/panels/Icon.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import React, { memo } from 'react'; -export const Icon = ({ icon, size = 32 }: { icon: string, size?: number }) => ( +export const Icon = memo(({ icon, size = 32 }: { icon: string; size?: number }) => ( @@ -9,5 +9,4 @@ export const Icon = ({ icon, size = 32 }: { icon: string, size?: number }) => ( -); - +)); diff --git a/src/components/panels/TopLeftPanel.tsx b/src/components/panels/TopLeftPanel.tsx index 44acce7..aa7b902 100644 --- a/src/components/panels/TopLeftPanel.tsx +++ b/src/components/panels/TopLeftPanel.tsx @@ -1,10 +1,10 @@ -import React from 'react'; +import React, { memo } from 'react'; import { UserLocation } from '~/components/UserLocation'; import { DistanceBar } from '~/components/panels/DistanceBar'; -export const TopLeftPanel = () => ( +export const TopLeftPanel = memo(() => (
      -); +)); diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index 9394433..5b6278c 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -9,11 +9,14 @@ import { MODES } from '~/constants/modes'; import { Tooltip } from '~/components/panels/Tooltip'; import { selectMap } from '~/redux/map/selectors'; import { selectEditor } from '~/redux/editor/selectors'; +import { IState } from '~/redux/store'; -const mapStateToProps = state => ({ - map: selectMap(state), - editor: selectEditor(state), -}); +const mapStateToProps = (state: IState) => { + const { provider, logo } = selectMap(state); + const { markers_shown, editing } = selectEditor(state); + + return { provider, logo, markers_shown, editing }; +}; const mapDispatchToProps = { editorSetMode: EDITOR_ACTIONS.editorSetMode, @@ -22,8 +25,10 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & {}; const TopRightPanelUnconnected = ({ - map: { provider, logo }, - editor: { markers_shown, editing }, + provider, + logo, + markers_shown, + editing, editorSetMode, }: Props) => { const startProviderMode = useCallback(() => editorSetMode(MODES.PROVIDER), [editorSetMode]); diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index d4049fc..112e0f4 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -19,21 +19,18 @@ import { CLIENT } from '~/config/frontend'; import { DIALOGS, TABS } from '~/constants/dialogs'; import { Tooltip } from '~/components/panels/Tooltip'; import { TitleDialog } from '~/components/dialogs/TitleDialog'; +import { IState } from '~/redux/store'; const mapStateToProps = ({ user: { user }, editor: { dialog, dialog_active }, map: { route, stickers }, -}) => ({ - editor: { - dialog, - dialog_active, - }, - user: { user }, - map: { - route, - stickers, - } +}: IState) => ({ + dialog, + dialog_active, + user, + route, + stickers, }); const mapDispatchToProps = { @@ -100,7 +97,7 @@ export class UserPanelUnconnected extends PureComponent { openAppInfoDialog = () => { this.setMenuOpened(); this.props.editorSetDialog(DIALOGS.APP_INFO); - this.props.editorSetDialogActive(this.props.editor.dialog !== DIALOGS.APP_INFO); + this.props.editorSetDialogActive(this.props.dialog !== DIALOGS.APP_INFO); }; openOauthFrame = () => { @@ -118,7 +115,7 @@ export class UserPanelUnconnected extends PureComponent { render() { const { - props: { user: { user }, editor: { dialog, dialog_active }, map: { route, stickers } }, + props: { user, dialog, dialog_active, route, stickers }, state: { menuOpened }, } = this; diff --git a/src/components/user/UserButton.tsx b/src/components/user/UserButton.tsx index 2ab1bf2..d013294 100644 --- a/src/components/user/UserButton.tsx +++ b/src/components/user/UserButton.tsx @@ -1,25 +1,22 @@ // @flow -import React from "react"; -import { UserPicture } from "~/components/user/UserPicture"; -import { IUser } from "~/constants/auth"; +import React, { FC, memo } from 'react'; +import { UserPicture } from '~/components/user/UserPicture'; +import { IUser } from '~/constants/auth'; interface Props { user: IUser; setMenuOpened: () => void; } -export const UserButton = ({ - setMenuOpened, - user: { uid, photo, name } -}: Props) => ( +export const UserButton: FC = memo(({ setMenuOpened, user: { uid, photo, name } }) => (
      -
      {name || uid || "..."}
      -
      {uid || "пользователь"}
      +
      {name || uid || '...'}
      +
      {uid || 'пользователь'}
      -); +)); diff --git a/src/containers/App.tsx b/src/containers/App.tsx index e7c7c85..3be17a4 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -32,7 +32,7 @@ type Props = { editorSetDialogActive: typeof editorSetDialogActive; }; -const Component = (props: Props) => ( +const AppUnconnected = (props: Props) => (
      @@ -72,6 +72,8 @@ const mapStateToProps = ({ set, }); -const mapDispatchToProps = dispatch => - bindActionCreators({ editorHideRenderer, editorSetDialogActive }, dispatch); -export const App = connect(mapStateToProps, mapDispatchToProps)(hot(module)(Component)); +const mapDispatchToProps = { editorHideRenderer, editorSetDialogActive }; + +const App = connect(mapStateToProps, mapDispatchToProps)(hot(module)(AppUnconnected)); + +export { App }; diff --git a/src/containers/LeftDialog.tsx b/src/containers/LeftDialog.tsx index f22a993..4455738 100644 --- a/src/containers/LeftDialog.tsx +++ b/src/containers/LeftDialog.tsx @@ -1,4 +1,4 @@ -import React, { createElement } from 'react'; +import React, { createElement, FC, memo } from 'react'; import { DIALOGS, IDialogs } from '~/constants/dialogs'; import classnames from 'classnames'; import { AppInfoDialog } from '~/components/dialogs/AppInfoDialog'; @@ -17,7 +17,7 @@ const LEFT_DIALOGS = { [DIALOGS.APP_INFO]: AppInfoDialog, }; -const LeftDialog = ({ dialog, dialog_active, editorSetDialogActive }: Props) => ( +const LeftDialog: FC = memo(({ dialog, dialog_active, editorSetDialogActive }) => ( {Object.keys(LEFT_DIALOGS).map(item => (
      > {dialog && LEFT_DIALOGS[item] && createElement(LEFT_DIALOGS[item], {})} -
      editorSetDialogActive(false)}> +
      editorSetDialogActive(false)} + >
      -
      editorSetDialogActive(false)}> +
      editorSetDialogActive(false)} + >
      ))} -); +)); export { LeftDialog }; diff --git a/src/containers/map/Route/index.tsx b/src/containers/map/Route/index.tsx index 2fb157e..f7c0a54 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/containers/map/Route/index.tsx @@ -1,6 +1,6 @@ import React, { FC, useEffect, memo, useState, useCallback } from 'react'; import { IMapRoute } from '../../../redux/map/types'; -import { InteractivePoly } from '~/utils/polyline'; +import { InteractivePoly } from '~/utils/map/InteractivePoly'; import { isMobile } from '~/utils/window'; import { LatLng, Map, LeafletEvent } from 'leaflet'; import { selectEditor } from '~/redux/editor/selectors'; diff --git a/src/containers/map/Router/index.tsx b/src/containers/map/Router/index.tsx index ad25411..a2dd2dd 100644 --- a/src/containers/map/Router/index.tsx +++ b/src/containers/map/Router/index.tsx @@ -1,6 +1,6 @@ -import React, { FC, useEffect, useMemo, useCallback, memo } from 'react'; +import { FC, useEffect, useCallback, memo } from 'react'; import pick from 'ramda/es/pick'; -import { OsrmRouter } from '~/utils/osrm'; +import { OsrmRouter } from '~/utils/map/OsrmRouter'; import { connect } from 'react-redux'; import { selectMap } from '~/redux/map/selectors'; import { selectEditorRouter, selectEditorMode } from '~/redux/editor/selectors'; diff --git a/src/containers/map/Sticker/index.tsx b/src/containers/map/Sticker/index.tsx index c8567fb..a128a26 100644 --- a/src/containers/map/Sticker/index.tsx +++ b/src/containers/map/Sticker/index.tsx @@ -4,7 +4,7 @@ import { IStickerDump } from '~/redux/map/types'; import { STICKERS } from '~/constants/stickers'; import { StickerDesc } from '~/components/StickerDesc'; import classNames from 'classnames'; -import { DomMarker } from '~/utils/DomMarker'; +import { DomMarker } from '~/utils/map/DomMarker'; import { createPortal } from 'react-dom'; import { MapContainer, MainMap } from '~/constants/map'; diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 24ddb3a..e0c1ba7 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -42,7 +42,7 @@ import { LOGOS } from '~/constants/logos'; import { loadMapFromPath } from '../map/sagas'; import { mapClicked, mapSetRoute } from '../map/actions'; import { MAP_ACTIONS } from '../map/constants'; -import { OsrmRouter } from '~/utils/osrm'; +import { OsrmRouter } from '~/utils/map/OsrmRouter'; import path from 'ramda/es/path'; import { MainMap } from '~/constants/map'; import { EDITOR_INITIAL_STATE } from '.'; @@ -236,7 +236,7 @@ function* mapClick({ latlng }: ReturnType) { function* routerSubmit() { const route: ReturnType = yield select(selectMapRoute); - const latlngs = path(['_routes', 0, 'coordinates'], OsrmRouter); + const latlngs: LatLng[] = path(['_routes', 0, 'coordinates'], OsrmRouter); const coordinates = simplify({ map: MainMap, latlngs }); diff --git a/src/utils/arrow.ts b/src/utils/arrow.ts index ae52e2a..bfbc909 100644 --- a/src/utils/arrow.ts +++ b/src/utils/arrow.ts @@ -23,11 +23,6 @@ export const createArrow = (latlng: LatLngLiteral, angle: number): Marker => mar export const arrowClusterIcon = (cluster): DivIcon => { const markers = cluster.getAllChildMarkers(); - // search for nearest marker to cluster (slow) - // const nearest = markers.sort((a, b) => ( - // dist2(a.getLatLng(), cluster.getLatLng()) - dist2(b.getLatLng(), cluster.getLatLng()) - // )); - // faster way cluster.setLatLng(markers[markers.length - 1].getLatLng()); return markers[markers.length - 1].options.icon; diff --git a/src/_modules/Arrows.ts b/src/utils/map/Arrows.ts similarity index 100% rename from src/_modules/Arrows.ts rename to src/utils/map/Arrows.ts diff --git a/src/utils/DomMarker.js b/src/utils/map/DomMarker.js similarity index 94% rename from src/utils/DomMarker.js rename to src/utils/map/DomMarker.js index a2f2d1e..a8ca9d0 100644 --- a/src/utils/DomMarker.js +++ b/src/utils/map/DomMarker.js @@ -15,7 +15,7 @@ export const DomMarker = DivIcon.extend({ this._setIconStyles(element, 'icon'); - return element; + return element; } }); diff --git a/src/utils/polyline.ts b/src/utils/map/InteractivePoly.ts similarity index 99% rename from src/utils/polyline.ts rename to src/utils/map/InteractivePoly.ts index f209dd2..c2037ba 100644 --- a/src/utils/polyline.ts +++ b/src/utils/map/InteractivePoly.ts @@ -576,7 +576,6 @@ InteractivePoly.addInitHook(function() { }); }); -// export const InteractivePoly = Component; /* events: vertexdragstart, diff --git a/src/utils/osrm.ts b/src/utils/map/OsrmRouter.ts similarity index 96% rename from src/utils/osrm.ts rename to src/utils/map/OsrmRouter.ts index 9f12dc8..3e30da2 100644 --- a/src/utils/osrm.ts +++ b/src/utils/map/OsrmRouter.ts @@ -1,7 +1,7 @@ import { Marker } from 'leaflet'; import * as Routing from 'leaflet-routing-machine/src/index'; import { CLIENT } from '~/config/frontend'; -import { DomMarker } from '~/utils/DomMarker'; +import { DomMarker } from '~/utils/map/DomMarker'; import { MainMap } from '~/constants/map'; const createWaypointMarker = (): DomMarker => { diff --git a/src/utils/clusterIcon.ts b/src/utils/map/clusterIcon.ts similarity index 100% rename from src/utils/clusterIcon.ts rename to src/utils/map/clusterIcon.ts From de2b747a20ce2185c30ba94100bae29c2ddfe538 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 12:03:02 +0700 Subject: [PATCH 155/320] Arrows layer --- src/containers/App.tsx | 2 +- src/map/Arrows/index.tsx | 35 +++++++++++++++++++ src/{containers => }/map/KmMarks/index.tsx | 11 +++--- src/{containers => }/map/Map/index.tsx | 14 ++++---- src/{containers => }/map/Route/index.tsx | 3 +- src/{containers => }/map/Router/index.tsx | 0 src/{containers => }/map/Sticker/index.tsx | 0 src/{containers => }/map/Stickers/index.tsx | 2 +- src/{containers => }/map/TileLayer/index.tsx | 2 +- src/modules/Map.ts | 36 -------------------- src/utils/map/{Arrows.ts => ArrowsLayer.ts} | 10 +++--- 11 files changed, 57 insertions(+), 58 deletions(-) create mode 100644 src/map/Arrows/index.tsx rename src/{containers => }/map/KmMarks/index.tsx (78%) rename src/{containers => }/map/Map/index.tsx (88%) rename src/{containers => }/map/Route/index.tsx (96%) rename src/{containers => }/map/Router/index.tsx (100%) rename src/{containers => }/map/Sticker/index.tsx (100%) rename src/{containers => }/map/Stickers/index.tsx (96%) rename src/{containers => }/map/TileLayer/index.tsx (95%) delete mode 100644 src/modules/Map.ts rename src/utils/map/{Arrows.ts => ArrowsLayer.ts} (88%) diff --git a/src/containers/App.tsx b/src/containers/App.tsx index 3be17a4..e109b32 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -16,7 +16,7 @@ import { LogoPreview } from '~/components/logo/LogoPreview'; import { IStickerPack } from '~/constants/stickers'; import { IDialogs } from '~/constants/dialogs'; -import { Map } from '~/containers/map/Map'; +import { Map } from '~/map/Map'; import { IEditorState } from '~/redux/editor'; import { IState } from '~/redux/store'; diff --git a/src/map/Arrows/index.tsx b/src/map/Arrows/index.tsx new file mode 100644 index 0000000..fa4dbb0 --- /dev/null +++ b/src/map/Arrows/index.tsx @@ -0,0 +1,35 @@ +import { FC, memo, useState, useEffect } from 'react'; +import { MainMap } from '~/constants/map'; +import { connect } from 'react-redux'; +import { IState } from '~/redux/store'; +import { selectMapRoute } from '~/redux/map/selectors'; +import { ArrowsLayer } from '~/utils/map/ArrowsLayer'; + +const mapStateToProps = (state: IState) => ({ + route: selectMapRoute(state), +}); + +const mapDispatchToProps = {}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + +const ArrowsUnconnected: FC = memo(({ route }) => { + const [layer, setLayer] = useState(null); + + useEffect(() => { + const item = new ArrowsLayer({}).addTo(MainMap); + setLayer(item); + return () => MainMap.removeLayer(item); + }, [MainMap]); + + useEffect(() => { + if (!layer) return + + layer.setLatLngs(route); + }, [layer, route]) + return null; +}); + +const Arrows = connect(mapStateToProps, mapDispatchToProps)(ArrowsUnconnected); + +export { Arrows }; diff --git a/src/containers/map/KmMarks/index.tsx b/src/map/KmMarks/index.tsx similarity index 78% rename from src/containers/map/KmMarks/index.tsx rename to src/map/KmMarks/index.tsx index 2b06992..2440e96 100644 --- a/src/containers/map/KmMarks/index.tsx +++ b/src/map/KmMarks/index.tsx @@ -1,20 +1,19 @@ -import React, { FC, useEffect, useState } from 'react'; +import React, { FC, useEffect, useState, memo } from 'react'; import { KmMarksLayer } from '~/utils/marks'; import { MainMap } from '~/constants/map'; import { selectMap } from '~/redux/map/selectors'; import pick from 'ramda/es/pick'; import { connect } from 'react-redux'; +import { IState } from '~/redux/store'; -const mapStateToProps = state => ({ +const mapStateToProps = (state: IState) => ({ map: pick(['route'], selectMap(state)), }); const mapDispatchToProps = {}; type Props = ReturnType & typeof mapDispatchToProps & {}; -const KmMarksUnconnected: FC = ({ - map: { route }, -}) => { +const KmMarksUnconnected: FC = memo(({ map: { route } }) => { const [layer, setLayer] = useState(null); useEffect(() => { @@ -30,7 +29,7 @@ const KmMarksUnconnected: FC = ({ layer.setLatLngs(route); }, [layer, route]); return null; -}; +}); const KmMarks = connect(mapStateToProps, mapDispatchToProps)(KmMarksUnconnected); diff --git a/src/containers/map/Map/index.tsx b/src/map/Map/index.tsx similarity index 88% rename from src/containers/map/Map/index.tsx rename to src/map/Map/index.tsx index 1671d2d..3016e40 100644 --- a/src/containers/map/Map/index.tsx +++ b/src/map/Map/index.tsx @@ -6,11 +6,12 @@ import { selectMapProvider, selectMapRoute, selectMapStickers } from '~/redux/ma import { connect } from 'react-redux'; import * as MAP_ACTIONS from '~/redux/map/actions'; -import { Route } from '~/containers/map/Route'; -import { Router } from '~/containers/map/Router'; -import { TileLayer } from '~/containers/map/TileLayer'; -import { Stickers } from '~/containers/map/Stickers'; -import { KmMarks } from '~/containers/map/KmMarks'; +import { Route } from '~/map/Route'; +import { Router } from '~/map/Router'; +import { TileLayer } from '~/map/TileLayer'; +import { Stickers } from '~/map/Stickers'; +import { KmMarks } from '~/map/KmMarks'; +import { Arrows } from '~/map/Arrows'; import 'leaflet/dist/leaflet.css'; import { selectEditorEditing, selectEditorMode } from '~/redux/editor/selectors'; @@ -74,9 +75,10 @@ const MapUnconnected: React.FC = ({ /> - + +
      , document.getElementById('canvas') ); diff --git a/src/containers/map/Route/index.tsx b/src/map/Route/index.tsx similarity index 96% rename from src/containers/map/Route/index.tsx rename to src/map/Route/index.tsx index f7c0a54..993e256 100644 --- a/src/containers/map/Route/index.tsx +++ b/src/map/Route/index.tsx @@ -1,8 +1,7 @@ import React, { FC, useEffect, memo, useState, useCallback } from 'react'; -import { IMapRoute } from '../../../redux/map/types'; import { InteractivePoly } from '~/utils/map/InteractivePoly'; import { isMobile } from '~/utils/window'; -import { LatLng, Map, LeafletEvent } from 'leaflet'; +import { LatLng } from 'leaflet'; import { selectEditor } from '~/redux/editor/selectors'; import pick from 'ramda/es/pick'; import * as MAP_ACTIONS from '~/redux/map/actions'; diff --git a/src/containers/map/Router/index.tsx b/src/map/Router/index.tsx similarity index 100% rename from src/containers/map/Router/index.tsx rename to src/map/Router/index.tsx diff --git a/src/containers/map/Sticker/index.tsx b/src/map/Sticker/index.tsx similarity index 100% rename from src/containers/map/Sticker/index.tsx rename to src/map/Sticker/index.tsx diff --git a/src/containers/map/Stickers/index.tsx b/src/map/Stickers/index.tsx similarity index 96% rename from src/containers/map/Stickers/index.tsx rename to src/map/Stickers/index.tsx index bd6fa33..d7d98f8 100644 --- a/src/containers/map/Stickers/index.tsx +++ b/src/map/Stickers/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { IStickerDump } from '~/redux/map/types'; import { FeatureGroup, Map } from 'leaflet'; -import { Sticker } from '~/containers/map/Sticker'; +import { Sticker } from '~/map/Sticker'; import { mapSetSticker, mapDropSticker } from '~/redux/map/actions'; import { MapContainer, MainMap } from '~/constants/map'; diff --git a/src/containers/map/TileLayer/index.tsx b/src/map/TileLayer/index.tsx similarity index 95% rename from src/containers/map/TileLayer/index.tsx rename to src/map/TileLayer/index.tsx index 15296f1..f01b676 100644 --- a/src/containers/map/TileLayer/index.tsx +++ b/src/map/TileLayer/index.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { TileContext } from "../../../utils/context"; +import { TileContext } from "~/utils/context"; import { TileLayer as TileLayerInterface, tileLayer, Map } from "leaflet"; import { DEFAULT_PROVIDER, PROVIDERS } from "~/constants/providers"; import { IMapReducer } from "~/redux/map"; diff --git a/src/modules/Map.ts b/src/modules/Map.ts deleted file mode 100644 index 354845a..0000000 --- a/src/modules/Map.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { - Map as MapInterface, - map, - tileLayer, - TileLayer, -} from 'leaflet'; - -import 'leaflet/dist/leaflet.css'; -import { PROVIDER } from '$config/frontend'; // -import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; - -interface Props { - container: string -} - -export class Map { - constructor({ container }: Props) { - this.map = map(container).setView([55.0153275, 82.9071235], 13); - // todo: change coords? - - this.tileLayer.addTo(this.map); - } - - map: MapInterface; - tileLayer: TileLayer = tileLayer(PROVIDER.url, { - attribution: 'Независимое Велосообщество', - maxNativeZoom: 18, - maxZoom: 18, - }); - - setProvider = (provider: string): void => { - const { url } = (provider && PROVIDERS[provider] && PROVIDERS[provider]) || PROVIDERS[DEFAULT_PROVIDER]; - - this.tileLayer.setUrl(url); - } -} diff --git a/src/utils/map/Arrows.ts b/src/utils/map/ArrowsLayer.ts similarity index 88% rename from src/utils/map/Arrows.ts rename to src/utils/map/ArrowsLayer.ts index 5e89229..149f639 100644 --- a/src/utils/map/Arrows.ts +++ b/src/utils/map/ArrowsLayer.ts @@ -3,7 +3,7 @@ import { arrowClusterIcon, createArrow } from "~/utils/arrow"; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; import { angleBetweenPoints, dist2, middleCoord } from "~/utils/geom"; -class Component extends LayerGroup { +class ArrowsLayer extends LayerGroup { constructor(props){ super(props); } @@ -47,19 +47,19 @@ class Component extends LayerGroup { } -Component.addInitHook(function () { +ArrowsLayer.addInitHook(function () { this.once('add', (event) => { - if (event.target instanceof Arrows) { + if (event.target instanceof ArrowsLayer) { this.map = event.target._map; this.arrowLayer.addTo(this.map); } }); this.once('remove', (event) => { - if (event.target instanceof Arrows) { + if (event.target instanceof ArrowsLayer) { this.arrowLayer.removeFrom(this.map); } }); }); -export const Arrows = Component; +export { ArrowsLayer }; From 58427e7017c396b849d957201edebdd19a469da5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 16:19:08 +0700 Subject: [PATCH 156/320] optimized arrows a little bit --- src/map/Map/index.tsx | 2 +- src/utils/arrow.ts | 33 ++-- src/utils/map/ArrowsLayer.ts | 345 ++++++++++++++++++++++++++++++++--- 3 files changed, 336 insertions(+), 44 deletions(-) diff --git a/src/map/Map/index.tsx b/src/map/Map/index.tsx index 3016e40..7ca22ef 100644 --- a/src/map/Map/index.tsx +++ b/src/map/Map/index.tsx @@ -76,7 +76,7 @@ const MapUnconnected: React.FC = ({ - +
      , diff --git a/src/utils/arrow.ts b/src/utils/arrow.ts index bfbc909..ccf7586 100644 --- a/src/utils/arrow.ts +++ b/src/utils/arrow.ts @@ -1,24 +1,27 @@ -import { divIcon, LatLngLiteral, Marker, marker, DivIcon } from "leaflet"; +import { divIcon, LatLngLiteral, Marker, marker, DivIcon } from 'leaflet'; const arrow_image = require('~/sprites/arrow.svg'); -// -export const createArrow = (latlng: LatLngLiteral, angle: number): Marker => marker(latlng, { - draggable: false, - interactive: false, - icon: divIcon({ +export const createArrowIcon = (angle: number) => + divIcon({ html: ` -
      - - - -
      - `, +
      + + + +
      + `, className: 'leaflet-arrow-icon', iconSize: [11, 11], - iconAnchor: [6, 6] - }) -}); + iconAnchor: [6, 6], + }); + +export const createArrow = (latlng: LatLngLiteral, angle: number): Marker => + new Marker(latlng, { + draggable: false, + interactive: false, + icon: createArrowIcon(angle), + }); export const arrowClusterIcon = (cluster): DivIcon => { const markers = cluster.getAllChildMarkers(); diff --git a/src/utils/map/ArrowsLayer.ts b/src/utils/map/ArrowsLayer.ts index 149f639..bcc4ab2 100644 --- a/src/utils/map/ArrowsLayer.ts +++ b/src/utils/map/ArrowsLayer.ts @@ -1,61 +1,350 @@ -import { LatLngLiteral, LayerGroup, Map } from "leaflet"; -import { arrowClusterIcon, createArrow } from "~/utils/arrow"; +import { LatLngLiteral, LayerGroup, Map, LatLng, Marker, marker } from 'leaflet'; +import { arrowClusterIcon, createArrow, createArrowIcon } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; -import { angleBetweenPoints, dist2, middleCoord } from "~/utils/geom"; +import { angleBetweenPoints, dist2, middleCoord } from '~/utils/geom'; + +interface MidPoint { + latlng: LatLngLiteral; + angle: number; +} + +// interface IPrevState { +// route: LatLngLiteral[]; +// markers: Marker[]; +// midpoints: MidPoint[]; +// } class ArrowsLayer extends LayerGroup { - constructor(props){ + /* + without remove optimization + + first: + recalc: 5.469970703125ms + remove: 0.203857421875ms + add: 53.658935546875ms + total: 60.986083984375ms + + last: + recalc: 0.010986328125ms + remove: 0.220947265625ms + add: 0.580078125ms + total: 2.721923828125ms + + with remove optimization + */ + + constructor(props) { super(props); } - setLatLngs = (latlngs: LatLngLiteral[]): void => { + getChangeIndex = (prev: LatLngLiteral[], next: LatLngLiteral[]): number => { + const changed_at = next.findIndex( + (item, index) => !prev[index] || prev[index].lat != item.lat || prev[index].lng != item.lng + ); + + return changed_at >= 0 ? changed_at : next.length; + }; + + // Reacreating all the markers + + setLatLngs = (route: LatLngLiteral[]): void => { if (!this.map) return; this.arrowLayer.clearLayers(); - if (latlngs.length === 0) return; + if (route.length === 0) return; - const midpoints = latlngs.reduce((res, latlng, i) => ( - latlngs[i + 1] && dist2(latlngs[i], latlngs[i + 1]) > 0.00005 - ? [ - ...res, - { - latlng: middleCoord(latlngs[i], latlngs[i + 1]), - angle: angleBetweenPoints( - this.map.latLngToContainerPoint(latlngs[i]), - this.map.latLngToContainerPoint(latlngs[i + 1]) - ), - } - ] - : res - ), []); + const midpoints = route.reduce( + (res, latlng, i) => + route[i + 1] && dist2(route[i], route[i + 1]) > 0.0001 + ? [ + ...res, + createArrow( + middleCoord(route[i], route[i + 1]), + angleBetweenPoints( + this.map.latLngToContainerPoint(route[i]), + this.map.latLngToContainerPoint(route[i + 1]) + ) + ), + ] + : res, + [] + ); - midpoints.forEach(({ latlng, angle }) => ( - this.arrowLayer.addLayer(createArrow(latlng, angle)) - )); + this.arrowLayer.addLayers(midpoints); }; + // Tries to detect if marker changed for every marker starting from changed_at + // setLatLngs = (route: LatLngLiteral[]): void => { + // if (!this.map) return; + + // // this.arrowLayer.clearLayers(); + + // if (route.length === 0) return; + + // console.time('total'); + + // const changed_at = this.getChangeIndex(this.prevState.route, route); + + // console.log('changed at:', changed_at); + // console.log('recalc:', route.length - changed_at); + + // const midpoints = this.prevState.midpoints.slice(0, changed_at - 1); + // const markers = this.prevState.markers.slice(0, changed_at - 1); + + // console.time('recalc'); + // for (let i = changed_at; i < route.length; i += 1) { + // const point = + // route[i + 1] && dist2(route[i], route[i + 1]) > 0.00005 + // ? { + // latlng: middleCoord(route[i], route[i + 1]), + // angle: angleBetweenPoints( + // this.map.latLngToContainerPoint(route[i]), + // this.map.latLngToContainerPoint(route[i + 1]) + // ), + // } + // : null; + + // if (this.prevState.markers[i] && !point) { + // // the marker is gone + // this.arrowLayer.removeLayer(this.prevState.markers[i]); + // markers.push(null); + // } + + // if (this.prevState.markers[i] && point) { + // // marker changed / created + // const is_same = + // this.prevState.markers[i] && + // this.prevState.midpoints[i] && + // this.prevState.midpoints[i].latlng.lat === point.latlng.lat && + // this.prevState.midpoints[i].latlng.lng === point.latlng.lng; + + // if (!is_same) { + // console.log('not same'); + // this.prevState.markers[i].setLatLng(point.latlng); + // this.prevState.markers[i].setIcon(createArrowIcon(point.angle)); + // } + + // markers.push(this.prevState.markers[i]); + // } + + // if (!this.prevState.markers[i] && point) { + // // new marker + // const marker = createArrow(point.latlng, point.angle); + // this.arrowLayer.addLayer(marker); + // markers.push(marker); + // } + + // midpoints.push(point); + // } + // console.timeEnd('recalc'); + + // this.prevState = { + // route, + // markers, + // midpoints, + // }; + + // console.timeEnd('total'); + // }; + + // Only creates from changed item to the end. Buggy when trying to delete and add points in the middle + // setLatLngs = (route: LatLngLiteral[]): void => { + // if (!this.map) return; + + // // this.arrowLayer.clearLayers(); + + // if (route.length === 0) return; + + // console.time('total'); + + // const changed_at = this.getChangeIndex(this.prevState.route, route); + + // console.log('changed at:', changed_at); + // console.log('recalc:', route.length - changed_at); + + // const midpoints = this.prevState.midpoints.slice(0, changed_at - 1); + // const markers = this.prevState.markers.slice(0, changed_at - 1); + + // console.time('recalc'); + // for (let i = changed_at; i < route.length; i += 1) { + // const point = + // route[i + 1] && dist2(route[i], route[i + 1]) > 0.00005 + // ? { + // latlng: middleCoord(route[i], route[i + 1]), + // angle: angleBetweenPoints( + // this.map.latLngToContainerPoint(route[i]), + // this.map.latLngToContainerPoint(route[i + 1]) + // ), + // } + // : null; + + // const marker = point ? createArrow(point.latlng, point.angle) : null; + + // midpoints.push(point); + // markers.push(marker); + // } + // console.timeEnd('recalc'); + + // console.time('remove'); + // this.arrowLayer.removeLayers( + // this.prevState.markers + // .slice(changed_at - 1, this.prevState.markers.length - 1) + // .filter(el => !!el) + // ); + // console.timeEnd('remove'); + + // this.prevState = { + // route, + // markers, + // midpoints, + // }; + + // console.time('add'); + // this.arrowLayer.addLayers(markers.filter(el => !!el)); + // console.timeEnd('add'); + // console.timeEnd('total'); + // }; + + // TODO: iterate through all the route and detect if marker created, changed or deleted. Skip getting changed_at + // TODO: try to figure why its not updated properly when you add / delete points in the middle + + // setLatLngs = (route: LatLngLiteral[]): void => { + // if (!this.map) return; + // if (route.length === 0) return; + + // const newState: IPrevState = { + // route, + // markers: [null], + // }; + + // for (let i = 1; i < route.length; i += 1) { + // const current = route[i]; + // const previous = route[i - 1]; + + // const is_new = !this.prevState.route[i]; + // const is_changed = + // this.prevState.route[i] && + // (this.prevState.route[i].lat !== current.lat || + // this.prevState.route[i].lng !== current.lng || + // this.prevState.route[i - 1].lng !== previous.lng || + // this.prevState.route[i - 1].lng !== previous.lng); + + // const need_to_add = dist2(route[i], route[i - 1]) > 0.00005; + + // if (is_new) { + // const marker = need_to_add + // ? createArrow( + // middleCoord(route[i], route[i - 1]), + // angleBetweenPoints( + // this.map.latLngToContainerPoint(route[i]), + // this.map.latLngToContainerPoint(route[i - 1]) + // ) + // ) + // : null; + + // console.log(i, marker ? 'new create' : 'new skip'); + + // if (marker) { + // this.arrowLayer.addLayer(marker); + // } + + // newState.markers.push(marker); + // continue; + // } + + // if (is_changed) { + // const middle = middleCoord(route[i], route[i - 1]); + // const angle = angleBetweenPoints( + // this.map.latLngToContainerPoint(route[i]), + // this.map.latLngToContainerPoint(route[i - 1]) + // ); + + // if (need_to_add && this.prevState.markers[i]) { + // console.log(i, 'change'); + + // this.prevState.markers[i].setLatLng(middle); + // this.prevState.markers[i].setIcon(createArrowIcon(angle)); + // newState.markers.push(this.prevState.markers[i]); + // continue; + // } + + // if (need_to_add && !this.prevState.markers[i]) { + // console.log(i, 'change create'); + + // const marker = createArrow(middle, angle); + // this.arrowLayer.addLayer(marker); + // newState.markers.push(marker); + // continue; + // } + + // if (!need_to_add && this.prevState.markers[i]) { + // console.log(i, 'change remove'); + + // this.arrowLayer.removeLayer(this.prevState.markers[i]); + // newState.markers.push(null); + // continue; + // } + + // if (!need_to_add && !this.prevState.markers[i]) { + // console.log(i, 'change skip'); + // newState.markers.push(null); + // continue; + // } + // } + + // if (!is_new && !is_changed) { + // console.log(i, 'not changed'); + + // newState.markers.push(this.prevState.markers[i]); + // } + // } + + // console.log('------', newState.markers); + + // if (newState.markers.length < this.prevState.markers.length) { + // this.arrowLayer.removeLayers( + // this.prevState.markers + // .slice( + // this.prevState.markers.length - newState.markers.length, + // this.prevState.markers.length - 1 + // ) + // .filter(el => !!el) + // ); + // } + + // this.prevState = newState; + // }; + map: Map; arrowLayer: MarkerClusterGroup = new MarkerClusterGroup({ spiderfyOnMaxZoom: false, showCoverageOnHover: false, zoomToBoundsOnClick: false, animate: false, - maxClusterRadius: 120, + maxClusterRadius: 120, // 120 iconCreateFunction: arrowClusterIcon, }); + + // prevState: IPrevState = { + // route: [], + // markers: [], + // midpoints: [], + // // distances: [], + // }; + + layers: Marker[] = []; } - -ArrowsLayer.addInitHook(function () { - this.once('add', (event) => { +ArrowsLayer.addInitHook(function() { + this.once('add', event => { if (event.target instanceof ArrowsLayer) { this.map = event.target._map; this.arrowLayer.addTo(this.map); } }); - this.once('remove', (event) => { + this.once('remove', event => { if (event.target instanceof ArrowsLayer) { this.arrowLayer.removeFrom(this.map); } From f4cd6bd44af639a328ffaeeab5c22f5d295e405d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 16:26:56 +0700 Subject: [PATCH 157/320] combined arrows with km marks for better performace --- src/map/Map/index.tsx | 1 - src/utils/map/ArrowsLayer.ts | 7 +++++++ src/utils/marks.ts | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/map/Map/index.tsx b/src/map/Map/index.tsx index 7ca22ef..b2ad195 100644 --- a/src/map/Map/index.tsx +++ b/src/map/Map/index.tsx @@ -78,7 +78,6 @@ const MapUnconnected: React.FC = ({ -
      , document.getElementById('canvas') ); diff --git a/src/utils/map/ArrowsLayer.ts b/src/utils/map/ArrowsLayer.ts index bcc4ab2..cf9c58f 100644 --- a/src/utils/map/ArrowsLayer.ts +++ b/src/utils/map/ArrowsLayer.ts @@ -1,3 +1,10 @@ +/* + + TODO: increase step between arrows, but detect if arrows' count less than i.e. 5, so when draw additional ones + TODO: or, maybe, combine arrows with km marks + +*/ + import { LatLngLiteral, LayerGroup, Map, LatLng, Marker, marker } from 'leaflet'; import { arrowClusterIcon, createArrow, createArrowIcon } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; diff --git a/src/utils/marks.ts b/src/utils/marks.ts index a22498b..2235c0f 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -7,6 +7,7 @@ import classNames from 'classnames'; interface KmMarksOptions { showMiddleMarkers: boolean; showEndMarker: boolean; + showArrows: boolean; kmMarksStep: number; } @@ -17,6 +18,7 @@ class KmMarksLayer extends LayerGroup { this.options = { showMiddleMarkers: true, showEndMarker: true, + showArrows: true, kmMarksStep: 10, ...(options || {}), } as KmMarksOptions; @@ -27,6 +29,7 @@ class KmMarksLayer extends LayerGroup { this.marksLayer.clearLayers(); this.endMarker.clearLayers(); + this.arrowsLayer.clearLayers(); this.distance = 0; @@ -38,6 +41,7 @@ class KmMarksLayer extends LayerGroup { drawMiddleMarkers = (latlngs: LatLngLiteral[]) => { const marks = []; + const arrows = []; let last_km_mark = 0; this.distance = latlngs.reduce((dist, current, index) => { @@ -66,6 +70,7 @@ class KmMarksLayer extends LayerGroup { }; marks.push(this.createMiddleMarker(coords, angle, step)); + arrows.push(createArrow(coords, angle)); } last_km_mark = rounded; @@ -75,6 +80,7 @@ class KmMarksLayer extends LayerGroup { }, 0); this.marksLayer.addLayers(marks); + this.arrowsLayer.addLayers(arrows); }; createMiddleMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => @@ -136,6 +142,14 @@ class KmMarksLayer extends LayerGroup { maxClusterRadius: 120, iconCreateFunction: arrowClusterIcon, }); + arrowsLayer: MarkerClusterGroup = new MarkerClusterGroup({ + spiderfyOnMaxZoom: false, + showCoverageOnHover: false, + zoomToBoundsOnClick: false, + animate: false, + maxClusterRadius: 120, + iconCreateFunction: arrowClusterIcon, + }); endMarker: LayerGroup = new LayerGroup(); distance: number = 0; } @@ -146,6 +160,7 @@ KmMarksLayer.addInitHook(function() { this.map = event.target._map; this.marksLayer.addTo(this.map); this.endMarker.addTo(this.map); + this.arrowsLayer.addTo(this.map); } }); @@ -153,6 +168,7 @@ KmMarksLayer.addInitHook(function() { if (event.target instanceof KmMarksLayer) { this.marksLayer.removeFrom(this.map); this.endMarker.removeFrom(this.map); + this.arrowsLayer.removeFrom(this.map); } }); }); From 4ac0bbebe2691a28a16d44ec1cf7262f2c710906 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 16:31:47 +0700 Subject: [PATCH 158/320] even better performance by combining km marks and arrows --- src/styles/map.less | 7 +++++++ src/utils/marks.ts | 22 ++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/styles/map.less b/src/styles/map.less index 8ee85fc..1c8ddc5 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -130,6 +130,13 @@ left: 50%; font-weight: bold; padding: 0 2px; + + svg { + position: absolute; + top: -16px; + left: 50%; + transform: translate(-50%, 0); + } } } diff --git a/src/utils/marks.ts b/src/utils/marks.ts index 2235c0f..2671151 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -1,8 +1,9 @@ import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from 'leaflet'; -import { arrowClusterIcon, createArrow } from '~/utils/arrow'; +import { arrowClusterIcon } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from '~/utils/geom'; import classNames from 'classnames'; +const arrow_image = require('~/sprites/arrow.svg'); interface KmMarksOptions { showMiddleMarkers: boolean; @@ -29,7 +30,6 @@ class KmMarksLayer extends LayerGroup { this.marksLayer.clearLayers(); this.endMarker.clearLayers(); - this.arrowsLayer.clearLayers(); this.distance = 0; @@ -70,7 +70,6 @@ class KmMarksLayer extends LayerGroup { }; marks.push(this.createMiddleMarker(coords, angle, step)); - arrows.push(createArrow(coords, angle)); } last_km_mark = rounded; @@ -80,7 +79,6 @@ class KmMarksLayer extends LayerGroup { }, 0); this.marksLayer.addLayers(marks); - this.arrowsLayer.addLayers(arrows); }; createMiddleMarker = (latlng: LatLngLiteral, angle: number, distance: number): Marker => @@ -93,6 +91,10 @@ class KmMarksLayer extends LayerGroup { angle )}deg);"> ${distance} + + + +
      `, className: 'leaflet-km-marker', @@ -142,14 +144,6 @@ class KmMarksLayer extends LayerGroup { maxClusterRadius: 120, iconCreateFunction: arrowClusterIcon, }); - arrowsLayer: MarkerClusterGroup = new MarkerClusterGroup({ - spiderfyOnMaxZoom: false, - showCoverageOnHover: false, - zoomToBoundsOnClick: false, - animate: false, - maxClusterRadius: 120, - iconCreateFunction: arrowClusterIcon, - }); endMarker: LayerGroup = new LayerGroup(); distance: number = 0; } @@ -160,7 +154,7 @@ KmMarksLayer.addInitHook(function() { this.map = event.target._map; this.marksLayer.addTo(this.map); this.endMarker.addTo(this.map); - this.arrowsLayer.addTo(this.map); + // this.arrowsLayer.addTo(this.map); } }); @@ -168,7 +162,7 @@ KmMarksLayer.addInitHook(function() { if (event.target instanceof KmMarksLayer) { this.marksLayer.removeFrom(this.map); this.endMarker.removeFrom(this.map); - this.arrowsLayer.removeFrom(this.map); + // this.arrowsLayer.removeFrom(this.map); } }); }); From bdcd7fd814c063f05db5b30da3f515a935c55ca0 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 16:32:37 +0700 Subject: [PATCH 159/320] cleanup --- src/utils/marks.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/utils/marks.ts b/src/utils/marks.ts index 2671151..db4cc53 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -154,7 +154,6 @@ KmMarksLayer.addInitHook(function() { this.map = event.target._map; this.marksLayer.addTo(this.map); this.endMarker.addTo(this.map); - // this.arrowsLayer.addTo(this.map); } }); @@ -162,7 +161,6 @@ KmMarksLayer.addInitHook(function() { if (event.target instanceof KmMarksLayer) { this.marksLayer.removeFrom(this.map); this.endMarker.removeFrom(this.map); - // this.arrowsLayer.removeFrom(this.map); } }); }); From 973f934614b611d9fd54a9a833669ad77ac44195 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 16:59:09 +0700 Subject: [PATCH 160/320] fixed arrows --- src/styles/map.less | 41 ++++++++++++++++++++++++++--------------- src/utils/marks.ts | 10 +++++----- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/styles/map.less b/src/styles/map.less index 1c8ddc5..cab4e8e 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -14,12 +14,16 @@ } .leaflet-touch .leaflet-bar a { - border-radius: @panel_radius !important; + border-radius: @panel_radius !important; } @keyframes vertex_spin { - 0% { transform: scale(1); } - 100% { transform: scale(1.2); } + 0% { + transform: scale(1); + } + 100% { + transform: scale(1.2); + } } .leaflet-vertex-drag-helper { @@ -43,16 +47,16 @@ .vertex-icon-mixin(@left, @right) { &::after { content: ' '; - position:absolute; - top:4px; + position: absolute; + top: 4px; left: @left; right: @right; - width:8px; - height:8px; + width: 8px; + height: 8px; background: white; border-radius: 8px; - transform:scale(1); - transition:transform 150ms; + transform: scale(1); + transition: transform 150ms; } } @@ -63,8 +67,8 @@ border: none; width: 16px !important; height: 16px !important; - margin-left:-8px !important; - margin-top:-8px !important; + margin-left: -8px !important; + margin-top: -8px !important; background: transparent; position: absolute; cursor: grab; @@ -110,7 +114,8 @@ pointer-events: none !important; } -.leaflet-km-marker, .leaflet-km-marker-2 { +.leaflet-km-marker, +.leaflet-km-marker-2 { position: absolute; z-index: 0 !important; @@ -137,6 +142,12 @@ left: 50%; transform: translate(-50%, 0); } + + &.reverse { + svg { + transform: translate(-50%, 0) rotate(180deg); + } + } } } @@ -191,7 +202,7 @@ } .leaflet-control-container .leaflet-routing-container-hide { - display: none; + display: none; } .leaflet-bar { @@ -294,7 +305,7 @@ #canvas { background: #eeeeee; z-index: 0; - + > div { width: 100%; height: 100%; @@ -303,4 +314,4 @@ .leaflet-pane { user-select: none; -} \ No newline at end of file +} diff --git a/src/utils/marks.ts b/src/utils/marks.ts index db4cc53..a39504f 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -87,12 +87,12 @@ class KmMarksLayer extends LayerGroup { interactive: false, icon: divIcon({ html: ` -
      +
      ${distance} - - +
      From d8d448bcf7a5686de9f766166c0aa5dd48ed0aad Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 17:08:55 +0700 Subject: [PATCH 161/320] updated leaflet version and tree-shaked deps --- package-lock.json | 8 ++++---- package.json | 2 +- src/redux/editor/index.ts | 2 +- src/redux/map/index.ts | 2 +- src/redux/user/index.ts | 2 +- src/utils/marks.ts | 3 +-- src/utils/reducer.ts | 13 +++++++++++++ 7 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 src/utils/reducer.ts diff --git a/package-lock.json b/package-lock.json index 23cd49a..5a6cb34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7943,9 +7943,9 @@ } }, "leaflet": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.4.0.tgz", - "integrity": "sha512-x9j9tGY1+PDLN9pcWTx9/y6C5nezoTMB8BLK5jTakx+H7bPlnbCHfi9Hjg+Qt36sgDz/cb9lrSpNQXmk45Tvhw==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz", + "integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ==" }, "leaflet-editable": { "version": "1.2.0", @@ -7960,7 +7960,7 @@ "resolved": "https://registry.npmjs.org/leaflet-geometryutil/-/leaflet-geometryutil-0.9.1.tgz", "integrity": "sha512-DKYLzFBsEcmZSl1fXLM+Pd+7t5IHmY6Ps7XeSnWL1ngr1qxQfcVzhkJT9gxfZrmFWiL96c23xQ0aLcHocV2tVA==", "requires": { - "leaflet": "1.4.0" + "leaflet": "1.6.0" } }, "leaflet-routing-machine": { diff --git a/package.json b/package.json index 5c75fc7..5c86c11 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "history": "^4.7.2", "http-errors": "~1.6.2", "js-md5": "^0.7.3", - "leaflet": "^1.4.0", + "leaflet": "^1.6.0", "leaflet-editable": "^1.1.0", "leaflet-editable-polyline": "muerwre/leaflet-editable-polyline#master", "leaflet-geometryutil": "^0.9.0", diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 5afaaa5..6fca121 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -1,4 +1,4 @@ -import createReducer from 'reduxsauce/lib/createReducer'; +import { createReducer } from '~/utils/reducer'; import { IDialogs } from '~/constants/dialogs'; import { MODES } from '~/constants/modes'; import { EDITOR_HANDLERS } from './handlers'; diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index a836d29..daea378 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -1,4 +1,4 @@ -import createReducer from 'reduxsauce/lib/createReducer'; +import { createReducer } from '~/utils/reducer'; import { MAP_HANDLERS } from './handlers'; import { DEFAULT_PROVIDER } from '~/constants/providers'; import { IMapRoute } from './types'; diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 1492dda..ef444d4 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -1,4 +1,4 @@ -import createReducer from 'reduxsauce/lib/createReducer'; +import { createReducer } from '~/utils/reducer'; import { DEFAULT_USER, IUser } from '~/constants/auth'; import { USER_HANDLERS } from './handlers'; diff --git a/src/utils/marks.ts b/src/utils/marks.ts index a39504f..3d2bf03 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -89,10 +89,9 @@ class KmMarksLayer extends LayerGroup { html: `
      ${distance} - +
      diff --git a/src/utils/reducer.ts b/src/utils/reducer.ts new file mode 100644 index 0000000..1121914 --- /dev/null +++ b/src/utils/reducer.ts @@ -0,0 +1,13 @@ +// create-reducer.ts +import { Action } from 'redux'; + +type Handlers> = { + readonly [Type in Types]: (state: State, action: Actions) => State +} + +export const createReducer = ( + initialState, + handlers, +) => (state = initialState, action) => (handlers.hasOwnProperty(action.type) + ? handlers[action.type](state, action) + : state); From 71f2f7fba501a4751a87f17f1fd84d9dfd21c774 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 17:25:14 +0700 Subject: [PATCH 162/320] fixed arrow angle for km marks --- src/utils/marks.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/marks.ts b/src/utils/marks.ts index 3d2bf03..7c57225 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -88,7 +88,8 @@ class KmMarksLayer extends LayerGroup { icon: divIcon({ html: `
      ${distance} From 80120eb37b9bd1ed1a386f48b95b87e6cd7dda63 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 16 Jan 2020 18:05:08 +0700 Subject: [PATCH 163/320] fixed touch hinter error --- src/utils/map/InteractivePoly.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/utils/map/InteractivePoly.ts b/src/utils/map/InteractivePoly.ts index c2037ba..bd7f4d3 100644 --- a/src/utils/map/InteractivePoly.ts +++ b/src/utils/map/InteractivePoly.ts @@ -27,7 +27,7 @@ interface InteractivePolylineOptions extends PolylineOptions { kmMarksStep?: number; } -export class InteractivePoly extends Polyline { +class InteractivePoly extends Polyline { constructor( latlngs: LatLngExpression[] | LatLngExpression[][], options?: InteractivePolylineOptions @@ -493,7 +493,8 @@ export class InteractivePoly extends Polyline { const next = index <= latlngs.length + 1 ? latlngs[index + 1] : null; const initial_distance = - ((prev && distKmHaversine(prev, current)) || 0) + ((next && distKmHaversine(next, current)) || 0); + ((prev && distKmHaversine(prev, current)) || 0) + + ((next && distKmHaversine(next, current)) || 0); const current_distance = (prev && next && distKmHaversine(prev, next)) || 0; @@ -558,8 +559,10 @@ InteractivePoly.addInitHook(function() { this.on('latlngschange', this.updateTouchHinter); - if (window.innerWidth < 768) { - this.touchHinter.setStyle({ weight: 32 }); + if (this.touchHinter && window.innerWidth < 768) { + try { + this.touchHinter.setStyle({ weight: 32 }); + } catch (e) {} } } }); @@ -576,6 +579,7 @@ InteractivePoly.addInitHook(function() { }); }); +export { InteractivePoly }; /* events: vertexdragstart, From 72c6b99f5839f7ffc1ce27fb89d04dfed38245f5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 15:51:35 +0700 Subject: [PATCH 164/320] fixed dialog wrong appearance at disabled editor --- src/redux/editor/sagas.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index e0c1ba7..d636770 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -1,6 +1,6 @@ import { call, put, takeEvery, takeLatest, select, race } from 'redux-saga/effects'; import { delay, SagaIterator } from 'redux-saga'; -import { selectEditor } from '~/redux/editor/selectors'; +import { selectEditor, selectEditorMode } from '~/redux/editor/selectors'; import { simplify } from '~/utils/simplify'; import { editorHideRenderer, @@ -177,6 +177,12 @@ function* locationChangeSaga({ location }: ReturnType = yield select(selectEditorMode); + + if (mode !== MODES.NONE) { + yield put(editorSetMode(MODES.NONE)); + } + yield call(loadMapFromPath); MainMap.fitVisibleBounds({ animate: true }); } From 5db6d85e35bf75dcddcd48d8f80669a2e6107b4e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 17:13:57 +0700 Subject: [PATCH 165/320] displaying end marker --- src/map/Route/index.tsx | 17 +++----- src/map/Router/index.tsx | 94 ++++++++++++++++++++++++++++++++++++---- src/styles/map.less | 37 ++++++++++++++++ 3 files changed, 128 insertions(+), 20 deletions(-) diff --git a/src/map/Route/index.tsx b/src/map/Route/index.tsx index 993e256..1501f0a 100644 --- a/src/map/Route/index.tsx +++ b/src/map/Route/index.tsx @@ -2,18 +2,19 @@ import React, { FC, useEffect, memo, useState, useCallback } from 'react'; import { InteractivePoly } from '~/utils/map/InteractivePoly'; import { isMobile } from '~/utils/window'; import { LatLng } from 'leaflet'; -import { selectEditor } from '~/redux/editor/selectors'; +import { selectEditor, selectEditorMode, selectEditorEditing } from '~/redux/editor/selectors'; import pick from 'ramda/es/pick'; import * as MAP_ACTIONS from '~/redux/map/actions'; import { connect } from 'react-redux'; -import { selectMap } from '~/redux/map/selectors'; +import { selectMap, selectMapRoute } from '~/redux/map/selectors'; import { MainMap } from '~/constants/map'; import { MODES } from '~/constants/modes'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; const mapStateToProps = state => ({ - editor: pick(['mode', 'editing'], selectEditor(state)), - map: pick(['route'], selectMap(state)), + mode: selectEditorMode(state), + editing: selectEditorEditing(state), + route: selectMapRoute(state), }); const mapDispatchToProps = { @@ -25,13 +26,7 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & {}; const RouteUnconnected: FC = memo( - ({ - map: { route }, - editor: { editing, mode }, - mapSetRoute, - editorSetDistance, - editorSetMarkersShown, - }) => { + ({ route, editing, mode, mapSetRoute, editorSetDistance, editorSetMarkersShown }) => { const [layer, setLayer] = useState(null); const onDistanceChange = useCallback(({ distance }) => editorSetDistance(distance), [ diff --git a/src/map/Router/index.tsx b/src/map/Router/index.tsx index a2dd2dd..a075186 100644 --- a/src/map/Router/index.tsx +++ b/src/map/Router/index.tsx @@ -1,16 +1,18 @@ -import { FC, useEffect, useCallback, memo } from 'react'; -import pick from 'ramda/es/pick'; +import { FC, useEffect, useCallback, memo, useState } from 'react'; import { OsrmRouter } from '~/utils/map/OsrmRouter'; import { connect } from 'react-redux'; -import { selectMap } from '~/redux/map/selectors'; +import { selectMapRoute } from '~/redux/map/selectors'; import { selectEditorRouter, selectEditorMode } from '~/redux/editor/selectors'; import { MainMap } from '~/constants/map'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import { MODES } from '~/constants/modes'; +import { LatLngLiteral, marker, divIcon } from 'leaflet'; +import classNames from 'classnames'; +import { angleBetweenPoints } from '~/utils/geom'; const mapStateToProps = state => ({ - map: pick(['route'], selectMap(state)), - router: pick(['waypoints', 'points'], selectEditorRouter(state)), + route: selectMapRoute(state), + router: selectEditorRouter(state), mode: selectEditorMode(state), }); @@ -21,20 +23,94 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & {}; const RouterUnconnected: FC = memo( - ({ map: { route }, mode, router: { waypoints }, editorSetRouter }) => { + ({ route, mode, router: { waypoints }, editorSetRouter }) => { + const [distance, setDistance] = useState(0); + const [end, setEnd] = useState(null); + const [direction, setDirection] = useState(false); + const updateWaypoints = useCallback( - ({ waypoints }) => editorSetRouter({ waypoints: waypoints.filter(wp => !!wp.latLng) }), - [editorSetRouter] + ({ waypoints }) => { + const filtered = waypoints.filter(wp => !!wp.latLng); + + if (filtered.length < 2) { + setDistance(0); + } + + editorSetRouter({ waypoints: filtered }); + }, + [editorSetRouter, setDistance] + ); + + const updateDistance = useCallback( + ({ routes, waypoints }) => { + console.log(routes.length, waypoints.length); + if (!routes || !routes.length || waypoints.length < 2) { + console.log('hm 1'); + setDistance(0); + return; + } + + const { summary, coordinates } = routes[0]; + + if (coordinates.length <= 1) { + console.log('hm 2'); + setDistance(0); + return; + } + + const totalDistance = parseFloat((summary.totalDistance / 1000).toFixed(1)) || 0; + const latlng = (coordinates.length && coordinates[coordinates.length - 1]) || null; + + const angle = angleBetweenPoints( + MainMap.latLngToContainerPoint(coordinates[coordinates.length - 2]), + MainMap.latLngToContainerPoint(coordinates[coordinates.length - 3]) + ); + + setDistance(totalDistance); + setEnd(latlng); + setDirection(angle > -90 && angle < 90); + }, + [setDistance, setEnd] ); useEffect(() => { - OsrmRouter.on('waypointschanged', updateWaypoints).addTo(MainMap); + OsrmRouter.on('waypointschanged', updateWaypoints) + .on('routesfound', updateDistance) + .addTo(MainMap); return () => { OsrmRouter.off('waypointschanged', updateWaypoints).setWaypoints([]); }; }, [MainMap, updateWaypoints, mode]); + useEffect(() => { + if (!distance || !end) { + return; + } + + const item = marker(end, { + draggable: false, + interactive: false, + icon: divIcon({ + html: ` +
      + ${parseFloat(distance.toFixed(1))} +
      + `, + className: classNames('leaflet-km-marker router-end-marker', { right: !direction }), + iconSize: [11, 11], + iconAnchor: [6, 6], + }), + zIndexOffset: -100, + }); + + item.addTo(MainMap); + + return () => { + item.removeFrom(MainMap); + }; + }, [distance, end, direction]); + useEffect(() => { if (mode !== MODES.ROUTER) return; diff --git a/src/styles/map.less b/src/styles/map.less index cab4e8e..06bfaf1 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -186,6 +186,43 @@ } } + +.router-end-marker { + .leaflet-km-dist { + background: @router_line; + left: auto; + right: -3px; + top: -3px; + position: absolute; + z-index: -10; + padding: 2px 16px 2px 4px; + + &::after { + content: ' '; + width: 8px; + height: 8px; + border-radius: 4px; + background: white; + position: absolute; + right: 5px; + top: 5px; + } + } + + &.right { + .leaflet-km-dist { + padding: 2px 4px 2px 16px; + left: -3px; + right: auto; + + &::after { + left: 5px; + right: auto; + } + } + } +} + .leaflet-km-marker-2 { .leaflet-km-dist { background: green; From 24641a33f719d4a7c33910dfe67e584c32dc1801 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 17:20:17 +0700 Subject: [PATCH 166/320] router now has additional end marker --- src/map/Router/index.tsx | 34 +++++++++++++++++++--------------- src/redux/editor/selectors.ts | 5 +++-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/map/Router/index.tsx b/src/map/Router/index.tsx index a075186..e139aa2 100644 --- a/src/map/Router/index.tsx +++ b/src/map/Router/index.tsx @@ -2,7 +2,7 @@ import { FC, useEffect, useCallback, memo, useState } from 'react'; import { OsrmRouter } from '~/utils/map/OsrmRouter'; import { connect } from 'react-redux'; import { selectMapRoute } from '~/redux/map/selectors'; -import { selectEditorRouter, selectEditorMode } from '~/redux/editor/selectors'; +import { selectEditorRouter, selectEditorMode, selectEditorDistance } from '~/redux/editor/selectors'; import { MainMap } from '~/constants/map'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import { MODES } from '~/constants/modes'; @@ -14,6 +14,7 @@ const mapStateToProps = state => ({ route: selectMapRoute(state), router: selectEditorRouter(state), mode: selectEditorMode(state), + distance: selectEditorDistance(state), }); const mapDispatchToProps = { @@ -23,38 +24,37 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & {}; const RouterUnconnected: FC = memo( - ({ route, mode, router: { waypoints }, editorSetRouter }) => { - const [distance, setDistance] = useState(0); + ({ route, mode, router: { waypoints }, editorSetRouter, distance }) => { + const [dist, setDist] = useState(0); const [end, setEnd] = useState(null); const [direction, setDirection] = useState(false); const updateWaypoints = useCallback( ({ waypoints }) => { const filtered = waypoints.filter(wp => !!wp.latLng); + console.log('waypoints updated: ', filtered.length); if (filtered.length < 2) { - setDistance(0); + setDist(0); } editorSetRouter({ waypoints: filtered }); }, - [editorSetRouter, setDistance] + [editorSetRouter, setDist] ); const updateDistance = useCallback( ({ routes, waypoints }) => { console.log(routes.length, waypoints.length); if (!routes || !routes.length || waypoints.length < 2) { - console.log('hm 1'); - setDistance(0); + setDist(0); return; } const { summary, coordinates } = routes[0]; if (coordinates.length <= 1) { - console.log('hm 2'); - setDistance(0); + setDist(0); return; } @@ -66,15 +66,16 @@ const RouterUnconnected: FC = memo( MainMap.latLngToContainerPoint(coordinates[coordinates.length - 3]) ); - setDistance(totalDistance); + setDist(totalDistance); setEnd(latlng); setDirection(angle > -90 && angle < 90); }, - [setDistance, setEnd] + [setDist, setEnd] ); useEffect(() => { OsrmRouter.on('waypointschanged', updateWaypoints) + .on('waypointschanged', console.log) .on('routesfound', updateDistance) .addTo(MainMap); @@ -84,7 +85,7 @@ const RouterUnconnected: FC = memo( }, [MainMap, updateWaypoints, mode]); useEffect(() => { - if (!distance || !end) { + if (!dist || !end) { return; } @@ -94,7 +95,7 @@ const RouterUnconnected: FC = memo( icon: divIcon({ html: `
      - ${parseFloat(distance.toFixed(1))} + ${parseFloat((distance + dist).toFixed(1))}
      `, className: classNames('leaflet-km-marker router-end-marker', { right: !direction }), @@ -109,10 +110,13 @@ const RouterUnconnected: FC = memo( return () => { item.removeFrom(MainMap); }; - }, [distance, end, direction]); + }, [dist, end, direction, distance]); useEffect(() => { - if (mode !== MODES.ROUTER) return; + if (mode !== MODES.ROUTER) { + setDist(0); + return; + } const wp = OsrmRouter.getWaypoints() .filter(point => point.latLng) diff --git a/src/redux/editor/selectors.ts b/src/redux/editor/selectors.ts index bd87246..3587f3f 100644 --- a/src/redux/editor/selectors.ts +++ b/src/redux/editor/selectors.ts @@ -1,4 +1,4 @@ -import { IState } from "../store"; +import { IState } from '../store'; export const selectEditor = (state: IState) => state.editor; export const selectEditorSave = (state: IState) => state.editor.save; @@ -6,4 +6,5 @@ export const selectEditorEditing = (state: IState) => state.editor.editing; export const selectEditorMode = (state: IState) => state.editor.mode; export const selectEditorActiveSticker = (state: IState) => state.editor.activeSticker; export const selectEditorRenderer = (state: IState) => state.editor.renderer; -export const selectEditorRouter = (state: IState) => state.editor.router; \ No newline at end of file +export const selectEditorRouter = (state: IState) => state.editor.router; +export const selectEditorDistance = (state: IState) => state.editor.distance; From d752039de92e9e0ff7447b912cfe1548f059c46d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 17:25:47 +0700 Subject: [PATCH 167/320] new marker for router --- src/map/Router/index.tsx | 5 ++--- src/styles/map.less | 26 +++++++++----------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/map/Router/index.tsx b/src/map/Router/index.tsx index e139aa2..ba24df4 100644 --- a/src/map/Router/index.tsx +++ b/src/map/Router/index.tsx @@ -75,7 +75,6 @@ const RouterUnconnected: FC = memo( useEffect(() => { OsrmRouter.on('waypointschanged', updateWaypoints) - .on('waypointschanged', console.log) .on('routesfound', updateDistance) .addTo(MainMap); @@ -94,11 +93,11 @@ const RouterUnconnected: FC = memo( interactive: false, icon: divIcon({ html: ` -
      +
      ${parseFloat((distance + dist).toFixed(1))}
      `, - className: classNames('leaflet-km-marker router-end-marker', { right: !direction }), + className: classNames('router-marker', { right: !direction }), iconSize: [11, 11], iconAnchor: [6, 6], }), diff --git a/src/styles/map.less b/src/styles/map.less index 06bfaf1..264093e 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -187,30 +187,22 @@ } -.router-end-marker { - .leaflet-km-dist { +.router-marker { + div { background: @router_line; left: auto; - right: -3px; - top: -3px; + right: 50%; + transform: translate(50%, 0); + top: -20px; position: absolute; z-index: -10; - padding: 2px 16px 2px 4px; - - &::after { - content: ' '; - width: 8px; - height: 8px; - border-radius: 4px; - background: white; - position: absolute; - right: 5px; - top: 5px; - } + padding: 2px 2px 2px 4px; + color: white; + border-radius: 100%; } &.right { - .leaflet-km-dist { + div { padding: 2px 4px 2px 16px; left: -3px; right: auto; From 50c2ac70e361ce21ed6801eb42560f30d81305ff Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 17:26:13 +0700 Subject: [PATCH 168/320] fixed marker --- src/styles/map.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/styles/map.less b/src/styles/map.less index 264093e..4caa85c 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -189,7 +189,7 @@ .router-marker { div { - background: @router_line; + color: @router_line; left: auto; right: 50%; transform: translate(50%, 0); @@ -197,8 +197,8 @@ position: absolute; z-index: -10; padding: 2px 2px 2px 4px; - color: white; border-radius: 100%; + font-weight: bold; } &.right { From d4307ae3363cce416f1510f829faffa3b5b00741 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 17:55:36 +0700 Subject: [PATCH 169/320] good markers for router --- src/map/Router/index.tsx | 12 ++++++++---- src/styles/map.less | 28 +++++++++++++++------------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/map/Router/index.tsx b/src/map/Router/index.tsx index ba24df4..16ee58f 100644 --- a/src/map/Router/index.tsx +++ b/src/map/Router/index.tsx @@ -59,13 +59,15 @@ const RouterUnconnected: FC = memo( } const totalDistance = parseFloat((summary.totalDistance / 1000).toFixed(1)) || 0; - const latlng = (coordinates.length && coordinates[coordinates.length - 1]) || null; + const latlng = waypoints[waypoints.length - 1] && (waypoints[waypoints.length - 1].latLng) || null; const angle = angleBetweenPoints( - MainMap.latLngToContainerPoint(coordinates[coordinates.length - 2]), - MainMap.latLngToContainerPoint(coordinates[coordinates.length - 3]) + MainMap.latLngToContainerPoint(waypoints[waypoints.length - 1].latLng), + MainMap.latLngToContainerPoint(coordinates[coordinates.length - 1]), ); + console.log(angle); + setDist(totalDistance); setEnd(latlng); setDirection(angle > -90 && angle < 90); @@ -74,8 +76,10 @@ const RouterUnconnected: FC = memo( ); useEffect(() => { - OsrmRouter.on('waypointschanged', updateWaypoints) + OsrmRouter + .on('waypointschanged', updateWaypoints) .on('routesfound', updateDistance) + .on('routesfound', console.log) .addTo(MainMap); return () => { diff --git a/src/styles/map.less b/src/styles/map.less index 4caa85c..1d5bed3 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -189,28 +189,30 @@ .router-marker { div { - color: @router_line; + background: @router_line; + color: white; left: auto; - right: 50%; - transform: translate(50%, 0); - top: -20px; + right: 15px; + // transform: translate(50%, 0); + top: -5px; position: absolute; z-index: -10; - padding: 2px 2px 2px 4px; - border-radius: 100%; + padding: 2px 8px 2px 8px; + border-radius: 4px; font-weight: bold; } &.right { div { - padding: 2px 4px 2px 16px; - left: -3px; - right: auto; + // padding: 2px 4px 2px 16px; + // left: -3px; + right: auto; + left: 15px; - &::after { - left: 5px; - right: auto; - } + // &::after { + // left: 5px; + // right: auto; + // } } } } From cb02338c67e692e8da3eb679b1aefb4ad08ae1d2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 17:56:44 +0700 Subject: [PATCH 170/320] removed console.log --- src/map/Router/index.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/map/Router/index.tsx b/src/map/Router/index.tsx index 16ee58f..38d8be7 100644 --- a/src/map/Router/index.tsx +++ b/src/map/Router/index.tsx @@ -2,7 +2,11 @@ import { FC, useEffect, useCallback, memo, useState } from 'react'; import { OsrmRouter } from '~/utils/map/OsrmRouter'; import { connect } from 'react-redux'; import { selectMapRoute } from '~/redux/map/selectors'; -import { selectEditorRouter, selectEditorMode, selectEditorDistance } from '~/redux/editor/selectors'; +import { + selectEditorRouter, + selectEditorMode, + selectEditorDistance, +} from '~/redux/editor/selectors'; import { MainMap } from '~/constants/map'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import { MODES } from '~/constants/modes'; @@ -32,7 +36,6 @@ const RouterUnconnected: FC = memo( const updateWaypoints = useCallback( ({ waypoints }) => { const filtered = waypoints.filter(wp => !!wp.latLng); - console.log('waypoints updated: ', filtered.length); if (filtered.length < 2) { setDist(0); @@ -45,7 +48,6 @@ const RouterUnconnected: FC = memo( const updateDistance = useCallback( ({ routes, waypoints }) => { - console.log(routes.length, waypoints.length); if (!routes || !routes.length || waypoints.length < 2) { setDist(0); return; @@ -59,15 +61,14 @@ const RouterUnconnected: FC = memo( } const totalDistance = parseFloat((summary.totalDistance / 1000).toFixed(1)) || 0; - const latlng = waypoints[waypoints.length - 1] && (waypoints[waypoints.length - 1].latLng) || null; + const latlng = + (waypoints[waypoints.length - 1] && waypoints[waypoints.length - 1].latLng) || null; const angle = angleBetweenPoints( MainMap.latLngToContainerPoint(waypoints[waypoints.length - 1].latLng), - MainMap.latLngToContainerPoint(coordinates[coordinates.length - 1]), + MainMap.latLngToContainerPoint(coordinates[coordinates.length - 1]) ); - console.log(angle); - setDist(totalDistance); setEnd(latlng); setDirection(angle > -90 && angle < 90); @@ -76,10 +77,8 @@ const RouterUnconnected: FC = memo( ); useEffect(() => { - OsrmRouter - .on('waypointschanged', updateWaypoints) + OsrmRouter.on('waypointschanged', updateWaypoints) .on('routesfound', updateDistance) - .on('routesfound', console.log) .addTo(MainMap); return () => { From ea8936f2836094553bd8782ae479812df117e886 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 18:01:33 +0700 Subject: [PATCH 171/320] fixed km markers radiuses --- src/map/Router/index.tsx | 2 +- src/styles/map.less | 27 ++++++++++----------------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/map/Router/index.tsx b/src/map/Router/index.tsx index 38d8be7..de3b693 100644 --- a/src/map/Router/index.tsx +++ b/src/map/Router/index.tsx @@ -110,7 +110,7 @@ const RouterUnconnected: FC = memo( item.addTo(MainMap); return () => { - item.removeFrom(MainMap); + item.removeFrom(MainMap).remove(); }; }, [dist, end, direction, distance]); diff --git a/src/styles/map.less b/src/styles/map.less index 1d5bed3..41dadd5 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -122,7 +122,7 @@ .leaflet-km-dist { background: @red_secondary; color: white; - border-radius: 4px; + border-radius: 8px; font-size: 12px; text-align: center; min-width: 20px; @@ -155,10 +155,11 @@ .leaflet-km-dist { left: auto; right: -3px; - top: -3px; + top: -2px; position: absolute; z-index: -10; - padding: 2px 16px 2px 4px; + padding: 1px 15px 1px 6px; + border-radius: 10px; &::after { content: ' '; @@ -167,8 +168,8 @@ border-radius: 4px; background: white; position: absolute; - right: 5px; - top: 5px; + right: 4px; + top: 4px; } } @@ -186,7 +187,6 @@ } } - .router-marker { div { background: @router_line; @@ -197,22 +197,15 @@ top: -5px; position: absolute; z-index: -10; - padding: 2px 8px 2px 8px; - border-radius: 4px; + padding: 0 6px 0 6px; + border-radius: 12px; font-weight: bold; } &.right { div { - // padding: 2px 4px 2px 16px; - // left: -3px; - right: auto; - left: 15px; - - // &::after { - // left: 5px; - // right: auto; - // } + right: auto; + left: 15px; } } } From 5e3aa587c74a93edb5d7def7b001d35e4ac03d49 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 17 Jan 2020 18:02:58 +0700 Subject: [PATCH 172/320] fixed min marker width --- src/styles/map.less | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/styles/map.less b/src/styles/map.less index 41dadd5..608a19b 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -125,7 +125,6 @@ border-radius: 8px; font-size: 12px; text-align: center; - min-width: 20px; height: 14px; display: inline-flex; align-items: center; @@ -194,7 +193,7 @@ left: auto; right: 15px; // transform: translate(50%, 0); - top: -5px; + top: -3px; position: absolute; z-index: -10; padding: 0 6px 0 6px; From a574b7393d73a8a952d3b68b54ed7a03826f49ee Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 12:20:54 +0700 Subject: [PATCH 173/320] current user location --- src/index.tsx | 17 +++--- src/map/CurrentLocation/index.tsx | 33 +++++++++++ src/map/Map/index.tsx | 6 +- src/redux/store.ts | 20 ++++--- src/redux/user/actions.ts | 3 + src/redux/user/constants.ts | 3 +- src/redux/user/handlers.ts | 96 ++++++++++++++++++++----------- src/redux/user/index.ts | 49 ++++++++-------- src/redux/user/sagas.ts | 6 ++ src/redux/user/selectors.ts | 3 +- src/styles/map.less | 9 +++ src/utils/window.ts | 37 +++++++++++- 12 files changed, 205 insertions(+), 77 deletions(-) create mode 100644 src/map/CurrentLocation/index.tsx diff --git a/src/index.tsx b/src/index.tsx index 30e849b..2e6eaca 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -23,10 +23,13 @@ export const Index = () => ( ReactDOM.render(, document.getElementById('index')); -(function () { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('./service-worker.js', { scope: '/' }) - .then(() => console.log('Service Worker registered successfully.')) - .catch(error => console.log('Service Worker registration failed:', error)); - } -}()); +if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') { + (function() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker + .register('./service-worker.js', { scope: '/' }) + .then(() => console.log('Service Worker registered successfully.')) + .catch(error => console.log('Service Worker registration failed:', error)); + } + })(); +} diff --git a/src/map/CurrentLocation/index.tsx b/src/map/CurrentLocation/index.tsx new file mode 100644 index 0000000..1710a18 --- /dev/null +++ b/src/map/CurrentLocation/index.tsx @@ -0,0 +1,33 @@ +import React, { FC, useState, useEffect } from 'react'; +import { LatLngLiteral, marker, Marker, DivIcon } from 'leaflet'; +import { MainMap } from '~/constants/map'; + +interface IProps { + location: LatLngLiteral; +} + +const CurrentLocation: FC = ({ location }) => { + useEffect(() => { + if (!location) return; + + const item = new Marker(location, { + icon: new DivIcon({ + html: ` +
      + + + + +
      +
      + `, + }), + }).addTo(MainMap); + + return () => item.removeFrom(MainMap); + }, [MainMap, location]); + + return null; +}; + +export { CurrentLocation }; diff --git a/src/map/Map/index.tsx b/src/map/Map/index.tsx index b2ad195..95f3752 100644 --- a/src/map/Map/index.tsx +++ b/src/map/Map/index.tsx @@ -11,11 +11,12 @@ import { Router } from '~/map/Router'; import { TileLayer } from '~/map/TileLayer'; import { Stickers } from '~/map/Stickers'; import { KmMarks } from '~/map/KmMarks'; -import { Arrows } from '~/map/Arrows'; +import { CurrentLocation } from '~/map/CurrentLocation'; import 'leaflet/dist/leaflet.css'; import { selectEditorEditing, selectEditorMode } from '~/redux/editor/selectors'; import { MODES } from '~/constants/modes'; +import { selectUserLocation } from '~/redux/user/selectors'; const mapStateToProps = state => ({ provider: selectMapProvider(state), @@ -23,6 +24,7 @@ const mapStateToProps = state => ({ stickers: selectMapStickers(state), editing: selectEditorEditing(state), mode: selectEditorMode(state), + location: selectUserLocation(state), }); const mapDispatchToProps = { @@ -41,6 +43,7 @@ const MapUnconnected: React.FC = ({ stickers, editing, mode, + location, mapClicked, mapSetSticker, @@ -78,6 +81,7 @@ const MapUnconnected: React.FC = ({ +
      , document.getElementById('canvas') ); diff --git a/src/redux/store.ts b/src/redux/store.ts index b2a9195..550ac22 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -4,11 +4,9 @@ import { persistStore, persistReducer } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import createSagaMiddleware from 'redux-saga'; - import { createBrowserHistory } from 'history'; import { editorLocationChanged } from '~/redux/editor/actions'; -import { PersistConfig, Persistor } from "redux-persist/es/types"; - +import { PersistConfig, Persistor } from 'redux-persist/es/types'; import { userReducer, IRootReducer } from '~/redux/user'; import { userSaga } from '~/redux/user/sagas'; @@ -18,6 +16,9 @@ import { editorSaga } from '~/redux/editor/sagas'; import { map, IMapReducer } from '~/redux/map'; import { mapSaga } from '~/redux/map/sagas'; +import { watchLocation, getLocation } from '~/utils/window'; +import { LatLngLiteral } from 'leaflet'; +import { setUserLocation } from './user/actions'; const userPersistConfig: PersistConfig = { key: 'user', @@ -26,17 +27,16 @@ const userPersistConfig: PersistConfig = { }; export interface IState { - user: IRootReducer - map: IMapReducer, - editor: IEditorState, + user: IRootReducer; + map: IMapReducer; + editor: IEditorState; } // create the saga middleware export const sagaMiddleware = createSagaMiddleware(); // redux extension composer const composeEnhancers = - typeof window === 'object' && - (window).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ + typeof window === 'object' && (window).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) : compose; @@ -49,7 +49,7 @@ export const store = createStore( composeEnhancers(applyMiddleware(sagaMiddleware)) ); -export function configureStore(): { store: Store, persistor: Persistor } { +export function configureStore(): { store: Store; persistor: Persistor } { sagaMiddleware.run(userSaga); sagaMiddleware.run(mapSaga); sagaMiddleware.run(editorSaga); @@ -65,3 +65,5 @@ history.listen((location, action) => { if (action === 'REPLACE') return; store.dispatch(editorLocationChanged(location.pathname)); }); + +watchLocation((location: LatLngLiteral) => store.dispatch(setUserLocation(location))); diff --git a/src/redux/user/actions.ts b/src/redux/user/actions.ts index 81f970f..0f4bec4 100644 --- a/src/redux/user/actions.ts +++ b/src/redux/user/actions.ts @@ -1,5 +1,6 @@ import { USER_ACTIONS } from '~/redux/user/constants'; import { IUser } from "~/constants/auth"; +import { IRootReducer } from '.'; export const setUser = (user: IUser) => ({ type: USER_ACTIONS.SET_USER, user }); export const userLogout = () => ({ type: USER_ACTIONS.USER_LOGOUT }); @@ -24,3 +25,5 @@ export const modifyRoute = (address: string, { title, is_public }: { title: stri }); export const toggleRouteStarred = (address: string) => ({ type: USER_ACTIONS.TOGGLE_ROUTE_STARRED, address }); export const setRouteStarred = (address: string, is_published: boolean) => ({ type: USER_ACTIONS.SET_ROUTE_STARRED, address, is_published }); + +export const setUserLocation = (location: IRootReducer['location']) => ({ type: USER_ACTIONS.SET_USER_LOCATION, location }); diff --git a/src/redux/user/constants.ts b/src/redux/user/constants.ts index e7cae5b..dbe4a00 100644 --- a/src/redux/user/constants.ts +++ b/src/redux/user/constants.ts @@ -5,7 +5,8 @@ export const USER_ACTIONS = { GOT_VK_USER: 'GOT_VK_USER', IFRAME_LOGIN_VK: 'IFRAME_LOGIN_VK', - + SET_USER_LOCATION: 'SET_USER_LOCATION', + SEARCH_SET_TITLE: 'SEARCH_SET_TITLE', SEARCH_SET_DISTANCE: 'SEARCH_SET_DISTANCE', SEARCH_CHANGE_DISTANCE: 'SEARCH_CHANGE_DISTANCE', diff --git a/src/redux/user/handlers.ts b/src/redux/user/handlers.ts index 3550434..5473031 100644 --- a/src/redux/user/handlers.ts +++ b/src/redux/user/handlers.ts @@ -1,7 +1,7 @@ -import { IRootState } from "."; -import * as ActionCreators from './actions' -import { TABS } from "~/constants/dialogs"; -import { USER_ACTIONS } from "./constants"; +import { IRootState, IRootReducer } from '.'; +import * as ActionCreators from './actions'; +import { TABS } from '~/constants/dialogs'; +import { USER_ACTIONS } from './constants'; type UnsafeReturnType = T extends (...args: any[]) => infer R ? R : any; @@ -17,7 +17,10 @@ const setUser: ActionHandler = (state, { user }) }, }); -const searchSetTitle: ActionHandler = (state, { title = '' }) => ({ +const searchSetTitle: ActionHandler = ( + state, + { title = '' } +) => ({ ...state, routes: { ...state.routes, @@ -25,33 +28,42 @@ const searchSetTitle: ActionHandler = (sta ...state.routes.filter, title, distance: [0, 10000], - } - } + }, + }, }); -const searchSetDistance: ActionHandler = (state, { distance = [0, 9999] }) => ({ +const searchSetDistance: ActionHandler = ( + state, + { distance = [0, 9999] } +) => ({ ...state, routes: { ...state.routes, filter: { ...state.routes.filter, distance, - } - } + }, + }, }); -const searchSetTab: ActionHandler = (state, { tab = TABS[Object.keys(TABS)[0]] }) => ({ +const searchSetTab: ActionHandler = ( + state, + { tab = TABS[Object.keys(TABS)[0]] } +) => ({ ...state, routes: { ...state.routes, filter: { ...state.routes.filter, tab: Object.values(TABS).indexOf(tab) >= 0 ? tab : TABS[Object.values(TABS)[0]], - } - } + }, + }, }); -const searchPutRoutes: ActionHandler = (state, { list = [], min, max, limit, step, shift }) => ({ +const searchPutRoutes: ActionHandler = ( + state, + { list = [], min, max, limit, step, shift } +) => ({ ...state, routes: { ...state.routes, @@ -61,50 +73,68 @@ const searchPutRoutes: ActionHandler = (s shift, filter: { ...state.routes.filter, - distance: (state.routes.filter.min === state.routes.filter.max) - ? [min, max] - : state.routes.filter.distance, + distance: + state.routes.filter.min === state.routes.filter.max + ? [min, max] + : state.routes.filter.distance, min, max, - } - } + }, + }, }); -const searchSetLoading: ActionHandler = (state, { loading = false }) => ({ +const searchSetLoading: ActionHandler = ( + state, + { loading = false } +) => ({ ...state, routes: { ...state.routes, loading, - } + }, }); -const setStarred: ActionHandler = (state, { is_published = false }) => ({ ...state, is_published }); +const setStarred: ActionHandler = ( + state, + { is_published = false } +) => ({ ...state, is_published }); const mapsSetShift: ActionHandler = (state, { shift = 0 }) => ({ ...state, routes: { ...state.routes, shift, - } + }, }); -const setRouteStarred: ActionHandler = (state, { address, is_published }) => ({ +const setRouteStarred: ActionHandler = ( + state, + { address, is_published } +) => ({ ...state, routes: { ...state.routes, - list: ( - state.routes.list - .map(el => el.address === address ? { ...el, is_published } : el) - .filter(el => ( + list: state.routes.list + .map(el => (el.address === address ? { ...el, is_published } : el)) + .filter( + el => (state.routes.filter.tab === TABS.STARRED && el.is_published) || (state.routes.filter.tab === TABS.PENDING && !el.is_published) - )) - ) - } + ), + }, }); -export const USER_HANDLERS = ({ +const setLocation = ( + state: IRootReducer, + { location }: ReturnType +): IRootReducer => ({ + ...state, + location, +}); + +export const USER_HANDLERS = { [USER_ACTIONS.SET_USER]: setUser, + [USER_ACTIONS.SET_USER_LOCATION]: setLocation, [USER_ACTIONS.SEARCH_SET_TITLE]: searchSetTitle, [USER_ACTIONS.SEARCH_SET_DISTANCE]: searchSetDistance, @@ -118,4 +148,4 @@ export const USER_HANDLERS = ({ [USER_ACTIONS.SET_STARRED]: setStarred, [USER_ACTIONS.SET_ROUTE_STARRED]: setRouteStarred, -}); \ No newline at end of file +}; diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index ef444d4..162d8d0 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -1,43 +1,44 @@ import { createReducer } from '~/utils/reducer'; import { DEFAULT_USER, IUser } from '~/constants/auth'; import { USER_HANDLERS } from './handlers'; +import { LatLngLiteral } from 'leaflet'; export interface IRouteListItem { - address: string, - title: string, - distance: number, - is_public: boolean, - is_published: boolean, - updated_at: string, + address: string; + title: string; + distance: number; + is_public: boolean; + is_published: boolean; + updated_at: string; } export interface IRootReducer { // ready: boolean, - user: IUser, - + user: IUser; + location: LatLngLiteral; routes: { - limit: 0, - loading: boolean, - list: Array, - step: number, - shift: number, + limit: 0; + loading: boolean; + list: Array; + step: number; + shift: number; filter: { - title: string, - starred: boolean, - distance: [number, number], - author: string, - tab: string, - min: number, - max: number, - } - }, + title: string; + starred: boolean; + distance: [number, number]; + author: string; + tab: string; + min: number; + max: number; + }; + }; } export type IRootState = Readonly; export const INITIAL_STATE: IRootReducer = { user: { ...DEFAULT_USER }, - + location: null, routes: { limit: 0, loading: false, // <-- maybe delete this @@ -52,7 +53,7 @@ export const INITIAL_STATE: IRootReducer = { tab: '', min: 0, max: 10000, - } + }, }, }; diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 744dd87..32c0893 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -34,6 +34,7 @@ import { selectUser, selectUserUser } from './selectors'; import { mapInitSaga } from '~/redux/map/sagas'; import { editorSetDialog, editorSetDialogActive } from '../editor/actions'; import { selectEditor } from '../editor/selectors'; +import { getLocation, watchLocation } from '~/utils/window'; function* generateGuestSaga() { const { @@ -343,8 +344,13 @@ export function* updateUserRoutes() { yield put(searchSetTab(TABS.MY)); } +// function* getUserLocation() { + // yield call(watchLocation, ActionCreators.setUserLocation); +// } + export function* userSaga() { yield takeLatest(REHYDRATE, authCheckSaga); + // yield takeLatest(REHYDRATE, getUserLocation); yield takeEvery(USER_ACTIONS.USER_LOGOUT, userLogoutSaga); yield takeLatest(USER_ACTIONS.GOT_VK_USER, gotVkUserSaga); diff --git a/src/redux/user/selectors.ts b/src/redux/user/selectors.ts index 6de1196..7a8cc68 100644 --- a/src/redux/user/selectors.ts +++ b/src/redux/user/selectors.ts @@ -1,4 +1,5 @@ import { IState } from '~/redux/store' export const selectUser = (state: IState) => state.user; -export const selectUserUser = (state: IState) => state.user.user; \ No newline at end of file +export const selectUserUser = (state: IState) => state.user.user; +export const selectUserLocation = (state: IState) => state.user.location; \ No newline at end of file diff --git a/src/styles/map.less b/src/styles/map.less index 608a19b..671303e 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -338,3 +338,12 @@ .leaflet-pane { user-select: none; } + +.current-location { + svg { + fill: @bar_background; + stroke: white; + stroke-width: 0.2px; + } +} + \ No newline at end of file diff --git a/src/utils/window.ts b/src/utils/window.ts index 8174964..0d60bb7 100644 --- a/src/utils/window.ts +++ b/src/utils/window.ts @@ -1,3 +1,38 @@ import { MOBILE_BREAKPOINT } from '~/config/frontend'; +import { LatLngLiteral } from 'leaflet'; -export const isMobile = (): boolean => (window.innerWidth <= MOBILE_BREAKPOINT); +export const isMobile = (): boolean => window.innerWidth <= MOBILE_BREAKPOINT; + +export const getLocation = (callback: (pos: LatLngLiteral) => void) => { + window.navigator.geolocation.getCurrentPosition(position => { + console.log('getting pos'); + + if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) + return callback(null); + + const { latitude: lat, longitude: lng } = position.coords; + + callback({ lat, lng }); + return; + }); +}; + +export const watchLocation = (callback: (pos: LatLngLiteral) => void): number => { + return window.navigator.geolocation.watchPosition( + position => { + console.log('Watch?'); + + if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) + return callback(null); + + const { latitude: lat, longitude: lng } = position.coords; + + callback({ lat, lng }); + return; + }, + () => callback(null), + { + timeout: 30, + } + ); +}; From 5ef427cb4551ab4c7eced6e9e2948b6bd7efa625 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 12:29:49 +0700 Subject: [PATCH 174/320] zooming on marker click --- src/map/CurrentLocation/index.tsx | 18 ++++++++++++------ src/styles/map.less | 8 ++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/map/CurrentLocation/index.tsx b/src/map/CurrentLocation/index.tsx index 1710a18..663110b 100644 --- a/src/map/CurrentLocation/index.tsx +++ b/src/map/CurrentLocation/index.tsx @@ -1,4 +1,4 @@ -import React, { FC, useState, useEffect } from 'react'; +import React, { FC, useState, useEffect, useCallback } from 'react'; import { LatLngLiteral, marker, Marker, DivIcon } from 'leaflet'; import { MainMap } from '~/constants/map'; @@ -7,6 +7,8 @@ interface IProps { } const CurrentLocation: FC = ({ location }) => { + const zoomToLocation = useCallback(({ latlng }) => MainMap.setView(latlng, 17), [MainMap]); + useEffect(() => { if (!location) return; @@ -15,17 +17,21 @@ const CurrentLocation: FC = ({ location }) => { html: `
      - - - + + + + +
      `, }), - }).addTo(MainMap); + }) + .on('click', zoomToLocation) + .addTo(MainMap); return () => item.removeFrom(MainMap); - }, [MainMap, location]); + }, [MainMap, location, zoomToLocation]); return null; }; diff --git a/src/styles/map.less b/src/styles/map.less index 671303e..863fb43 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -340,7 +340,15 @@ } .current-location { + width: 0; + height: 0; + position: relative; + svg { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); fill: @bar_background; stroke: white; stroke-width: 0.2px; From 30197c7f150ab6875320183bad0894fe3842ec68 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 12:44:12 +0700 Subject: [PATCH 175/320] current location button --- src/components/UserLocation.tsx | 103 +++++++++--------------------- src/map/CurrentLocation/index.tsx | 2 +- src/styles/panel.less | 4 ++ 3 files changed, 34 insertions(+), 75 deletions(-) diff --git a/src/components/UserLocation.tsx b/src/components/UserLocation.tsx index ecb501c..cc4a3af 100644 --- a/src/components/UserLocation.tsx +++ b/src/components/UserLocation.tsx @@ -1,81 +1,36 @@ -import React from 'react'; -// import { marker } from 'leaflet'; -// import { DomMarker } from '~/utils/DomMarker'; -// import { Icon } from '~/components/panels/Icon'; -// import { editor } from '~/modules/Editor'; +import React, { FC, useCallback } from 'react'; +import { IState } from '~/redux/store'; +import { selectUserLocation } from '~/redux/user/selectors'; +import { connect } from 'react-redux'; +import { Tooltip } from './panels/Tooltip'; +import { MainMap } from '~/constants/map'; -interface Props { +const mapStateToProps = (state: IState) => ({ + location: selectUserLocation(state), +}); -} +type Props = ReturnType & {}; -export class UserLocation extends React.Component { - render() { - return null - } - // constructor(props) { - // super(props); +const UserLocationUnconnected: FC = ({ location }) => { + const onClick = useCallback(() => { + if (!location) return; - // const element = document.createElement('div'); - // this.icon = new DomMarker({ element, className: 'location-marker' }); + MainMap.setView(location, 17); + }, [MainMap, location]); - // // this.map = editor.map.map; - // this.location = []; - // } + return ( +
      + Где я? - // icon; - // mark = null; - // map; - // location; + + + + + + + +
      + ); +}; - // componentDidMount() { - // this.getUserLocation(this.updateLocationMark); - // } - - // getUserLocation = callback => { - // // todo: TO SAGAS - // if (!window.navigator || !window.navigator.geolocation) return; - - // window.navigator.geolocation.getCurrentPosition(position => { - // if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) return; - - // const { latitude, longitude } = position.coords; - - // callback(latitude, longitude); - // }); - // }; - - // centerMapOnLocation = () => { - // if (this.location && this.location.length === 2) { - // this.panMapTo(this.location[0], this.location[1]); - // } else { - // this.getUserLocation(this.panMapTo); - // } - - // this.getUserLocation(this.updateLocationMark); - // }; - - // panMapTo = (latitude, longitude) => { - // if (!latitude || !longitude) return; - - // this.map.panTo([latitude, longitude]); - // }; - - // updateLocationMark = (latitude, longitude) => { - // if (!latitude || !longitude) return; - - // if (this.mark) this.map.removeLayer(this.mark); - - // this.location = [latitude, longitude]; - // this.mark = marker(this.location, { icon: this.icon }).addTo(this.map); - // }; - - // render() { - // return ( - //
      - //
      - // - //
      - //
      - // ); - // } -} +export const UserLocation = connect(mapStateToProps)(UserLocationUnconnected); diff --git a/src/map/CurrentLocation/index.tsx b/src/map/CurrentLocation/index.tsx index 663110b..745a8aa 100644 --- a/src/map/CurrentLocation/index.tsx +++ b/src/map/CurrentLocation/index.tsx @@ -22,7 +22,7 @@ const CurrentLocation: FC = ({ location }) => { -
      +
      `, }), diff --git a/src/styles/panel.less b/src/styles/panel.less index a2d6d9c..c787e50 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -720,3 +720,7 @@ } } } + +.location-bar { + width: 32px; +} \ No newline at end of file From c3e136cebb3b136927bb1afde1ea129e3639cb04 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 13:27:28 +0700 Subject: [PATCH 176/320] support for partial height dialogs --- src/components/dialogs/AppInfoDialog.tsx | 117 ++++++++++------------- src/components/dialogs/MapListDialog.tsx | 2 +- src/styles/dialogs.less | 10 +- 3 files changed, 59 insertions(+), 70 deletions(-) diff --git a/src/components/dialogs/AppInfoDialog.tsx b/src/components/dialogs/AppInfoDialog.tsx index 9441f68..3fb84e7 100644 --- a/src/components/dialogs/AppInfoDialog.tsx +++ b/src/components/dialogs/AppInfoDialog.tsx @@ -1,75 +1,62 @@ // @flow -import React from 'react'; +import React, { Fragment } from 'react'; import { Scroll } from '~/components/Scroll'; import { APP_INFO } from '~/constants/app_info'; export const AppInfoDialog = () => ( -
      -
      -
      - Orchid Map -
      -
      - версия{' '} - {(APP_INFO.VERSION || 1)}. - {(APP_INFO.CHANGELOG[APP_INFO.VERSION].length || 0)}. - {(APP_INFO.CHANGELOG[APP_INFO.VERSION][0].length - 1 || 0)} -
      -
      -
      -
      -
      Исходный код:
      - github.com/muerwre/orchid-front -
      - github.com/muerwre/orchid-backend + +
      + +
      +
      +
      Orchid Map
      +
      + версия {APP_INFO.VERSION || 1}.{APP_INFO.CHANGELOG[APP_INFO.VERSION].length || 0}. + {APP_INFO.CHANGELOG[APP_INFO.VERSION][0].length - 1 || 0}
      -
      -
      Frontend:
      - ReactJS,{' '} - Leaflet,{' '} - Leaflet Routing Machine{' '} -
      -
      -
      Backend:
      - OSRM,{' '} - Golang,{' '} - Nginx,{' '} +
      +
      + +
      +
      Frontend:
      + + ReactJS + + ,{' '} + + Leaflet + + ,{' '} + + Leaflet Routing Machine + {' '} +
      +
      +
      Backend:
      + + OSRM + + ,{' '} + + Golang + + ,{' '} + + Nginx + + ,{' '} +
      - -
      -
      -

      История изменений

      - { - [...Object.keys(APP_INFO.CHANGELOG)].reverse().map((version, i) => ( -
      -
      {version}.
      -
      - { - APP_INFO.CHANGELOG[version].map((release, y) => ( -
      -
      {APP_INFO.CHANGELOG[version].length - y}.
      -
      - { - APP_INFO.CHANGELOG[version][y].map((build, z) => ( -
      -
      {(z)}.
      - {APP_INFO.CHANGELOG[version][y][z]} -
      - )) - } -
      -
      - )) - } -
      -
      - )) - } -
      -
      -
      -
      + ); - diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index a351192..7bca6a3 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -163,7 +163,7 @@ class MapListDialogUnconnected extends PureComponent { const { editor_target, menu_target, is_editing, is_dropping } = this.state; return ( -
      +
      {list.length === 0 && loading && (
      diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 262eee4..ca518fe 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -1,13 +1,12 @@ .dialog { - // background: #222222; - // background: linear-gradient(130deg, #320523, #020d2b); - // background: #271535; position: fixed; left: 0; top: 0; width: 360px; height: 100%; z-index: 5; + display: flex; + flex-direction: column; padding: 10px 10px 68px 10px; box-sizing: border-box; @@ -77,7 +76,6 @@ .dialog-content { background: @dialog_background; - height: 100%; overflow: hidden; position: relative; border-radius: @panel_radius @panel_radius 0 @panel_radius; @@ -90,6 +88,10 @@ color: white; opacity: 0.8; } + + &.full { + flex: 1; + } } .dialog-shader { From b20a3445d184d855f1bb8b5d55b127c5d125d4ba Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 16:42:46 +0700 Subject: [PATCH 177/320] nominatim search (without working dialog) --- package-lock.json | 101 +++++++++++++++++- package.json | 2 +- src/components/dialogs/DialogLoader.tsx | 16 +++ src/components/dialogs/MapListDialog.tsx | 7 +- src/components/dialogs/NominatimDialog.tsx | 46 ++++++++ .../dialogs/NominatimSearchPanel.tsx | 37 +++++++ .../nominatim/NominatimListItem.tsx | 21 ++++ src/components/panels/EditorPanel.tsx | 10 +- src/components/panels/UserPanel.tsx | 10 +- src/constants/dialogs.ts | 17 +-- src/containers/App.tsx | 5 +- src/containers/LeftDialog.tsx | 6 +- src/map/Map/index.tsx | 8 +- src/redux/editor/actions.ts | 10 ++ src/redux/editor/constants.ts | 2 + src/redux/editor/handlers.ts | 12 +++ src/redux/editor/index.ts | 21 +++- src/redux/editor/sagas.ts | 44 +++++++- src/redux/editor/selectors.ts | 1 + src/redux/map/sagas.ts | 2 +- src/redux/types.ts | 7 ++ src/redux/user/sagas.ts | 10 +- src/sprites/icon.svg | 7 ++ src/styles/dialogs.less | 62 +++++++++-- src/styles/panel.less | 14 +++ src/utils/api.ts | 31 ++++++ src/utils/window.ts | 2 - 27 files changed, 450 insertions(+), 61 deletions(-) create mode 100644 src/components/dialogs/DialogLoader.tsx create mode 100644 src/components/dialogs/NominatimDialog.tsx create mode 100644 src/components/dialogs/NominatimSearchPanel.tsx create mode 100644 src/components/nominatim/NominatimListItem.tsx diff --git a/package-lock.json b/package-lock.json index 5a6cb34..4639a6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -775,6 +775,77 @@ "resolved": "https://registry.npmjs.org/@mapbox/polyline/-/polyline-0.2.0.tgz", "integrity": "sha1-biWYB0SqIjMflLZFpULALT/P7pc=" }, + "@redux-saga/core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", + "integrity": "sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==", + "requires": { + "@babel/runtime": "7.8.3", + "@redux-saga/deferred": "1.1.2", + "@redux-saga/delay-p": "1.1.2", + "@redux-saga/is": "1.1.2", + "@redux-saga/symbols": "1.1.2", + "@redux-saga/types": "1.1.0", + "redux": "4.0.5", + "typescript-tuple": "2.2.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", + "integrity": "sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==", + "requires": { + "regenerator-runtime": "0.13.3" + } + }, + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "1.4.0", + "symbol-observable": "1.2.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + } + } + }, + "@redux-saga/deferred": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.1.2.tgz", + "integrity": "sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ==" + }, + "@redux-saga/delay-p": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.2.tgz", + "integrity": "sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g==", + "requires": { + "@redux-saga/symbols": "1.1.2" + } + }, + "@redux-saga/is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.2.tgz", + "integrity": "sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w==", + "requires": { + "@redux-saga/symbols": "1.1.2", + "@redux-saga/types": "1.1.0" + } + }, + "@redux-saga/symbols": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.2.tgz", + "integrity": "sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ==" + }, + "@redux-saga/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", + "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==" + }, "@types/classnames": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.7.tgz", @@ -11242,9 +11313,12 @@ "integrity": "sha512-sSJAzNq7zka3qVHKce1hbvqf0Vf5DuTVm7dr4GtsqQVOexnrvbV47RWFiPxQ8fscnyiuWyD2O92DOxPl0tGCRg==" }, "redux-saga": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-0.16.2.tgz", - "integrity": "sha512-iIjKnRThI5sKPEASpUvySemjzwqwI13e3qP7oLub+FycCRDysLSAOwt958niZW6LhxfmS6Qm1BzbU70w/Koc4w==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.3.tgz", + "integrity": "sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw==", + "requires": { + "@redux-saga/core": "1.1.3" + } }, "reduxsauce": { "version": "1.0.1", @@ -13112,6 +13186,27 @@ "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", "dev": true }, + "typescript-compare": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz", + "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==", + "requires": { + "typescript-logic": "0.0.0" + } + }, + "typescript-logic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz", + "integrity": "sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==" + }, + "typescript-tuple": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz", + "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==", + "requires": { + "typescript-compare": "0.0.2" + } + }, "uglifyjs-webpack-plugin": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", diff --git a/package.json b/package.json index 5c86c11..6fbb42e 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "reactrangeslider": "^3.0.6", "redux": "^4.0.1", "redux-persist": "^5.10.0", - "redux-saga": "^0.16.2", + "redux-saga": "^1.0.0", "reduxsauce": "^1.0.0", "scrypt": "^6.0.3", "throttle-debounce": "^2.1.0", diff --git a/src/components/dialogs/DialogLoader.tsx b/src/components/dialogs/DialogLoader.tsx new file mode 100644 index 0000000..4dfc069 --- /dev/null +++ b/src/components/dialogs/DialogLoader.tsx @@ -0,0 +1,16 @@ +import React, { FC } from 'react'; +import { Icon } from '~/components/panels/Icon'; + +interface IProps {} + +const DialogLoader: FC = ({}) => { + return ( +
      +
      + +
      +
      + ); +}; + +export { DialogLoader }; diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index 7bca6a3..557f10f 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -24,6 +24,7 @@ import { IRouteListItem } from '~/redux/user'; import { ROLES } from '~/constants/auth'; import { IState } from '~/redux/store'; import { MapListDialogHead } from '~/components/search/MapListDialogHead'; +import { DialogLoader } from '~/components/dialogs/DialogLoader'; const mapStateToProps = ({ editor: { editing }, @@ -165,11 +166,7 @@ class MapListDialogUnconnected extends PureComponent { return (
      {list.length === 0 && loading && ( -
      -
      - -
      -
      + )} {ready && !loading && list.length === 0 && ( diff --git a/src/components/dialogs/NominatimDialog.tsx b/src/components/dialogs/NominatimDialog.tsx new file mode 100644 index 0000000..da22cc0 --- /dev/null +++ b/src/components/dialogs/NominatimDialog.tsx @@ -0,0 +1,46 @@ +import React, { FC, Fragment, useCallback } from 'react'; +import { connect } from 'react-redux'; +import { IState } from '~/redux/store'; +import { selectEditorNominatim } from '~/redux/editor/selectors'; +import { DialogLoader } from './DialogLoader'; +import { NominatimListItem } from '~/components/nominatim/NominatimListItem'; +import { MainMap } from '~/constants/map'; +import { Scroll } from '../Scroll'; + +const mapStateToProps = (state: IState) => ({ + nominatim: selectEditorNominatim(state), +}); + +type Props = ReturnType & {}; + +const NominatimDialogUnconnected: FC = ({ nominatim: { loading, list } }) => { + const onItemClick = useCallback( + (index: number) => { + if (!list[index]) return; + + MainMap.setView(list[index].latlng, 17); + }, + [MainMap, list] + ); + + return ( + +
      + +
      + +
      + {loading && } + {list.map((item, i) => ( + + ))} +
      +
      +
      + + ); +}; + +const NominatimDialog = connect(mapStateToProps)(NominatimDialogUnconnected); + +export { NominatimDialog }; diff --git a/src/components/dialogs/NominatimSearchPanel.tsx b/src/components/dialogs/NominatimSearchPanel.tsx new file mode 100644 index 0000000..433b613 --- /dev/null +++ b/src/components/dialogs/NominatimSearchPanel.tsx @@ -0,0 +1,37 @@ +import React, { FC, useCallback, useState } from 'react'; +import { Icon } from '../panels/Icon'; + +interface IProps { + active: boolean; + onSearch: (search: string) => void; +} + +const NominatimSearchPanel: FC = ({ active, onSearch }) => { + const [search, setSearch] = useState('Колывань'); + + const setValue = useCallback(({ target: { value } }) => setSearch(value), [setSearch]); + + const onSubmit = useCallback(event => { + event.preventDefault(); + + if (search.length < 3) return; + + onSearch(search); + }, [search, onSearch]); + + return ( +
      +
      +
      + +
      + + +
      +
      + ); +}; + +export { NominatimSearchPanel }; diff --git a/src/components/nominatim/NominatimListItem.tsx b/src/components/nominatim/NominatimListItem.tsx new file mode 100644 index 0000000..8c097cb --- /dev/null +++ b/src/components/nominatim/NominatimListItem.tsx @@ -0,0 +1,21 @@ +import React, { FC, useCallback } from 'react'; +import { INominatimResult } from '~/redux/types'; +import { MainMap } from '~/constants/map'; + +interface IProps { + item: INominatimResult; +} + +const NominatimListItem: FC = ({ item }) => { + const onClick = useCallback(() => { + MainMap.panTo(item.latlng); + }, [MainMap]); + + return ( +
      +
      {item.title}
      +
      + ); +}; + +export { NominatimListItem }; diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 54382b0..8bb8450 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -32,7 +32,7 @@ type Props = ReturnType & typeof mapDispatchToProps & {} class EditorPanelUnconnected extends PureComponent { componentDidMount() { - window.addEventListener('keydown', this.props.editorKeyPressed as any); + window.addEventListener('keydown', this.onKeyPress as any); const obj = document.getElementById('control-dialog'); const { width } = this.panel.getBoundingClientRect(); @@ -45,9 +45,15 @@ class EditorPanelUnconnected extends PureComponent { panel: HTMLElement = null; componentWillUnmount() { - window.removeEventListener('keydown', this.props.editorKeyPressed as any); + window.removeEventListener('keydown', this.onKeyPress as any); } + onKeyPress = event => { + if (event.target.tagName === 'TEXTAREA' || event.target.tagName === 'INPUT') return; + + this.props.editorKeyPressed(event); + }; + startPolyMode = () => this.props.editorSetMode(MODES.POLY); startStickerMode = () => this.props.editorSetMode(MODES.STICKERS_SELECT); startRouterMode = () => this.props.editorSetMode(MODES.ROUTER); diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 112e0f4..8d6765f 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -10,6 +10,7 @@ import { editorSetDialog, editorSetDialogActive, editorGetGPXTrack, + editorSearchNominatim, } from '~/redux/editor/actions'; import { connect } from 'react-redux'; import { Icon } from '~/components/panels/Icon'; @@ -19,11 +20,12 @@ import { CLIENT } from '~/config/frontend'; import { DIALOGS, TABS } from '~/constants/dialogs'; import { Tooltip } from '~/components/panels/Tooltip'; import { TitleDialog } from '~/components/dialogs/TitleDialog'; +import { NominatimSearchPanel } from '~/components/dialogs/NominatimSearchPanel'; import { IState } from '~/redux/store'; const mapStateToProps = ({ user: { user }, - editor: { dialog, dialog_active }, + editor: { dialog, dialog_active, features }, map: { route, stickers }, }: IState) => ({ dialog, @@ -31,6 +33,7 @@ const mapStateToProps = ({ user, route, stickers, + features, }); const mapDispatchToProps = { @@ -42,6 +45,7 @@ const mapDispatchToProps = { editorSetDialogActive, openMapDialog, editorGetGPXTrack, + editorSearchNominatim, }; type Props = ReturnType & typeof mapDispatchToProps & {}; @@ -90,6 +94,7 @@ export class UserPanelUnconnected extends PureComponent { } setMenuOpened = () => this.setState({ menuOpened: !this.state.menuOpened }); + openMapsDialog = () => { this.props.openMapDialog(TABS.MY); }; @@ -115,7 +120,7 @@ export class UserPanelUnconnected extends PureComponent { render() { const { - props: { user, dialog, dialog_active, route, stickers }, + props: { user, dialog, dialog_active, route, stickers, features }, state: { menuOpened }, } = this; @@ -124,6 +129,7 @@ export class UserPanelUnconnected extends PureComponent { return (
      +
      diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts index 1291b6c..6a71f58 100644 --- a/src/constants/dialogs.ts +++ b/src/constants/dialogs.ts @@ -1,22 +1,11 @@ -export interface IDialogs { - NONE: string, - MAP_LIST: string, - APP_INFO: string, -} - -export interface IMapTabs { - MY: string, - PENDING: string, - STARRED: string, -} - -export const DIALOGS: IDialogs = ({ +export const DIALOGS = ({ NONE: 'NONE', MAP_LIST: 'MAP_LIST', APP_INFO: 'APP_INFO', + NOMINATIM: 'NOMINATIM', }); -export const TABS: IMapTabs = { +export const TABS = { MY: 'my', PENDING: 'pending', STARRED: 'starred', diff --git a/src/containers/App.tsx b/src/containers/App.tsx index e109b32..972c09e 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -4,7 +4,6 @@ import { EditorPanel } from '~/components/panels/EditorPanel'; import { Fills } from '~/components/Fills'; import { UserPanel } from '~/components/panels/UserPanel'; import { connect } from 'react-redux'; -import { bindActionCreators } from 'redux'; import { hot } from 'react-hot-loader'; import { Renderer } from '~/components/renderer/Renderer'; @@ -14,7 +13,7 @@ import { TopLeftPanel } from '~/components/panels/TopLeftPanel'; import { TopRightPanel } from '~/components/panels/TopRightPanel'; import { LogoPreview } from '~/components/logo/LogoPreview'; import { IStickerPack } from '~/constants/stickers'; -import { IDialogs } from '~/constants/dialogs'; +import { DIALOGS } from '~/constants/dialogs'; import { Map } from '~/map/Map'; import { IEditorState } from '~/redux/editor'; @@ -25,7 +24,7 @@ type Props = { renderer_active: boolean; mode: IEditorState['mode']; - dialog: keyof IDialogs; + dialog: keyof typeof DIALOGS; dialog_active: boolean; set: keyof IStickerPack; editorHideRenderer: typeof editorHideRenderer; diff --git a/src/containers/LeftDialog.tsx b/src/containers/LeftDialog.tsx index 4455738..f05fb3c 100644 --- a/src/containers/LeftDialog.tsx +++ b/src/containers/LeftDialog.tsx @@ -1,13 +1,14 @@ import React, { createElement, FC, memo } from 'react'; -import { DIALOGS, IDialogs } from '~/constants/dialogs'; +import { DIALOGS } from '~/constants/dialogs'; import classnames from 'classnames'; import { AppInfoDialog } from '~/components/dialogs/AppInfoDialog'; import { Icon } from '~/components/panels/Icon'; import { MapListDialog } from '~/components/dialogs/MapListDialog'; +import { NominatimDialog } from '~/components/dialogs/NominatimDialog'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; interface Props { - dialog: keyof IDialogs; + dialog: keyof typeof DIALOGS; dialog_active: Boolean; editorSetDialogActive: typeof EDITOR_ACTIONS.editorSetDialogActive; } @@ -15,6 +16,7 @@ interface Props { const LEFT_DIALOGS = { [DIALOGS.MAP_LIST]: MapListDialog, [DIALOGS.APP_INFO]: AppInfoDialog, + [DIALOGS.NOMINATIM]: NominatimDialog, }; const LeftDialog: FC = memo(({ dialog, dialog_active, editorSetDialogActive }) => ( diff --git a/src/map/Map/index.tsx b/src/map/Map/index.tsx index 95f3752..b93afec 100644 --- a/src/map/Map/index.tsx +++ b/src/map/Map/index.tsx @@ -51,8 +51,12 @@ const MapUnconnected: React.FC = ({ }) => { const onClick = React.useCallback( event => { - if (!MainMap.clickable || mode === MODES.NONE) return; - + if ( + !MainMap.clickable || + mode === MODES.NONE + ) + return; + mapClicked(event.latlng); }, [mapClicked, mode] diff --git a/src/redux/editor/actions.ts b/src/redux/editor/actions.ts index b8f5b67..e68f199 100644 --- a/src/redux/editor/actions.ts +++ b/src/redux/editor/actions.ts @@ -112,3 +112,13 @@ export const editorSetRouter = (router: Partial) => ({ type: EDITOR_ACTIONS.SET_ROUTER, router, }); + +export const editorSetNominatim = (nominatim: Partial) => ({ + type: EDITOR_ACTIONS.SET_NOMINATIM, + nominatim, +}) + +export const editorSearchNominatim = (search: IEditorState['nominatim']['search']) => ({ + type: EDITOR_ACTIONS.SEARCH_NOMINATIM, + search, +}) \ No newline at end of file diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts index d28a407..fb031f1 100644 --- a/src/redux/editor/constants.ts +++ b/src/redux/editor/constants.ts @@ -44,4 +44,6 @@ export const EDITOR_ACTIONS = { KEY_PRESSED: `${P}-KEY_PRESSED`, SET_ROUTER: `${P}-SET_ROUTER`, + SET_NOMINATIM: `${P}-SET_NOMINATIM`, + SEARCH_NOMINATIM: `${P}-SEARCH_NOMINATIM`, }; diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts index 1266457..c2d33e8 100644 --- a/src/redux/editor/handlers.ts +++ b/src/redux/editor/handlers.ts @@ -157,6 +157,17 @@ const setRouter = ( }, }); +const setNominatim = ( + state, + { nominatim }: ReturnType +): IEditorState => ({ + ...state, + nominatim: { + ...state.nominatim, + ...nominatim, + }, +}); + export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_EDITING]: setEditing, [EDITOR_ACTIONS.SET_CHANGED]: setChanged, @@ -184,4 +195,5 @@ export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_FEATURE]: setFeature, [EDITOR_ACTIONS.SET_IS_ROUTING]: setIsRouting, [EDITOR_ACTIONS.SET_ROUTER]: setRouter, + [EDITOR_ACTIONS.SET_NOMINATIM]: setNominatim, }; diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 6fca121..7d7c958 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -1,8 +1,9 @@ import { createReducer } from '~/utils/reducer'; -import { IDialogs } from '~/constants/dialogs'; +import { DIALOGS } from '~/constants/dialogs'; import { MODES } from '~/constants/modes'; import { EDITOR_HANDLERS } from './handlers'; import { ILatLng } from '../map/types'; +import { INominatimResult } from '~/redux/types'; export interface IEditorState { changed: boolean; @@ -11,13 +12,13 @@ export interface IEditorState { markers_shown: boolean; router: { - points: ILatLng[]; + points: ILatLng[]; waypoints: ILatLng[]; }; mode: typeof MODES[keyof typeof MODES]; - dialog: IDialogs[keyof IDialogs]; + dialog: typeof DIALOGS[keyof typeof DIALOGS]; dialog_active: boolean; routerPoints: number; @@ -31,6 +32,13 @@ export interface IEditorState { features: { routing: boolean; + nominatim: boolean; + }; + + nominatim: { + search: string; + loading: boolean; + list: INominatimResult[]; }; renderer: { @@ -76,6 +84,13 @@ export const EDITOR_INITIAL_STATE = { features: { routing: false, + nominatim: false, + }, + + nominatim: { + search: '', + loading: false, + list: [], }, renderer: { diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index d636770..f613dc1 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -1,5 +1,13 @@ -import { call, put, takeEvery, takeLatest, select, race } from 'redux-saga/effects'; -import { delay, SagaIterator } from 'redux-saga'; +import { + call, + put, + takeEvery, + takeLatest, + select, + race, + takeLeading, + delay, +} from 'redux-saga/effects'; import { selectEditor, selectEditorMode } from '~/redux/editor/selectors'; import { simplify } from '~/utils/simplify'; import { @@ -14,13 +22,16 @@ import { editorLocationChanged, editorKeyPressed, editorSetSave, + editorSearchNominatim, + editorSetDialog, + editorSetNominatim, } from '~/redux/editor/actions'; import { getUrlData, pushPath } from '~/utils/history'; import { MODES } from '~/constants/modes'; -import { checkOSRMService } from '~/utils/api'; +import { checkOSRMService, checkNominatimService, searchNominatim } from '~/utils/api'; import { LatLng } from 'leaflet'; import { searchSetTab } from '../user/actions'; -import { TABS } from '~/constants/dialogs'; +import { TABS, DIALOGS } from '~/constants/dialogs'; import { EDITOR_ACTIONS } from './constants'; import { getGPXString, downloadGPXTrack } from '~/utils/gpx'; import { @@ -76,11 +87,17 @@ function* checkOSRMServiceSaga() { yield put(editorSetFeature({ routing })); } +function* checkNominatimSaga() { + const nominatim = yield call(checkNominatimService); + yield put(editorSetFeature({ nominatim })); +} + export function* setReadySaga() { yield put(editorSetReady(true)); hideLoader(); yield call(checkOSRMServiceSaga); + yield call(checkNominatimSaga); yield put(searchSetTab(TABS.MY)); } @@ -217,7 +234,7 @@ function* keyPressedSaga({ key, target }: ReturnType) { } } -function* getGPXTrackSaga(): SagaIterator { +function* getGPXTrackSaga() { const { route, stickers, title, address }: ReturnType = yield select(selectMap); if (!route.length && !stickers.length) return; @@ -259,6 +276,22 @@ function* cancelSave() { ); } +function* searchNominatimSaga({ search }: ReturnType) { + const { dialog, dialog_active }: ReturnType = yield select(selectEditor); + + if (dialog !== DIALOGS.NOMINATIM || !dialog_active) { + yield put(editorSetDialog(DIALOGS.NOMINATIM)); + yield put(editorSetDialogActive(true)); + } + + yield put(editorSetNominatim({ loading: true, search })); + const list = yield call(searchNominatim, search); + yield put(editorSetNominatim({ list })); + + yield delay(1000); // safely wait for 1s to prevent from ddosing nominatim + yield put(editorSetNominatim({ loading: false })); +} + export function* editorSaga() { yield takeEvery(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); @@ -271,4 +304,5 @@ export function* editorSaga() { yield takeLatest(MAP_ACTIONS.MAP_CLICKED, mapClick); yield takeLatest(EDITOR_ACTIONS.ROUTER_SUBMIT, routerSubmit); yield takeLatest(EDITOR_ACTIONS.CANCEL_SAVE, cancelSave); + yield takeLeading(EDITOR_ACTIONS.SEARCH_NOMINATIM, searchNominatimSaga); } diff --git a/src/redux/editor/selectors.ts b/src/redux/editor/selectors.ts index 3587f3f..c4ce029 100644 --- a/src/redux/editor/selectors.ts +++ b/src/redux/editor/selectors.ts @@ -8,3 +8,4 @@ export const selectEditorActiveSticker = (state: IState) => state.editor.activeS export const selectEditorRenderer = (state: IState) => state.editor.renderer; export const selectEditorRouter = (state: IState) => state.editor.router; export const selectEditorDistance = (state: IState) => state.editor.distance; +export const selectEditorNominatim = (state: IState) => state.editor.nominatim; diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 8deecd2..e323c79 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -7,6 +7,7 @@ import { race, take, takeLatest, + delay, } from 'redux-saga/effects'; import { MAP_ACTIONS } from './constants'; import { @@ -36,7 +37,6 @@ import { getStoredMap, postMap } from '~/utils/api'; import { Unwrap } from '~/utils/middleware'; import { selectMap, selectMapProvider, selectMapRoute, selectMapStickers } from './selectors'; import { TIPS } from '~/constants/tips'; -import { delay } from 'redux-saga'; import { setReadySaga } from '../editor/sagas'; import { selectEditor } from '../editor/selectors'; import { EDITOR_ACTIONS } from '../editor/constants'; diff --git a/src/redux/types.ts b/src/redux/types.ts index e69de29..0f42cde 100644 --- a/src/redux/types.ts +++ b/src/redux/types.ts @@ -0,0 +1,7 @@ +import { LatLngLiteral } from 'leaflet'; + +export interface INominatimResult { + id: number; + title: string; + latlng: LatLngLiteral; +}; \ No newline at end of file diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 32c0893..cd77bf3 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -1,6 +1,5 @@ import { REHYDRATE, RehydrateAction } from 'redux-persist'; -import { delay, SagaIterator } from 'redux-saga'; -import { takeLatest, select, call, put, takeEvery } from 'redux-saga/effects'; +import { takeLatest, select, call, put, takeEvery, delay } from 'redux-saga/effects'; import { checkIframeToken, checkUserToken, @@ -34,7 +33,6 @@ import { selectUser, selectUserUser } from './selectors'; import { mapInitSaga } from '~/redux/map/sagas'; import { editorSetDialog, editorSetDialogActive } from '../editor/actions'; import { selectEditor } from '../editor/selectors'; -import { getLocation, watchLocation } from '~/utils/window'; function* generateGuestSaga() { const { @@ -198,7 +196,7 @@ function* searchSetTabSaga() { yield put(searchSetTitle('')); } -function* userLogoutSaga(): SagaIterator { +function* userLogoutSaga() { yield put(setUser(DEFAULT_USER)); yield call(generateGuestSaga); } @@ -256,7 +254,7 @@ function* mapsLoadMoreSaga() { yield put(searchSetLoading(false)); } -function* dropRouteSaga({ address }: ReturnType): SagaIterator { +function* dropRouteSaga({ address }: ReturnType) { const { token }: ReturnType = yield select(selectUserUser); const { routes: { @@ -290,7 +288,7 @@ function* modifyRouteSaga({ address, title, is_public, -}: ReturnType): SagaIterator { +}: ReturnType) { const { token }: ReturnType = yield select(selectUserUser); const { routes: { diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index 4b93bea..7d9667f 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -422,6 +422,13 @@ + + + + + + + diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index ca518fe..bd368cb 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -36,7 +36,6 @@ background: rgba(19, 45, 53, 0.95); } } - } .dialog-close-button { @@ -94,8 +93,41 @@ } } +.dialog-flex-scroll { + display: flex; + align-items: center; + justify-content: center; +} + +.nominatim-dialog-content { + padding-bottom: 48px; + min-height: 25vh; +} + +.nominatim-list-item { + padding: 10px; + color: white; + cursor: pointer; + transition: background-color 0.25s; + display: flex; + align-items: center; + justify-content: center; + padding-bottom: 200px; + + &:hover { + background: rgba(255, 255, 255, 0.1); + } + + .title { + text-overflow: hidden; + font-size: 12px; + -webkit-line-clamp: 2; + } +} + .dialog-shader { - &::before, &::after { + &::before, + &::after { content: ' '; height: 40px; width: 100%; @@ -120,13 +152,21 @@ } @keyframes pulse { - 0% { opacity: 1; } - 100% { opacity: 0.5; } + 0% { + opacity: 1; + } + 100% { + opacity: 0.5; + } } @keyframes spin { - 0% { transform: rotate(0); } - 100% { transform: rotate(360deg); } + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } } .dialog-maplist-pulse { @@ -195,11 +235,14 @@ &.has_edit { //transform: translateY(-2px); - .route-row { background: fade(@green_secondary, 30%); } + .route-row { + background: fade(@green_secondary, 30%); + } } &.is_menu_target { - .route-row, .route-row-fav { + .route-row, + .route-row-fav { transform: translateX(-120px); } @@ -337,7 +380,6 @@ } } } - } .route-title { @@ -414,7 +456,7 @@ } } - @media(max-width: @mobile_breakpoint) { + @media (max-width: @mobile_breakpoint) { height: 48px; .dialog-tab { diff --git a/src/styles/panel.less b/src/styles/panel.less index c787e50..74fecc4 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -3,6 +3,8 @@ border-radius: @panel_radius; display: flex; box-shadow: @bar_shadow; + align-items: center; + justify-content: center; @media (max-width: @mobile_breakpoint) { box-shadow: none; @@ -723,4 +725,16 @@ .location-bar { width: 32px; +} + +.nominatim-panel { + position: fixed; + bottom: 53px; + left: 10px; + width: 272px +} + +.nominatim-search-input { + padding-left: 10px; + flex: 1; } \ No newline at end of file diff --git a/src/utils/api.ts b/src/utils/api.ts index fdad497..85b53da 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -11,6 +11,7 @@ import { configWithToken, } from './middleware'; import { IRoute } from '~/redux/map/types'; +import { INominatimResult } from '~/redux/types'; const arrayToObject = (array: any[], key: string): {} => array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); @@ -180,6 +181,36 @@ export const checkOSRMService = (bounds: LatLngLiteral[]): Promise => .then(() => true) .catch(() => false); +export const checkNominatimService = (): Promise => + CLIENT && + CLIENT.NOMINATIM_TEST_URL && + axios + .get(CLIENT.NOMINATIM_TEST_URL) + .then(() => true) + .catch(() => false); + +export const searchNominatim = (query: string) => + CLIENT && + CLIENT.NOMINATIM_URL && + axios + .get(`${CLIENT.NOMINATIM_URL}${query}`, { params: { format: 'json', country_code: 'ru', 'accept-language': 'ru_RU' } }) + .then( + data => + data && + data.data && + data.data.map( + (item): INominatimResult => ({ + id: item.place_id, + latlng: { + lat: item.lat, + lng: item.lon, + }, + title: item.display_name, + }) + ) + ) + .catch(() => []); + export const dropRoute = ({ address, token }: { address: string; token: string }): Promise => axios .delete(API.DROP_ROUTE, configWithToken(token, { data: { address } })) diff --git a/src/utils/window.ts b/src/utils/window.ts index 0d60bb7..c137ccf 100644 --- a/src/utils/window.ts +++ b/src/utils/window.ts @@ -20,8 +20,6 @@ export const getLocation = (callback: (pos: LatLngLiteral) => void) => { export const watchLocation = (callback: (pos: LatLngLiteral) => void): number => { return window.navigator.geolocation.watchPosition( position => { - console.log('Watch?'); - if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) return callback(null); From 3a988d23dfb20dc38c00830e98847bb54a96648f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 16:55:40 +0700 Subject: [PATCH 178/320] nominatim (dialog still doesn't work) --- src/components/dialogs/NominatimDialog.tsx | 10 +++++----- src/styles/dialogs.less | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/dialogs/NominatimDialog.tsx b/src/components/dialogs/NominatimDialog.tsx index da22cc0..1279f1c 100644 --- a/src/components/dialogs/NominatimDialog.tsx +++ b/src/components/dialogs/NominatimDialog.tsx @@ -25,18 +25,18 @@ const NominatimDialogUnconnected: FC = ({ nominatim: { loading, list } }) return ( -
      + +
      +
      -
      -
      {loading && } {list.map((item, i) => ( ))}
      -
      -
      +
      + ); }; diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index bd368cb..0fcad20 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -95,8 +95,9 @@ .dialog-flex-scroll { display: flex; - align-items: center; + align-items: flex-end; justify-content: center; + // height: 100%; } .nominatim-dialog-content { @@ -112,7 +113,7 @@ display: flex; align-items: center; justify-content: center; - padding-bottom: 200px; + // padding-bottom: 200px; &:hover { background: rgba(255, 255, 255, 0.1); From 0fd656e5fa368aeba306d9deee97a2d4d5922727 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 17:52:21 +0700 Subject: [PATCH 179/320] nominatim --- src/utils/api.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/utils/api.ts b/src/utils/api.ts index 85b53da..b6d8c45 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -12,6 +12,7 @@ import { } from './middleware'; import { IRoute } from '~/redux/map/types'; import { INominatimResult } from '~/redux/types'; +import { MainMap } from '~/constants/map'; const arrayToObject = (array: any[], key: string): {} => array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); @@ -193,7 +194,14 @@ export const searchNominatim = (query: string) => CLIENT && CLIENT.NOMINATIM_URL && axios - .get(`${CLIENT.NOMINATIM_URL}${query}`, { params: { format: 'json', country_code: 'ru', 'accept-language': 'ru_RU' } }) + .get(`${CLIENT.NOMINATIM_URL} ${query}`, { + params: { + format: 'json', + country_code: 'ru', + 'accept-language': 'ru_RU', + dedupe: 1, + }, + }) .then( data => data && From b3adf4d5562e3f62a954e53f2cddf27c8d773be9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 20 Jan 2020 17:55:46 +0700 Subject: [PATCH 180/320] fixed range --- package.json | 2 +- src/components/search/MapListDialogHead.tsx | 2 +- src/redux/editor/sagas.ts | 5 ++--- src/redux/map/sagas.ts | 2 +- src/redux/user/sagas.ts | 9 ++++----- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 5c86c11..aca5962 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "reactrangeslider": "^3.0.6", "redux": "^4.0.1", "redux-persist": "^5.10.0", - "redux-saga": "^0.16.2", + "redux-saga": "^1.0.0", "reduxsauce": "^1.0.0", "scrypt": "^6.0.3", "throttle-debounce": "^2.1.0", diff --git a/src/components/search/MapListDialogHead.tsx b/src/components/search/MapListDialogHead.tsx index 409abc8..54875cf 100644 --- a/src/components/search/MapListDialogHead.tsx +++ b/src/components/search/MapListDialogHead.tsx @@ -22,7 +22,7 @@ const MapListDialogHead: FC = memo( }), {} ), - [] + [max, min] ); return ( diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index d636770..dd4ee84 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -1,5 +1,4 @@ -import { call, put, takeEvery, takeLatest, select, race } from 'redux-saga/effects'; -import { delay, SagaIterator } from 'redux-saga'; +import { call, put, takeEvery, takeLatest, select, race, delay } from 'redux-saga/effects'; import { selectEditor, selectEditorMode } from '~/redux/editor/selectors'; import { simplify } from '~/utils/simplify'; import { @@ -217,7 +216,7 @@ function* keyPressedSaga({ key, target }: ReturnType) { } } -function* getGPXTrackSaga(): SagaIterator { +function* getGPXTrackSaga() { const { route, stickers, title, address }: ReturnType = yield select(selectMap); if (!route.length && !stickers.length) return; diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 8deecd2..e323c79 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -7,6 +7,7 @@ import { race, take, takeLatest, + delay, } from 'redux-saga/effects'; import { MAP_ACTIONS } from './constants'; import { @@ -36,7 +37,6 @@ import { getStoredMap, postMap } from '~/utils/api'; import { Unwrap } from '~/utils/middleware'; import { selectMap, selectMapProvider, selectMapRoute, selectMapStickers } from './selectors'; import { TIPS } from '~/constants/tips'; -import { delay } from 'redux-saga'; import { setReadySaga } from '../editor/sagas'; import { selectEditor } from '../editor/selectors'; import { EDITOR_ACTIONS } from '../editor/constants'; diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 32c0893..5b2b4b4 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -1,6 +1,5 @@ import { REHYDRATE, RehydrateAction } from 'redux-persist'; -import { delay, SagaIterator } from 'redux-saga'; -import { takeLatest, select, call, put, takeEvery } from 'redux-saga/effects'; +import { takeLatest, select, call, put, takeEvery, delay } from 'redux-saga/effects'; import { checkIframeToken, checkUserToken, @@ -198,7 +197,7 @@ function* searchSetTabSaga() { yield put(searchSetTitle('')); } -function* userLogoutSaga(): SagaIterator { +function* userLogoutSaga() { yield put(setUser(DEFAULT_USER)); yield call(generateGuestSaga); } @@ -256,7 +255,7 @@ function* mapsLoadMoreSaga() { yield put(searchSetLoading(false)); } -function* dropRouteSaga({ address }: ReturnType): SagaIterator { +function* dropRouteSaga({ address }: ReturnType) { const { token }: ReturnType = yield select(selectUserUser); const { routes: { @@ -290,7 +289,7 @@ function* modifyRouteSaga({ address, title, is_public, -}: ReturnType): SagaIterator { +}: ReturnType) { const { token }: ReturnType = yield select(selectUserUser); const { routes: { From 5e55434772db965ec577e0e35f101577288ce573 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 21 Jan 2020 14:47:16 +0700 Subject: [PATCH 181/320] disabled nominatim for now --- src/components/panels/UserPanel.tsx | 8 +++++++- src/redux/editor/sagas.ts | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 8d6765f..008c075 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -129,7 +129,13 @@ export class UserPanelUnconnected extends PureComponent { return (
      - + + {features.nominatim && ( + + )}
      diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index f613dc1..b900dc3 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -97,7 +97,10 @@ export function* setReadySaga() { hideLoader(); yield call(checkOSRMServiceSaga); - yield call(checkNominatimSaga); + + // TODO: someday make nominatim, but sorted by nearest points. + // yield call(checkNominatimSaga); + yield put(searchSetTab(TABS.MY)); } From d0f419c18b93d43828ab2221912b0406e91a4451 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 21 Jan 2020 15:01:17 +0700 Subject: [PATCH 182/320] setMode --> changeMode --- src/components/dialogs/CancelDialog.tsx | 6 +-- src/components/dialogs/SaveDialog.tsx | 4 +- src/components/panels/EditorPanel.tsx | 14 +++---- src/components/panels/TopRightPanel.tsx | 10 ++--- src/redux/editor/actions.ts | 7 ++++ src/redux/editor/constants.ts | 1 + src/redux/editor/handlers.ts | 2 +- src/redux/editor/sagas.ts | 50 ++++++++++++++++++------- src/redux/map/sagas.ts | 28 +++++++++----- 9 files changed, 80 insertions(+), 42 deletions(-) diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index 463f551..87a6c59 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -2,12 +2,12 @@ import React from 'react'; import { MODES } from '~/constants/modes'; import { Icon } from '~/components/panels/Icon'; -import { editorSetMode, editorStopEditing } from '~/redux/editor/actions'; +import { editorChangeMode, editorStopEditing } from '~/redux/editor/actions'; import { connect } from 'react-redux'; const mapStateToProps = () => ({}); const mapDispatchToProps = { - editorSetMode, + editorChangeMode, editorStopEditing, }; @@ -19,7 +19,7 @@ class CancelDialogUnconnected extends React.Component { }; proceed = () => { - this.props.editorSetMode(MODES.NONE); + this.props.editorChangeMode(MODES.NONE); }; render() { diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index 08a54ad..c0b9a84 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -20,7 +20,7 @@ const mapStateToProps = state => ({ const mapDispatchToProps = { editorCancelSave: EDITOR_ACTIONS.editorCancelSave, - editorSetMode: EDITOR_ACTIONS.editorSetMode, + editorChangeMode: EDITOR_ACTIONS.editorChangeMode, editorSendSaveRequest: EDITOR_ACTIONS.editorSendSaveRequest, }; @@ -80,7 +80,7 @@ class SaveDialogUnconnected extends React.Component { forceSaveRequest = e => this.editorSendSaveRequest(e, true); - cancelSaving = () => this.props.editorSetMode(MODES.NONE); + cancelSaving = () => this.props.editorChangeMode(MODES.NONE); onCopy = e => { e.preventDefault(); diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 8bb8450..6d770e7 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -6,7 +6,7 @@ import { Icon } from '~/components/panels/Icon'; import { EditorDialog } from '~/components/panels/EditorDialog'; import { connect } from 'react-redux'; import { - editorSetMode, + editorChangeMode, editorStartEditing, editorStopEditing, editorTakeAShot, @@ -21,7 +21,7 @@ const mapStateToProps = (state: IState) => pick(['mode', 'changed', 'editing', 'features'], selectEditor(state)); const mapDispatchToProps = { - editorSetMode, + editorChangeMode, editorStartEditing, editorStopEditing, editorTakeAShot, @@ -54,12 +54,12 @@ class EditorPanelUnconnected extends PureComponent { this.props.editorKeyPressed(event); }; - startPolyMode = () => this.props.editorSetMode(MODES.POLY); - startStickerMode = () => this.props.editorSetMode(MODES.STICKERS_SELECT); - startRouterMode = () => this.props.editorSetMode(MODES.ROUTER); - startTrashMode = () => this.props.editorSetMode(MODES.TRASH); + startPolyMode = () => this.props.editorChangeMode(MODES.POLY); + startStickerMode = () => this.props.editorChangeMode(MODES.STICKERS_SELECT); + startRouterMode = () => this.props.editorChangeMode(MODES.ROUTER); + startTrashMode = () => this.props.editorChangeMode(MODES.TRASH); startSaveMode = () => { - this.props.editorSetMode(MODES.SAVE); + this.props.editorChangeMode(MODES.SAVE); }; render() { diff --git a/src/components/panels/TopRightPanel.tsx b/src/components/panels/TopRightPanel.tsx index 5b6278c..e6de40f 100644 --- a/src/components/panels/TopRightPanel.tsx +++ b/src/components/panels/TopRightPanel.tsx @@ -19,7 +19,7 @@ const mapStateToProps = (state: IState) => { }; const mapDispatchToProps = { - editorSetMode: EDITOR_ACTIONS.editorSetMode, + editorChangeMode: EDITOR_ACTIONS.editorChangeMode, }; type Props = ReturnType & typeof mapDispatchToProps & {}; @@ -29,11 +29,11 @@ const TopRightPanelUnconnected = ({ logo, markers_shown, editing, - editorSetMode, + editorChangeMode, }: Props) => { - const startProviderMode = useCallback(() => editorSetMode(MODES.PROVIDER), [editorSetMode]); - const startLogoMode = useCallback(() => editorSetMode(MODES.LOGO), [editorSetMode]); - const clearMode = useCallback(() => editorSetMode(MODES.NONE), [editorSetMode]); + const startProviderMode = useCallback(() => editorChangeMode(MODES.PROVIDER), [editorChangeMode]); + const startLogoMode = useCallback(() => editorChangeMode(MODES.LOGO), [editorChangeMode]); + const clearMode = useCallback(() => editorChangeMode(MODES.NONE), [editorChangeMode]); return (
      diff --git a/src/redux/editor/actions.ts b/src/redux/editor/actions.ts index e68f199..dc4aa2e 100644 --- a/src/redux/editor/actions.ts +++ b/src/redux/editor/actions.ts @@ -7,10 +7,17 @@ export const editorSetEditing = (editing: IEditorState['editing']) => ({ type: EDITOR_ACTIONS.SET_EDITING, editing, }); + +export const editorChangeMode = (mode: IEditorState['mode']) => ({ + type: EDITOR_ACTIONS.CHANGE_MODE, + mode, +}); + export const editorSetMode = (mode: IEditorState['mode']) => ({ type: EDITOR_ACTIONS.SET_MODE, mode, }); + export const editorSetDistance = (distance: IEditorState['distance']) => ({ type: EDITOR_ACTIONS.SET_DISTANCE, distance, diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts index fb031f1..df11f51 100644 --- a/src/redux/editor/constants.ts +++ b/src/redux/editor/constants.ts @@ -2,6 +2,7 @@ const P = 'EDITOR'; export const EDITOR_ACTIONS = { SET_EDITING: `${P}-SET_EDITING`, + CHANGE_MODE: `${P}-CHANGE_MODE`, SET_MODE: `${P}-SET_MODE`, SET_DISTANCE: `${P}-SET_DISTANCE`, SET_CHANGED: `${P}-SET_CHANGED`, diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts index c2d33e8..f627f64 100644 --- a/src/redux/editor/handlers.ts +++ b/src/redux/editor/handlers.ts @@ -20,7 +20,7 @@ const setChanged = ( changed, }); -const setMode = (state, { mode }: ReturnType): IEditorState => ({ +const setMode = (state, { mode }: ReturnType): IEditorState => ({ ...state, mode, }); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index b900dc3..da9dc41 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -13,7 +13,7 @@ import { simplify } from '~/utils/simplify'; import { editorHideRenderer, editorSetChanged, - editorSetMode, + editorChangeMode, editorSetReady, editorSetRenderer, editorSetDialogActive, @@ -25,6 +25,8 @@ import { editorSearchNominatim, editorSetDialog, editorSetNominatim, + editorSetMode, + editorSetRouter, } from '~/redux/editor/actions'; import { getUrlData, pushPath } from '~/utils/history'; import { MODES } from '~/constants/modes'; @@ -70,11 +72,11 @@ function* stopEditingSaga() { const { path } = getUrlData(); if (changed && mode !== MODES.CONFIRM_CANCEL) { - yield put(editorSetMode(MODES.CONFIRM_CANCEL)); + yield put(editorChangeMode(MODES.CONFIRM_CANCEL)); return; } - yield put(editorSetMode(MODES.NONE)); + yield put(editorChangeMode(MODES.NONE)); yield put(editorSetChanged(false)); yield put(editorSetReady(true)); @@ -97,10 +99,10 @@ export function* setReadySaga() { hideLoader(); yield call(checkOSRMServiceSaga); - + // TODO: someday make nominatim, but sorted by nearest points. - // yield call(checkNominatimSaga); - + // yield call(checkNominatimSaga); + yield put(searchSetTab(TABS.MY)); } @@ -144,11 +146,11 @@ function* takeAShotSaga() { timeout: delay(500), }); - if (timeout) yield put(editorSetMode(MODES.SHOT_PREFETCH)); + if (timeout) yield put(editorChangeMode(MODES.SHOT_PREFETCH)); const data = yield result || worker; - yield put(editorSetMode(MODES.NONE)); + yield put(editorChangeMode(MODES.NONE)); yield put( editorSetRenderer({ data, @@ -200,7 +202,7 @@ function* locationChangeSaga({ location }: ReturnType = yield select(selectEditorMode); if (mode !== MODES.NONE) { - yield put(editorSetMode(MODES.NONE)); + yield put(editorChangeMode(MODES.NONE)); } yield call(loadMapFromPath); @@ -221,7 +223,7 @@ function* keyPressedSaga({ key, target }: ReturnType) { if (renderer_active) return yield put(editorHideRenderer()); if (dialog_active) return yield put(editorSetDialogActive(false)); - if (mode !== MODES.NONE) return yield put(editorSetMode(MODES.NONE)); + if (mode !== MODES.NONE) return yield put(editorChangeMode(MODES.NONE)); } else if (key === 'Delete') { const { editing } = yield select(selectEditor); @@ -232,7 +234,7 @@ function* keyPressedSaga({ key, target }: ReturnType) { if (mode === MODES.TRASH) { yield put(editorClearAll()); } else { - yield put(editorSetMode(MODES.TRASH)); + yield put(editorChangeMode(MODES.TRASH)); } } } @@ -248,7 +250,7 @@ function* getGPXTrackSaga() { } function* routerCancel() { - yield put(editorSetMode(MODES.NONE)); + yield put(editorChangeMode(MODES.NONE)); } function* mapClick({ latlng }: ReturnType) { @@ -268,7 +270,7 @@ function* routerSubmit() { yield put(mapSetRoute([...route, ...coordinates])); OsrmRouter.setWaypoints([]); - yield put(editorSetMode(MODES.NONE)); + yield put(editorChangeMode(MODES.NONE)); } function* cancelSave() { @@ -290,11 +292,30 @@ function* searchNominatimSaga({ search }: ReturnType) { + const current: ReturnType = yield select(selectEditorMode); + + if (mode === current) { + yield put(editorSetMode(MODES.NONE)); + return; + } + + switch (current) { + case MODES.ROUTER: + yield put(editorSetRouter({ waypoints: [] })); + } + + yield put(editorSetMode(mode)); + + switch (mode) { + } +} + export function* editorSaga() { yield takeEvery(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); @@ -308,4 +329,5 @@ export function* editorSaga() { yield takeLatest(EDITOR_ACTIONS.ROUTER_SUBMIT, routerSubmit); yield takeLatest(EDITOR_ACTIONS.CANCEL_SAVE, cancelSave); yield takeLeading(EDITOR_ACTIONS.SEARCH_NOMINATIM, searchNominatimSaga); + yield takeLeading(EDITOR_ACTIONS.CHANGE_MODE, changeMode); } diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index e323c79..3aa97f2 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -23,7 +23,7 @@ import { import { selectUser, selectUserUser } from '~/redux/user/selectors'; import { MODES } from '~/constants/modes'; import { - editorSetMode, + editorChangeMode, editorSetChanged, editorSetEditing, editorSetReady, @@ -51,10 +51,11 @@ function* onMapClick({ latlng }: ReturnType) { switch (mode) { case MODES.STICKERS: yield put(mapAddSticker({ latlng, set, sticker, text: '', angle: 2.11 })); - yield put(editorSetMode(MODES.NONE)); + yield put(editorChangeMode(MODES.NONE)); break; default: + break; } } @@ -156,7 +157,7 @@ export function* mapInitSaga() { } function* setActiveStickerSaga() { - yield put(editorSetMode(MODES.STICKERS)); + yield put(editorChangeMode(MODES.STICKERS)); } function* setTitleSaga({ title }: ReturnType) { @@ -171,20 +172,20 @@ function* startEditingSaga() { } function* clearPolySaga() { - const route: ReturnType = yield select(selectMapRoute) + const route: ReturnType = yield select(selectMapRoute); if (!route.length) return; yield put(mapSetRoute([])); } function* clearStickersSaga() { - const stickers: ReturnType = yield select(selectMapStickers) + const stickers: ReturnType = yield select(selectMapStickers); if (!stickers.length) return; yield put(mapSetStickers([])); } function* clearAllSaga() { - const route: ReturnType = yield select(selectMapRoute) - const stickers: ReturnType = yield select(selectMapStickers) + const route: ReturnType = yield select(selectMapRoute); + const stickers: ReturnType = yield select(selectMapStickers); if (!stickers.length && !route.length) return; @@ -211,8 +212,15 @@ function* clearSaga({ type }) { break; } - yield put(editorSetActiveSticker(null)); - yield put(editorSetMode(MODES.NONE)); + const { mode, activeSticker }: ReturnType = yield select(selectEditor); + + if (activeSticker && activeSticker.set && activeSticker.sticker) { + yield put(editorSetActiveSticker(null)); + } + + if (mode !== MODES.NONE) { + yield put(editorChangeMode(MODES.NONE)); + } } function* sendSaveRequestSaga({ @@ -264,7 +272,7 @@ function* sendSaveRequestSaga({ yield put(editorSetSave({ loading: false })); - if (cancel) return yield put(editorSetMode(MODES.NONE)); + if (cancel) return yield put(editorChangeMode(MODES.NONE)); if (result && result.data.code === 'already_exist') return yield put(editorSetSave({ overwriting: true })); From 8cac89cdd14a266cab93da7c4843ef732f88a1ea Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 21 Jan 2020 15:08:01 +0700 Subject: [PATCH 183/320] fixed dialogs --- src/components/dialogs/CancelDialog.tsx | 2 +- src/components/dialogs/RouterDialog.tsx | 17 ++++++++++------- src/components/dialogs/SaveDialog.tsx | 2 +- src/components/dialogs/TrashDialog.tsx | 22 +++++++++++++--------- src/styles/panel.less | 4 ++++ 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/components/dialogs/CancelDialog.tsx b/src/components/dialogs/CancelDialog.tsx index 87a6c59..c6c7698 100644 --- a/src/components/dialogs/CancelDialog.tsx +++ b/src/components/dialogs/CancelDialog.tsx @@ -24,7 +24,7 @@ class CancelDialogUnconnected extends React.Component { render() { return ( -
      +
      diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index d75c166..49b146e 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -19,8 +19,9 @@ const noPoints = ({
      -
      -
      +
      + +
      Отмена
      @@ -42,8 +43,9 @@ const firstPoint = ({
      -
      -
      +
      + +
      Отмена
      @@ -67,8 +69,9 @@ const draggablePoints = ({
      -
      -
      +
      + +
      Отмена
      @@ -98,7 +101,7 @@ const RouterDialogUnconnected: FC = ({ editorRouterCancel, editorRouterSubmit, }) => ( -
      +
      {!waypoints.length && noPoints({ editorRouterCancel })} diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index c0b9a84..f95574a 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -104,7 +104,7 @@ class SaveDialogUnconnected extends React.Component { const { host, protocol } = getUrlData(); return ( -
      +
      diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index e203b32..3f18349 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -22,7 +22,7 @@ const TrashDialogUnconnected: FC = ({ editorClearCancel, width, }) => ( -
      +
      Все изменения будут удалены!
      @@ -30,16 +30,20 @@ const TrashDialogUnconnected: FC = ({
      -
      - Маршрут -
      -
      - Стикеры -
      -
      - ВСЕ +
      +
      + Маршрут +
      +
      + Стикеры +
      +
      + ВСЕ +
      +
      +
      Отмена
      diff --git a/src/styles/panel.less b/src/styles/panel.less index 74fecc4..291ae26 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -312,6 +312,10 @@ border-radius: @panel_radius; } + &__medium { + width: 100%; + max-width: 417px; + } } .control-dialog-provider { From 2d749166cf56bc94cd456f10c77b1fd9fcd798f8 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 21 Jan 2020 16:04:36 +0700 Subject: [PATCH 184/320] route reverse --- src/components/dialogs/PolylineDialog.tsx | 59 ++ src/components/dialogs/RouterDialog.tsx | 1 + src/components/dialogs/TrashDialog.tsx | 2 + src/components/panels/EditorDialog.tsx | 2 + src/sprites/icon.svg | 808 ++++++++++------------ src/styles/panel.less | 16 + 6 files changed, 454 insertions(+), 434 deletions(-) create mode 100644 src/components/dialogs/PolylineDialog.tsx diff --git a/src/components/dialogs/PolylineDialog.tsx b/src/components/dialogs/PolylineDialog.tsx new file mode 100644 index 0000000..e8af996 --- /dev/null +++ b/src/components/dialogs/PolylineDialog.tsx @@ -0,0 +1,59 @@ +import React, { FC, useCallback } from 'react'; +import { Icon } from '~/components/panels/Icon'; +import { connect } from 'react-redux'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import * as MAP_ACTIONS from '~/redux/map/actions'; +import { IState } from '~/redux/store'; +import { selectMapRoute } from '~/redux/map/selectors'; + +const mapStateToProps = (state: IState) => ({ + route: selectMapRoute(state), +}); + +const mapDispatchToProps = { + mapSetRoute: MAP_ACTIONS.mapSetRoute, +}; + +type Props = ReturnType & typeof mapDispatchToProps & {}; + +const PolylineDialogUnconnected: FC = ({ route, mapSetRoute }) => { + const reverseRoute = useCallback(() => { + mapSetRoute([...route].reverse()); + }, [mapSetRoute, route]); + + const curRouteStart = useCallback(() => { + mapSetRoute(route.slice(1, route.length)); + }, [mapSetRoute, route]); + + const curRouteEnd = useCallback(() => { + mapSetRoute(route.slice(0, route.length - 1)); + }, [mapSetRoute, route]); + + return ( +
      +
      +
      + + + + + + +
      + +
      Ручной режим
      +
      +
      +
      + ); +}; + +const PolylineDialog = connect(mapStateToProps, mapDispatchToProps)(PolylineDialogUnconnected); + +export { PolylineDialog }; diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index 49b146e..827f0cc 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -18,6 +18,7 @@ const noPoints = ({
      Укажите первую точку на карте
      +
      diff --git a/src/components/dialogs/TrashDialog.tsx b/src/components/dialogs/TrashDialog.tsx index 3f18349..d16d020 100644 --- a/src/components/dialogs/TrashDialog.tsx +++ b/src/components/dialogs/TrashDialog.tsx @@ -34,9 +34,11 @@ const TrashDialogUnconnected: FC = ({
      Маршрут
      +
      Стикеры
      +
      ВСЕ
      diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index 3ed02b0..2bebe8d 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -2,6 +2,7 @@ import React, { createElement } from 'react'; import { MODES } from '~/constants/modes'; import { RouterDialog } from '~/components/dialogs/RouterDialog'; +import { PolylineDialog } from '~/components/dialogs/PolylineDialog'; import { StickersDialog } from '~/components/dialogs/StickersDialog'; import { TrashDialog } from '~/components/dialogs/TrashDialog'; import { LogoDialog } from '~/components/dialogs/LogoDialog'; @@ -29,6 +30,7 @@ const DIALOG_CONTENTS: { [x: string]: any } = { [MODES.CONFIRM_CANCEL]: CancelDialog, [MODES.PROVIDER]: ProviderDialog, [MODES.SHOT_PREFETCH]: ShotPrefetchDialog, + [MODES.POLY]: PolylineDialog, }; const EditorDialogUnconnected = (props: Props) => diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index 7d9667f..9c92bee 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -1,436 +1,376 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/styles/panel.less b/src/styles/panel.less index 291ae26..80f5ca7 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -389,6 +389,22 @@ flex: 1; } +.helper__icon_button { + width: 32px; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + background: none; + border: none; + outline: none; + cursor: pointer; + + svg { + margin-right: 0; + } +} + .helper__buttons { display: flex; align-items: center; From 3de4c085daa90f0675f305bef0bb5b8c4bba8c95 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 09:42:48 +0700 Subject: [PATCH 185/320] polyline tools --- src/components/dialogs/PolylineDialog.tsx | 12 ++--- src/sprites/icon.svg | 10 ++++ src/sprites/icons_draft.svg | 61 ++++++++++++++++++++--- 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/src/components/dialogs/PolylineDialog.tsx b/src/components/dialogs/PolylineDialog.tsx index e8af996..ac402cc 100644 --- a/src/components/dialogs/PolylineDialog.tsx +++ b/src/components/dialogs/PolylineDialog.tsx @@ -33,16 +33,16 @@ const PolylineDialogUnconnected: FC = ({ route, mapSetRoute }) => {
      - - + +
      diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index 9c92bee..0974a76 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -370,6 +370,16 @@ + + + + + + + + + + diff --git a/src/sprites/icons_draft.svg b/src/sprites/icons_draft.svg index 221768d..2fccc13 100644 --- a/src/sprites/icons_draft.svg +++ b/src/sprites/icons_draft.svg @@ -15,7 +15,7 @@ viewBox="0 0 600 32" version="1.1" id="svg8" - inkscape:version="0.92.2 5c3e80d, 2017-08-06" + inkscape:version="0.92.4 5da689c313, 2019-01-14" sodipodi:docname="icons_draft.svg"> @@ -48,20 +48,20 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="5.6568542" - inkscape:cx="-59.116412" - inkscape:cy="72.422571" + inkscape:zoom="1" + inkscape:cx="22.770291" + inkscape:cy="17.290238" inkscape:document-units="px" - inkscape:current-layer="svg8" + inkscape:current-layer="g2550" showgrid="false" inkscape:window-width="1920" - inkscape:window-height="1036" + inkscape:window-height="1015" inkscape:window-x="0" - inkscape:window-y="0" + inkscape:window-y="25" inkscape:window-maximized="1" units="px" inkscape:showpageshadow="false" - inkscape:snap-global="true" /> + inkscape:snap-global="false" /> @@ -662,4 +662,49 @@ transform="matrix(2,0,0,2,128,98.814754)" id="path8777" /> + + + + + + + + + + + From 8df7d7d27de82922a695f6fe2018d33ce121a3a0 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 09:49:37 +0700 Subject: [PATCH 186/320] inactive status for polyline tools --- src/components/dialogs/PolylineDialog.tsx | 32 ++++++++++++++++------- src/styles/panel.less | 4 +++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/components/dialogs/PolylineDialog.tsx b/src/components/dialogs/PolylineDialog.tsx index ac402cc..dc8eb0d 100644 --- a/src/components/dialogs/PolylineDialog.tsx +++ b/src/components/dialogs/PolylineDialog.tsx @@ -1,10 +1,10 @@ import React, { FC, useCallback } from 'react'; import { Icon } from '~/components/panels/Icon'; import { connect } from 'react-redux'; -import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import * as MAP_ACTIONS from '~/redux/map/actions'; import { IState } from '~/redux/store'; import { selectMapRoute } from '~/redux/map/selectors'; +import classNames from 'classnames'; const mapStateToProps = (state: IState) => ({ route: selectMapRoute(state), @@ -18,14 +18,19 @@ type Props = ReturnType & typeof mapDispatchToProps & {} const PolylineDialogUnconnected: FC = ({ route, mapSetRoute }) => { const reverseRoute = useCallback(() => { + if (route.length < 2) return; mapSetRoute([...route].reverse()); }, [mapSetRoute, route]); - + const curRouteStart = useCallback(() => { + if (route.length < 1) return; + mapSetRoute(route.slice(1, route.length)); }, [mapSetRoute, route]); - + const curRouteEnd = useCallback(() => { + if (route.length < 1) return; + mapSetRoute(route.slice(0, route.length - 1)); }, [mapSetRoute, route]); @@ -33,18 +38,27 @@ const PolylineDialogUnconnected: FC = ({ route, mapSetRoute }) => {
      - + + - - -
      Ручной режим
      diff --git a/src/styles/panel.less b/src/styles/panel.less index 80f5ca7..60cf9d2 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -403,6 +403,10 @@ svg { margin-right: 0; } + + &.inactive { + opacity: 0.5; + } } .helper__buttons { From 4915744c843d915cca7a6d2e65bc2bf7b5df2660 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 11:53:19 +0700 Subject: [PATCH 187/320] undo and redo functionality --- src/components/dialogs/StickersDialog.tsx | 2 +- src/components/panels/EditorPanel.tsx | 27 +++++++- src/redux/editor/actions.ts | 21 +++++- src/redux/editor/constants.ts | 7 ++ src/redux/editor/handlers.ts | 13 ++++ src/redux/editor/index.ts | 15 +++++ src/redux/editor/sagas.ts | 71 +++++++++++++++++++- src/redux/map/sagas.ts | 11 +-- src/redux/user/sagas.ts | 5 -- src/sprites/icon.svg | 10 +++ src/styles/panel.less | 81 ++++++++++++++--------- 11 files changed, 216 insertions(+), 47 deletions(-) diff --git a/src/components/dialogs/StickersDialog.tsx b/src/components/dialogs/StickersDialog.tsx index be9dede..37847f4 100644 --- a/src/components/dialogs/StickersDialog.tsx +++ b/src/components/dialogs/StickersDialog.tsx @@ -15,7 +15,7 @@ type Props = ReturnType & }; const StickersDialogUnconnected = ({ editorSetActiveSticker, width }: Props) => ( -
      +
      {Object.keys(STICKERS).map(set => (
      diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 6d770e7..86247c8 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -11,6 +11,8 @@ import { editorStopEditing, editorTakeAShot, editorKeyPressed, + editorUndo, + editorRedo, } from '~/redux/editor/actions'; import { Tooltip } from '~/components/panels/Tooltip'; import { IState } from '~/redux/store'; @@ -18,7 +20,7 @@ import { selectEditor } from '~/redux/editor/selectors'; import pick from 'ramda/es/pick'; const mapStateToProps = (state: IState) => - pick(['mode', 'changed', 'editing', 'features'], selectEditor(state)); + pick(['mode', 'changed', 'editing', 'features', 'history'], selectEditor(state)); const mapDispatchToProps = { editorChangeMode, @@ -26,6 +28,8 @@ const mapDispatchToProps = { editorStopEditing, editorTakeAShot, editorKeyPressed, + editorUndo, + editorRedo, }; type Props = ReturnType & typeof mapDispatchToProps & {}; @@ -68,6 +72,7 @@ class EditorPanelUnconnected extends PureComponent { changed, editing, features: { routing }, + history: { records, position }, } = this.props; return ( @@ -78,6 +83,26 @@ class EditorPanelUnconnected extends PureComponent { this.panel = el; }} > +
      + + + +
      +
      {routing && ( @@ -98,7 +98,7 @@ class EditorPanelUnconnected extends PureComponent { })} onClick={this.props.editorRedo} > - Вернуть + Вернуть (u)
      From 60b8fd51a2dfa5aa30feee55bf1a249209aa6a7a Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 12:02:16 +0700 Subject: [PATCH 189/320] better sticker change handling --- src/components/StickerDesc.tsx | 2 ++ src/map/Sticker/index.tsx | 53 ++++++++++++++++++++-------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/components/StickerDesc.tsx b/src/components/StickerDesc.tsx index 44c5ee4..7b7cfa5 100644 --- a/src/components/StickerDesc.tsx +++ b/src/components/StickerDesc.tsx @@ -4,6 +4,7 @@ import classnames from 'classnames'; interface Props { value: string; onChange: (text: string) => void; + onBlur: () => void; } type State = { @@ -50,6 +51,7 @@ class StickerDesc extends React.PureComponent { onMouseDown={this.blockMouse} onDragStart={this.blockMouse} ref={el => { this.input = el; }} + onBlur={this.props.onBlur} />
      diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index a128a26..9455097 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useCallback, useRef } from 'react'; +import React, { useEffect, useCallback, useRef, useState } from 'react'; import { marker, Marker } from 'leaflet'; import { IStickerDump } from '~/redux/map/types'; import { STICKERS } from '~/constants/stickers'; @@ -33,6 +33,7 @@ const Sticker: React.FC = ({ mapDropSticker, is_editing, }) => { + const [text, setText] = useState(sticker.text); const [layer, setLayer] = React.useState(null); const [dragging, setDragging] = React.useState(false); let angle = useRef(sticker.angle); @@ -44,17 +45,20 @@ const Sticker: React.FC = ({ const onChange = React.useCallback(state => mapSetSticker(index, state), [mapSetSticker, index]); const onDelete = React.useCallback(state => mapDropSticker(index), [mapSetSticker, index]); - const updateAngle = useCallback(ang => { - if (!stickerImage.current || !stickerArrow.current) return; + const updateAngle = useCallback( + ang => { + if (!stickerImage.current || !stickerArrow.current) return; - const x = Math.cos(ang + Math.PI) * 56 - 30; - const y = Math.sin(ang + Math.PI) * 56 - 30; + const x = Math.cos(ang + Math.PI) * 56 - 30; + const y = Math.sin(ang + Math.PI) * 56 - 30; - stickerImage.current.style.left = String(6 + x); - stickerImage.current.style.top = String(6 + y); + stickerImage.current.style.left = String(6 + x); + stickerImage.current.style.top = String(6 + y); - stickerArrow.current.style.transform = `rotate(${ang + Math.PI}rad)`; - }, [stickerArrow, stickerImage, angle]); + stickerArrow.current.style.transform = `rotate(${ang + Math.PI}rad)`; + }, + [stickerArrow, stickerImage, angle] + ); const onDragStart = React.useCallback(() => { layer.dragging.disable(); @@ -115,26 +119,31 @@ const Sticker: React.FC = ({ [element, updateAngle, angle] ); - const onTextChange = React.useCallback( - text => - onChange({ - ...sticker, - text, - }), - [sticker, onChange] - ); - + const onTextChange = React.useCallback(text => setText(text), [sticker, onChange]); + + const onTextBlur = React.useCallback(() => { + onChange({ + ...sticker, + text, + }); + }, [text, onChange, sticker]); + const direction = React.useMemo(() => getLabelDirection(sticker.angle), [sticker.angle]); useEffect(() => { updateAngle(sticker.angle); angle.current = sticker.angle; - }, [sticker.angle]) + }, [sticker.angle]); useEffect(() => { if (!layer) return; - layer.setLatLng(sticker.latlng) - }, [layer, sticker.latlng]) + layer.setLatLng(sticker.latlng); + }, [layer, sticker.latlng]); + + useEffect(() => { + if (!layer) return; + setText(sticker.text); + }, [layer, sticker.text]); // Attaches onMoveFinished event to item React.useEffect(() => { @@ -194,7 +203,7 @@ const Sticker: React.FC = ({
      - +
      Date: Wed, 22 Jan 2020 12:15:40 +0700 Subject: [PATCH 190/320] fixed sticker mode change --- src/map/Sticker/index.tsx | 3 ++- src/map/Stickers/index.tsx | 5 +++-- src/redux/map/sagas.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index 9455097..9c9d8d0 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -39,6 +39,7 @@ const Sticker: React.FC = ({ let angle = useRef(sticker.angle); const element = React.useMemo(() => document.createElement('div'), []); + const stickerArrow = React.useRef(null); const stickerImage = React.useRef(null); @@ -197,7 +198,7 @@ const Sticker: React.FC = ({ React.useEffect(() => { element.className = is_editing ? 'sticker-container' : 'sticker-container inactive'; - }, [element, is_editing]); + }, [element, is_editing, layer]); return createPortal( diff --git a/src/map/Stickers/index.tsx b/src/map/Stickers/index.tsx index d7d98f8..df81d9e 100644 --- a/src/map/Stickers/index.tsx +++ b/src/map/Stickers/index.tsx @@ -3,7 +3,7 @@ import { IStickerDump } from '~/redux/map/types'; import { FeatureGroup, Map } from 'leaflet'; import { Sticker } from '~/map/Sticker'; import { mapSetSticker, mapDropSticker } from '~/redux/map/actions'; -import { MapContainer, MainMap } from '~/constants/map'; +import { MainMap } from '~/constants/map'; interface IProps { stickers: IStickerDump[]; @@ -25,6 +25,8 @@ const Stickers: React.FC = React.memo( return () => MainMap.stickerLayer.removeLayer(item); }, [MainMap]); + console.log(is_editing); + return (
      {layer && @@ -40,7 +42,6 @@ const Stickers: React.FC = React.memo( ))}
      ); - // return null; } ); diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 3f886c1..9825b59 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -126,7 +126,7 @@ export function* loadMapFromPath() { return; } - yield put(editorSetEditing(mode && mode === 'edit')); + yield put(editorSetEditing(!!(mode && mode === 'edit'))); return; } From ba7a8f9d664edac7996cfb63dcab7c33084c75b9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 12:26:26 +0700 Subject: [PATCH 191/320] cleanup --- src/map/Stickers/index.tsx | 2 - src/styles/map.less | 5 +- src/utils/map/ArrowsLayer.ts | 251 +---------------------------------- src/utils/window.ts | 2 - 4 files changed, 4 insertions(+), 256 deletions(-) diff --git a/src/map/Stickers/index.tsx b/src/map/Stickers/index.tsx index df81d9e..93a9850 100644 --- a/src/map/Stickers/index.tsx +++ b/src/map/Stickers/index.tsx @@ -25,8 +25,6 @@ const Stickers: React.FC = React.memo( return () => MainMap.stickerLayer.removeLayer(item); }, [MainMap]); - console.log(is_editing); - return (
      {layer && diff --git a/src/styles/map.less b/src/styles/map.less index 863fb43..5ba3646 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -285,9 +285,10 @@ } .leaflet-div-icon { - background: none; - border: none; + background: none !important; + border: none !important; } + .custom-marker-cluster { width: 24px; height: 24px; diff --git a/src/utils/map/ArrowsLayer.ts b/src/utils/map/ArrowsLayer.ts index cf9c58f..c62fb94 100644 --- a/src/utils/map/ArrowsLayer.ts +++ b/src/utils/map/ArrowsLayer.ts @@ -81,250 +81,8 @@ class ArrowsLayer extends LayerGroup { this.arrowLayer.addLayers(midpoints); }; - // Tries to detect if marker changed for every marker starting from changed_at - // setLatLngs = (route: LatLngLiteral[]): void => { - // if (!this.map) return; - - // // this.arrowLayer.clearLayers(); - - // if (route.length === 0) return; - - // console.time('total'); - - // const changed_at = this.getChangeIndex(this.prevState.route, route); - - // console.log('changed at:', changed_at); - // console.log('recalc:', route.length - changed_at); - - // const midpoints = this.prevState.midpoints.slice(0, changed_at - 1); - // const markers = this.prevState.markers.slice(0, changed_at - 1); - - // console.time('recalc'); - // for (let i = changed_at; i < route.length; i += 1) { - // const point = - // route[i + 1] && dist2(route[i], route[i + 1]) > 0.00005 - // ? { - // latlng: middleCoord(route[i], route[i + 1]), - // angle: angleBetweenPoints( - // this.map.latLngToContainerPoint(route[i]), - // this.map.latLngToContainerPoint(route[i + 1]) - // ), - // } - // : null; - - // if (this.prevState.markers[i] && !point) { - // // the marker is gone - // this.arrowLayer.removeLayer(this.prevState.markers[i]); - // markers.push(null); - // } - - // if (this.prevState.markers[i] && point) { - // // marker changed / created - // const is_same = - // this.prevState.markers[i] && - // this.prevState.midpoints[i] && - // this.prevState.midpoints[i].latlng.lat === point.latlng.lat && - // this.prevState.midpoints[i].latlng.lng === point.latlng.lng; - - // if (!is_same) { - // console.log('not same'); - // this.prevState.markers[i].setLatLng(point.latlng); - // this.prevState.markers[i].setIcon(createArrowIcon(point.angle)); - // } - - // markers.push(this.prevState.markers[i]); - // } - - // if (!this.prevState.markers[i] && point) { - // // new marker - // const marker = createArrow(point.latlng, point.angle); - // this.arrowLayer.addLayer(marker); - // markers.push(marker); - // } - - // midpoints.push(point); - // } - // console.timeEnd('recalc'); - - // this.prevState = { - // route, - // markers, - // midpoints, - // }; - - // console.timeEnd('total'); - // }; - - // Only creates from changed item to the end. Buggy when trying to delete and add points in the middle - // setLatLngs = (route: LatLngLiteral[]): void => { - // if (!this.map) return; - - // // this.arrowLayer.clearLayers(); - - // if (route.length === 0) return; - - // console.time('total'); - - // const changed_at = this.getChangeIndex(this.prevState.route, route); - - // console.log('changed at:', changed_at); - // console.log('recalc:', route.length - changed_at); - - // const midpoints = this.prevState.midpoints.slice(0, changed_at - 1); - // const markers = this.prevState.markers.slice(0, changed_at - 1); - - // console.time('recalc'); - // for (let i = changed_at; i < route.length; i += 1) { - // const point = - // route[i + 1] && dist2(route[i], route[i + 1]) > 0.00005 - // ? { - // latlng: middleCoord(route[i], route[i + 1]), - // angle: angleBetweenPoints( - // this.map.latLngToContainerPoint(route[i]), - // this.map.latLngToContainerPoint(route[i + 1]) - // ), - // } - // : null; - - // const marker = point ? createArrow(point.latlng, point.angle) : null; - - // midpoints.push(point); - // markers.push(marker); - // } - // console.timeEnd('recalc'); - - // console.time('remove'); - // this.arrowLayer.removeLayers( - // this.prevState.markers - // .slice(changed_at - 1, this.prevState.markers.length - 1) - // .filter(el => !!el) - // ); - // console.timeEnd('remove'); - - // this.prevState = { - // route, - // markers, - // midpoints, - // }; - - // console.time('add'); - // this.arrowLayer.addLayers(markers.filter(el => !!el)); - // console.timeEnd('add'); - // console.timeEnd('total'); - // }; - - // TODO: iterate through all the route and detect if marker created, changed or deleted. Skip getting changed_at - // TODO: try to figure why its not updated properly when you add / delete points in the middle - - // setLatLngs = (route: LatLngLiteral[]): void => { - // if (!this.map) return; - // if (route.length === 0) return; - - // const newState: IPrevState = { - // route, - // markers: [null], - // }; - - // for (let i = 1; i < route.length; i += 1) { - // const current = route[i]; - // const previous = route[i - 1]; - - // const is_new = !this.prevState.route[i]; - // const is_changed = - // this.prevState.route[i] && - // (this.prevState.route[i].lat !== current.lat || - // this.prevState.route[i].lng !== current.lng || - // this.prevState.route[i - 1].lng !== previous.lng || - // this.prevState.route[i - 1].lng !== previous.lng); - - // const need_to_add = dist2(route[i], route[i - 1]) > 0.00005; - - // if (is_new) { - // const marker = need_to_add - // ? createArrow( - // middleCoord(route[i], route[i - 1]), - // angleBetweenPoints( - // this.map.latLngToContainerPoint(route[i]), - // this.map.latLngToContainerPoint(route[i - 1]) - // ) - // ) - // : null; - - // console.log(i, marker ? 'new create' : 'new skip'); - - // if (marker) { - // this.arrowLayer.addLayer(marker); - // } - - // newState.markers.push(marker); - // continue; - // } - - // if (is_changed) { - // const middle = middleCoord(route[i], route[i - 1]); - // const angle = angleBetweenPoints( - // this.map.latLngToContainerPoint(route[i]), - // this.map.latLngToContainerPoint(route[i - 1]) - // ); - - // if (need_to_add && this.prevState.markers[i]) { - // console.log(i, 'change'); - - // this.prevState.markers[i].setLatLng(middle); - // this.prevState.markers[i].setIcon(createArrowIcon(angle)); - // newState.markers.push(this.prevState.markers[i]); - // continue; - // } - - // if (need_to_add && !this.prevState.markers[i]) { - // console.log(i, 'change create'); - - // const marker = createArrow(middle, angle); - // this.arrowLayer.addLayer(marker); - // newState.markers.push(marker); - // continue; - // } - - // if (!need_to_add && this.prevState.markers[i]) { - // console.log(i, 'change remove'); - - // this.arrowLayer.removeLayer(this.prevState.markers[i]); - // newState.markers.push(null); - // continue; - // } - - // if (!need_to_add && !this.prevState.markers[i]) { - // console.log(i, 'change skip'); - // newState.markers.push(null); - // continue; - // } - // } - - // if (!is_new && !is_changed) { - // console.log(i, 'not changed'); - - // newState.markers.push(this.prevState.markers[i]); - // } - // } - - // console.log('------', newState.markers); - - // if (newState.markers.length < this.prevState.markers.length) { - // this.arrowLayer.removeLayers( - // this.prevState.markers - // .slice( - // this.prevState.markers.length - newState.markers.length, - // this.prevState.markers.length - 1 - // ) - // .filter(el => !!el) - // ); - // } - - // this.prevState = newState; - // }; - map: Map; - arrowLayer: MarkerClusterGroup = new MarkerClusterGroup({ + arrowLayer = new MarkerClusterGroup({ spiderfyOnMaxZoom: false, showCoverageOnHover: false, zoomToBoundsOnClick: false, @@ -333,13 +91,6 @@ class ArrowsLayer extends LayerGroup { iconCreateFunction: arrowClusterIcon, }); - // prevState: IPrevState = { - // route: [], - // markers: [], - // midpoints: [], - // // distances: [], - // }; - layers: Marker[] = []; } diff --git a/src/utils/window.ts b/src/utils/window.ts index c137ccf..aef72df 100644 --- a/src/utils/window.ts +++ b/src/utils/window.ts @@ -5,8 +5,6 @@ export const isMobile = (): boolean => window.innerWidth <= MOBILE_BREAKPOINT; export const getLocation = (callback: (pos: LatLngLiteral) => void) => { window.navigator.geolocation.getCurrentPosition(position => { - console.log('getting pos'); - if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) return callback(null); From 37003b9e852130c2d74f02ec47cbd552919e68a0 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 12:30:09 +0700 Subject: [PATCH 192/320] fixed mobile breakpoint --- src/styles/colors.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/colors.less b/src/styles/colors.less index 5cb2b6b..7d759f3 100644 --- a/src/styles/colors.less +++ b/src/styles/colors.less @@ -25,7 +25,7 @@ @dialog_shadow: rgba(0,0,0,0.3) 0 2px 0; @mobile_breakpoint: 768px; -@micro_breakpoint: 390px; +@micro_breakpoint: 450px; @tooltip_background: #123740; From 9a08ccd95b2d62e4543590c6d612f14844ac6393 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 12:33:09 +0700 Subject: [PATCH 193/320] hide undo on mobiles --- src/components/panels/EditorPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 28c82cc..18a1683 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -83,7 +83,7 @@ class EditorPanelUnconnected extends PureComponent { this.panel = el; }} > -
      +
      + +
      @@ -135,18 +156,6 @@ class EditorPanelUnconnected extends PureComponent {
      -
      - -
      - -
      -
      diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index cefd963..3990c7d 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -227,7 +227,7 @@ function* keyPressedSaga({ key, target }: ReturnType) { if (renderer_active) return yield put(editorHideRenderer()); if (dialog_active) return yield put(editorSetDialogActive(false)); if (mode !== MODES.NONE) return yield put(editorChangeMode(MODES.NONE)); - } else if (key === 'Delete') { + } else if (key === 'Delete' || key === 'c') { const { editing } = yield select(selectEditor); if (!editing) return; From bbd7d6a89a181e5a385324ba212f686dfebd78fc Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 14:04:23 +0700 Subject: [PATCH 196/320] better mouse hinting and ability to drop all markers on polyline --- src/utils/map/InteractivePoly.ts | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/utils/map/InteractivePoly.ts b/src/utils/map/InteractivePoly.ts index bd7f4d3..d71be9c 100644 --- a/src/utils/map/InteractivePoly.ts +++ b/src/utils/map/InteractivePoly.ts @@ -45,6 +45,28 @@ class InteractivePoly extends Polyline { this.startDragHinting(); } + setLatLngs = (latlngs: LatLngExpression[] | LatLngExpression[][] | LatLngExpression[][][]) => { + super.setLatLngs(latlngs); + + if (this.is_drawing) { + // update mouse hinter on latlngs change + const constraints = this.constrLine.getLatLngs() as LatLng[]; + const source = latlngs && latlngs.length > 0 && + this.drawing_direction === 'forward' + ? latlngs[latlngs.length - 1] + : latlngs[0]; + + if (!constraints || constraints.length < 2 || !source) { + this.setConstraints([]); + return; + } + + this.setConstraints([constraints[0], source as LatLng]); + } + + return this; + }; + updateTouchHinter = ({ latlngs }: { latlngs: LatLngLiteral[] }): void => { this.touchHinter.setLatLngs(latlngs); }; @@ -474,7 +496,7 @@ class InteractivePoly extends Polyline { const index = this.markers.indexOf(target); const latlngs = this.getLatLngs(); - if (typeof index === 'undefined' || latlngs.length <= 2) return; + if (typeof index === 'undefined' || latlngs.length == 0) return; this.dropMarkerDistanceChange(index); this._map.removeLayer(this.markers[index]); From ad676d5fde7682b1b3ef71da3157bb653174f3d2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 15:16:34 +0700 Subject: [PATCH 197/320] forwards and backwards drawing --- src/components/dialogs/PolylineDialog.tsx | 38 ++++++++++++++++++++++- src/components/dialogs/RouterDialog.tsx | 11 +++---- src/map/Route/index.tsx | 17 +++++++--- src/redux/editor/actions.ts | 5 +++ src/redux/editor/constants.ts | 7 +++++ src/redux/editor/handlers.ts | 10 ++++++ src/redux/editor/index.ts | 12 +++++-- src/redux/editor/selectors.ts | 1 + src/sprites/icon.svg | 18 +++++++++-- src/styles/panel.less | 6 ++++ src/utils/map/InteractivePoly.ts | 15 +++++++-- 11 files changed, 119 insertions(+), 21 deletions(-) diff --git a/src/components/dialogs/PolylineDialog.tsx b/src/components/dialogs/PolylineDialog.tsx index dc8eb0d..4f27150 100644 --- a/src/components/dialogs/PolylineDialog.tsx +++ b/src/components/dialogs/PolylineDialog.tsx @@ -5,18 +5,28 @@ import * as MAP_ACTIONS from '~/redux/map/actions'; import { IState } from '~/redux/store'; import { selectMapRoute } from '~/redux/map/selectors'; import classNames from 'classnames'; +import { selectEditorDirection } from '~/redux/editor/selectors'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import { DRAWING_DIRECTIONS } from '~/redux/editor/constants'; const mapStateToProps = (state: IState) => ({ route: selectMapRoute(state), + direction: selectEditorDirection(state), }); const mapDispatchToProps = { mapSetRoute: MAP_ACTIONS.mapSetRoute, + editorSetDirection: EDITOR_ACTIONS.editorSetDirection, }; type Props = ReturnType & typeof mapDispatchToProps & {}; -const PolylineDialogUnconnected: FC = ({ route, mapSetRoute }) => { +const PolylineDialogUnconnected: FC = ({ + route, + direction, + editorSetDirection, + mapSetRoute, +}) => { const reverseRoute = useCallback(() => { if (route.length < 2) return; mapSetRoute([...route].reverse()); @@ -34,6 +44,14 @@ const PolylineDialogUnconnected: FC = ({ route, mapSetRoute }) => { mapSetRoute(route.slice(0, route.length - 1)); }, [mapSetRoute, route]); + const continueBackward = useCallback(() => { + editorSetDirection(DRAWING_DIRECTIONS.BACKWARDS); + }, [editorSetDirection]); + + const continueForward = useCallback(() => { + editorSetDirection(DRAWING_DIRECTIONS.FORWARDS); + }, [editorSetDirection]); + return (
      @@ -59,6 +77,24 @@ const PolylineDialogUnconnected: FC = ({ route, mapSetRoute }) => { + + + +
      Ручной режим
      diff --git a/src/components/dialogs/RouterDialog.tsx b/src/components/dialogs/RouterDialog.tsx index 827f0cc..f353697 100644 --- a/src/components/dialogs/RouterDialog.tsx +++ b/src/components/dialogs/RouterDialog.tsx @@ -3,8 +3,9 @@ import { Icon } from '~/components/panels/Icon'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import classnames from 'classnames'; import { connect } from 'react-redux'; -import { selectEditor } from '~/redux/editor/selectors'; +import { selectEditor, selectEditorRouter, selectEditorDirection } from '~/redux/editor/selectors'; import pick from 'ramda/es/pick'; +import { IState } from '~/redux/store'; const noPoints = ({ editorRouterCancel, @@ -84,8 +85,8 @@ const draggablePoints = ({ ); -const mapStateToProps = state => ({ - editor: pick(['router'], selectEditor(state)), +const mapStateToProps = (state: IState) => ({ + router: selectEditorRouter(state), }); const mapDispatchToProps = { @@ -96,9 +97,7 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & {}; const RouterDialogUnconnected: FC = ({ - editor: { - router: { waypoints }, - }, + router: { waypoints }, editorRouterCancel, editorRouterSubmit, }) => ( diff --git a/src/map/Route/index.tsx b/src/map/Route/index.tsx index 1501f0a..9d769b2 100644 --- a/src/map/Route/index.tsx +++ b/src/map/Route/index.tsx @@ -2,19 +2,20 @@ import React, { FC, useEffect, memo, useState, useCallback } from 'react'; import { InteractivePoly } from '~/utils/map/InteractivePoly'; import { isMobile } from '~/utils/window'; import { LatLng } from 'leaflet'; -import { selectEditor, selectEditorMode, selectEditorEditing } from '~/redux/editor/selectors'; -import pick from 'ramda/es/pick'; +import { selectEditorMode, selectEditorEditing, selectEditorDirection } from '~/redux/editor/selectors'; import * as MAP_ACTIONS from '~/redux/map/actions'; import { connect } from 'react-redux'; -import { selectMap, selectMapRoute } from '~/redux/map/selectors'; +import { selectMapRoute } from '~/redux/map/selectors'; import { MainMap } from '~/constants/map'; import { MODES } from '~/constants/modes'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import { IState } from '~/redux/store'; -const mapStateToProps = state => ({ +const mapStateToProps = (state: IState) => ({ mode: selectEditorMode(state), editing: selectEditorEditing(state), route: selectMapRoute(state), + drawing_direction: selectEditorDirection(state), }); const mapDispatchToProps = { @@ -26,7 +27,7 @@ const mapDispatchToProps = { type Props = ReturnType & typeof mapDispatchToProps & {}; const RouteUnconnected: FC = memo( - ({ route, editing, mode, mapSetRoute, editorSetDistance, editorSetMarkersShown }) => { + ({ route, editing, mode, drawing_direction, mapSetRoute, editorSetDistance, editorSetMarkersShown }) => { const [layer, setLayer] = useState(null); const onDistanceChange = useCallback(({ distance }) => editorSetDistance(distance), [ @@ -103,6 +104,12 @@ const RouteUnconnected: FC = memo( } }, [mode, layer]); + useEffect(() => { + if (!layer) return; + + layer.setDirection(drawing_direction); + }, [drawing_direction, layer]); + return null; } ); diff --git a/src/redux/editor/actions.ts b/src/redux/editor/actions.ts index 8d580b0..6432b54 100644 --- a/src/redux/editor/actions.ts +++ b/src/redux/editor/actions.ts @@ -146,3 +146,8 @@ export const editorRedo = () => ({ export const editorCaptureHistory = () => ({ type: EDITOR_ACTIONS.CAPTURE_HIPSTORY, }); + +export const editorSetDirection = (drawing_direction: IEditorState['drawing_direction']) => ({ + type: EDITOR_ACTIONS.SET_DIRECTION, + drawing_direction, +}); diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts index 412efcc..68cc83b 100644 --- a/src/redux/editor/constants.ts +++ b/src/redux/editor/constants.ts @@ -1,5 +1,10 @@ const P = 'EDITOR'; +export const DRAWING_DIRECTIONS: Record<'FORWARDS' | 'BACKWARDS', 'forward' | 'backward'> = { + FORWARDS: 'forward', + BACKWARDS: 'backward', +}; + export const EDITOR_HISTORY_LENGTH = 100; export const EDITOR_ACTIONS = { @@ -54,4 +59,6 @@ export const EDITOR_ACTIONS = { UNDO: `${P}-UNDO`, REDO: `${P}-REDO`, CAPTURE_HIPSTORY: `${P}-CAPTURE_HIPSTORY`, + + SET_DIRECTION: `${P}-SET_DIRECTION`, }; diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts index b039b3a..71684b7 100644 --- a/src/redux/editor/handlers.ts +++ b/src/redux/editor/handlers.ts @@ -179,6 +179,14 @@ const setHistory = ( }, }); +const setDirection = ( + state, + { drawing_direction }: ReturnType +): IEditorState => ({ + ...state, + drawing_direction, +}); + export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_EDITING]: setEditing, [EDITOR_ACTIONS.SET_CHANGED]: setChanged, @@ -209,4 +217,6 @@ export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_NOMINATIM]: setNominatim, [EDITOR_ACTIONS.SET_HISTORY]: setHistory, + + [EDITOR_ACTIONS.SET_DIRECTION]: setDirection, }; diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 0a1c3c3..5b42a4a 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -5,6 +5,7 @@ import { EDITOR_HANDLERS } from './handlers'; import { ILatLng } from '../map/types'; import { INominatimResult } from '~/redux/types'; import { IMapReducer } from '../map'; +import { DRAWING_DIRECTIONS } from './constants'; export interface IEditorHistoryItem { route: IMapReducer['route']; @@ -35,6 +36,7 @@ export interface IEditorState { is_empty: boolean; is_published: boolean; is_routing: boolean; + drawing_direction: typeof DRAWING_DIRECTIONS[keyof typeof DRAWING_DIRECTIONS]; features: { routing: boolean; @@ -63,6 +65,7 @@ export interface IEditorState { processing: boolean; loading: boolean; }; + history: { records: IEditorHistoryItem[]; position: number; @@ -84,13 +87,16 @@ export const EDITOR_INITIAL_STATE = { estimated: 0, speed: 15, activeSticker: { set: null, sticker: null }, + drawing_direction: DRAWING_DIRECTIONS.FORWARDS, + + is_published: false, + is_empty: true, + is_routing: false, + router: { waypoints: [], points: [], }, - is_published: false, - is_empty: true, - is_routing: false, features: { routing: false, diff --git a/src/redux/editor/selectors.ts b/src/redux/editor/selectors.ts index c4ce029..4c6ab6d 100644 --- a/src/redux/editor/selectors.ts +++ b/src/redux/editor/selectors.ts @@ -9,3 +9,4 @@ export const selectEditorRenderer = (state: IState) => state.editor.renderer; export const selectEditorRouter = (state: IState) => state.editor.router; export const selectEditorDistance = (state: IState) => state.editor.distance; export const selectEditorNominatim = (state: IState) => state.editor.nominatim; +export const selectEditorDirection = (state: IState) => state.editor.drawing_direction; diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index e8170d3..21ac47e 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -372,7 +372,7 @@ - + @@ -382,12 +382,24 @@ - + - + + + + + + + + + + + + + diff --git a/src/styles/panel.less b/src/styles/panel.less index 21b2126..e88b8ee 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -430,6 +430,12 @@ &.inactive { opacity: 0.5; } + + &.active { + svg { + fill: url(#activeButtonGradient); + } + } } .helper__buttons { diff --git a/src/utils/map/InteractivePoly.ts b/src/utils/map/InteractivePoly.ts index d71be9c..9e83fbb 100644 --- a/src/utils/map/InteractivePoly.ts +++ b/src/utils/map/InteractivePoly.ts @@ -45,9 +45,7 @@ class InteractivePoly extends Polyline { this.startDragHinting(); } - setLatLngs = (latlngs: LatLngExpression[] | LatLngExpression[][] | LatLngExpression[][][]) => { - super.setLatLngs(latlngs); - + updateConstraintsToLatLngs = (latlngs: LatLngExpression[]) => { if (this.is_drawing) { // update mouse hinter on latlngs change const constraints = this.constrLine.getLatLngs() as LatLng[]; @@ -63,6 +61,12 @@ class InteractivePoly extends Polyline { this.setConstraints([constraints[0], source as LatLng]); } + } + + setLatLngs = (latlngs: LatLngExpression[] | LatLngExpression[][] | LatLngExpression[][][]) => { + super.setLatLngs(latlngs); + + this.updateConstraintsToLatLngs(latlngs as LatLngExpression[]); return this; }; @@ -492,6 +496,11 @@ class InteractivePoly extends Polyline { this.constrLine.setLatLngs(coords); }; + setDirection = (direction: 'forward' | 'backward') => { + this.drawing_direction = direction; + this.updateConstraintsToLatLngs(this.getLatLngs() as LatLngExpression[]); + } + dropMarker = ({ target }: LeafletMouseEvent): void => { const index = this.markers.indexOf(target); const latlngs = this.getLatLngs(); From dd1c9a1d1c5967810014cbb9af412e5dde85bbf0 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 15:53:15 +0700 Subject: [PATCH 198/320] fixed panels behaviour --- src/components/panels/UserPanel.tsx | 30 ++++++++++++++--------------- src/styles/panel.less | 13 +++++++++++++ 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 008c075..41b5093 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -166,6 +166,20 @@ export class UserPanelUnconnected extends PureComponent {
      + +
      + +
      + +
      + +
      @@ -174,22 +188,6 @@ export class UserPanelUnconnected extends PureComponent {
      - - {!is_empty && ( - -
      - -
      - -
      - - )}
      ); diff --git a/src/styles/panel.less b/src/styles/panel.less index e88b8ee..76673a3 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -42,6 +42,19 @@ } &__undo { + opacity: 0; + transform: translate(50px, 0); + pointer-events: none; + touch-action: none; + transition: transform 0.25s, opacity 0.25s; + z-index: -1; + + &.active { + opacity: 1; + transform: translate(0, 0); + pointer-events: all; + touch-action: initial; + } } } From 02e570bc9cf46a0e1207be8a701e5efb4515753d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Wed, 22 Jan 2020 16:01:43 +0700 Subject: [PATCH 199/320] fix --- src/components/panels/UserPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index 41b5093..cd9cb6e 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -171,7 +171,7 @@ export class UserPanelUnconnected extends PureComponent {
      + +
      + Добавить текущий +
      + +
      + Скачать текущий +
      +
      +
      + ); +}; + +const GpxDialog = connect(mapStateToProps, mapDispatchToProps)(GpxDialogUnconnected); + +export { GpxDialog }; diff --git a/src/components/gpx/GpxDialogRow.tsx b/src/components/gpx/GpxDialogRow.tsx new file mode 100644 index 0000000..0075c28 --- /dev/null +++ b/src/components/gpx/GpxDialogRow.tsx @@ -0,0 +1,34 @@ +import React, { FC } from 'react'; +import { IGpxRoute } from '~/redux/editor'; +import { Switch } from '../Switch'; +import { Icon } from '../panels/Icon'; +import classnames from 'classnames'; + +interface IProps { + item: IGpxRoute; + index: number + enabled: boolean; + + onFocusRoute: (i: number) => void + onRouteDrop: (i: number) => void + onRouteToggle: (i: number) => void +} + +const GpxDialogRow: FC = ({ item, index, enabled, onRouteToggle, onFocusRoute, onRouteDrop }) => { + return ( +
      +
      + +
      onFocusRoute(index)}> + {item.name} +
      + +
      +
      onRouteDrop(index)}>
      +
      onRouteToggle(index)}/>
      +
      +
      + ); +}; + +export { GpxDialogRow }; diff --git a/src/components/panels/EditorDialog.tsx b/src/components/panels/EditorDialog.tsx index 2bebe8d..2f0abb8 100644 --- a/src/components/panels/EditorDialog.tsx +++ b/src/components/panels/EditorDialog.tsx @@ -8,6 +8,7 @@ import { TrashDialog } from '~/components/dialogs/TrashDialog'; import { LogoDialog } from '~/components/dialogs/LogoDialog'; import { SaveDialog } from '~/components/dialogs/SaveDialog'; import { CancelDialog } from '~/components/dialogs/CancelDialog'; +import { GpxDialog } from '~/components/dialogs/GpxDialog'; import { connect } from 'react-redux'; @@ -31,6 +32,7 @@ const DIALOG_CONTENTS: { [x: string]: any } = { [MODES.PROVIDER]: ProviderDialog, [MODES.SHOT_PREFETCH]: ShotPrefetchDialog, [MODES.POLY]: PolylineDialog, + [MODES.GPX]: GpxDialog, }; const EditorDialogUnconnected = (props: Props) => diff --git a/src/components/panels/UserPanel.tsx b/src/components/panels/UserPanel.tsx index cd9cb6e..047643c 100644 --- a/src/components/panels/UserPanel.tsx +++ b/src/components/panels/UserPanel.tsx @@ -11,6 +11,7 @@ import { editorSetDialogActive, editorGetGPXTrack, editorSearchNominatim, + editorChangeMode, } from '~/redux/editor/actions'; import { connect } from 'react-redux'; import { Icon } from '~/components/panels/Icon'; @@ -22,6 +23,7 @@ import { Tooltip } from '~/components/panels/Tooltip'; import { TitleDialog } from '~/components/dialogs/TitleDialog'; import { NominatimSearchPanel } from '~/components/dialogs/NominatimSearchPanel'; import { IState } from '~/redux/store'; +import { MODES } from '~/constants/modes'; const mapStateToProps = ({ user: { user }, @@ -46,6 +48,7 @@ const mapDispatchToProps = { openMapDialog, editorGetGPXTrack, editorSearchNominatim, + editorChangeMode, }; type Props = ReturnType & typeof mapDispatchToProps & {}; @@ -118,13 +121,17 @@ export class UserPanelUnconnected extends PureComponent { ); }; + openGpxDialog = () => { + this.props.editorChangeMode(MODES.GPX); + } + render() { const { props: { user, dialog, dialog_active, route, stickers, features }, state: { menuOpened }, } = this; - const is_empty = !route.length && !stickers.length; + // const is_empty = !route.length && !stickers.length; return (
      @@ -171,8 +178,9 @@ export class UserPanelUnconnected extends PureComponent {
      , document.getElementById('canvas') ); diff --git a/src/redux/editor/actions.ts b/src/redux/editor/actions.ts index 6432b54..b246d77 100644 --- a/src/redux/editor/actions.ts +++ b/src/redux/editor/actions.ts @@ -151,3 +151,18 @@ export const editorSetDirection = (drawing_direction: IEditorState['drawing_dire type: EDITOR_ACTIONS.SET_DIRECTION, drawing_direction, }); + +export const editorSetGpx = (gpx: Partial) => ({ + type: EDITOR_ACTIONS.SET_GPX, + gpx, +}); + +export const editorUploadGpx = (file: File) => ({ + type: EDITOR_ACTIONS.UPLOAD_GPX, + file, +}); + +export const editorDropGpx = (index: number) => ({ + type: EDITOR_ACTIONS.DROP_GPX, + index, +}); diff --git a/src/redux/editor/constants.ts b/src/redux/editor/constants.ts index 68cc83b..3f9239e 100644 --- a/src/redux/editor/constants.ts +++ b/src/redux/editor/constants.ts @@ -1,5 +1,12 @@ const P = 'EDITOR'; +export const GPX_ROUTE_COLORS = [ + '#ff3344', + '#3344ff', + '#33ff44', + '#33ffff', +]; + export const DRAWING_DIRECTIONS: Record<'FORWARDS' | 'BACKWARDS', 'forward' | 'backward'> = { FORWARDS: 'forward', BACKWARDS: 'backward', @@ -61,4 +68,7 @@ export const EDITOR_ACTIONS = { CAPTURE_HIPSTORY: `${P}-CAPTURE_HIPSTORY`, SET_DIRECTION: `${P}-SET_DIRECTION`, + SET_GPX: `${P}-SET_GPX`, + UPLOAD_GPX: `${P}-UPLOAD_GPX`, + DROP_GPX: `${P}-DROP_GPX`, }; diff --git a/src/redux/editor/handlers.ts b/src/redux/editor/handlers.ts index 71684b7..948687f 100644 --- a/src/redux/editor/handlers.ts +++ b/src/redux/editor/handlers.ts @@ -187,6 +187,17 @@ const setDirection = ( drawing_direction, }); +const setGpx = ( + state, + { gpx }: ReturnType +): IEditorState => ({ + ...state, + gpx: { + ...state.gpx, + ...gpx, + }, +}); + export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_EDITING]: setEditing, [EDITOR_ACTIONS.SET_CHANGED]: setChanged, @@ -219,4 +230,5 @@ export const EDITOR_HANDLERS = { [EDITOR_ACTIONS.SET_HISTORY]: setHistory, [EDITOR_ACTIONS.SET_DIRECTION]: setDirection, + [EDITOR_ACTIONS.SET_GPX]: setGpx, }; diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 5b42a4a..383d4ac 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -2,10 +2,19 @@ import { createReducer } from '~/utils/reducer'; import { DIALOGS } from '~/constants/dialogs'; import { MODES } from '~/constants/modes'; import { EDITOR_HANDLERS } from './handlers'; -import { ILatLng } from '../map/types'; +// import { ILatLng } from '../map/types'; import { INominatimResult } from '~/redux/types'; import { IMapReducer } from '../map'; import { DRAWING_DIRECTIONS } from './constants'; +import { LatLng } from 'leaflet'; + +export interface IGpxRoute { + latlngs: LatLng[], + enabled: boolean; + color: string; + name: string; + id: string; +} export interface IEditorHistoryItem { route: IMapReducer['route']; @@ -19,8 +28,8 @@ export interface IEditorState { markers_shown: boolean; router: { - points: ILatLng[]; - waypoints: ILatLng[]; + points: LatLng[]; + waypoints: LatLng[]; }; mode: typeof MODES[keyof typeof MODES]; @@ -70,6 +79,12 @@ export interface IEditorState { records: IEditorHistoryItem[]; position: number; }; + + + gpx: { + enabled: boolean; + list: IGpxRoute[], + }, } export const EDITOR_INITIAL_STATE = { @@ -130,6 +145,11 @@ export const EDITOR_INITIAL_STATE = { records: [{ route: [], stickers: [] }], position: 0, }, + + gpx: { + enabled: true, + list: [], + }, }; export const editor = createReducer(EDITOR_INITIAL_STATE, EDITOR_HANDLERS); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 3990c7d..efb33da 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -8,7 +8,7 @@ import { takeLeading, delay, } from 'redux-saga/effects'; -import { selectEditor, selectEditorMode } from '~/redux/editor/selectors'; +import { selectEditor, selectEditorMode, selectEditorGpx } from '~/redux/editor/selectors'; import { simplify } from '~/utils/simplify'; import { editorHideRenderer, @@ -30,6 +30,8 @@ import { editorSetHistory, editorUndo, editorRedo, + editorUploadGpx, + editorSetGpx, } from '~/redux/editor/actions'; import { getUrlData, pushPath } from '~/utils/history'; import { MODES } from '~/constants/modes'; @@ -38,7 +40,7 @@ import { LatLng } from 'leaflet'; import { searchSetTab } from '../user/actions'; import { TABS, DIALOGS } from '~/constants/dialogs'; import { EDITOR_ACTIONS, EDITOR_HISTORY_LENGTH } from './constants'; -import { getGPXString, downloadGPXTrack } from '~/utils/gpx'; +import { getGPXString, downloadGPXTrack, importGpxTrack } from '~/utils/gpx'; import { getTilePlacement, getPolyPlacement, @@ -62,6 +64,9 @@ import { OsrmRouter } from '~/utils/map/OsrmRouter'; import path from 'ramda/es/path'; import { MainMap } from '~/constants/map'; import { EDITOR_INITIAL_STATE } from '.'; +import { Unwrap } from '~/utils/middleware'; +import uuid from 'uuid'; +import { getRandomColor } from '~/utils/dom'; const hideLoader = () => { document.getElementById('loader').style.opacity = String(0); @@ -240,9 +245,9 @@ function* keyPressedSaga({ key, target }: ReturnType) { yield put(editorChangeMode(MODES.TRASH)); } } else if (key === 'z') { - yield put(editorUndo()) + yield put(editorUndo()); } else if (key === 'x') { - yield put(editorRedo()) + yield put(editorRedo()); } } @@ -368,6 +373,29 @@ function* redoHistory() { yield put(editorSetHistory({ position: history.position + 1 })); } +function* uploadGpx({ file }: ReturnType) { + const gpx: Unwrap = yield importGpxTrack(file); + + if (!gpx || !gpx.length) return; + + const { list }: ReturnType = yield select(selectEditorGpx); + + yield put( + editorSetGpx({ + list: [ + ...list, + ...gpx.map(item => ({ + enabled: true, + latlngs: item.latlngs, + color: getRandomColor(), + name: item.name || `Track #${list.length + 1}`, + id: uuid() as string, + })), + ], + }) + ); +} + export function* editorSaga() { yield takeEvery(EDITOR_ACTIONS.LOCATION_CHANGED, locationChangeSaga); @@ -397,4 +425,6 @@ export function* editorSaga() { yield takeEvery(EDITOR_ACTIONS.UNDO, undoHistory); yield takeEvery(EDITOR_ACTIONS.REDO, redoHistory); + + yield takeEvery(EDITOR_ACTIONS.UPLOAD_GPX, uploadGpx); } diff --git a/src/redux/editor/selectors.ts b/src/redux/editor/selectors.ts index 4c6ab6d..b21b636 100644 --- a/src/redux/editor/selectors.ts +++ b/src/redux/editor/selectors.ts @@ -10,3 +10,4 @@ export const selectEditorRouter = (state: IState) => state.editor.router; export const selectEditorDistance = (state: IState) => state.editor.distance; export const selectEditorNominatim = (state: IState) => state.editor.nominatim; export const selectEditorDirection = (state: IState) => state.editor.drawing_direction; +export const selectEditorGpx = (state: IState) => state.editor.gpx; diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index e02e400..5d4a36c 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -1,7 +1,8 @@ import { MAP_ACTIONS } from './constants'; import { IMapReducer } from './'; import { IStickerDump } from '~/redux/map/types'; -import { ILatLng } from './types'; +import { LatLng } from 'leaflet'; +// import { ILatLng } from './types'; export const mapSet = (map: Partial) => ({ type: MAP_ACTIONS.SET_MAP, @@ -39,7 +40,7 @@ export const mapDropSticker = (index: number) => ({ index, }); -export const mapClicked = (latlng: ILatLng) => ({ +export const mapClicked = (latlng: LatLng) => ({ type: MAP_ACTIONS.MAP_CLICKED, latlng, }); diff --git a/src/redux/map/selectors.ts b/src/redux/map/selectors.ts index 445d95a..543f102 100644 --- a/src/redux/map/selectors.ts +++ b/src/redux/map/selectors.ts @@ -4,4 +4,6 @@ export const selectMap = (state: IState) => state.map; export const selectMapProvider = (state: IState) => state.map.provider; export const selectMapLogo = (state: IState) => state.map.logo; export const selectMapRoute= (state: IState) => state.map.route; -export const selectMapStickers = (state: IState) => state.map.stickers; \ No newline at end of file +export const selectMapStickers = (state: IState) => state.map.stickers; +export const selectMapTitle= (state: IState) => state.map.title; +export const selectMapAddress = (state: IState) => state.map.address; \ No newline at end of file diff --git a/src/redux/map/types.ts b/src/redux/map/types.ts index 1d15bd3..461f1f5 100644 --- a/src/redux/map/types.ts +++ b/src/redux/map/types.ts @@ -1,15 +1,9 @@ import { LatLng } from 'leaflet'; -import { IRoutePoint } from '~/utils/gpx'; -export type ILatLng = { - lat: number; - lng: number; -}; - -export type IMapRoute = ILatLng[]; +export type IMapRoute = LatLng[]; export interface IStickerDump { - latlng: ILatLng; + latlng: LatLng; set: string; sticker: string; angle?: number; @@ -18,10 +12,10 @@ export interface IStickerDump { export interface IRoute { version: number; - title: string; + title: string; owner: number; address: string; - route: IRoutePoint[]; + route: LatLng[]; stickers: IStickerDump[]; provider: string; is_public: boolean; diff --git a/src/redux/store.ts b/src/redux/store.ts index 550ac22..481e355 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -26,6 +26,12 @@ const userPersistConfig: PersistConfig = { storage, }; +const editorPersistConfig: PersistConfig = { + key: 'editor', + whitelist: ['gpx'], + storage, +}; + export interface IState { user: IRootReducer; map: IMapReducer; @@ -43,8 +49,8 @@ const composeEnhancers = export const store = createStore( combineReducers({ user: persistReducer(userPersistConfig, userReducer), + editor: persistReducer(editorPersistConfig, editor), map, - editor, }), composeEnhancers(applyMiddleware(sagaMiddleware)) ); diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index 54f9f02..e366860 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -343,7 +343,7 @@ export function* updateUserRoutes() { } export function* userSaga() { - yield takeLatest(REHYDRATE, authCheckSaga); + yield takeEvery(REHYDRATE, authCheckSaga); yield takeEvery(USER_ACTIONS.USER_LOGOUT, userLogoutSaga); yield takeLatest(USER_ACTIONS.GOT_VK_USER, gotVkUserSaga); diff --git a/src/sprites/icons_draft.svg b/src/sprites/icons_draft.svg index 2fccc13..5f315c5 100644 --- a/src/sprites/icons_draft.svg +++ b/src/sprites/icons_draft.svg @@ -48,11 +48,11 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="1" - inkscape:cx="22.770291" - inkscape:cy="17.290238" + inkscape:zoom="5.6568542" + inkscape:cx="7.5044641" + inkscape:cy="20.369143" inkscape:document-units="px" - inkscape:current-layer="g2550" + inkscape:current-layer="svg8" showgrid="false" inkscape:window-width="1920" inkscape:window-height="1015" @@ -61,7 +61,7 @@ inkscape:window-maximized="1" units="px" inkscape:showpageshadow="false" - inkscape:snap-global="false" /> + inkscape:snap-global="true" /> @@ -693,18 +693,78 @@ + style="fill:#ffffff" /> + + + + + id="path1004" + d="m 3.125,14.715588 h 11.548483 l 2.025957,1.681298 -2.025957,1.887526 H 3.125 Z" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.25750196;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + sodipodi:nodetypes="ccccccccccccc" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.12910175;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 19.080155,11.622728 -2.182066,2.182066 2.695206,2.695206 -2.695206,2.695205 2.182066,2.182066 2.695205,-2.695206 2.695206,2.695206 2.182066,-2.182066 L 23.957426,16.5 26.652632,13.804794 24.470566,11.622728 21.77536,14.317934 Z" + id="path1006" + inkscape:connector-curvature="0" /> + + + + + + + + + + + + diff --git a/src/styles/button.less b/src/styles/button.less index 058cf9a..8cbc2ad 100644 --- a/src/styles/button.less +++ b/src/styles/button.less @@ -14,6 +14,12 @@ color: white; font-weight: 400; border: none; + position: relative; + + &.outline { + box-shadow: inset #444444 0 0 0 1px; + background: transparent; + } &.primary { background: #3c78db; @@ -29,6 +35,21 @@ background: #17bf6d; color: white; } + + &.disabled { + opacity: 0.5; + touch-action: none; + pointer-events: none; + } + + input[type="file"] { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + } } .button-group { diff --git a/src/styles/gpx.less b/src/styles/gpx.less new file mode 100644 index 0000000..5305209 --- /dev/null +++ b/src/styles/gpx.less @@ -0,0 +1,81 @@ +.gpx-title { + display: flex; + flex-direction: row; + padding: 10px; +} + +.gpx-row { + display: flex; + align-items: center; + justify-content: flex-start; + flex-direction: row; + padding: 10px; + min-width: 0; + + &_disabled { + opacity: 0.5; + } + + &__title { + flex: 1; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + margin: 0 10px; + cursor: pointer; + } + + &__buttons { + display: flex; + align-items: center; + justify-content: center; + + svg { + fill: white; + } + + > div { + padding: 0 5px; + cursor: pointer; + + &:last-child { + padding-right: 0; + } + + &:first-child { + padding-left: 0; + } + } + } + + &__color { + width: 8px; + height: 8px; + border-radius: 100%; + } +} + +.gpx-buttons { + padding: 10px; + + & > * { + margin: 5px 0; + + &:last-child { + margin-bottom: 0; + } + + &:first-child { + margin-top: 0; + } + } + + & > .button { + width: 100%; + box-sizing: border-box; + position: relative; + height: 32px; + align-items: center; + justify-content: center; + } +} diff --git a/src/styles/main.less b/src/styles/main.less index cfa1a49..2e79d9e 100644 --- a/src/styles/main.less +++ b/src/styles/main.less @@ -13,6 +13,7 @@ @import 'progress.less'; @import 'slider.less'; @import 'switch.less'; +@import 'gpx.less'; body { font-family: 'Rubik', sans-serif; diff --git a/src/styles/panel.less b/src/styles/panel.less index 76673a3..3785661 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -290,47 +290,11 @@ top: 52px; } - &.left { + &.left, &__left { right: auto; left: 10px; } - // &.control-dialog-big { - // min-width: 555px; - - // @media (max-width: @mobile_breakpoint) { - // min-width: 100%; - // max-width: 100%; - // width: 100% !important; - // left: 0; - // padding: 0 10px; - // } - // } - - // &.control-dialog-medium { - // min-width: 460px; - - // @media (max-width: @mobile_breakpoint) { - // min-width: 100%; - // max-width: 100%; - // width: 100% !important; - // left: 0; - // padding: 0 10px; - // } - // } - - // &.control-dialog-small { - // min-width: 270px; - - // @media (max-width: @mobile_breakpoint) { - // min-width: 100%; - // max-width: 100%; - // width: 100% !important; - // left: 0; - // padding: 0 10px; - // } - // } - .helper:first-child { border-radius: @panel_radius @panel_radius 0 0; } @@ -352,6 +316,11 @@ width: calc(100% - 20px); max-width: 417px; } + + &__small { + width: calc(100% - 20px); + max-width: 324px; + } } .control-dialog-provider { diff --git a/src/styles/save.less b/src/styles/save.less index fcdfcc4..33179cd 100644 --- a/src/styles/save.less +++ b/src/styles/save.less @@ -146,6 +146,10 @@ padding: 0 10px 2px 10px; align-items: center; display: flex; + + .switch { + margin-right: 0.5em; + } } .save-description { diff --git a/src/styles/switch.less b/src/styles/switch.less index dc1bd01..8895b4c 100644 --- a/src/styles/switch.less +++ b/src/styles/switch.less @@ -7,7 +7,6 @@ vertical-align: text-top; position: relative; top: 0.05em; - margin-right: 0.5em; transition: all 500ms; &::after { diff --git a/src/utils/dom.ts b/src/utils/dom.ts index 25eb73a..ebcb930 100644 --- a/src/utils/dom.ts +++ b/src/utils/dom.ts @@ -7,3 +7,8 @@ export const getStyle = (oElm: any, strCssRule: string): string => { return ''; }; + + +export const getRandomColor = () => { + return `hsl(${(Math.floor(Math.random() * 360))}, 100%, 50%)` +} \ No newline at end of file diff --git a/src/utils/geom.ts b/src/utils/geom.ts index b3120ad..bfc3341 100644 --- a/src/utils/geom.ts +++ b/src/utils/geom.ts @@ -1,11 +1,11 @@ -import { LatLng, LatLngLiteral, point, Point, PointExpression } from 'leaflet'; +import { LatLng, LatLngLiteral, point, Point, PointExpression, latLng } from 'leaflet'; -interface ILatLng { - lat: number; - lng: number; -} +// interface LatLng { +// lat: number; +// lng: number; +// } -export const middleCoord = (l1: ILatLng, l2: ILatLng): ILatLng => ({ +export const middleCoord = (l1: LatLng, l2: LatLng): LatLng => latLng({ lat: l2.lat + (l1.lat - l2.lat) / 2, lng: l2.lng + (l1.lng - l2.lng) / 2, }); diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index 66fd29b..0e8f126 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -1,52 +1,110 @@ import saveAs from 'file-saver'; +import GPX from 'gpx-parser-builder'; +import { LatLng } from 'leaflet'; -export interface IRoutePoint { - lat: number, - lng: number, -} +type GpxImportTrkPt = { + $: { lat: string; lon: string }[]; + name: string; +}; + +type GpxImportTrkSeg = { + trkpt: { trkpt: GpxImportTrkPt }[]; +}; + +type GpxImportRaw = { + metadata: { name: string }; + trk: { + name: string; + trkseg: GpxImportTrkSeg[]; + }[]; +}; +// export interface IRoutePoint { +// lat: number; +// lng: number; +// } interface IGPXSticker { - latlng: IRoutePoint, - text?: string, + latlng: LatLng; + text?: string; } interface IGetGPXString { - route: Array, - stickers?: Array - title?: string, + route: Array; + stickers?: Array; + title?: string; } -export const getGPXString = ({ route, title, stickers }: IGetGPXString): string => (` +export const getGPXString = ({ + route, + title, + stickers, +}: IGetGPXString): string => ` ${title || 'GPX Track'} - ${ - stickers.reduce((cat, { latlng: { lat, lng }, text }) => ( - `${cat} + ${stickers.reduce( + (cat, { latlng: { lat, lng }, text }) => + `${cat} ${text} generic ${title} - `), '') - } + `, + '' + )} ${title || 'GPX Track'} - ${ - route.reduce((cat, { lat, lng }) => ( - ` ${cat} - ` - ), '') - } + ${route.reduce( + (cat, { lat, lng }) => + ` ${cat} + `, + '' + )} -`); +`; -export const downloadGPXTrack = ({ track, title }: { track: string, title?: string }): void => ( +export const downloadGPXTrack = ({ track, title }: { track: string; title?: string }): void => saveAs( new Blob([track], { type: 'application/gpx+xml;charset=utf-8' }), - `${(title || 'track').replace(/\./ig, ' ')}.gpx` - ) -); + `${(title || 'track').replace(/\./gi, ' ')}.gpx` + ); + +export const importGpxTrack = async (file: File) => { + const reader = new FileReader(); + const content = await new Promise(resolve => { + reader.readAsText(file); + + reader.onload = () => { + resolve(reader.result); + }; + + reader.onerror = () => { + resolve(null); + }; + }); + + const gpx: GpxImportRaw = GPX.parse(content); + console.log(gpx); + + if (!gpx || !gpx.trk) return null; + + const latlngs: LatLng[] = gpx.trk.reduce((trk_res, trk) => { + return trk.trkseg.reduce((trkseg_res, trkseg) => { + return [ + ...trkseg_res, + ...trkseg.trkpt.map(pnt => ({ lat: pnt['$'].lat, lng: pnt['$'].lon })), + ]; + }, trk_res); + }, []); + + return [ + { + name: gpx.metadata.name || '', + latlngs, + }, + ]; +}; diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index eee1a3a..0c75f86 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -3,7 +3,7 @@ import { COLORS, CLIENT } from '~/config/frontend'; import saveAs from 'file-saver'; import { replaceProviderUrl } from '~/constants/providers'; import { STICKERS } from '~/constants/stickers'; -import { ILatLng, IRoute } from '~/redux/map/types'; +import { IRoute } from '~/redux/map/types'; import { IStickerDump } from '~/redux/map/types'; import { IRootState } from '~/redux/user'; import { @@ -12,7 +12,7 @@ import { findDistancePx, middleCoordPx, } from '~/utils/geom'; -import { Point } from 'leaflet'; +import { Point, LatLng, latLng } from 'leaflet'; import { MainMap } from '~/constants/map'; export interface ITilePlacement { @@ -55,14 +55,14 @@ const latLngToTile = (latlng: { return { x: xtile, y: ytile, z: zoom }; }; -const tileToLatLng = (point: { x: number; y: number }): ILatLng => { +const tileToLatLng = (point: { x: number; y: number }): LatLng => { const map = MainMap; const z = map.getZoom(); const lng = (point.x / Math.pow(2, z)) * 360 - 180; const n = Math.PI - (2 * Math.PI * point.y) / Math.pow(2, z); const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))); - return { lat, lng }; + return latLng({ lat, lng }); }; export const getTilePlacement = (): ITilePlacement => { @@ -102,7 +102,7 @@ export const getTilePlacement = (): ITilePlacement => { }; }; -export const getPolyPlacement = (latlngs: ILatLng[]): Point[] => +export const getPolyPlacement = (latlngs: LatLng[]): Point[] => latlngs.length === 0 ? [] : latlngs.map(latlng => (MainMap.latLngToContainerPoint(latlng))); diff --git a/src/utils/simplify.ts b/src/utils/simplify.ts index 37f41ef..0e7616e 100644 --- a/src/utils/simplify.ts +++ b/src/utils/simplify.ts @@ -1,7 +1,7 @@ -import { Map, LineUtil } from 'leaflet'; -import { ILatLng } from "~/redux/map/types"; +import { Map, LineUtil, LatLng } from 'leaflet'; +// import { ILatLng } from "~/redux/map/types"; -export const simplify = ({ map, latlngs }: { map: Map, latlngs: ILatLng[] }): ILatLng[] => { +export const simplify = ({ map, latlngs }: { map: Map, latlngs: LatLng[] }): LatLng[] => { const zoom = 12; const mul = 0.7; // 0 - not simplifying, 1 - very rude. const points = latlngs.map(({ lat, lng }) => map.project({ lat, lng }, zoom)); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..61b8557 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,11004 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/cli@^7.0.0-rc.1": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.3.tgz#121beb7c273e0521eb2feeb3883a2b7435d12328" + integrity sha512-K2UXPZCKMv7KwWy9Bl4sa6+jTNP7JyDiHKzoOiUUygaEDbC60vaargZDnO9oFMvlq8pIKOOyUUgeMYrsaN9djA== + dependencies: + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.1.8" + +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== + dependencies: + "@babel/highlight" "7.0.0-beta.44" + +"@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/compat-data@^7.8.0", "@babel/compat-data@^7.8.1": + version "7.8.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.1.tgz#fc0bbbb7991e4fb2b47e168e60f2cc2c41680be9" + integrity sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw== + dependencies: + browserslist "^4.8.2" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" + integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug== + dependencies: + "@babel/types" "^7.8.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-call-delegate@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" + integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-compilation-targets@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz#2deedc816fd41dca7355ef39fd40c9ea69f0719a" + integrity sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw== + dependencies: + "@babel/compat-data" "^7.8.1" + browserslist "^4.8.2" + invariant "^2.2.4" + levenary "^1.1.0" + semver "^5.5.0" + +"@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" + integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== + dependencies: + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== + dependencies: + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" + integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-replace-supers@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" + integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" + integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== + +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" + integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" + integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" + integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" + integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-destructuring@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" + integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz#15f17bce2fc95c7d59a24b299e83e81cedc22e18" + integrity sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-modules-amd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" + integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" + integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" + integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== + dependencies: + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" + integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz#7890576a13b17325d8b7d44cb37f21dc3bbdda59" + integrity sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q== + dependencies: + "@babel/helper-call-delegate" "^7.8.3" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-regenerator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" + integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typeof-symbol@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz#5cffb216fb25c8c64ba6bf5f76ce49d3ab079f4d" + integrity sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/preset-env@^7.0.0-rc.1": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.3.tgz#dc0fb2938f52bbddd79b3c861a4b3427dd3a6c54" + integrity sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg== + dependencies: + "@babel/compat-data" "^7.8.0" + "@babel/helper-compilation-targets" "^7.8.3" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.8.3" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.8.3" + "@babel/plugin-transform-modules-commonjs" "^7.8.3" + "@babel/plugin-transform-modules-systemjs" "^7.8.3" + "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.3" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.3" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/types" "^7.8.3" + browserslist "^4.8.2" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.0" + semver "^5.5.0" + +"@babel/runtime-corejs3@^7.7.4": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.8.3.tgz#a2445836d0699e5ba77eea2c790ad9ea51e2cd27" + integrity sha512-lrIU4aVbmlM/wQPzhEvzvNJskKyYptuXb0fGC0lTQTupTOYtR2Vqbu6/jf8vTr4M8Wt1nIzxVrSvPI5qESa/xA== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.2" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.4": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1" + integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + +"@babel/template@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" + integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/traverse@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" + integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@babel/types@^7.0.0-beta.49", "@babel/types@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" + integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@jimp/bmp@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.6.8.tgz#8abbfd9e26ba17a47fab311059ea9f7dd82005b6" + integrity sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w== + dependencies: + "@jimp/utils" "^0.6.8" + bmp-js "^0.1.0" + core-js "^2.5.7" + +"@jimp/core@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.6.8.tgz#6a41089792516f6e64a5302d12eb562aa7847c7b" + integrity sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA== + dependencies: + "@jimp/utils" "^0.6.8" + any-base "^1.1.0" + buffer "^5.2.0" + core-js "^2.5.7" + exif-parser "^0.1.12" + file-type "^9.0.0" + load-bmfont "^1.3.1" + mkdirp "0.5.1" + phin "^2.9.1" + pixelmatch "^4.0.2" + tinycolor2 "^1.4.1" + +"@jimp/custom@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.6.8.tgz#0476d7b3f5da3121d98895a2e14f2899e602f2b6" + integrity sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng== + dependencies: + "@jimp/core" "^0.6.8" + core-js "^2.5.7" + +"@jimp/gif@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.6.8.tgz#848dd4e6e1a56ca2b3ce528969e44dfa99a53b14" + integrity sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + omggif "^1.0.9" + +"@jimp/jpeg@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.6.8.tgz#4cad85a6d1e15759acb56bddef29aa3473859f2c" + integrity sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + jpeg-js "^0.3.4" + +"@jimp/plugin-blit@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz#646ebb631f35afc28c1e8908524bc43d1e9afa3d" + integrity sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-blur@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz#7b753ae94f6099103f57c268c3b2679047eefe95" + integrity sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-color@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.6.8.tgz#4101cb1208879b331db6e43ea6b96eaf8dbaedbc" + integrity sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + tinycolor2 "^1.4.1" + +"@jimp/plugin-contain@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz#af95d33b63d0478943374ae15dd2607fc69cad14" + integrity sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-cover@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz#490e3186627a34d93cc015c4169bac9070d6ad17" + integrity sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-crop@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz#ffec8951a2f3eccad1e3cff9afff5326bd980ce7" + integrity sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-displace@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz#89df05ab7daaff6befc190bb8ac54ec8d57e533b" + integrity sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-dither@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz#17e5b9f56575a871e329fef8b388e614b92d84f8" + integrity sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-flip@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz#153df0c677f79d4078bb9e4c1f2ac392b96dc3a1" + integrity sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-gaussian@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz#100abc7ae1f19fe9c09ed41625b475aae7c6093c" + integrity sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-invert@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz#f40bfaa3b592d21ff14ede0e49aabec88048cad0" + integrity sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-mask@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz#e64405f7dacf0672bff74f3b95b724d9ac517f86" + integrity sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-normalize@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz#a0180f2b8835e3638cdc5e057b44ac63f60db6ba" + integrity sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-print@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.6.8.tgz#66309549e01896473111e3a0ad2cee428638bd6e" + integrity sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + load-bmfont "^1.4.0" + +"@jimp/plugin-resize@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz#c26d9a973f7eec51ad9018fcbbac1146f7a73aa0" + integrity sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-rotate@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz#2afda247984eeebed95c1bb1b13ccd3be5973299" + integrity sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugin-scale@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz#5de403345859bb0b30bf3e242dedd8ceb6ecb96c" + integrity sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + +"@jimp/plugins@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.6.8.tgz#5618170a986ced1ea795adcd9376122f2543b856" + integrity sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ== + dependencies: + "@jimp/plugin-blit" "^0.6.8" + "@jimp/plugin-blur" "^0.6.8" + "@jimp/plugin-color" "^0.6.8" + "@jimp/plugin-contain" "^0.6.8" + "@jimp/plugin-cover" "^0.6.8" + "@jimp/plugin-crop" "^0.6.8" + "@jimp/plugin-displace" "^0.6.8" + "@jimp/plugin-dither" "^0.6.8" + "@jimp/plugin-flip" "^0.6.8" + "@jimp/plugin-gaussian" "^0.6.8" + "@jimp/plugin-invert" "^0.6.8" + "@jimp/plugin-mask" "^0.6.8" + "@jimp/plugin-normalize" "^0.6.8" + "@jimp/plugin-print" "^0.6.8" + "@jimp/plugin-resize" "^0.6.8" + "@jimp/plugin-rotate" "^0.6.8" + "@jimp/plugin-scale" "^0.6.8" + core-js "^2.5.7" + timm "^1.6.1" + +"@jimp/png@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.6.8.tgz#ee06cf078b381137ec7206c4bb1b4cfcbe15ca6f" + integrity sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew== + dependencies: + "@jimp/utils" "^0.6.8" + core-js "^2.5.7" + pngjs "^3.3.3" + +"@jimp/tiff@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.6.8.tgz#79bd22ed435edbe29d02a2c8c9bf829f988ebacc" + integrity sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg== + dependencies: + core-js "^2.5.7" + utif "^2.0.1" + +"@jimp/types@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.6.8.tgz#4510eb635cd00b201745d70e38f791748baa7075" + integrity sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A== + dependencies: + "@jimp/bmp" "^0.6.8" + "@jimp/gif" "^0.6.8" + "@jimp/jpeg" "^0.6.8" + "@jimp/png" "^0.6.8" + "@jimp/tiff" "^0.6.8" + core-js "^2.5.7" + timm "^1.6.1" + +"@jimp/utils@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.6.8.tgz#09f794945631173567aa50f72ac28170de58a63d" + integrity sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw== + dependencies: + core-js "^2.5.7" + +"@mapbox/corslite@0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@mapbox/corslite/-/corslite-0.0.7.tgz#29f5b6a188ba946e514bdf0b6401ed4fbe13a39e" + integrity sha1-KfW2oYi6lG5RS98LZAHtT74To54= + +"@mapbox/polyline@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@mapbox/polyline/-/polyline-0.2.0.tgz#6e25980744aa22331f94b645a542c02d3fcfee97" + integrity sha1-biWYB0SqIjMflLZFpULALT/P7pc= + +"@redux-saga/core@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" + integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg== + dependencies: + "@babel/runtime" "^7.6.3" + "@redux-saga/deferred" "^1.1.2" + "@redux-saga/delay-p" "^1.1.2" + "@redux-saga/is" "^1.1.2" + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + redux "^4.0.4" + typescript-tuple "^2.2.1" + +"@redux-saga/deferred@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888" + integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ== + +"@redux-saga/delay-p@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355" + integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g== + dependencies: + "@redux-saga/symbols" "^1.1.2" + +"@redux-saga/is@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e" + integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w== + dependencies: + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + +"@redux-saga/symbols@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d" + integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ== + +"@redux-saga/types@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" + integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== + +"@types/classnames@^2.2.7": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.9.tgz#d868b6febb02666330410fe7f58f3c4b8258be7b" + integrity sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A== + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/geojson@*": + version "7946.0.7" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" + integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/leaflet@^1.4.3": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.5.8.tgz#1c550803672fc5866b8b2c38512009f2b5d4205d" + integrity sha512-qpi5n4LmwenUFZ+VZ7ytRgHK+ZAclIvloL2zoKCmmj244WD2hBcLbUZ6Szvajfe3sIkSYEJ8WZ1p9VYl8tRsMA== + dependencies: + "@types/geojson" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "13.1.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b" + integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A== + +"@types/node@^11.9.0": + version "11.15.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.4.tgz#2c8d58f726cfbbd9b76d179475fd386d650a2fda" + integrity sha512-z7deEbNOPcS7pb7uyaZhbITh18ruGghYh86VmUL2zJPKeu9tEAqF0goQH0dhWamHoBJpkyWroNxPZjzNvbYVCw== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/q@^1.5.1": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + +"@types/ramda@^0.26.39": + version "0.26.40" + resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.26.40.tgz#4fbd3bd6a8583e2aa0830b8942fbace44ecd070a" + integrity sha512-CUmROm0dxHfg5wcB/n1+sEJQxvmdOhJiZiIcCKgWVi1Hd6ffhG6BE0Ej4nHe2vfKGTOkqcTNBjdVfLTJdlH6Hw== + dependencies: + ts-toolbelt "^4.12.0" + +"@types/react@16.8.1": + version "16.8.1" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.1.tgz#b431b104ecc6febda170b718caa9f50be66a6750" + integrity sha512-tD1ETKJcuhANOejRc/p7OgQ16DKnbGi0M3LccelKlPnUCDp2a5koVxZFoRN9HN+A+m84HB5VGN7I+r3nNhS3PA== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + +"@types/xml2js@^0.4.2": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.5.tgz#d21759b056f282d9c7066f15bbf5c19b908f22fa" + integrity sha512-yohU3zMn0fkhlape1nxXG2bLEGZRc1FeqF80RoHaYXJN7uibaauXfhzhOJr1Xh36sn+/tx21QAOf07b/xYVk1w== + dependencies: + "@types/node" "*" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= + +acorn@^5.5.0: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.2.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + +add-dom-event-listener@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" + integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== + dependencies: + object-assign "4.x" + +add-px-to-style@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" + integrity sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo= + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: + version "6.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" + integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +any-base@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" + integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" + integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.0.3, array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +awesome-typescript-loader@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" + integrity sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g== + dependencies: + chalk "^2.4.1" + enhanced-resolve "^4.0.0" + loader-utils "^1.1.0" + lodash "^4.17.5" + micromatch "^3.1.9" + mkdirp "^0.5.1" + source-map-support "^0.5.3" + webpack-log "^1.2.0" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.2.1, aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + +axios@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +axobject-query@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.1.tgz#2a3b1271ec722d48a4cd4b3fcc20c853326a49a7" + integrity sha512-lF98xa/yvy6j3fBHAgQXIYl+J4eZadOSqsPojemUqClzNbBV38wWGpUbQbVEyf4eUF5yF7eHmGgGA2JiHyjeqw== + dependencies: + "@babel/runtime" "^7.7.4" + "@babel/runtime-corejs3" "^7.7.4" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-eslint@^8.2.3: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes= + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^7.1.4: + version "7.1.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" + integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-lodash@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" + integrity sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg== + dependencies: + "@babel/helper-module-imports" "^7.0.0-beta.49" + "@babel/types" "^7.0.0-beta.49" + glob "^7.1.1" + lodash "^4.17.10" + require-package-name "^2.0.1" + +babel-plugin-ramda@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ramda/-/babel-plugin-ramda-2.0.0.tgz#e6708b1637dbb754e0cc0d21cd1c34750b0158c8" + integrity sha512-PZ/6fmNGshCU7Vt33JRWDDSQqZxOsav1DztZ+VBJFOamE3spyoKuIL9Ve0FQd/oXGlH5jHf/WrpCSGn0MR+YVw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + ramda "^0.25.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0= + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-display-name@^6.23.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24= + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-runtime@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0= + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-react@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A= + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.24.1" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE= + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.1, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" + integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +body-parser@1.19.0, body-parser@^1.18.3: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= + dependencies: + hoek "2.x.x" + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.0.0, browserslist@^4.8.2, browserslist@^4.8.3: + version "4.8.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.5.tgz#691af4e327ac877b25e7a3f7ee869c4ef36cdea3" + integrity sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg== + dependencies: + caniuse-lite "^1.0.30001022" + electron-to-chromium "^1.3.338" + node-releases "^1.1.46" + +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.2.0: + version "5.4.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" + integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30001022" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001022.tgz#a7721c26a4af4d8420680079dcd27754be84daf6" + integrity sha512-2RQQgO+yDEaqF4ltwrCja7oZst+FVnXHQLSJgZ678tausEljBq3/U20Fedvze+Hxqm8XLV+9OgGbtdgS7ksnRw== + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001022: + version "1.0.30001022" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz#9eeffe580c3a8f110b7b1742dcf06a395885e4c6" + integrity sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A== + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chokidar@^2.0.2, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.0.1, chownr@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.3, 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== + +clean-css@4.2.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + dependencies: + source-map "~0.6.0" + +clean-webpack-plugin@^0.1.9: + version "0.1.19" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz#ceda8bb96b00fe168e9b080272960d20fdcadd6d" + integrity sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA== + dependencies: + rimraf "^2.6.1" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +clone@^2.1.1, clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= + dependencies: + color-name "^1.0.0" + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@^2.11.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" + integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-classes@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" + integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE= + dependencies: + component-indexof "0.0.3" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +component-indexof@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" + integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ= + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +computed-style@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/computed-style/-/computed-style-0.1.4.tgz#7f344fd8584b2e425bedca4a1afc0e300bb05d74" + integrity sha1-fzRP2FhLLkJb7cpKGvwOMAuwXXQ= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config@^1.24.0: + version "1.31.0" + resolved "https://registry.yarnpkg.com/config/-/config-1.31.0.tgz#ab08aeba6536015d220cd0afe14b3e0501082542" + integrity sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA== + dependencies: + json5 "^1.0.1" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.1.0, convert-source-map@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-parser@~1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.4.tgz#e6363de4ea98c3def9697b93421c09f30cf5d188" + integrity sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw== + dependencies: + cookie "0.3.1" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.6.2: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== + dependencies: + browserslist "^4.8.3" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" + integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== + +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +croppr@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/croppr/-/croppr-2.3.1.tgz#d279e006531240fa8ebf2681e4127ae7c42b074e" + integrity sha512-0rvTl4VmR3I4AahjJPF1u9IlT7ckvjIcgaLnUjYaY+UZsP9oxlVYZWYDuqM3SVCQiaI7DXMjR7wOEYT+mydOFg== + +cross-spawn@6.0.5, cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +css-animation@^1.3.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/css-animation/-/css-animation-1.6.1.tgz#162064a3b0d51f958b7ff37b3d6d4de18e17039e" + integrity sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog== + dependencies: + babel-runtime "6.x" + component-classes "^1.2.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-color-names@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67" + integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^0.28.11: + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" + integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-selector-tokenizer@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" + integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-unit-converter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" + integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" + integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" + integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== + dependencies: + css-tree "1.0.0-alpha.37" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +csstype@^2.2.0: + version "2.6.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431" + integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" + integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.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= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.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= + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +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== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + 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= + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dom-align@^1.7.0: + version "1.10.4" + resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.10.4.tgz#862ae4de0d11d6495c1c8ee1b195427e7caa727d" + integrity sha512-wytDzaru67AmqFOY4B9GUb/hrwWagezoYYK97D/vpK+ezg+cnuZO0Q2gltUPa7KfNmIqfRIYVCF8UhRDEHAmgQ== + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-css@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dom-css/-/dom-css-2.1.0.tgz#fdbc2d5a015d0a3e1872e11472bbd0e7b9e6a202" + integrity sha1-/bwtWgFdCj4YcuEUcrvQ57nmogI= + dependencies: + add-px-to-style "1.0.0" + prefix-style "2.0.1" + to-camel-case "1.0.0" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-urls@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dom-urls/-/dom-urls-1.1.0.tgz#001ddf81628cd1e706125c7176f53ccec55d918e" + integrity sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4= + dependencies: + urijs "^1.16.1" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.0, dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.338, electron-to-chromium@^1.3.47: + version "1.3.340" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" + integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== + +elliptic@^6.0.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enhanced-resolve@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: + 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-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" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.0.5: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-config-airbnb-base@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" + integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA== + dependencies: + eslint-restricted-globals "^0.1.1" + +eslint-config-airbnb@^16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" + integrity sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw== + dependencies: + eslint-config-airbnb-base "^12.1.0" + +eslint-import-resolver-babel-module@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-4.0.0.tgz#1c596f7fb9815050292c8750d523b27a5444b4bf" + integrity sha512-aPj0+pG0H3HCaMD9eRDYEzPdMyKrLE2oNhAzTXd2w86ZBe3s7drSrrPwVTfzO1CBp13FGk8S84oRmZHZvSo0mA== + dependencies: + pkg-up "^2.0.0" + resolve "^1.4.0" + +eslint-import-resolver-node@^0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-import-resolver-webpack@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.9.0.tgz#231ce1578ad5124da5799f029bd33d28137623e3" + integrity sha1-IxzhV4rVEk2leZ8Cm9M9KBN2I+M= + dependencies: + array-find "^1.0.0" + debug "^2.6.8" + enhanced-resolve "~0.9.0" + find-root "^1.1.0" + has "^1.0.1" + interpret "^1.0.0" + is-absolute "^0.2.3" + lodash.get "^4.4.2" + node-libs-browser "^1.0.0 || ^2.0.0" + resolve "^1.4.0" + semver "^5.3.0" + +eslint-loader@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" + integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-module-utils@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" + integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-babel@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023" + integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-plugin-import@^2.11.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz#d749a7263fb6c29980def8e960d380a6aa6aecaa" + integrity sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.1" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.12.0" + +eslint-plugin-jsx-a11y@^6.0.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" + integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== + dependencies: + "@babel/runtime" "^7.4.5" + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" + jsx-ast-utils "^2.2.1" + +eslint-plugin-react@^7.7.0: + version "7.18.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.0.tgz#2317831284d005b30aff8afb7c4e906f13fa8e7e" + integrity sha512-p+PGoGeV4SaZRDsXqdj9OWcOrOpZn8gXoGPcIQTzo2IDMbAKhNDnME9myZWqO3Ic4R3YmwAZ1lDjWl2R2hMUVQ== + dependencies: + array-includes "^3.1.1" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.14.2" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exif-parser@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" + integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastparse@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-loader@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + +file-saver@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.2.tgz#06d6e728a9ea2df2cce2f8d9e84dfcdc338ec17a" + integrity sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw== + +file-type@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" + integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^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" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flat-cache@^1.2.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== + dependencies: + circular-json "^0.3.1" + graceful-fs "^4.1.2" + rimraf "~2.6.2" + write "^0.2.1" + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" + integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== + dependencies: + debug "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.11" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== + dependencies: + bindings "^1.5.0" + nan "^2.12.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== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +global@~4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^11.0.1, globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +gpx-parser-builder@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/gpx-parser-builder/-/gpx-parser-builder-1.0.2.tgz#80c54d06acfa334291490c27ed5edbea7cff1e64" + integrity sha512-zCTGKANSytYLIicVYUUFTYhz3mbDEtIemWZvC3Vb0j8DhwPMbDSCIl9blMClxSLrr7gGbwLAk1nhj3Z41oC5sw== + dependencies: + isomorphic-xml2js "~0.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +harmony-reflect@^1.4.6: + version "1.6.1" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" + integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.1, 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== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +he@1.2.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +history@^4.7.2: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= + +hoist-non-react-statics@^2.5.0: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +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" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + +html-minifier@^3.2.3: + version "3.5.21" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + dependencies: + postcss "^6.0.1" + +identity-obj-proxy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.3: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +import-local@2.0.0, import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@1.2.0, interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== + +ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-absolute@^0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + integrity sha1-IN5p89uULvLYe5wto28XIjWxtes= + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + 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" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +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== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + +is-regex@^1.0.4, 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@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + integrity sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU= + dependencies: + is-unc-path "^0.1.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= + dependencies: + html-comment-regex "^1.1.0" + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +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== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + integrity sha1-arBTpyVzwQJQ/0FqOBTDUXivObk= + dependencies: + unc-path-regex "^0.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" + integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isomorphic-xml2js@~0.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/isomorphic-xml2js/-/isomorphic-xml2js-0.1.3.tgz#d7fd2b30a28b1f39658e4754cc51bb156856f374" + integrity sha512-dIkT2U9ritKVWF/HfHfGwm5tTnlMnknYsv7l12oJlQQgOV2CNV65pX+FHy6HFL9YP8q0JcrlNQAFRJIN2agUmQ== + dependencies: + "@types/xml2js" "^0.4.2" + xml2js "^0.4.19" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +jimp@^0.6.0: + version "0.6.8" + resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.6.8.tgz#63074984337cc469cd4030946e503e7c02a18b5c" + integrity sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q== + dependencies: + "@jimp/custom" "^0.6.8" + "@jimp/plugins" "^0.6.8" + "@jimp/types" "^0.6.8" + core-js "^2.5.7" + regenerator-runtime "^0.13.3" + +jpeg-js@^0.3.4: + version "0.3.6" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.6.tgz#c40382aac9506e7d1f2d856eb02f6c7b2a98b37c" + integrity sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw== + +js-base64@^2.1.9: + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" + integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + +js-md5@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2" + integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ== + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1, js-yaml@^3.9.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +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" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" + integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== + dependencies: + array-includes "^3.0.3" + object.assign "^4.1.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +leaflet-editable-polyline@muerwre/leaflet-editable-polyline#master: + version "1.0.7" + resolved "https://codeload.github.com/muerwre/leaflet-editable-polyline/tar.gz/a8e481464d9c286c3a0a1392f1f96f7e2af40489" + +leaflet-editable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/leaflet-editable/-/leaflet-editable-1.2.0.tgz#a3a01001764ba58ea923381ee6a1c814708a0b84" + integrity sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ== + +leaflet-geometryutil@^0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/leaflet-geometryutil/-/leaflet-geometryutil-0.9.1.tgz#1dd379d7923a8a625266181c1983910a8e8dfc02" + integrity sha512-DKYLzFBsEcmZSl1fXLM+Pd+7t5IHmY6Ps7XeSnWL1ngr1qxQfcVzhkJT9gxfZrmFWiL96c23xQ0aLcHocV2tVA== + dependencies: + leaflet ">=0.7.0" + +leaflet-routing-machine@muerwre/leaflet-routing-machine#no-osrm-text: + version "3.2.8" + resolved "https://codeload.github.com/muerwre/leaflet-routing-machine/tar.gz/25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b" + dependencies: + "@mapbox/corslite" "0.0.7" + "@mapbox/polyline" "^0.2.0" + osrm-text-instructions "^0.11.5" + +leaflet.markercluster@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.4.1.tgz#b53f2c4f2ca7306ddab1dbb6f1861d5e8aa6c5e5" + integrity sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw== + +leaflet@>=0.7.0, leaflet@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.6.0.tgz#aecbb044b949ec29469eeb31c77a88e2f448f308" + integrity sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ== + +less-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" + integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg== + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^3.0.0" + +less-middleware@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/less-middleware/-/less-middleware-2.2.1.tgz#41bfc801b01acadb39bd380feda7fcc6a1da7b8c" + integrity sha512-1fDsyifwRGObMmqaZhkTDAmVnvgpZmdf6ZTSCbVv9vt+xhlzOz5TDNlLCbITsusEB3d0OKOEadwN9ic3PyOWCg== + dependencies: + less "~2.7.1" + mkdirp "~0.5.1" + node.extend "~2.0.0" + +less@^3.8.1: + version "3.10.3" + resolved "https://registry.yarnpkg.com/less/-/less-3.10.3.tgz#417a0975d5eeecc52cff4bcfa3c09d35781e6792" + integrity sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow== + dependencies: + clone "^2.1.2" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.4.1" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.83.0" + source-map "~0.6.0" + +less@~2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" + integrity sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ== + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.2.11" + mkdirp "^0.5.0" + promise "^7.1.1" + request "2.81.0" + source-map "^0.5.3" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.0.tgz#fc146fe75f32dc483a0a2c64aef720f602cd6210" + integrity sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ== + dependencies: + leven "^3.1.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +line-height@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.1.1.tgz#e86705fbf0a6f50607aed65500d69db2d9db37e2" + integrity sha1-6GcF+/Cm9QYHrtZVANadstnbN+I= + dependencies: + computed-style "~0.1.3" + +load-bmfont@^1.3.1, load-bmfont@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" + integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g== + dependencies: + buffer-equal "0.0.1" + mime "^1.3.4" + parse-bmfont-ascii "^1.0.3" + parse-bmfont-binary "^1.0.5" + parse-bmfont-xml "^1.1.4" + phin "^2.9.1" + xhr "^2.0.1" + xtend "^4.0.0" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" + integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "0.5.1" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +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.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.template@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +"lodash@>=3.5 <5", lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +loglevel@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" + integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== + +loglevelnext@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== + dependencies: + es6-symbol "^3.1.1" + object.assign "^4.1.0" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.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== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@^1.1.1: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA= + +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" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.7: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@1.6.0, mime@^1.2.11, mime@^1.3.4, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.0, mime@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +mini-css-extract-plugin@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0" + integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.0.8, nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + +node-releases@^1.1.46: + version "1.1.47" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" + integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== + dependencies: + semver "^6.3.0" + +node.extend@~2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-2.0.2.tgz#b4404525494acc99740f3703c496b7d5182cc6cc" + integrity sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ== + dependencies: + has "^1.0.3" + is "^3.2.1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.7" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" + integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +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" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +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.11, object-keys@^1.0.12, 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== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.1.0, object.entries@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +omggif@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" + integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572" + integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.0.0, os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +osrm-text-instructions@^0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/osrm-text-instructions/-/osrm-text-instructions-0.11.5.tgz#9eed3614a977e0eba0e46a7ddd65e899b634c201" + integrity sha512-EKCfIXhJHsYQLcuctymvSVH7ulRXx5sGb2MdZL3NzD6XhRVZRkqwRicd9/QI27A5oXW4ojOEJ81RGay7bO6dbA== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pako@^1.0.5, pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-bmfont-ascii@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" + integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= + +parse-bmfont-binary@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" + integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= + +parse-bmfont-xml@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" + integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== + dependencies: + xml-parse-from-string "^1.0.0" + xml2js "^0.4.5" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@^1.0.1, path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +phin@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" + integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pixelmatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= + dependencies: + pngjs "^3.0.0" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +pngjs@^3.0.0, pngjs@^3.3.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +portfinder@^1.0.25: + version "1.0.25" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" + integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" + +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" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-calc@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" + integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== + dependencies: + css-unit-converter "^1.1.1" + postcss "^7.0.5" + postcss-selector-parser "^5.0.0-rc.4" + postcss-value-parser "^3.3.1" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= + dependencies: + postcss "^5.0.14" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= + dependencies: + postcss "^5.0.4" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= + dependencies: + postcss "^5.0.14" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= + dependencies: + postcss "^5.0.16" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== + dependencies: + postcss "^5.0.4" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= + dependencies: + postcss "^5.0.4" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= + dependencies: + postcss "^5.0.5" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= + dependencies: + postcss "^5.0.4" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.5: + version "7.0.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" + integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prefix-style@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" + integrity sha1-ZrupqHDP2jCKXcIOhekSCTLJWgY= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0, prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk= + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proxy-addr@~2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" + integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + +pt-sans-cyrillic@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/pt-sans-cyrillic/-/pt-sans-cyrillic-0.0.4.tgz#3ed020e2b6f77aca5313df0d60052298d15dc077" + integrity sha512-QbXgUHp5pbSbxbLdfpe5/MzuYPufqv36UMQUUI7QwceaaCJA8NQilysjlexjHLyK0GFv7NB5kl6ZAcIMBBBRXA== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +raf@^3.1.0, raf@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +raleway-cyrillic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raleway-cyrillic/-/raleway-cyrillic-4.0.2.tgz#1dc2b3aea6302b08536ecee3188c92d258b88ce1" + integrity sha1-HcKzrqYwKwhTbs7jGIyS0li4jOE= + +ramda@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" + integrity sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ== + +ramda@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc-align@^2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-2.4.5.tgz#c941a586f59d1017f23a428f0b468663fb7102ab" + integrity sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw== + dependencies: + babel-runtime "^6.26.0" + dom-align "^1.7.0" + prop-types "^15.5.8" + rc-util "^4.0.4" + +rc-animate@2.x: + version "2.10.2" + resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.10.2.tgz#217fdc76ff26cbf425a5caf87cc8a36ba4598456" + integrity sha512-cE/A7piAzoWFSgUD69NmmMraqCeqVBa51UErod8NS3LUEqWfppSVagHfa0qHAlwPVPiIBg3emRONyny3eiH0Dg== + dependencies: + babel-runtime "6.x" + classnames "^2.2.6" + css-animation "^1.3.2" + prop-types "15.x" + raf "^3.4.0" + rc-util "^4.15.3" + react-lifecycles-compat "^3.0.4" + +rc-slider@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.5.0.tgz#6fae97d8ba59a012af69a00409f21925b8954cf5" + integrity sha512-dw1kA7Dr6GOmPZFsy+yMxVyqmckeUtYVdfNOdQcI9O8mXkoCwlxXolMK9bW/TTlXCc8ztaXkJkyTVXl/Gkg5Tw== + dependencies: + babel-runtime "6.x" + classnames "^2.2.5" + prop-types "^15.5.4" + rc-tooltip "^3.7.0" + rc-util "^4.0.4" + shallowequal "^1.0.1" + warning "^3.0.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.2: + version "2.6.5" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-2.6.5.tgz#140a857cf28bd0fa01b9aecb1e26a50a700e9885" + integrity sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw== + dependencies: + babel-runtime "6.x" + classnames "^2.2.6" + prop-types "15.x" + rc-align "^2.4.0" + rc-animate "2.x" + rc-util "^4.4.0" + react-lifecycles-compat "^3.0.4" + +rc-util@^4.0.4, rc-util@^4.15.3, rc-util@^4.4.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.19.0.tgz#f3b5e3a02cc0a667d127784068e1236c095dbcbf" + integrity sha512-mptALlLwpeczS3nrv83DbwJNeupolbuvlIEjcvimSiWI8NUBjpF0HgG3kWp1RymiuiRCNm9yhaXqDz0a99dpgQ== + dependencies: + add-dom-event-listener "^1.1.0" + babel-runtime "6.x" + prop-types "^15.5.10" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dom@16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4" + integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.13.1" + +"react-expandable-textarea@github:muerwre/react-expandable-textarea": + version "0.0.1" + resolved "https://codeload.github.com/muerwre/react-expandable-textarea/tar.gz/0cbcbbd875439090a2d48e711da241f2a83dd6b2" + dependencies: + classnames "^2.2.6" + +react-hot-loader@^4.1.1: + version "4.12.19" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.19.tgz#99a1c763352828f404fa51cd887c5e16bb5b74d1" + integrity sha512-p8AnA4QE2GtrvkdmqnKrEiijtVlqdTIDCHZOwItkI9kW51bt5XnQ/4Anz8giiWf9kqBpEQwsmnChDCAFBRyR/Q== + dependencies: + fast-levenshtein "^2.0.6" + global "^4.3.0" + hoist-non-react-statics "^3.3.0" + loader-utils "^1.1.0" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + source-map "^0.7.3" + +react-infinite-scroller@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz#f67eaec4940a4ce6417bebdd6e3433bfc38826e9" + integrity sha512-/oOa0QhZjXPqaD6sictN2edFMsd3kkMiE19Vcz5JDgHpzEJVqYcmq+V3mkwO88087kvKGe1URNksHEOt839Ubw== + dependencies: + prop-types "^15.5.8" + +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + 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-lifecycles-compat@^3.0.0, 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" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-motion@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" + integrity sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ== + dependencies: + performance-now "^0.2.0" + prop-types "^15.5.8" + raf "^3.1.0" + +react-rangeslider@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/react-rangeslider/-/react-rangeslider-2.2.0.tgz#4362b01f4f5a455f0815d371d496f69ca4c6b5aa" + integrity sha512-5K7Woa+cyqZ5wiW5+KhqGV+3+FiFxGKQ9rUxTMh52sObXVYEeBbfxFrp1eBvS8mRIxnUbHz9ppnFP0LhwOyNeg== + dependencies: + classnames "^2.2.3" + resize-observer-polyfill "^1.4.2" + +react-redux@^5.0.7: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" + integrity sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q== + dependencies: + "@babel/runtime" "^7.1.2" + hoist-non-react-statics "^3.3.0" + invariant "^2.2.4" + loose-envify "^1.1.0" + prop-types "^15.6.1" + react-is "^16.6.0" + react-lifecycles-compat "^3.0.0" + +react-router@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" + integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg== + dependencies: + history "^4.7.2" + hoist-non-react-statics "^2.5.0" + invariant "^2.2.4" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.1" + warning "^4.0.1" + +react-scrollbar@^0.5.4: + version "0.5.6" + resolved "https://registry.yarnpkg.com/react-scrollbar/-/react-scrollbar-0.5.6.tgz#bd57b45714f8d70e56813fe299d7fb3a2e42a27b" + integrity sha512-TsSLsuovOlxmfTxY9bRjRUfQjycvfs73L4gz7yE+2D8Qs7U3zhwbGS0lj0JScCDipcyn7EX66LsaI00cU3aRSQ== + dependencies: + config "^1.24.0" + line-height "^0.1.1" + react-motion "^0.5.2" + +react@16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a" + integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.13.1" + +reactrangeslider@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/reactrangeslider/-/reactrangeslider-3.0.6.tgz#5f3e1cef24fd3065322d4c01a0010199910f3737" + integrity sha1-Xz4c7yT9MGUyLUwBoAEBmZEPNzc= + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606" + integrity sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" + integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== + dependencies: + balanced-match "^1.0.0" + +redux-persist@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-5.10.0.tgz#5d8d802c5571e55924efc1c3a9b23575283be62b" + integrity sha512-sSJAzNq7zka3qVHKce1hbvqf0Vf5DuTVm7dr4GtsqQVOexnrvbV47RWFiPxQ8fscnyiuWyD2O92DOxPl0tGCRg== + +redux-saga@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.1.3.tgz#9f3e6aebd3c994bbc0f6901a625f9a42b51d1112" + integrity sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw== + dependencies: + "@redux-saga/core" "^1.1.3" + +redux@^4.0.1, redux@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +reduxsauce@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/reduxsauce/-/reduxsauce-1.1.2.tgz#fd5f2d8564dfd3e95754c3c7ccc1a5ef4d8be628" + integrity sha512-Z/LH/rwEVvxXiBGMrLOytrqXVDcWaVvt2wNhgycLy4WKEx2WDqKeukog711nCPMIrz9WrzD+pZUBGGt49uicWg== + dependencies: + ramda "^0.26.1" + +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" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== + dependencies: + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + 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" + +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" + integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +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= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@^2.83.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +require-package-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.4.2: + 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" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.4.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" + integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.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" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.13.1: + version "0.13.6" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" + integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +scrypt@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" + integrity sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0= + dependencies: + nan "^2.0.8" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +serviceworker-cache-polyfill@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb" + integrity sha1-3hnuc77yGrPAdAo3sz22JGS6ves= + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallowequal@^1.0.1, 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" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= + dependencies: + hoek "2.x.x" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "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.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "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.3: + 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.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" + integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== + dependencies: + safe-buffer "^5.1.1" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +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, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" + integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852" + integrity sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.5" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@6.1.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +sw-precache-webpack-plugin@^0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.5.tgz#9b53f65a4966e3adc298e256b3cef7a55c73fdfd" + integrity sha512-K6E52DbYyzGNXGyv2LhI2Duomr3t/2FFMmnGdHZ1Ruk3ulFHDMASJtg3WpA3CXlWODZx189tTaOIO5mWkSKyVg== + dependencies: + del "^3.0.0" + sw-precache "^5.2.1" + uglify-es "^3.3.9" + +sw-precache@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.2.1.tgz#06134f319eec68f3b9583ce9a7036b1c119f7179" + integrity sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw== + dependencies: + dom-urls "^1.1.0" + es6-promise "^4.0.5" + glob "^7.1.1" + lodash.defaults "^4.2.0" + lodash.template "^4.4.0" + meow "^3.7.0" + mkdirp "^0.5.1" + pretty-bytes "^4.0.2" + sw-toolbox "^3.4.0" + update-notifier "^2.3.0" + +sw-toolbox@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5" + integrity sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U= + dependencies: + path-to-regexp "^1.0.1" + serviceworker-cache-polyfill "^4.0.0" + +symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tapable@^0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q= + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4.4.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.6.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" + integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throttle-debounce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" + integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +timm@^1.6.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd" + integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw== + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-invariant@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" + integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tinycolor2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-camel-case@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-camel-case/-/to-camel-case-1.0.0.tgz#1a56054b2f9d696298ce66a60897322b6f423e46" + integrity sha1-GlYFSy+daWKYzmamCJcyK29CPkY= + dependencies: + to-space-case "^1.0.0" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-no-case@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" + integrity sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-space-case@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-space-case/-/to-space-case-1.0.0.tgz#b052daafb1b2b29dc770cea0163e5ec0ebc9fc17" + integrity sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc= + dependencies: + to-no-case "^1.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tough-cookie@~2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== + dependencies: + punycode "^1.4.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +ts-node@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" + integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "3.1.1" + +ts-toolbelt@^4.12.0: + version "4.14.6" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-4.14.6.tgz#9a232f62276caeee4fa9e81e0c4bffa047de0765" + integrity sha512-SONcnRd93+LuYGfn/CZg5A5qhCODohZslAVZKHHu5bnwUxoXLqd2k2VIdwRUXYfKnY+UCeNbI2pTPz+Dno6Mpg== + +tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tt-react-custom-scrollbars@^4.2.1-tt2: + version "4.2.1-tt2" + resolved "https://registry.yarnpkg.com/tt-react-custom-scrollbars/-/tt-react-custom-scrollbars-4.2.1-tt2.tgz#574b2b38e5f1462c001916e910fc410a302d72de" + integrity sha512-gMEVHHOClNJXM1d/p4PrLdXtCU2JzWRtcZdzUkXgck8sgzkxwFwSDNc3scnTk21sSKG2GSgf7G54sboXwsMVlg== + dependencies: + dom-css "^2.0.0" + prop-types "^15.5.10" + raf "^3.1.0" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typeface-pt-sans@0.0.54: + version "0.0.54" + resolved "https://registry.yarnpkg.com/typeface-pt-sans/-/typeface-pt-sans-0.0.54.tgz#b6d5a409b2ee618b961f1116b86c421a18a7efd0" + integrity sha512-uvf3OIiTRXBly8iXD09iNZcLndJ89iGCyzWh4YzxdL+OMXPZxROupW8OR4JYo1RRfhzCdvebE6W/KrKDnAbdmw== + +typesafe-actions@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/typesafe-actions/-/typesafe-actions-3.4.0.tgz#cdf925941eafc75a659ebc2d584b673b86a1a5ab" + integrity sha512-FW6f61NEe8B8vDftLs3vFMLzyROvqlDS6jhbc2j/fPlCZ6MsY3V4bE4i83uPGfy7Kvvq70ePtsb4nPes9ROXqw== + +typescript-compare@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" + integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== + dependencies: + typescript-logic "^0.0.0" + +typescript-logic@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" + integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== + +typescript-tuple@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" + integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== + dependencies: + typescript-compare "^0.0.2" + +typescript@^3.7.4: + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== + +uglify-es@^3.3.4, uglify-es@^3.3.9: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +uglifyjs-webpack-plugin@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" + integrity sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw== + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.0, unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-notifier@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urijs@^1.16.1: + version "1.19.2" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.2.tgz#f9be09f00c4c5134b7cb3cf475c1dd394526265a" + integrity sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w== + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +utif@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759" + integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg== + dependencies: + pako "^1.0.5" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" + integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +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: + 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" + +watchpack@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-cli@^3.2.3: + version "3.3.10" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" + integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.1.14: + version "3.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz#1ff3e5cccf8e0897aa3f5909c654e623f69b1c0e" + integrity sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.2.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.6" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.25" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.19" + sockjs-client "1.4.0" + spdy "^4.0.1" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "12.0.5" + +webpack-git-hash@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/webpack-git-hash/-/webpack-git-hash-1.0.2.tgz#03f0663fdfc93bcfae55a333dae27dde7eb4b6da" + integrity sha1-A/BmP9/JO8+uVaMz2uJ93n60tto= + +webpack-log@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" + integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + object.entries "^1.1.0" + tapable "^1.0.0" + +webpack-pwa-manifest@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/webpack-pwa-manifest/-/webpack-pwa-manifest-4.1.1.tgz#f9fb9880e82b564026253b30dcbded2858a8b8ea" + integrity sha512-jnQsbU0O56OUATDPBKePe5HHoKfSN5zSKAqiSbD9JfIOXlfsHdja4+19RNy2uj//WX1byFZz2ZAdRtrelKPE/Q== + dependencies: + css-color-names "^1.0.0" + jimp "^0.6.0" + mime "^2.4.0" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.6.0: + version "4.41.5" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" + integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +worker-farm@^1.5.2, worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + +xhr@^2.0.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" + integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== + dependencies: + global "~4.3.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xml-parse-from-string@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" + integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= + +xml2js@^0.4.19, xml2js@^0.4.5: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.1.0: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.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 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 3ffba2499432ddc9b2dcf834188008c43b79ba51 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 24 Jan 2020 17:00:23 +0700 Subject: [PATCH 202/320] better gpx route error handling --- src/redux/editor/sagas.ts | 16 +++++++++------- src/utils/gpx.ts | 16 ++++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index efb33da..8e324eb 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -384,13 +384,15 @@ function* uploadGpx({ file }: ReturnType) { editorSetGpx({ list: [ ...list, - ...gpx.map(item => ({ - enabled: true, - latlngs: item.latlngs, - color: getRandomColor(), - name: item.name || `Track #${list.length + 1}`, - id: uuid() as string, - })), + ...gpx + .filter(item => item.latlngs && item.latlngs.length) + .map(item => ({ + enabled: true, + latlngs: item.latlngs, + color: getRandomColor(), + name: item.name || `Track #${list.length + 1}`, + id: uuid() as string, + })), ], }) ); diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index 0e8f126..4134b8e 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -93,12 +93,16 @@ export const importGpxTrack = async (file: File) => { if (!gpx || !gpx.trk) return null; const latlngs: LatLng[] = gpx.trk.reduce((trk_res, trk) => { - return trk.trkseg.reduce((trkseg_res, trkseg) => { - return [ - ...trkseg_res, - ...trkseg.trkpt.map(pnt => ({ lat: pnt['$'].lat, lng: pnt['$'].lon })), - ]; - }, trk_res); + return trk.trkseg + ? trk.trkseg.reduce((trkseg_res, trkseg) => { + return trkseg.trkpt + ? [ + ...trkseg_res, + ...trkseg.trkpt.map(pnt => ({ lat: pnt['$'].lat, lng: pnt['$'].lon })), + ] + : trkseg_res; + }, trk_res) + : trk_res; }, []); return [ From 460440ea24b9ec023c211ba387e967081034486f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 24 Jan 2020 17:18:46 +0700 Subject: [PATCH 203/320] fixed dialog width for micro screens --- src/styles/panel.less | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/styles/panel.less b/src/styles/panel.less index 3785661..20f47f0 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -48,7 +48,7 @@ touch-action: none; transition: transform 0.25s, opacity 0.25s; z-index: -1; - + &.active { opacity: 1; transform: translate(0, 0); @@ -126,7 +126,8 @@ } } - &.disabled, &.inactive { + &.disabled, + &.inactive { color: #999999; svg { @@ -221,7 +222,8 @@ } } -.panel button, .tooltip-container { +.panel button, +.tooltip-container { position: relative; &:hover .panel-tooltip { @@ -284,15 +286,20 @@ width: 100%; max-width: 500px; } - + &.top { bottom: auto; top: 52px; } - &.left, &__left { + &.left, + &__left { right: auto; left: 10px; + + @media (max-width: @micro_breakpoint) { + left: 68px; + } } .helper:first-child { @@ -310,16 +317,28 @@ &__big { width: calc(100% - 20px); max-width: 620px; + + @media (max-width: @micro_breakpoint) { + width: calc(100% - 78px); + } } &__medium { width: calc(100% - 20px); max-width: 417px; + + @media (max-width: @micro_breakpoint) { + width: calc(100% - 78px); + } } &__small { width: calc(100% - 20px); max-width: 324px; + + @media (max-width: @micro_breakpoint) { + width: calc(100% - 78px); + } } } @@ -404,7 +423,7 @@ border: none; outline: none; cursor: pointer; - + svg { margin-right: 0; } @@ -695,7 +714,7 @@ opacity: 0; align-items: flex-start; - @media(max-width: @mobile_breakpoint) { + @media (max-width: @mobile_breakpoint) { display: none; } @@ -766,10 +785,10 @@ position: fixed; bottom: 53px; left: 10px; - width: 272px + width: 272px; } .nominatim-search-input { padding-left: 10px; flex: 1; -} \ No newline at end of file +} From 871f9bb8a2cd229d2489f69c49ff287c110b9c1d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 24 Jan 2020 17:27:31 +0700 Subject: [PATCH 204/320] fixed gpx dialog paddings --- src/styles/gpx.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/styles/gpx.less b/src/styles/gpx.less index 5305209..2b47f32 100644 --- a/src/styles/gpx.less +++ b/src/styles/gpx.less @@ -9,7 +9,7 @@ align-items: center; justify-content: flex-start; flex-direction: row; - padding: 10px; + padding: 5px 10px; min-width: 0; &_disabled { @@ -59,7 +59,7 @@ padding: 10px; & > * { - margin: 5px 0; + margin: 2.5px 0; &:last-child { margin-bottom: 0; From c4aede58339f0f7dc7ec3f0f072b03c10773fd34 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 24 Jan 2020 17:37:49 +0700 Subject: [PATCH 205/320] changing gpx color --- src/components/dialogs/GpxDialog.tsx | 13 ++++++++++++- src/components/gpx/GpxDialogRow.tsx | 5 +++-- src/map/GpxPolyline/index.tsx | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/dialogs/GpxDialog.tsx b/src/components/dialogs/GpxDialog.tsx index a8d6ffa..41cb3db 100644 --- a/src/components/dialogs/GpxDialog.tsx +++ b/src/components/dialogs/GpxDialog.tsx @@ -66,6 +66,16 @@ const GpxDialogUnconnected: FC = ({ [gpx, editorSetGpx] ); + const onRouteColor = useCallback( + index => { + if (!gpx.enabled) return; + editorSetGpx({ + list: gpx.list.map((el, i) => (i !== index ? el : { ...el, color: getRandomColor() })), + }); + }, + [gpx, editorSetGpx] + ); + const toggleGpx = useCallback(() => { editorSetGpx({ enabled: !gpx.enabled }); }, [gpx, editorSetGpx]); @@ -83,7 +93,7 @@ const GpxDialogUnconnected: FC = ({ const addCurrent = useCallback(() => { if (!route.length) return; - const { path } = getUrlData() + const { path } = getUrlData(); editorSetGpx({ list: [ @@ -115,6 +125,7 @@ const GpxDialogUnconnected: FC = ({ onRouteDrop={onRouteDrop} onFocusRoute={onFocusRoute} onRouteToggle={onRouteToggle} + onRouteColor={onRouteColor} /> ))} diff --git a/src/components/gpx/GpxDialogRow.tsx b/src/components/gpx/GpxDialogRow.tsx index 0075c28..cbfc432 100644 --- a/src/components/gpx/GpxDialogRow.tsx +++ b/src/components/gpx/GpxDialogRow.tsx @@ -12,12 +12,13 @@ interface IProps { onFocusRoute: (i: number) => void onRouteDrop: (i: number) => void onRouteToggle: (i: number) => void + onRouteColor: (i: number) => void } -const GpxDialogRow: FC = ({ item, index, enabled, onRouteToggle, onFocusRoute, onRouteDrop }) => { +const GpxDialogRow: FC = ({ item, index, enabled, onRouteToggle, onFocusRoute, onRouteDrop, onRouteColor }) => { return (
      -
      +
      onRouteColor(index)}/>
      onFocusRoute(index)}> {item.name} diff --git a/src/map/GpxPolyline/index.tsx b/src/map/GpxPolyline/index.tsx index a4ba398..560ba5d 100644 --- a/src/map/GpxPolyline/index.tsx +++ b/src/map/GpxPolyline/index.tsx @@ -20,7 +20,7 @@ const GpxPolyline: FC = ({ latlngs, color }) => { setLayer(item); return () => MainMap.removeLayer(item); - }, [MainMap]); + }, [MainMap, color, latlngs]); useEffect(() => { if (!layer) return; From 5604d8716b0e25b221d6406a85b97ecd7429b532 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 24 Jan 2020 17:48:07 +0700 Subject: [PATCH 206/320] faster track redraw --- src/map/GpxPolyline/index.tsx | 4 ++-- src/styles/gpx.less | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/map/GpxPolyline/index.tsx b/src/map/GpxPolyline/index.tsx index 560ba5d..c870d49 100644 --- a/src/map/GpxPolyline/index.tsx +++ b/src/map/GpxPolyline/index.tsx @@ -20,13 +20,13 @@ const GpxPolyline: FC = ({ latlngs, color }) => { setLayer(item); return () => MainMap.removeLayer(item); - }, [MainMap, color, latlngs]); + }, [MainMap]); useEffect(() => { if (!layer) return; layer.setLatLngs(latlngs); - layer.options.color = color; + layer.setStyle({ color }); }, [latlngs, layer, color]); return null; diff --git a/src/styles/gpx.less b/src/styles/gpx.less index 2b47f32..f46c62c 100644 --- a/src/styles/gpx.less +++ b/src/styles/gpx.less @@ -52,6 +52,11 @@ width: 8px; height: 8px; border-radius: 100%; + cursor: pointer; + + // span { + + // } } } From f41078b7698aaa15eaecf9f811987aca7fcbe6c7 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 24 Jan 2020 18:08:34 +0700 Subject: [PATCH 207/320] printing gpx tracks --- src/map/GpxPolyline/index.tsx | 3 ++- src/redux/editor/sagas.ts | 15 +++++++++++++++ src/utils/dom.ts | 2 +- src/utils/renderer.ts | 28 ++++++++++++++++++++++------ 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/map/GpxPolyline/index.tsx b/src/map/GpxPolyline/index.tsx index c870d49..72bd459 100644 --- a/src/map/GpxPolyline/index.tsx +++ b/src/map/GpxPolyline/index.tsx @@ -14,8 +14,9 @@ const GpxPolyline: FC = ({ latlngs, color }) => { const item = new Polyline([], { color, stroke: true, - opacity: 0.4, + opacity: 1, weight: 9, + dashArray: [12,12], }).addTo(MainMap); setLayer(item); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 8e324eb..8c8ad71 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -118,6 +118,7 @@ function* getRenderData() { yield put(editorSetRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); const { route, stickers, provider }: ReturnType = yield select(selectMap); + const gpx: ReturnType = yield select(selectEditorGpx); const { distance }: ReturnType = yield select(selectEditor); const canvas = document.getElementById('renderer'); @@ -137,6 +138,20 @@ function* getRenderData() { yield composeImages({ geometry, images, ctx }); yield composePoly({ points, ctx }); + + gpx.list.forEach(item => { + if (!gpx.enabled || !item.enabled || !item.latlngs.length) return; + + composePoly({ + points: getPolyPlacement(item.latlngs), + ctx, + color: item.color, + opacity: 0.5, + weight: 9, + dash: [12, 12], + }); + }); + yield composeArrows({ points, ctx }); yield composeDistMark({ ctx, points, distance }); yield composeStickers({ stickers: sticker_points, ctx }); diff --git a/src/utils/dom.ts b/src/utils/dom.ts index ebcb930..16ff712 100644 --- a/src/utils/dom.ts +++ b/src/utils/dom.ts @@ -10,5 +10,5 @@ export const getStyle = (oElm: any, strCssRule: string): string => { export const getRandomColor = () => { - return `hsl(${(Math.floor(Math.random() * 360))}, 100%, 50%)` + return `hsla(${(Math.floor(Math.random() * 360))}, 100%, 50%, 0.4)` } \ No newline at end of file diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 0c75f86..9235ed2 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -170,9 +170,16 @@ export const composeImages = ({ export const composePoly = ({ points, ctx, + color = 'gradient', + weight = CLIENT.STROKE_WIDTH, + dash = null, }: { points: Point[]; ctx: CanvasRenderingContext2D; + color?: string; + opacity?: number; + weight?: number; + dash?: number[]; }): void => { if (points.length === 0) return; @@ -181,10 +188,9 @@ export const composePoly = ({ let minY = points[0].y; let maxY = points[0].y; - ctx.strokeStyle = 'red'; ctx.lineCap = 'round'; ctx.lineJoin = 'round'; - ctx.lineWidth = CLIENT.STROKE_WIDTH + 0.5; + ctx.lineWidth = weight + 0.5; ctx.beginPath(); ctx.moveTo(points[0].x, points[0].y); @@ -199,11 +205,21 @@ export const composePoly = ({ if (points[i].y > maxY) maxY = points[i].y; } - const gradient = ctx.createLinearGradient(minX, minY, minX, maxY); - gradient.addColorStop(0, COLORS.PATH_COLOR[0]); - gradient.addColorStop(1, COLORS.PATH_COLOR[1]); + if (color === 'gradient') { - ctx.strokeStyle = gradient; + const gradient = ctx.createLinearGradient(minX, minY, minX, maxY); + gradient.addColorStop(0, COLORS.PATH_COLOR[0]); + gradient.addColorStop(1, COLORS.PATH_COLOR[1]); + + ctx.strokeStyle = gradient; + } else { + ctx.strokeStyle = color; + } + + if (dash) { + ctx.setLineDash([12,12]); + } + ctx.stroke(); ctx.closePath(); }; From 5ceda71589f7e2425f7582754d79842404a692d6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 27 Jan 2020 11:53:21 +0700 Subject: [PATCH 208/320] gpx tracks not printable now --- src/map/GpxPolyline/index.tsx | 4 ++-- src/redux/editor/sagas.ts | 23 ++++++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/map/GpxPolyline/index.tsx b/src/map/GpxPolyline/index.tsx index 72bd459..eb8d696 100644 --- a/src/map/GpxPolyline/index.tsx +++ b/src/map/GpxPolyline/index.tsx @@ -15,8 +15,8 @@ const GpxPolyline: FC = ({ latlngs, color }) => { color, stroke: true, opacity: 1, - weight: 9, - dashArray: [12,12], + weight: 7, + // dashArray: [12,12], }).addTo(MainMap); setLayer(item); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 8c8ad71..2c85766 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -139,18 +139,19 @@ function* getRenderData() { yield composeImages({ geometry, images, ctx }); yield composePoly({ points, ctx }); - gpx.list.forEach(item => { - if (!gpx.enabled || !item.enabled || !item.latlngs.length) return; + // TODO: make additional dashed lines + // gpx.list.forEach(item => { + // if (!gpx.enabled || !item.enabled || !item.latlngs.length) return; - composePoly({ - points: getPolyPlacement(item.latlngs), - ctx, - color: item.color, - opacity: 0.5, - weight: 9, - dash: [12, 12], - }); - }); + // composePoly({ + // points: getPolyPlacement(item.latlngs), + // ctx, + // color: item.color, + // opacity: 0.5, + // weight: 9, + // dash: [12, 12], + // }); + // }); yield composeArrows({ points, ctx }); yield composeDistMark({ ctx, points, distance }); From 53bb6a8443a863e2d07b764329b393b58781aff0 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 27 Jan 2020 15:49:43 +0700 Subject: [PATCH 209/320] start marker --- src/components/dialogs/GpxDialog.tsx | 14 +++ src/components/gpx/GpxDialogRow.tsx | 1 + src/map/GpxPolyline/index.tsx | 2 +- src/sprites/icon.svg | 17 +++ src/sprites/icons_draft.svg | 182 ++++++++++++++++++++++----- src/styles/gpx.less | 13 ++ src/styles/map.less | 8 ++ src/utils/map/InteractivePoly.ts | 2 +- src/utils/marks.ts | 24 ++++ 9 files changed, 228 insertions(+), 35 deletions(-) diff --git a/src/components/dialogs/GpxDialog.tsx b/src/components/dialogs/GpxDialog.tsx index 41cb3db..3b080db 100644 --- a/src/components/dialogs/GpxDialog.tsx +++ b/src/components/dialogs/GpxDialog.tsx @@ -111,6 +111,20 @@ const GpxDialogUnconnected: FC = ({ return (
      + {false && ( +
      +
      Маршрут уже нанесен. Что делаем?
      + +
      +
      Соединить
      + +
      Переписать
      + +
      Отмена
      +
      +
      + )} +
      Треки
      diff --git a/src/components/gpx/GpxDialogRow.tsx b/src/components/gpx/GpxDialogRow.tsx index cbfc432..73cd0ce 100644 --- a/src/components/gpx/GpxDialogRow.tsx +++ b/src/components/gpx/GpxDialogRow.tsx @@ -25,6 +25,7 @@ const GpxDialogRow: FC = ({ item, index, enabled, onRouteToggle, onFocus
      +
      onRouteDrop(index)}>
      onRouteDrop(index)}>
      onRouteToggle(index)}/>
      diff --git a/src/map/GpxPolyline/index.tsx b/src/map/GpxPolyline/index.tsx index eb8d696..b78bdf3 100644 --- a/src/map/GpxPolyline/index.tsx +++ b/src/map/GpxPolyline/index.tsx @@ -15,7 +15,7 @@ const GpxPolyline: FC = ({ latlngs, color }) => { color, stroke: true, opacity: 1, - weight: 7, + weight: 7, // dashArray: [12,12], }).addTo(MainMap); setLayer(item); diff --git a/src/sprites/icon.svg b/src/sprites/icon.svg index 21ac47e..514ad8d 100644 --- a/src/sprites/icon.svg +++ b/src/sprites/icon.svg @@ -402,7 +402,24 @@ + + + + + + + + + + + + + + + + + diff --git a/src/sprites/icons_draft.svg b/src/sprites/icons_draft.svg index 5f315c5..db16265 100644 --- a/src/sprites/icons_draft.svg +++ b/src/sprites/icons_draft.svg @@ -48,11 +48,11 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="5.6568542" - inkscape:cx="7.5044641" - inkscape:cy="20.369143" + inkscape:zoom="1" + inkscape:cx="47.453778" + inkscape:cy="21.541153" inkscape:document-units="px" - inkscape:current-layer="svg8" + inkscape:current-layer="g4843" showgrid="false" inkscape:window-width="1920" inkscape:window-height="1015" @@ -61,7 +61,11 @@ inkscape:window-maximized="1" units="px" inkscape:showpageshadow="false" - inkscape:snap-global="true" /> + inkscape:snap-global="false"> + + @@ -662,17 +666,6 @@ transform="matrix(2,0,0,2,128,98.814754)" id="path8777" /> - - - @@ -742,29 +735,152 @@ d="m -398.03987,8.959327 c 0.96726,6.15e-5 2.83931,0.419056 2.83931,0.419056 l 0.81565,-1.6970847 2.25681,4.8545537 -5.09396,1.335474 0.77693,-1.937748 c 0,0 -1.10109,-0.113536 -1.59474,-0.114876 -3.85069,4.73e-4 -6.97217,3.12196 -6.97265,6.972656 10e-4,1.212906 0.31917,2.404467 0.92188,3.457031 l -2.07031,2.070313 c -1.11178,-1.629145 -1.70791,-3.554996 -1.71094,-5.527344 2.9e-4,-5.429961 4.40206,-9.8317428 9.83202,-9.832031 z" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.13512897;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + id="g4695" + transform="translate(-448)"> - + style="fill:#1a1a1a" + id="g6599-3"> + + + + transform="rotate(-180,16.23592,15.944757)" + id="g1083"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/styles/gpx.less b/src/styles/gpx.less index f46c62c..82b9f2c 100644 --- a/src/styles/gpx.less +++ b/src/styles/gpx.less @@ -84,3 +84,16 @@ justify-content: center; } } + +.gpx-confirm { + position: absolute; + bottom: 5%; + left: 5%; + z-index: 5; + width: 90%; + padding: 10px; + border-radius: @panel_radius; + box-sizing: border-box; + background: lighten(@bar_background, 10%); + box-shadow: rgba(0,0,0,0.5) 0 5px 5px 10px; +} \ No newline at end of file diff --git a/src/styles/map.less b/src/styles/map.less index 5ba3646..08a1cb3 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -150,6 +150,14 @@ } } +.start-marker { + svg { + position: absolute; + left: -4px; + top: -4px; + } +} + .end-marker { .leaflet-km-dist { left: auto; diff --git a/src/utils/map/InteractivePoly.ts b/src/utils/map/InteractivePoly.ts index 9e83fbb..de5b064 100644 --- a/src/utils/map/InteractivePoly.ts +++ b/src/utils/map/InteractivePoly.ts @@ -140,7 +140,7 @@ class InteractivePoly extends Polyline { }; hideAllMarkers = (): void => { - if (!this._map.hasLayer(this.markerLayer)) return; + if (!this._map || !this._map.hasLayer(this.markerLayer)) return; this._map.removeLayer(this.markerLayer); this.fire('allvertexhide'); diff --git a/src/utils/marks.ts b/src/utils/marks.ts index 7c57225..161ee6c 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -6,6 +6,7 @@ import classNames from 'classnames'; const arrow_image = require('~/sprites/arrow.svg'); interface KmMarksOptions { + showStartMarker: boolean; showMiddleMarkers: boolean; showEndMarker: boolean; showArrows: boolean; @@ -17,6 +18,7 @@ class KmMarksLayer extends LayerGroup { super(); this.options = { + showStartMarker: true, showMiddleMarkers: true, showEndMarker: true, showArrows: true, @@ -120,6 +122,25 @@ class KmMarksLayer extends LayerGroup { zIndexOffset: -100, }); + createStartMarker = (latlng: LatLngLiteral): Marker => + marker(latlng, { + draggable: false, + interactive: false, + icon: divIcon({ + html: ` + + + + + + `, + className: classNames('leaflet-km-marker start-marker'), + iconSize: [20, 20], + iconAnchor: [6, 6], + }), + zIndexOffset: -100, + }); + drawEndMarker = (latlngs: LatLngLiteral[]): void => { this.endMarker.clearLayers(); @@ -132,6 +153,9 @@ class KmMarksLayer extends LayerGroup { ); this.endMarker.addLayer(this.createEndMarker(next, angle, this.distance)); + if (latlngs && latlngs.length) { + this.endMarker.addLayer(this.createStartMarker(latlngs[0])); + } }; options: KmMarksOptions; From b2357cf52218811bd80305ea348c0153062e7be7 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 27 Jan 2020 15:51:29 +0700 Subject: [PATCH 210/320] disabled append features for tracks --- src/components/gpx/GpxDialogRow.tsx | 42 +++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/src/components/gpx/GpxDialogRow.tsx b/src/components/gpx/GpxDialogRow.tsx index 73cd0ce..8f7ed3d 100644 --- a/src/components/gpx/GpxDialogRow.tsx +++ b/src/components/gpx/GpxDialogRow.tsx @@ -6,28 +6,48 @@ import classnames from 'classnames'; interface IProps { item: IGpxRoute; - index: number + index: number; enabled: boolean; - onFocusRoute: (i: number) => void - onRouteDrop: (i: number) => void - onRouteToggle: (i: number) => void - onRouteColor: (i: number) => void + onFocusRoute: (i: number) => void; + onRouteDrop: (i: number) => void; + onRouteToggle: (i: number) => void; + onRouteColor: (i: number) => void; } -const GpxDialogRow: FC = ({ item, index, enabled, onRouteToggle, onFocusRoute, onRouteDrop, onRouteColor }) => { +const GpxDialogRow: FC = ({ + item, + index, + enabled, + onRouteToggle, + onFocusRoute, + onRouteDrop, + onRouteColor, +}) => { return ( -
      -
      onRouteColor(index)}/> +
      +
      onRouteColor(index)} + />
      onFocusRoute(index)}> {item.name}
      -
      onRouteDrop(index)}>
      -
      onRouteDrop(index)}>
      -
      onRouteToggle(index)}/>
      + {false && ( +
      onRouteDrop(index)}> + +
      + )} +
      onRouteDrop(index)}> + +
      +
      + onRouteToggle(index)} /> +
      ); From 067021b18a39fd66add68e2de48b0b86d28ed1a9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 27 Jan 2020 16:18:50 +0700 Subject: [PATCH 211/320] undo bar for mobile devices --- src/components/panels/EditorPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 75d6e27..c069dd0 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -94,7 +94,7 @@ class EditorPanelUnconnected extends PureComponent { }} >
      From 5f7c036149c4875086d74a41dfb519bbe2e682d5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 27 Jan 2020 16:40:02 +0700 Subject: [PATCH 212/320] fixed again --- src/components/panels/EditorPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index c069dd0..b6e5d74 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -165,7 +165,7 @@ class EditorPanelUnconnected extends PureComponent { className={classnames({ primary: changed, inactive: !changed })} onClick={this.startSaveMode} > - СОХРАНИТЬ + СОХРАНИТЬ
      From b03c5ce0de1012d878ff72c891fbe9ffc4dd825e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Mon, 10 Feb 2020 17:33:26 +0700 Subject: [PATCH 213/320] fixed transition for stickers --- src/components/panels/EditorPanel.tsx | 19 +++++++++++++------ src/styles/stickers.less | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index b6e5d74..5b017ea 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -1,4 +1,4 @@ -import React, { PureComponent } from 'react'; +import React, { PureComponent, useState, useCallback } from 'react'; import { MODES } from '~/constants/modes'; import classnames from 'classnames'; @@ -23,9 +23,15 @@ const mapStateToProps = (state: IState) => { const { mode, changed, editing, features, history } = selectEditor(state); const { route, stickers } = selectMap(state); return { - mode, changed, editing, features, history, route, stickers, - } -} + mode, + changed, + editing, + features, + history, + route, + stickers, + }; +}; const mapDispatchToProps = { editorChangeMode, @@ -78,7 +84,8 @@ class EditorPanelUnconnected extends PureComponent { editing, features: { routing }, history: { records, position }, - route, stickers, + route, + stickers, } = this.props; const can_undo = records.length > 0 && position > 0; @@ -165,7 +172,7 @@ class EditorPanelUnconnected extends PureComponent { className={classnames({ primary: changed, inactive: !changed })} onClick={this.startSaveMode} > - СОХРАНИТЬ + СОХРАНИТЬ
      diff --git a/src/styles/stickers.less b/src/styles/stickers.less index 14fc0d1..ef3dace 100644 --- a/src/styles/stickers.less +++ b/src/styles/stickers.less @@ -55,7 +55,7 @@ } } - @media(hover: none) { + @media(hover: hover) { transition: none; } } From acca2aba14194b3515de9fec2cc224789abafb5c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 10:24:53 +0700 Subject: [PATCH 214/320] fixed gpx importing --- src/utils/gpx.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index 4134b8e..67e3560 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -18,10 +18,6 @@ type GpxImportRaw = { trkseg: GpxImportTrkSeg[]; }[]; }; -// export interface IRoutePoint { -// lat: number; -// lng: number; -// } interface IGPXSticker { latlng: LatLng; @@ -88,7 +84,6 @@ export const importGpxTrack = async (file: File) => { }); const gpx: GpxImportRaw = GPX.parse(content); - console.log(gpx); if (!gpx || !gpx.trk) return null; @@ -107,7 +102,7 @@ export const importGpxTrack = async (file: File) => { return [ { - name: gpx.metadata.name || '', + name: (gpx.metadata && gpx.metadata.name) || (gpx.trk && gpx.trk[0] && gpx.trk[0].name) || '', latlngs, }, ]; From 1d45e65434cf3ea0318a3267d1547c711f4e0efc Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 11:04:57 +0700 Subject: [PATCH 215/320] replacing gpx tracks --- src/components/dialogs/GpxDialog.tsx | 43 ++++++++++-------- src/components/gpx/GpxConfirm.tsx | 21 +++++++++ src/components/gpx/GpxDialogRow.tsx | 68 +++++++++++++++------------- src/redux/editor/sagas.ts | 2 +- src/utils/simplify.ts | 8 ++-- 5 files changed, 86 insertions(+), 56 deletions(-) create mode 100644 src/components/gpx/GpxConfirm.tsx diff --git a/src/components/dialogs/GpxDialog.tsx b/src/components/dialogs/GpxDialog.tsx index 3b080db..7940fbd 100644 --- a/src/components/dialogs/GpxDialog.tsx +++ b/src/components/dialogs/GpxDialog.tsx @@ -1,9 +1,9 @@ import React, { FC, useCallback, ChangeEvent } from 'react'; import { connect } from 'react-redux'; -import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import { IState } from '~/redux/store'; import { selectEditorGpx } from '~/redux/editor/selectors'; import { GpxDialogRow } from '~/components/gpx/GpxDialogRow'; +import { GpxConfirm } from '~/components/gpx/GpxConfirm'; import { MainMap } from '~/constants/map'; import { latLngBounds } from 'leaflet'; import { Switch } from '../Switch'; @@ -13,6 +13,10 @@ import uuid from 'uuid'; import { getUrlData } from '~/utils/history'; import { getRandomColor } from '~/utils/dom'; +import * as EDITOR_ACTIONS from '~/redux/editor/actions'; +import * as MAP_ACTIONS from '~/redux/map/actions'; +import { simplify } from '~/utils/simplify'; + const mapStateToProps = (state: IState) => ({ gpx: selectEditorGpx(state), route: selectMapRoute(state), @@ -25,6 +29,7 @@ const mapDispatchToProps = { editorUploadGpx: EDITOR_ACTIONS.editorUploadGpx, editorSetGpx: EDITOR_ACTIONS.editorSetGpx, editorGetGPXTrack: EDITOR_ACTIONS.editorGetGPXTrack, + mapSetRoute: MAP_ACTIONS.mapSetRoute, }; type Props = ReturnType & typeof mapDispatchToProps & {}; @@ -37,7 +42,12 @@ const GpxDialogUnconnected: FC = ({ editorGetGPXTrack, editorSetGpx, editorUploadGpx, + mapSetRoute, }) => { + const toggleGpx = useCallback(() => { + editorSetGpx({ enabled: !gpx.enabled }); + }, [gpx, editorSetGpx]); + const onGpxUpload = useCallback( (event: ChangeEvent) => { if (!event.target || !event.target.files || event.target.files.length === 0) { @@ -76,13 +86,10 @@ const GpxDialogUnconnected: FC = ({ [gpx, editorSetGpx] ); - const toggleGpx = useCallback(() => { - editorSetGpx({ enabled: !gpx.enabled }); - }, [gpx, editorSetGpx]); - const onRouteToggle = useCallback( index => { if (!gpx.enabled) return; + editorSetGpx({ list: gpx.list.map((el, i) => (i !== index ? el : { ...el, enabled: !el.enabled })), }); @@ -109,22 +116,19 @@ const GpxDialogUnconnected: FC = ({ }); }, [route, gpx, editorSetGpx]); + const onRouteReplace = useCallback( + (i: number) => { + mapSetRoute(simplify(gpx.list[i].latlngs)); + + editorSetGpx({ + list: gpx.list.map((el, index) => (i !== index ? el : { ...el, enabled: false })), + }); + }, + [gpx, mapSetRoute, editorSetGpx] + ); + return (
      - {false && ( -
      -
      Маршрут уже нанесен. Что делаем?
      - -
      -
      Соединить
      - -
      Переписать
      - -
      Отмена
      -
      -
      - )} -
      Треки
      @@ -140,6 +144,7 @@ const GpxDialogUnconnected: FC = ({ onFocusRoute={onFocusRoute} onRouteToggle={onRouteToggle} onRouteColor={onRouteColor} + onRouteReplace={onRouteReplace} /> ))} diff --git a/src/components/gpx/GpxConfirm.tsx b/src/components/gpx/GpxConfirm.tsx new file mode 100644 index 0000000..d3eec4f --- /dev/null +++ b/src/components/gpx/GpxConfirm.tsx @@ -0,0 +1,21 @@ +import React, { FC } from 'react'; + +interface IProps {} + +const GpxConfirm: FC = ({}) => { + return ( +
      +
      Маршрут уже нанесен. Что делаем?
      + +
      +
      Соединить
      + +
      Переписать
      + +
      Отмена
      +
      +
      + ); +}; + +export { GpxConfirm }; diff --git a/src/components/gpx/GpxDialogRow.tsx b/src/components/gpx/GpxDialogRow.tsx index 8f7ed3d..e2f5078 100644 --- a/src/components/gpx/GpxDialogRow.tsx +++ b/src/components/gpx/GpxDialogRow.tsx @@ -1,4 +1,4 @@ -import React, { FC } from 'react'; +import React, { FC, memo } from 'react'; import { IGpxRoute } from '~/redux/editor'; import { Switch } from '../Switch'; import { Icon } from '../panels/Icon'; @@ -13,44 +13,48 @@ interface IProps { onRouteDrop: (i: number) => void; onRouteToggle: (i: number) => void; onRouteColor: (i: number) => void; + onRouteReplace: (i: number) => void; } -const GpxDialogRow: FC = ({ - item, - index, - enabled, - onRouteToggle, - onFocusRoute, - onRouteDrop, - onRouteColor, -}) => { - return ( -
      -
      onRouteColor(index)} - /> +const GpxDialogRow: FC = memo( + ({ + item, + index, + enabled, + onRouteToggle, + onFocusRoute, + onRouteDrop, + onRouteColor, + onRouteReplace, + }) => { + return ( +
      +
      onRouteColor(index)} + /> -
      onFocusRoute(index)}> - {item.name} -
      +
      onFocusRoute(index)}> + {item.name} +
      -
      - {false && ( -
      onRouteDrop(index)}> +
      +
      onRouteReplace(index)}>
      - )} -
      onRouteDrop(index)}> - -
      -
      - onRouteToggle(index)} /> + +
      onRouteDrop(index)}> + +
      + +
      + onRouteToggle(index)} /> +
      -
      - ); -}; + ); + } +); export { GpxDialogRow }; diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 2c85766..057f42d 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -294,7 +294,7 @@ function* routerSubmit() { const route: ReturnType = yield select(selectMapRoute); const latlngs: LatLng[] = path(['_routes', 0, 'coordinates'], OsrmRouter); - const coordinates = simplify({ map: MainMap, latlngs }); + const coordinates = simplify(latlngs); yield put(mapSetRoute([...route, ...coordinates])); OsrmRouter.setWaypoints([]); diff --git a/src/utils/simplify.ts b/src/utils/simplify.ts index 0e7616e..4c20705 100644 --- a/src/utils/simplify.ts +++ b/src/utils/simplify.ts @@ -1,9 +1,9 @@ import { Map, LineUtil, LatLng } from 'leaflet'; -// import { ILatLng } from "~/redux/map/types"; +import { MainMap } from '~/constants/map'; -export const simplify = ({ map, latlngs }: { map: Map, latlngs: LatLng[] }): LatLng[] => { +export const simplify = (latlngs: LatLng[]): LatLng[] => { const zoom = 12; const mul = 0.7; // 0 - not simplifying, 1 - very rude. - const points = latlngs.map(({ lat, lng }) => map.project({ lat, lng }, zoom)); - return LineUtil.simplify(points, mul).map(item => map.unproject(item, zoom)); + const points = latlngs.map(({ lat, lng }) => MainMap.project({ lat, lng }, zoom)); + return LineUtil.simplify(points, mul).map(item => MainMap.unproject(item, zoom)); }; From a19555b429e6b2519e7af265723435ef849caecc Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 11:32:22 +0700 Subject: [PATCH 216/320] fixed min-max problem --- src/components/search/MapListDialogHead.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/search/MapListDialogHead.tsx b/src/components/search/MapListDialogHead.tsx index 54875cf..45ee5b8 100644 --- a/src/components/search/MapListDialogHead.tsx +++ b/src/components/search/MapListDialogHead.tsx @@ -15,7 +15,7 @@ const MapListDialogHead: FC = memo( ({ min, max, ready, distance, search, onSearchChange, onDistanceChange }) => { const marks = useMemo( () => - [...new Array(Math.floor((max - min) / 25) + 1)].reduce( + [...new Array(Math.floor((Math.max(min, max) - Math.max(min, max)) / 25) + 1)].reduce( (obj, el, i) => ({ ...obj, [min + i * 25]: min + i * 25 < 200 ? ` ${min + i * 25}` : ` ${min + i * 25}+`, From 008a42bd9b9500a7f4104a3fa5cd2721df141778 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 11:36:41 +0700 Subject: [PATCH 217/320] fixed min max again --- src/components/search/MapListDialogHead.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/search/MapListDialogHead.tsx b/src/components/search/MapListDialogHead.tsx index 45ee5b8..02a1747 100644 --- a/src/components/search/MapListDialogHead.tsx +++ b/src/components/search/MapListDialogHead.tsx @@ -15,7 +15,7 @@ const MapListDialogHead: FC = memo( ({ min, max, ready, distance, search, onSearchChange, onDistanceChange }) => { const marks = useMemo( () => - [...new Array(Math.floor((Math.max(min, max) - Math.max(min, max)) / 25) + 1)].reduce( + [...new Array(Math.floor((Math.max(min, max) - Math.min(min, max)) / 25) + 1)].reduce( (obj, el, i) => ({ ...obj, [min + i * 25]: min + i * 25 < 200 ? ` ${min + i * 25}` : ` ${min + i * 25}+`, From 09ce310badb4df39c3c4cbaa4f107c57ce9c0e2b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 12:16:36 +0700 Subject: [PATCH 218/320] changed default provider --- src/constants/providers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index c9e6c7b..2140744 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -84,7 +84,7 @@ const TILEMAPS: ITileMaps = { const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT']; -export const DEFAULT_PROVIDER: keyof ITileMaps = ENABLED[0]; +export const DEFAULT_PROVIDER: keyof ITileMaps = ENABLED[1]; export const PROVIDERS: Partial = ENABLED.reduce((obj, provider) => ({ ...obj, [provider]: TILEMAPS[provider], From ef5cd0cdef779dd81a4c536943340e80092331fd Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 15:10:43 +0700 Subject: [PATCH 219/320] scaling stickers --- src/map/Map/index.tsx | 103 ++++++++++++++++++------------------- src/map/Sticker/index.tsx | 19 +++++-- src/map/Stickers/index.tsx | 68 ++++++++++++++---------- src/redux/editor/sagas.ts | 16 +----- src/redux/map/actions.ts | 5 ++ src/redux/map/constants.ts | 3 +- src/redux/map/handlers.ts | 7 +++ src/redux/map/index.ts | 2 + src/redux/map/sagas.ts | 4 ++ src/redux/map/selectors.ts | 3 +- src/redux/store.ts | 3 ++ src/styles/stickers.less | 5 ++ src/utils/renderer.ts | 87 ++++++++++++++++--------------- 13 files changed, 181 insertions(+), 144 deletions(-) diff --git a/src/map/Map/index.tsx b/src/map/Map/index.tsx index 2c3b10a..44cf90b 100644 --- a/src/map/Map/index.tsx +++ b/src/map/Map/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { memo } from 'react'; import { MainMap } from '~/constants/map'; import { createPortal } from 'react-dom'; @@ -18,7 +18,6 @@ import 'leaflet/dist/leaflet.css'; import { selectEditorEditing, selectEditorMode, selectEditorGpx } from '~/redux/editor/selectors'; import { MODES } from '~/constants/modes'; import { selectUserLocation } from '~/redux/user/selectors'; -import { GPX_ROUTE_COLORS } from '~/redux/editor/constants'; const mapStateToProps = state => ({ provider: selectMapProvider(state), @@ -41,67 +40,63 @@ type IProps = React.HTMLAttributes & ReturnType & typeof mapDispatchToProps & {}; -const MapUnconnected: React.FC = ({ - provider, - stickers, - editing, - mode, - location, - gpx, +const MapUnconnected: React.FC = memo( + ({ + provider, + stickers, + editing, + mode, + location, + gpx, - mapClicked, - mapSetSticker, - mapDropSticker, -}) => { - const onClick = React.useCallback( - event => { - if (!MainMap.clickable || mode === MODES.NONE) return; + mapClicked, + mapSetSticker, + mapDropSticker, + }) => { + const onClick = React.useCallback( + event => { + if (!MainMap.clickable || mode === MODES.NONE) return; - mapClicked(event.latlng); - }, - [mapClicked, mode] - ); + mapClicked(event.latlng); + }, + [mapClicked, mode] + ); - React.useEffect(() => { - MainMap.addEventListener('click', onClick); + React.useEffect(() => { + MainMap.addEventListener('click', onClick); - return () => { - MainMap.removeEventListener('click', onClick); - }; - }, [MainMap, onClick]); + return () => { + MainMap.removeEventListener('click', onClick); + }; + }, [MainMap, onClick]); - return createPortal( -
      - + return createPortal( +
      + - + - - + + - - + + - {gpx.enabled && - gpx.list.map( - ({ latlngs, enabled, color }, index) => - enabled && ( - - ) - )} -
      , - document.getElementById('canvas') - ); -}; + {gpx.enabled && + gpx.list.map( + ({ latlngs, enabled, color }, index) => + enabled && + )} +
      , + document.getElementById('canvas') + ); + } +); const Map = connect(mapStateToProps, mapDispatchToProps)(MapUnconnected); export { Map }; diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index 9c9d8d0..25f9148 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -13,6 +13,7 @@ interface IProps { onDragStart?: () => void; index: number; is_editing: boolean; + zoom: number; mapSetSticker: (index: number, sticker: IStickerDump) => void; mapDropSticker: (index: number) => void; @@ -29,13 +30,16 @@ const getX = e => const Sticker: React.FC = ({ sticker, index, + is_editing, + zoom, mapSetSticker, mapDropSticker, - is_editing, }) => { const [text, setText] = useState(sticker.text); const [layer, setLayer] = React.useState(null); const [dragging, setDragging] = React.useState(false); + const wrapper = useRef(null); + let angle = useRef(sticker.angle); const element = React.useMemo(() => document.createElement('div'), []); @@ -146,6 +150,14 @@ const Sticker: React.FC = ({ setText(sticker.text); }, [layer, sticker.text]); + useEffect(() => { + if (!wrapper || !wrapper.current) return; + + const scale = zoom / 13; + + wrapper.current.style.transform = `scale(${scale}) perspective(1px)` + }, [zoom, wrapper]); + // Attaches onMoveFinished event to item React.useEffect(() => { if (!layer) return; @@ -200,8 +212,9 @@ const Sticker: React.FC = ({ element.className = is_editing ? 'sticker-container' : 'sticker-container inactive'; }, [element, is_editing, layer]); + return createPortal( - +
      @@ -220,7 +233,7 @@ const Sticker: React.FC = ({
      - , +
      , element ); }; diff --git a/src/map/Stickers/index.tsx b/src/map/Stickers/index.tsx index 93a9850..52170d1 100644 --- a/src/map/Stickers/index.tsx +++ b/src/map/Stickers/index.tsx @@ -1,6 +1,6 @@ -import React from 'react'; +import React, { useState, memo, FC, useEffect, useCallback } from 'react'; import { IStickerDump } from '~/redux/map/types'; -import { FeatureGroup, Map } from 'leaflet'; +import { FeatureGroup, Map, LeafletEvent } from 'leaflet'; import { Sticker } from '~/map/Sticker'; import { mapSetSticker, mapDropSticker } from '~/redux/map/actions'; import { MainMap } from '~/constants/map'; @@ -8,39 +8,51 @@ import { MainMap } from '~/constants/map'; interface IProps { stickers: IStickerDump[]; is_editing: boolean; + mapSetSticker: typeof mapSetSticker; mapDropSticker: typeof mapDropSticker; } -const Stickers: React.FC = React.memo( - ({ stickers, is_editing, mapSetSticker, mapDropSticker }) => { - const [layer, setLayer] = React.useState(null); +const Stickers: FC = memo(({ stickers, is_editing, mapSetSticker, mapDropSticker }) => { + const [layer, setLayer] = useState(null); + const [zoom, setZoom] = useState(16); - React.useEffect(() => { - if (!MainMap) return; + const onZoomChange = useCallback( + (event: LeafletEvent) => { + setZoom(event.target._zoom); + }, + [setZoom] + ); - const item = new FeatureGroup().addTo(MainMap.stickerLayer); - setLayer(item); + useEffect(() => { + if (!MainMap) return; - return () => MainMap.stickerLayer.removeLayer(item); - }, [MainMap]); + const item = new FeatureGroup().addTo(MainMap.stickerLayer); + setLayer(item); + MainMap.on('zoomend', onZoomChange); - return ( -
      - {layer && - stickers.map((sticker, index) => ( - - ))} -
      - ); - } -); + return () => { + MainMap.off('zoomend', onZoomChange); + MainMap.stickerLayer.removeLayer(item); + }; + }, [MainMap, onZoomChange]); + + return ( +
      + {layer && + stickers.map((sticker, index) => ( + + ))} +
      + ); +}); export { Stickers }; diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 057f42d..77a5f42 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -139,23 +139,9 @@ function* getRenderData() { yield composeImages({ geometry, images, ctx }); yield composePoly({ points, ctx }); - // TODO: make additional dashed lines - // gpx.list.forEach(item => { - // if (!gpx.enabled || !item.enabled || !item.latlngs.length) return; - - // composePoly({ - // points: getPolyPlacement(item.latlngs), - // ctx, - // color: item.color, - // opacity: 0.5, - // weight: 9, - // dash: [12, 12], - // }); - // }); - yield composeArrows({ points, ctx }); yield composeDistMark({ ctx, points, distance }); - yield composeStickers({ stickers: sticker_points, ctx }); + yield composeStickers({ stickers: sticker_points, ctx, zoom: MainMap.getZoom() / 13 }); yield put(editorSetRenderer({ info: 'Готово', progress: 1 })); diff --git a/src/redux/map/actions.ts b/src/redux/map/actions.ts index 5d4a36c..0603f88 100644 --- a/src/redux/map/actions.ts +++ b/src/redux/map/actions.ts @@ -79,3 +79,8 @@ export const mapSetAddressOrigin = (address_origin: IMapReducer['address_origin' type: MAP_ACTIONS.SET_ADDRESS_ORIGIN, address_origin, }); + +export const mapZoomChange = (zoom: number) => ({ + type: MAP_ACTIONS.ZOOM_CHANGE, + zoom, +}); diff --git a/src/redux/map/constants.ts b/src/redux/map/constants.ts index 253eeb9..dce5840 100644 --- a/src/redux/map/constants.ts +++ b/src/redux/map/constants.ts @@ -17,5 +17,6 @@ export const MAP_ACTIONS = { SET_STICKERS: `${P}-SET_STICKERS`, DROP_STICKER: `${P}-DROP_STICKER`, - MAP_CLICKED: `${P}-MAP_CLICKED` + MAP_CLICKED: `${P}-MAP_CLICKED`, + ZOOM_CHANGE: `${P}-ZOOM_CHANGE` } \ No newline at end of file diff --git a/src/redux/map/handlers.ts b/src/redux/map/handlers.ts index 144ef83..ac6305f 100644 --- a/src/redux/map/handlers.ts +++ b/src/redux/map/handlers.ts @@ -14,6 +14,7 @@ import { mapSetLogo, mapSetAddressOrigin, mapSetStickers, + mapZoomChange, } from './actions'; const setMap = (state: IMapReducer, { map }: ReturnType): IMapReducer => ({ @@ -101,6 +102,11 @@ const setAddressOrigin = (state, { address_origin }: ReturnType): IMapReducer => ({ + ...state, + zoom +}); + export const MAP_HANDLERS = { [MAP_ACTIONS.SET_MAP]: setMap, [MAP_ACTIONS.SET_PROVIDER]: setProvider, @@ -116,4 +122,5 @@ export const MAP_HANDLERS = { [MAP_ACTIONS.SET_PUBLIC]: setPublic, [MAP_ACTIONS.SET_LOGO]: setLogo, [MAP_ACTIONS.SET_ADDRESS_ORIGIN]: setAddressOrigin, + [MAP_ACTIONS.ZOOM_CHANGE]: zoomChange, }; diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index daea378..1084456 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -16,6 +16,7 @@ export interface IMapReducer { description: string; owner: { id: string }; is_public: boolean; + zoom: number; } export const MAP_INITIAL_STATE: IMapReducer = { @@ -29,6 +30,7 @@ export const MAP_INITIAL_STATE: IMapReducer = { description: '', owner: { id: null }, is_public: false, + zoom: 13, } export const map = createReducer(MAP_INITIAL_STATE, MAP_HANDLERS) \ No newline at end of file diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 9825b59..718a242 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -328,6 +328,10 @@ function* setChanged() { yield put(editorSetChanged(true)); } +function* onZoomChange() { + +} + export function* mapSaga() { yield takeEvery( [MAP_ACTIONS.SET_ROUTE, MAP_ACTIONS.SET_STICKER, MAP_ACTIONS.SET_STICKERS], diff --git a/src/redux/map/selectors.ts b/src/redux/map/selectors.ts index 543f102..7e00957 100644 --- a/src/redux/map/selectors.ts +++ b/src/redux/map/selectors.ts @@ -6,4 +6,5 @@ export const selectMapLogo = (state: IState) => state.map.logo; export const selectMapRoute= (state: IState) => state.map.route; export const selectMapStickers = (state: IState) => state.map.stickers; export const selectMapTitle= (state: IState) => state.map.title; -export const selectMapAddress = (state: IState) => state.map.address; \ No newline at end of file +export const selectMapAddress = (state: IState) => state.map.address; +export const selectMapZoom = (state: IState) => state.map.zoom; \ No newline at end of file diff --git a/src/redux/store.ts b/src/redux/store.ts index 481e355..ccdee48 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -19,6 +19,8 @@ import { mapSaga } from '~/redux/map/sagas'; import { watchLocation, getLocation } from '~/utils/window'; import { LatLngLiteral } from 'leaflet'; import { setUserLocation } from './user/actions'; +import { MainMap } from '~/constants/map'; +import { mapZoomChange } from './map/actions'; const userPersistConfig: PersistConfig = { key: 'user', @@ -73,3 +75,4 @@ history.listen((location, action) => { }); watchLocation((location: LatLngLiteral) => store.dispatch(setUserLocation(location))); +MainMap.on('zoomend', event => store.dispatch(mapZoomChange(event.target._zoom))) diff --git a/src/styles/stickers.less b/src/styles/stickers.less index ef3dace..315524d 100644 --- a/src/styles/stickers.less +++ b/src/styles/stickers.less @@ -109,6 +109,11 @@ } } +.sticker-wrapper { + will-change: transform; + transition: transform 50ms; +} + .sticker-arrow { position: absolute; transform-origin: 0 0; diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 9235ed2..22cfdc2 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -103,9 +103,7 @@ export const getTilePlacement = (): ITilePlacement => { }; export const getPolyPlacement = (latlngs: LatLng[]): Point[] => - latlngs.length === 0 - ? [] - : latlngs.map(latlng => (MainMap.latLngToContainerPoint(latlng))); + latlngs.length === 0 ? [] : latlngs.map(latlng => MainMap.latLngToContainerPoint(latlng)); export const getStickersPlacement = (stickers: IStickerDump[]): IStickerPlacement[] => stickers.length === 0 @@ -132,7 +130,7 @@ export const imageFetcher = (source: string): Promise => export const fetchImages = ( ctx: CanvasRenderingContext2D, geometry: ITilePlacement, - provider, + provider ): Promise<{ x: number; y: number; image: HTMLImageElement }[]> => { const { minX, maxX, minY, maxY, zoom } = geometry; @@ -144,7 +142,11 @@ export const fetchImages = ( } return Promise.all( - images.map(({ x, y, source }) => imageFetcher(source).then(image => ({ x, y, image }))) + images.map(({ x, y, source }) => + imageFetcher(source) + .then(image => ({ x, y, image })) + .catch() + ) ); }; @@ -206,20 +208,19 @@ export const composePoly = ({ } if (color === 'gradient') { - const gradient = ctx.createLinearGradient(minX, minY, minX, maxY); gradient.addColorStop(0, COLORS.PATH_COLOR[0]); gradient.addColorStop(1, COLORS.PATH_COLOR[1]); - + ctx.strokeStyle = gradient; } else { ctx.strokeStyle = color; } if (dash) { - ctx.setLineDash([12,12]); + ctx.setLineDash([12, 12]); } - + ctx.stroke(); ctx.closePath(); }; @@ -292,10 +293,12 @@ const composeStickerArrow = ( ctx: CanvasRenderingContext2D, x: number, y: number, - angle: number + angle: number, + scale: number ) => { ctx.save(); ctx.translate(x, y); + ctx.scale(scale, scale); ctx.rotate(angle + Math.PI * 0.75); ctx.translate(-x, -y); ctx.fillStyle = '#ff3344'; @@ -309,12 +312,12 @@ const composeStickerArrow = ( ctx.restore(); }; -const measureRect = (x: number, y: number, width: number, height: number, reversed: boolean) => ({ - rectX: reversed ? x - width - 36 - 10 : x, - rectY: y - 7 - height / 2, - rectW: width + 36 + 10, - rectH: height + 20, - textX: reversed ? x - width - 36 : x + 36, +const measureRect = (x: number, y: number, width: number, height: number, scale: number, reversed: boolean) => ({ + rectX: reversed ? x - width - 36 * scale - 10 * scale : x, + rectY: y - 7 * scale - height / 2, + rectW: width + 46 * scale, + rectH: height + 20 * scale, + textX: reversed ? x - width - 36 : x + 36 * scale, }); const measureDistRect = ( @@ -374,39 +377,32 @@ const composeStickerText = ( x: number, y: number, angle: number, - text: string + text: string, + scale: number ): void => { const rad = 56; - const tX = Math.cos(angle + Math.PI) * rad - 30 + x + 28; - const tY = Math.sin(angle + Math.PI) * rad - 30 + y + 29; + const tX = (Math.cos(angle + Math.PI) * rad - 30 + 28) * scale + x; + const tY = (Math.sin(angle + Math.PI) * rad - 30 + 29) * scale + y; - ctx.font = '12px "Helvetica Neue", Arial'; + ctx.font = `${12 * scale}px "Helvetica Neue", Arial`; const lines = text.split('\n'); - const { width, height } = measureText(ctx, text, 16); + const { width, height } = measureText(ctx, text, 16 * scale); const { rectX, rectY, rectW, rectH, textX } = measureRect( tX, tY, width, height, + scale, angle > -(Math.PI / 2) && angle < Math.PI / 2 ); - // rectangle - // ctx.fillStyle = '#222222'; - // ctx.beginPath(); - // ctx.rect( - // rectX, - // rectY, - // rectW, - // rectH, - // ); - // ctx.closePath(); - // ctx.fill(); + roundedRect(ctx, rectX, rectY, rectW, rectH, '#222222', 2); // text ctx.fillStyle = 'white'; - lines.map((line, i) => ctx.fillText(line, textX, rectY + 6 + 16 * (i + 1))); + lines.map((line, i) => ctx.fillText(line, textX, rectY + (6 + 16 * (i + 1)) * scale)); + // ctx.scale(1/scale, 1/scale); }; export const composeDistMark = ({ @@ -451,36 +447,43 @@ const composeStickerImage = async ( y: number, angle: number, set: string, - sticker: string + sticker: string, + scale: number ): Promise => { + console.log({ scale }); + const rad = 56; - const tX = Math.cos(angle + Math.PI) * rad - 30 + (x - 8); - const tY = Math.sin(angle + Math.PI) * rad - 30 + (y - 4); + const tX = (Math.cos(angle + Math.PI) * rad - 30 - 6) * scale + x; + const tY = (Math.sin(angle + Math.PI) * rad - 30 - 6) * scale + y; const offsetX = STICKERS[set].layers[sticker].off * 72; - return imageFetcher(STICKERS[set].url).then(image => - ctx.drawImage(image, offsetX, 0, 72, 72, tX, tY, 72, 72) - ); + await imageFetcher(STICKERS[set].url).then(image => { + ctx.drawImage(image, offsetX, 0, 72, 72, tX, tY, 72 * scale, 72 * scale); + }); + + return; }; export const composeStickers = async ({ stickers, ctx, + zoom, }: { stickers: IStickerPlacement[]; ctx: CanvasRenderingContext2D; + zoom: number; }): Promise => { if (!stickers || stickers.length < 0) return; stickers.map(({ x, y, angle, text }) => { - composeStickerArrow(ctx, x, y, angle); + composeStickerArrow(ctx, x, y, angle, zoom); - if (text) composeStickerText(ctx, x, y, angle, text); + if (text) composeStickerText(ctx, x, y, angle, text, zoom); }); await Promise.all( stickers.map(({ x, y, angle, set, sticker }) => - composeStickerImage(ctx, x, y, angle, set, sticker) + composeStickerImage(ctx, x, y, angle, set, sticker, zoom) ) ); }; From a1c55befa2217fc875e2135e1718b06677b28f11 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 15:35:13 +0700 Subject: [PATCH 220/320] adaptive sticker scale --- src/map/Sticker/index.tsx | 3 ++- src/map/Stickers/index.tsx | 8 ++++---- src/redux/editor/sagas.ts | 8 ++++++-- src/styles/stickers.less | 6 +++++- src/utils/dom.ts | 6 +++++- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index 25f9148..3545819 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -7,6 +7,7 @@ import classNames from 'classnames'; import { DomMarker } from '~/utils/map/DomMarker'; import { createPortal } from 'react-dom'; import { MapContainer, MainMap } from '~/constants/map'; +import { getAdaptiveScale } from '~/utils/dom'; interface IProps { sticker: IStickerDump; @@ -153,7 +154,7 @@ const Sticker: React.FC = ({ useEffect(() => { if (!wrapper || !wrapper.current) return; - const scale = zoom / 13; + const scale = getAdaptiveScale(zoom) // adaptive zoom :-) wrapper.current.style.transform = `scale(${scale}) perspective(1px)` }, [zoom, wrapper]); diff --git a/src/map/Stickers/index.tsx b/src/map/Stickers/index.tsx index 52170d1..0d155bc 100644 --- a/src/map/Stickers/index.tsx +++ b/src/map/Stickers/index.tsx @@ -18,8 +18,8 @@ const Stickers: FC = memo(({ stickers, is_editing, mapSetSticker, mapDro const [zoom, setZoom] = useState(16); const onZoomChange = useCallback( - (event: LeafletEvent) => { - setZoom(event.target._zoom); + (event) => { + setZoom(event.zoom); }, [setZoom] ); @@ -29,10 +29,10 @@ const Stickers: FC = memo(({ stickers, is_editing, mapSetSticker, mapDro const item = new FeatureGroup().addTo(MainMap.stickerLayer); setLayer(item); - MainMap.on('zoomend', onZoomChange); + MainMap.on('zoomanim', onZoomChange); return () => { - MainMap.off('zoomend', onZoomChange); + MainMap.off('zoomanim', onZoomChange); MainMap.stickerLayer.removeLayer(item); }; }, [MainMap, onZoomChange]); diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 77a5f42..2fc13f6 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -66,7 +66,7 @@ import { MainMap } from '~/constants/map'; import { EDITOR_INITIAL_STATE } from '.'; import { Unwrap } from '~/utils/middleware'; import uuid from 'uuid'; -import { getRandomColor } from '~/utils/dom'; +import { getRandomColor, getAdaptiveScale } from '~/utils/dom'; const hideLoader = () => { document.getElementById('loader').style.opacity = String(0); @@ -141,7 +141,11 @@ function* getRenderData() { yield composeArrows({ points, ctx }); yield composeDistMark({ ctx, points, distance }); - yield composeStickers({ stickers: sticker_points, ctx, zoom: MainMap.getZoom() / 13 }); + yield composeStickers({ + stickers: sticker_points, + ctx, + zoom: getAdaptiveScale(MainMap.getZoom()), + }); yield put(editorSetRenderer({ info: 'Готово', progress: 1 })); diff --git a/src/styles/stickers.less b/src/styles/stickers.less index 315524d..b676bd3 100644 --- a/src/styles/stickers.less +++ b/src/styles/stickers.less @@ -111,7 +111,11 @@ .sticker-wrapper { will-change: transform; - transition: transform 50ms; + transition: transform 250ms; + + @media (hover: hover) { + transition: transform 0ms; + } } .sticker-arrow { diff --git a/src/utils/dom.ts b/src/utils/dom.ts index 16ff712..a75ae01 100644 --- a/src/utils/dom.ts +++ b/src/utils/dom.ts @@ -11,4 +11,8 @@ export const getStyle = (oElm: any, strCssRule: string): string => { export const getRandomColor = () => { return `hsla(${(Math.floor(Math.random() * 360))}, 100%, 50%, 0.4)` -} \ No newline at end of file +} + +export const getAdaptiveScale = (zoom: number): number => ( + Math.min(1, Math.max(0.4, 1 / (2 ** (13 - zoom)))) +); \ No newline at end of file From 3ca211b9bbe9bf544b57c75ac2158b2367e54ad4 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 11 Feb 2020 15:38:53 +0700 Subject: [PATCH 221/320] fixed adaptive zoom --- src/map/Stickers/index.tsx | 2 +- src/utils/dom.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map/Stickers/index.tsx b/src/map/Stickers/index.tsx index 0d155bc..3cee214 100644 --- a/src/map/Stickers/index.tsx +++ b/src/map/Stickers/index.tsx @@ -15,7 +15,7 @@ interface IProps { const Stickers: FC = memo(({ stickers, is_editing, mapSetSticker, mapDropSticker }) => { const [layer, setLayer] = useState(null); - const [zoom, setZoom] = useState(16); + const [zoom, setZoom] = useState(MainMap.getZoom()); const onZoomChange = useCallback( (event) => { diff --git a/src/utils/dom.ts b/src/utils/dom.ts index a75ae01..59248bc 100644 --- a/src/utils/dom.ts +++ b/src/utils/dom.ts @@ -14,5 +14,5 @@ export const getRandomColor = () => { } export const getAdaptiveScale = (zoom: number): number => ( - Math.min(1, Math.max(0.4, 1 / (2 ** (13 - zoom)))) + Math.min(1, Math.max(0.4, 1.5 / (2 ** (13 - zoom)))) ); \ No newline at end of file From 97fe205e5f571496347af0c2ad88619ca505eb2e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 14 Feb 2020 10:58:09 +0700 Subject: [PATCH 222/320] fixed text rendering --- src/redux/editor/sagas.ts | 1 - src/utils/renderer.ts | 12 +++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 2fc13f6..39275bc 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -118,7 +118,6 @@ function* getRenderData() { yield put(editorSetRenderer({ info: 'Загрузка тайлов', progress: 0.1 })); const { route, stickers, provider }: ReturnType = yield select(selectMap); - const gpx: ReturnType = yield select(selectEditorGpx); const { distance }: ReturnType = yield select(selectEditor); const canvas = document.getElementById('renderer'); diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 22cfdc2..b9d02bc 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -66,13 +66,12 @@ const tileToLatLng = (point: { x: number; y: number }): LatLng => { }; export const getTilePlacement = (): ITilePlacement => { - const map = MainMap; const width = window.innerWidth; const height = window.innerHeight; // map corners - const southWest = map.getBounds().getSouthWest(); - const northEast = map.getBounds().getNorthEast(); + const southWest = MainMap.getBounds().getSouthWest(); + const northEast = MainMap.getBounds().getNorthEast(); // map corner's tile files [x, y, z] to fetch from server const southWestTile = latLngToTile(southWest); @@ -85,8 +84,8 @@ export const getTilePlacement = (): ITilePlacement => { // actual coords of file's corners (they're shifted from view) const southWestTileCoords = tileToLatLng(southWestTile); - const tileTransformTranslate = map.latLngToLayerPoint(southWestTileCoords); - const msw2 = map.latLngToLayerPoint(southWest); + const tileTransformTranslate = MainMap.latLngToLayerPoint(southWestTileCoords); + const msw2 = MainMap.latLngToLayerPoint(southWest); return { minX, @@ -317,7 +316,7 @@ const measureRect = (x: number, y: number, width: number, height: number, scale: rectY: y - 7 * scale - height / 2, rectW: width + 46 * scale, rectH: height + 20 * scale, - textX: reversed ? x - width - 36 : x + 36 * scale, + textX: reversed ? x - width - (36 * scale) : x + 36 * scale, }); const measureDistRect = ( @@ -402,7 +401,6 @@ const composeStickerText = ( // text ctx.fillStyle = 'white'; lines.map((line, i) => ctx.fillText(line, textX, rectY + (6 + 16 * (i + 1)) * scale)); - // ctx.scale(1/scale, 1/scale); }; export const composeDistMark = ({ From 75f76e473b71016028050619932ef557f6e93c94 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 17:11:36 +0700 Subject: [PATCH 223/320] removed backend part --- README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/README.md b/README.md index 26c9ed6..8c58410 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,3 @@ Configs are placed in ```./config/frontend.js``` For development launch ```npm start``` and visit ```http://localhost:8000/``` For production launch ```npm build```, the output will be placed at ```./dist``` folder, you should configure your http server to serve index html from that folder. - -### Backend -Take a look at ```./config/backend.js```. By default your api server will be spawned at ```http://localhost:3000/``` - -For development launch ```npm serve-dev```, it will launch dev server, reloading on every code update - -For production launch ```npm serve``` and make it running in background by any desirable way, such as ```forever``` From 12fa07f243bb652bc6bb3d081abbf3309adcf8e2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 17:37:43 +0700 Subject: [PATCH 224/320] added jenkins file --- Jenkinsfile | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..cc4c8cd --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,11 @@ +pipeline { + agent any + + stages { + stage('Do nothing') { + steps { + sh '/bin/true' + } + } + } +} \ No newline at end of file From b2ba661d5660e48dab455cb339660652d8c5d2fa Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 19:47:08 +0700 Subject: [PATCH 225/320] testing jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index cc4c8cd..c5c089c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,7 +2,7 @@ pipeline { agent any stages { - stage('Do nothing') { + stage('Do nothing 2') { steps { sh '/bin/true' } From 7fa24d2fe65812fe9e1e07f7435d979da4f8a42a Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 19:49:21 +0700 Subject: [PATCH 226/320] testing jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index c5c089c..ebbb27f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,7 +2,7 @@ pipeline { agent any stages { - stage('Do nothing 2') { + stage('Do nothing 3') { steps { sh '/bin/true' } From b9a499d0f005bf5dd89e56aa28550a968a256ae2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 19:52:09 +0700 Subject: [PATCH 227/320] testing jenkins --- Jenkinsfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index ebbb27f..753606f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,10 +1,15 @@ pipeline { agent any + + parameters { + gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' + } stages { - stage('Do nothing 3') { + stage('Show the branch') { steps { sh '/bin/true' + echo "${params.BRANCH}" } } } From caa11c1ecaf27192db057dcff455fae13bfa4258 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:01:47 +0700 Subject: [PATCH 228/320] check jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 753606f..56ecf3a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,7 +6,7 @@ pipeline { } stages { - stage('Show the branch') { + stage('Show the branch 1') { steps { sh '/bin/true' echo "${params.BRANCH}" From d1d324a792105a1cfa8e81267bc130f36d8fd5ba Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:03:26 +0700 Subject: [PATCH 229/320] checking jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 56ecf3a..d342b98 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,7 +2,7 @@ pipeline { agent any parameters { - gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' + gitParameter branchFilter: '(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' } stages { From ae3f6d13da03b18581d37fc7d9129229409aedfa Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:04:53 +0700 Subject: [PATCH 230/320] test jenkins --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index d342b98..f7e2f7c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,14 +2,14 @@ pipeline { agent any parameters { - gitParameter branchFilter: '(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' + gitParameter branchFilter: '.*/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' } stages { stage('Show the branch 1') { steps { sh '/bin/true' - echo "${params.BRANCH}" + echo "BRANCH IS: ${params.BRANCH}" } } } From 8dfd28b34601720c439d2b60fdd2999ce318882b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:05:26 +0700 Subject: [PATCH 231/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index f7e2f7c..99a6df1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,7 +2,7 @@ pipeline { agent any parameters { - gitParameter branchFilter: '.*/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' + gitParameter branchFilter: '.*/(.*)', defaultValue: 'hoogabooga', name: 'BRANCH', type: 'PT_BRANCH' } stages { From cf2391e791e998601210f3fc8b33c4dfef8d9e3b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:09:50 +0700 Subject: [PATCH 232/320] check jenkins --- Jenkinsfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 99a6df1..e5915b3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -13,4 +13,9 @@ pipeline { } } } + + node('master') { + build job: 'build', parameters: [string(name: 'Branch', value: "${env.BRANCH_NAME}")], propagate: true, wait: true + build job: 'release', parameters: [string(name: 'Branch', value: "${env.BRANCH_NAME}")], propagate: true, wait: true + } } \ No newline at end of file From 74f7d2171b2d305cfb42adaf7bb2b3d48d10b1cb Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:13:11 +0700 Subject: [PATCH 233/320] test jenkins --- Jenkinsfile | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index e5915b3..55fc303 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,13 +9,8 @@ pipeline { stage('Show the branch 1') { steps { sh '/bin/true' - echo "BRANCH IS: ${params.BRANCH}" + echo "BRANCH IS: ${env.BRANCH}" } } } - - node('master') { - build job: 'build', parameters: [string(name: 'Branch', value: "${env.BRANCH_NAME}")], propagate: true, wait: true - build job: 'release', parameters: [string(name: 'Branch', value: "${env.BRANCH_NAME}")], propagate: true, wait: true - } } \ No newline at end of file From 03c85c5112dbcadedb4372e594041345345d0f21 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:15:55 +0700 Subject: [PATCH 234/320] test jenkins --- Jenkinsfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 55fc303..136a161 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,6 +7,11 @@ pipeline { stages { stage('Show the branch 1') { + GIT_BRANCH_LOCAL = sh ( + script: "echo $Branch | sed -e 's|origin/||g'", + returnStdout: true + ).trim() + echo "Git branch: ${GIT_BRANCH_LOCAL}" steps { sh '/bin/true' echo "BRANCH IS: ${env.BRANCH}" From 4adacd06987e831a8f4d6f316b2dcfcf949811b3 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:16:58 +0700 Subject: [PATCH 235/320] test jenkins --- Jenkinsfile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 136a161..2544588 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,12 +7,14 @@ pipeline { stages { stage('Show the branch 1') { - GIT_BRANCH_LOCAL = sh ( - script: "echo $Branch | sed -e 's|origin/||g'", - returnStdout: true - ).trim() - echo "Git branch: ${GIT_BRANCH_LOCAL}" + steps { + GIT_BRANCH_LOCAL = sh ( + script: "echo $Branch | sed -e 's|origin/||g'", + returnStdout: true + ).trim() + + echo "Git branch: ${GIT_BRANCH_LOCAL}" sh '/bin/true' echo "BRANCH IS: ${env.BRANCH}" } From 3a8d0021cd588ed37e35c37f0c955e6d8ba1875d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:17:40 +0700 Subject: [PATCH 236/320] test jenkins --- Jenkinsfile | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2544588..2be9607 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,13 +7,12 @@ pipeline { stages { stage('Show the branch 1') { - + GIT_BRANCH_LOCAL = sh ( + script: "echo $Branch | sed -e 's|origin/||g'", + returnStdout: true + ).trim() + steps { - GIT_BRANCH_LOCAL = sh ( - script: "echo $Branch | sed -e 's|origin/||g'", - returnStdout: true - ).trim() - echo "Git branch: ${GIT_BRANCH_LOCAL}" sh '/bin/true' echo "BRANCH IS: ${env.BRANCH}" From 5946f1a61850cf6f81349b9a39d2be8b7d17de4c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:24:04 +0700 Subject: [PATCH 237/320] testing jenkins --- Jenkinsfile | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2be9607..393c449 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,16 +6,30 @@ pipeline { } stages { - stage('Show the branch 1') { - GIT_BRANCH_LOCAL = sh ( - script: "echo $Branch | sed -e 's|origin/||g'", - returnStdout: true - ).trim() - + stage('Build') { steps { - echo "Git branch: ${GIT_BRANCH_LOCAL}" - sh '/bin/true' - echo "BRANCH IS: ${env.BRANCH}" + sh 'npm install' + sh 'npm build' + } + } + + stage('If dev') { + when { + branch 'develop' + } + + steps{ + echo "====== its a dev!!! ======" + } + } + + stage('If dev') { + when { + branch 'master' + } + + steps{ + echo "====== its a MASTER!!! ======" } } } From 124bffedfe6db7d4dcb06d6c21cc71a70a753b5b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:24:51 +0700 Subject: [PATCH 238/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 393c449..881f921 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,7 +23,7 @@ pipeline { } } - stage('If dev') { + stage('If master') { when { branch 'master' } From 750c39102dd10f065953ff0fcbc7c232341f7856 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:27:03 +0700 Subject: [PATCH 239/320] test jenkins --- Jenkinsfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 881f921..b1de289 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,12 +8,12 @@ pipeline { stages { stage('Build') { steps { - sh 'npm install' - sh 'npm build' + // sh 'npm install' + // sh 'npm run build' } } - stage('If dev') { + stage('Deploy: dev') { when { branch 'develop' } @@ -23,7 +23,7 @@ pipeline { } } - stage('If master') { + stage('Deploy: master') { when { branch 'master' } From 865decd7cb1a12cbf2c513a80f37236d05ccb8fb Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:27:10 +0700 Subject: [PATCH 240/320] test jenkins --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b1de289..b994b42 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,8 +8,8 @@ pipeline { stages { stage('Build') { steps { - // sh 'npm install' - // sh 'npm run build' + sh 'npm install' + sh 'npm run build' } } From cc884bcf64cd87206779cd559053e3bd337725bf Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:43:42 +0700 Subject: [PATCH 241/320] test jenkins --- Jenkinsfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b994b42..76236a6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,8 +8,8 @@ pipeline { stages { stage('Build') { steps { - sh 'npm install' - sh 'npm run build' + // sh 'npm install' + // sh 'npm run build' } } @@ -20,6 +20,7 @@ pipeline { steps{ echo "====== its a dev!!! ======" + sh 'pwd' } } From 74b8e7a4c808baa398d7bdfe946b57015c388bfa Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:44:24 +0700 Subject: [PATCH 242/320] test jenkins --- Jenkinsfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 76236a6..3f78e68 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,6 +8,8 @@ pipeline { stages { stage('Build') { steps { + sh 'pwd' + sh 'ls' // sh 'npm install' // sh 'npm run build' } @@ -20,7 +22,6 @@ pipeline { steps{ echo "====== its a dev!!! ======" - sh 'pwd' } } From 67fa8153596a8c0cd3cb77bee22e9d23f70805d2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:47:06 +0700 Subject: [PATCH 243/320] test jenkins --- Jenkinsfile | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3f78e68..4a78d9e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,15 +1,20 @@ pipeline { agent any - parameters { - gitParameter branchFilter: '.*/(.*)', defaultValue: 'hoogabooga', name: 'BRANCH', type: 'PT_BRANCH' + // parameters { + // gitParameter branchFilter: '.*/(.*)', defaultValue: 'hoogabooga', name: 'BRANCH', type: 'PT_BRANCH' + // } + + environment { + ENV_NAME = "${env.BRANCH_NAME == "develop" ? "staging" : "production"}" } stages { stage('Build') { steps { - sh 'pwd' - sh 'ls' + echo $ENV_NAME + // sh 'pwd' + // sh 'ls' // sh 'npm install' // sh 'npm run build' } From 2a8734e44013c2d2aa16b78b41a7a5c2bcc013c9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:48:03 +0700 Subject: [PATCH 244/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4a78d9e..6d92c0c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,7 +12,7 @@ pipeline { stages { stage('Build') { steps { - echo $ENV_NAME + echo "${ENV_NAME}" // sh 'pwd' // sh 'ls' // sh 'npm install' From 3a23bca44e23f51a8f6a30e96afbfbe76d47c36e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:53:29 +0700 Subject: [PATCH 245/320] test jenkins --- Jenkinsfile | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6d92c0c..3fb03ef 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,16 +5,19 @@ pipeline { // gitParameter branchFilter: '.*/(.*)', defaultValue: 'hoogabooga', name: 'BRANCH', type: 'PT_BRANCH' // } - environment { - ENV_NAME = "${env.BRANCH_NAME == "develop" ? "staging" : "production"}" + environment { + WWW = "${env.BRANCH_NAME == "master" ? "/var/www/on-deploy/map/stable/frontend" : "/var/www/on-deploy/map/staging/frontend"}" + ENV = "${env.BRANCH_NAME == "master" ? "/opt/deploys/env/map/stable/frontend" : "/opt/deploys/env/map/staging/frontend"}" + } stages { - stage('Build') { + stage('CHECK') { steps { - echo "${ENV_NAME}" - // sh 'pwd' - // sh 'ls' + echo "WWW: ${WWW}" + echo "ENV: ${ENV}" + sh 'pwd' + sh 'ls' // sh 'npm install' // sh 'npm run build' } From e33a00389482c5e728ac11ae0d066eba1589026d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 20:59:31 +0700 Subject: [PATCH 246/320] test jenkins --- Jenkinsfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Jenkinsfile b/Jenkinsfile index 3fb03ef..8892821 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,6 +16,7 @@ pipeline { steps { echo "WWW: ${WWW}" echo "ENV: ${ENV}" + echo "OSWWW: ${env.ORCHID_STABLE_WWW}" sh 'pwd' sh 'ls' // sh 'npm install' From 0b7cf74266e733af9b0a608614d585b2d609f50b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:02:26 +0700 Subject: [PATCH 247/320] test jenkins --- Jenkinsfile | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 8892821..98cc34e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,9 +6,8 @@ pipeline { // } environment { - WWW = "${env.BRANCH_NAME == "master" ? "/var/www/on-deploy/map/stable/frontend" : "/var/www/on-deploy/map/staging/frontend"}" - ENV = "${env.BRANCH_NAME == "master" ? "/opt/deploys/env/map/stable/frontend" : "/opt/deploys/env/map/staging/frontend"}" - + WWW = "${env.BRANCH_NAME == "master" ? env.ORCHID_STABLE_WWW : env.ORCHID_STAGING_WWW}" + ENV = "${env.BRANCH_NAME == "master" ? env.ORCHID_STABLE_ENV : env.ORCHID_STANGING_ENV}" } stages { @@ -16,11 +15,8 @@ pipeline { steps { echo "WWW: ${WWW}" echo "ENV: ${ENV}" - echo "OSWWW: ${env.ORCHID_STABLE_WWW}" sh 'pwd' sh 'ls' - // sh 'npm install' - // sh 'npm run build' } } From fd01a0db9d788cea2c5135595114c2af6e9a5e9d Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:03:36 +0700 Subject: [PATCH 248/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 98cc34e..c317c0e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,7 +7,7 @@ pipeline { environment { WWW = "${env.BRANCH_NAME == "master" ? env.ORCHID_STABLE_WWW : env.ORCHID_STAGING_WWW}" - ENV = "${env.BRANCH_NAME == "master" ? env.ORCHID_STABLE_ENV : env.ORCHID_STANGING_ENV}" + ENV = "${env.BRANCH_NAME == "master" ? env.ORCHID_STABLE_ENV : env.ORCHID_STAGING_ENV}" } stages { From d5460ea89fdc4cad7971c87cf8af6a9d607e14a9 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:05:09 +0700 Subject: [PATCH 249/320] test jenkins --- Jenkinsfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index c317c0e..532cca0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,6 +17,11 @@ pipeline { echo "ENV: ${ENV}" sh 'pwd' sh 'ls' + + if($WWW == "") { + currentBuild.result = 'SUCCESS' + return + } } } From 79e141826542897bc8749e315c64455e13655678 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:06:38 +0700 Subject: [PATCH 250/320] test jenkins --- Jenkinsfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 532cca0..e1d26a0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -18,9 +18,11 @@ pipeline { sh 'pwd' sh 'ls' - if($WWW == "") { - currentBuild.result = 'SUCCESS' - return + script { + if("${WWW}" == "") { + currentBuild.result = 'UNSTABLE' + return + } } } } From 9ad26ddd560302a3ff923aff1e3340c01310328e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:07:13 +0700 Subject: [PATCH 251/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index e1d26a0..7c1c20d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,7 +19,7 @@ pipeline { sh 'ls' script { - if("${WWW}" == "") { + if("${WWW}" == "/var/www/on-deploy/map/staging/frontend") { currentBuild.result = 'UNSTABLE' return } From 8a80569ccab49b6d2f15a8d0419caea83400b158 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:08:22 +0700 Subject: [PATCH 252/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7c1c20d..470549a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -20,7 +20,7 @@ pipeline { script { if("${WWW}" == "/var/www/on-deploy/map/staging/frontend") { - currentBuild.result = 'UNSTABLE' + currentBuild.result = 'FAILED' return } } From 4cffb64bc5ed104fdcb17a709b1425de851f40d5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:10:36 +0700 Subject: [PATCH 253/320] test jenkins --- Jenkinsfile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 470549a..412bfcf 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,3 +1,5 @@ +def failed = false + pipeline { agent any @@ -21,6 +23,7 @@ pipeline { script { if("${WWW}" == "/var/www/on-deploy/map/staging/frontend") { currentBuild.result = 'FAILED' + failed = true return } } @@ -30,6 +33,9 @@ pipeline { stage('Deploy: dev') { when { branch 'develop' + expression { + !failed + } } steps{ @@ -40,6 +46,9 @@ pipeline { stage('Deploy: master') { when { branch 'master' + expression { + !failed + } } steps{ From 4b7bff0f30518d490a8a0e1227e1cff44af64d06 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:11:19 +0700 Subject: [PATCH 254/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 412bfcf..0ccf06e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -21,7 +21,7 @@ pipeline { sh 'ls' script { - if("${WWW}" == "/var/www/on-deploy/map/staging/frontend") { + if("${WWW}" == "" || "${ENV}" == "") { currentBuild.result = 'FAILED' failed = true return From ed796167ea5490c93ac35040d443b2571592f5cf Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:12:24 +0700 Subject: [PATCH 255/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 0ccf06e..68c9a52 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -21,7 +21,7 @@ pipeline { sh 'ls' script { - if("${WWW}" == "" || "${ENV}" == "") { + if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "dev")) { currentBuild.result = 'FAILED' failed = true return From 4d828baf5c614c7fac16907b1b3eb1839357a144 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:14:57 +0700 Subject: [PATCH 256/320] test jenkins --- Jenkinsfile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 68c9a52..da95eac 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -21,7 +21,8 @@ pipeline { sh 'ls' script { - if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "dev")) { + if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "develop")) { + println "INCORRECT VARIABLES" currentBuild.result = 'FAILED' failed = true return @@ -30,6 +31,15 @@ pipeline { } } + stage('Copy ENV files') { + sh "cp -a ${ENV} ./" + } + + stage('Build') { + sh 'npm install' + sh 'npm run build' + } + stage('Deploy: dev') { when { branch 'develop' From bb5310107b321a3e29b0a640f5963e185fcc77a5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:15:42 +0700 Subject: [PATCH 257/320] test jenkins --- Jenkinsfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index da95eac..4503937 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -32,12 +32,16 @@ pipeline { } stage('Copy ENV files') { - sh "cp -a ${ENV} ./" + steps { + sh "cp -a ${ENV} ./" + } } stage('Build') { - sh 'npm install' - sh 'npm run build' + steps { + sh 'npm install' + sh 'npm run build' + } } stage('Deploy: dev') { From a2f338c3778e5282f72c5d6a4db90ac1b1a9ea3f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:16:34 +0700 Subject: [PATCH 258/320] test jenkins --- Jenkinsfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 4503937..01a5075 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -31,6 +31,12 @@ pipeline { } } + stage('LS') { + steps { + sh 'ls -a' + } + } + stage('Copy ENV files') { steps { sh "cp -a ${ENV} ./" From 80ae6cb37531fcfa54759f447f70cebe9cf787ca Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:17:53 +0700 Subject: [PATCH 259/320] test jenkins --- Jenkinsfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 01a5075..a8c0a59 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -33,10 +33,12 @@ pipeline { stage('LS') { steps { - sh 'ls -a' + sh "ls -a ./" + sh "ls -a ${ENV}" + sh "ls -a ./src/config" } } - + stage('Copy ENV files') { steps { sh "cp -a ${ENV} ./" From 40c4e433bceba312560d9826794b81df72eae3c5 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:21:41 +0700 Subject: [PATCH 260/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index a8c0a59..154aa27 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -41,7 +41,7 @@ pipeline { stage('Copy ENV files') { steps { - sh "cp -a ${ENV} ./" + sh "cp -a ${ENV}/. ./" } } From ef7dd1de24df6aad6dad6155e7034fa6f96f28c8 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:29:15 +0700 Subject: [PATCH 261/320] test jenkins --- Jenkinsfile | 12 +- package.json | 1 + yarn.lock | 1381 +++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 1304 insertions(+), 90 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 154aa27..2588d36 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -31,6 +31,12 @@ pipeline { } } + stage('Copy ENV files') { + steps { + sh "cp -a ${ENV}/. ./" + } + } + stage('LS') { steps { sh "ls -a ./" @@ -39,12 +45,6 @@ pipeline { } } - stage('Copy ENV files') { - steps { - sh "cp -a ${ENV}/. ./" - } - } - stage('Build') { steps { sh 'npm install' diff --git a/package.json b/package.json index 2b9aced..131e7ea 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "less": "^3.8.1", "less-middleware": "~2.2.1", "lodash": "^4.17.10", + "npm": "^6.14.3", "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", "raleway-cyrillic": "^4.0.2", diff --git a/yarn.lock b/yarn.lock index 61b8557..cc4f392 100644 --- a/yarn.lock +++ b/yarn.lock @@ -794,6 +794,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@iarna/cli@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" + integrity sha512-ukITQAqVs2n9HGmn3car/Ir7d3ta650iXhrG7pjr3EWdFmJuuOVWgYsu7ftsSe5VifEFFhjxVuX9+8F7L8hwcA== + dependencies: + signal-exit "^3.0.2" + update-notifier "^2.2.0" + yargs "^8.0.2" + "@jimp/bmp@^0.6.8": version "0.6.8" resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.6.8.tgz#8abbfd9e26ba17a47fab311059ea9f7dd82005b6" @@ -1334,7 +1343,15 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abbrev@1: +JSONStream@^1.3.4, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -1381,6 +1398,27 @@ add-px-to-style@1.0.0: resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" integrity sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo= +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1478,6 +1516,16 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= + any-base@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" @@ -1491,11 +1539,21 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.1.2 || 2", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1593,7 +1651,7 @@ array.prototype.flat@^1.2.1: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -asap@~2.0.3: +asap@^2.0.0, asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -2527,6 +2585,18 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bin-links@^1.1.2, bin-links@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.7.tgz#34b79ea9d0e575d7308afeff0c6b2fc24c793359" + integrity sha512-/eaLaTu7G7/o7PV04QPy1HRT65zf+1tFkPGv0sPTV0tRwufooYBQO3zrcyGgm+ja+ZtBf2GEuKjDRJ2pPG+yqA== + dependencies: + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -2539,7 +2609,7 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bluebird@^3.5.1, bluebird@^3.5.5: +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -2762,6 +2832,21 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2791,7 +2876,7 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" -cacache@^12.0.2: +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: version "12.0.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== @@ -2827,6 +2912,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-limit@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" + integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -2879,7 +2969,7 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^4.0.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -2978,6 +3068,11 @@ chownr@^1.0.1, chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== +chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -2990,6 +3085,18 @@ ci-info@^1.5.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cidr-regex@^2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" + integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== + dependencies: + ip-regex "^2.1.0" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -3044,6 +3151,14 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= + dependencies: + string-width "^2.0.0" + strip-ansi "^3.0.1" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -3051,11 +3166,30 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-table3@^0.5.0, cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -3084,6 +3218,14 @@ clone@^2.1.1, clone@^2.1.2: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3176,11 +3318,24 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3275,6 +3430,14 @@ concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + config@^1.24.0: version "1.31.0" resolved "https://registry.yarnpkg.com/config/-/config-1.31.0.tgz#ab08aeba6536015d220cd0afe14b3e0501082542" @@ -3304,7 +3467,7 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -3781,14 +3944,14 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6. dependencies: ms "2.0.0" -debug@=3.1.0: +debug@3.1.0, debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -3802,7 +3965,12 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize@^1.1.2, decamelize@^1.2.0: +debuglog@*, debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +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= @@ -3842,6 +4010,13 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.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" @@ -3941,16 +4116,29 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-indent@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +dezalgo@^1.0.0, dezalgo@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -4086,6 +4274,11 @@ dot-prop@^4.1.0, dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -4109,6 +4302,11 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -4147,6 +4345,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -4191,6 +4396,16 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -4249,11 +4464,18 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.5: +es6-promise@^4.0.3, es6-promise@^4.0.5: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + es6-symbol@^3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" @@ -4734,7 +4956,7 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" -figgy-pudding@^3.5.1: +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== @@ -4827,6 +5049,11 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-npm-prefix@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" + integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== + find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -4946,6 +5173,14 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +from2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" + integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.10" + from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -4975,7 +5210,16 @@ fs-readdir-recursive@^1.1.0: resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== -fs-write-stream-atomic@^1.0.8: +fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= @@ -5022,6 +5266,28 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gentle-fs@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.0.tgz#13538db5029400f98684be4894e8a7d8f0d1ea7f" + integrity sha512-3k2CgAmPxuz7S6nKK+AqFE2AdM1QuwqKLPKzIET3VRwK++3q96MsNFobScDjlCrq97ZJ8y5R725MOlm6ffUCjg== + dependencies: + aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" + fs-vacuum "^1.2.10" + graceful-fs "^4.1.11" + iferr "^0.1.5" + infer-owner "^1.0.4" + mkdirp "^0.5.1" + path-is-inside "^1.0.2" + read-cmd-shim "^1.0.1" + slide "^1.1.6" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -5042,7 +5308,7 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -5069,7 +5335,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, 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== @@ -5185,7 +5451,7 @@ gpx-parser-builder@^1.0.2: dependencies: isomorphic-xml2js "~0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -5213,7 +5479,7 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" -har-validator@~5.1.0: +har-validator@~5.1.0, har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -5248,7 +5514,7 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: +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" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -5385,6 +5651,11 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== +hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -5453,6 +5724,11 @@ htmlparser2@^3.3.0: inherits "^2.0.1" readable-stream "^3.1.1" +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -5495,6 +5771,14 @@ http-errors@~1.7.2: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -5537,7 +5821,22 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4: +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5573,6 +5872,11 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +iferr@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" + integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== + ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -5611,7 +5915,7 @@ import-local@2.0.0, import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -5628,12 +5932,12 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -infer-owner@^1.0.3: +infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflight@^1.0.4: +inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -5641,7 +5945,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5661,6 +5965,20 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== + dependencies: + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -5701,6 +6019,11 @@ invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -5711,7 +6034,7 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0, ip@^1.1.5: +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -5802,6 +6125,13 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" +is-cidr@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.0.tgz#72e233d8e1c4cd1d3f11713fcce3eba7b0e3476f" + integrity sha512-3kxTForpuj8O4iHn0ocsn1jxRm5VYm60GDghK6HXmpn4IyZOoRy9/GmdjFA2yEMqw91TB1/K3bFTuI7FlFNR1g== + dependencies: + cidr-regex "^2.0.10" + is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -6200,7 +6530,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.0, 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" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -6266,6 +6596,11 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -6328,6 +6663,18 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" +lazy-property@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" + integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -6437,6 +6784,140 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libcipm@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.7.tgz#76cd675c98bdaae64db88b782b01b804b6d02c8a" + integrity sha512-fTq33otU3PNXxxCTCYCYe7V96o59v/o7bvtspmbORXpgFk+wcWrGf5x6tBgui5gCed/45/wtPomBsZBYm5KbIw== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.1" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + graceful-fs "^4.1.11" + ini "^1.3.5" + lock-verify "^2.0.2" + mkdirp "^0.5.1" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + pacote "^9.1.0" + read-package-json "^2.0.13" + rimraf "^2.6.2" + worker-farm "^1.6.0" + +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.3" + find-npm-prefix "^1.0.2" + libnpmaccess "^3.0.2" + libnpmconfig "^1.2.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + lock-verify "^2.0.2" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" + npmlog "^4.1.2" + pacote "^9.5.3" + read-package-json "^2.0.13" + stringify-package "^1.0.0" + +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== + dependencies: + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + +libnpmconfig@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== + dependencies: + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" + +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmpublish@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + semver "^5.5.1" + ssri "^6.0.1" + +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== + dependencies: + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.2.tgz#5a4171b9b92dd031463ef66a4af9f5cbd6b09572" + integrity sha512-ujaYToga1SAX5r7FU5ShMFi88CWpY75meNZtr6RtEyv4l2ZK3+Wgvxq2IqlwWBiDZOqhumdeiocPS1aKrCMe3A== + dependencies: + dotenv "^5.0.1" + npm-package-arg "^6.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.0" + update-notifier "^2.3.0" + which "^1.3.0" + y18n "^4.0.0" + yargs "^11.0.0" + line-height@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.1.1.tgz#e86705fbf0a6f50607aed65500d69db2d9db37e2" @@ -6527,16 +7008,82 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lock-verify@^2.0.2, lock-verify@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.0.tgz#12432feb68bb647071c78c44bde16029a0f7d935" + integrity sha512-BhM1Vqsu7x0s+EalTifNjdDPks+ZjdAhComvnA6VcCIlDOI5ouELXqAe1BYuEIP4zGN0W08xVm6byJV1LnCiJg== + dependencies: + "@iarna/cli" "^1.2.0" + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= + dependencies: + lodash._getnative "^3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + 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.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -6552,6 +7099,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= + lodash.template@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -6567,11 +7119,21 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.uniq@^4.5.0: +lodash.union@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= +lodash.without@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= + "lodash@>=3.5 <5", lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" @@ -6657,6 +7219,23 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -6705,11 +7284,23 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +meant@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" + integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -6868,7 +7459,12 @@ minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -6930,6 +7526,13 @@ mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "0.0.8" +mkdirp@^0.5.3, mkdirp@~0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== + dependencies: + minimist "^1.2.5" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -6952,7 +7555,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -6975,6 +7578,11 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nan@^2.0.8, nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -7002,15 +7610,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -7038,11 +7637,37 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch-npm@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.3.tgz#efae4aacb0500444e449a51fc1467397775ebc38" + integrity sha512-DgwoKEsqLnFZtk3ap7GWBHcHwnUhsNmQqEDcdjfQ8GofLEFJ081NAd4Uin3R7RFZBWVJCwHISw1oaEqPgSLloA== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-gyp@^5.0.2, node-gyp@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" + integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + "node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -7072,22 +7697,6 @@ node-forge@0.9.0: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.46: version "1.1.47" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" @@ -7111,7 +7720,15 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +nopt@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -7153,6 +7770,14 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +npm-audit-report@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.2.tgz#303bc78cd9e4c226415076a4f7e528c89fc77018" + integrity sha512-abeqS5ONyXNaZJPGAf6TOUMNdSe1Y6cpc9MLBRn+CuUoYbfdca6AxOyXVlfIv9OgKX+cacblbG5w7A6ccwoTPw== + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" + npm-bundled@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" @@ -7160,18 +7785,91 @@ npm-bundled@^1.0.1: dependencies: npm-normalize-package-bin "^1.0.1" -npm-normalize-package-bin@^1.0.1: +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= + +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== + dependencies: + semver "^2.3.0 || 3.x || 4 || 5" + +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" + integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-logical-tree@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" + integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-packlist@^1.1.6: - version "1.4.7" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" - integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12, npm-packlist@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-profile@^4.0.2, npm-profile@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" + integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ== + dependencies: + aproba "^1.1.2 || 2" + figgy-pudding "^3.4.1" + npm-registry-fetch "^4.0.0" + +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.3.tgz#3c2179e39e04f9348b1c2979545951d36bee8766" + integrity sha512-WGvUx0lkKFhu9MbiGFuT9nG2NpfQ+4dCJwRwwtK2HK5izJEvwDxMeUyqbuMS7N/OkpVCqDorV6rO5E4V9F8lJw== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" npm-run-path@^2.0.0: version "2.0.2" @@ -7180,7 +7878,133 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: +npm-user-validate@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" + integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= + +npm@^6.14.3: + version "6.14.3" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.3.tgz#a122618543c6670765cf5e827cd996b5552f9b65" + integrity sha512-3tQYVEEdSGQGYoXhZvNqW8faqCidfMMaL387RdDo4Uu5kQy4IgvJ13NIsWVMQ6e3QWlbicNMSpFiyzYfMUuPDw== + dependencies: + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" + archy "~1.0.0" + bin-links "^1.1.7" + bluebird "^3.5.5" + byte-size "^5.0.1" + cacache "^12.0.3" + call-limit "^1.1.1" + chownr "^1.1.4" + ci-info "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + columnify "~1.5.4" + config-chain "^1.1.12" + detect-indent "~5.0.0" + detect-newline "^2.1.0" + dezalgo "~1.0.3" + editor "~1.0.0" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + fs-vacuum "~1.2.10" + fs-write-stream-atomic "~1.0.10" + gentle-fs "^2.3.0" + glob "^7.1.6" + graceful-fs "^4.2.3" + has-unicode "~2.0.1" + hosted-git-info "^2.8.8" + iferr "^1.0.2" + infer-owner "^1.0.4" + inflight "~1.0.6" + inherits "^2.0.4" + ini "^1.3.5" + init-package-json "^1.10.3" + is-cidr "^3.0.0" + json-parse-better-errors "^1.0.2" + lazy-property "~1.0.0" + libcipm "^4.0.7" + libnpm "^3.0.1" + libnpmaccess "^3.0.2" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + libnpx "^10.2.2" + lock-verify "^2.1.0" + lockfile "^1.0.4" + lodash._baseuniq "~4.6.0" + lodash.clonedeep "~4.5.0" + lodash.union "~4.6.0" + lodash.uniq "~4.5.0" + lodash.without "~4.4.0" + lru-cache "^5.1.1" + meant "~1.0.1" + mississippi "^3.0.0" + mkdirp "^0.5.3" + move-concurrently "^1.0.1" + node-gyp "^5.1.0" + nopt "~4.0.1" + normalize-package-data "^2.5.0" + npm-audit-report "^1.3.2" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.4" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.8" + npm-pick-manifest "^3.0.2" + npm-profile "^4.0.4" + npm-registry-fetch "^4.0.3" + npm-user-validate "~1.0.0" + npmlog "~4.1.2" + once "~1.4.0" + opener "^1.5.1" + osenv "^0.1.5" + pacote "^9.5.12" + path-is-inside "~1.0.2" + promise-inflight "~1.0.1" + qrcode-terminal "^0.12.0" + query-string "^6.8.2" + qw "~1.0.1" + read "~1.0.7" + read-cmd-shim "^1.0.5" + read-installed "~4.0.3" + read-package-json "^2.1.1" + read-package-tree "^5.3.1" + readable-stream "^3.6.0" + readdir-scoped-modules "^1.1.0" + request "^2.88.0" + retry "^0.12.0" + rimraf "^2.7.1" + safe-buffer "^5.1.2" + semver "^5.7.1" + sha "^3.0.0" + slide "~1.1.6" + sorted-object "~2.0.1" + sorted-union-stream "~2.1.3" + ssri "^6.0.1" + stringify-package "^1.0.1" + tar "^4.4.13" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + uid-number "0.0.6" + umask "~1.1.0" + unique-filename "^1.1.1" + unpipe "~1.0.0" + update-notifier "^2.5.0" + uuid "^3.3.3" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.3" + +npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -7335,7 +8159,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -7349,6 +8173,11 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -7393,6 +8222,15 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -7407,7 +8245,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: +osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -7500,6 +8338,42 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" +pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: + version "9.5.12" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + pako@^1.0.5, pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -7613,7 +8487,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -8375,11 +9249,19 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: +promise-inflight@^1.0.1, promise-inflight@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -8387,6 +9269,13 @@ promise@^7.1.1: dependencies: asap "~2.0.3" +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -8396,6 +9285,18 @@ prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, pr object-assign "^4.1.1" react-is "^16.8.1" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -8414,7 +9315,7 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24: +psl@^1.1.24, psl@^1.1.28: version "1.7.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== @@ -8471,7 +9372,7 @@ punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -8481,6 +9382,11 @@ q@^1.1.2: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -8504,6 +9410,15 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^6.8.2: + version "6.11.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.1.tgz#ab021f275d463ce1b61e88f0ce6988b3e8fe7c2c" + integrity sha512-1ZvJOUl8ifkkBxu2ByVM/8GijMIPx+cef7u3yroO3Ogm4DOdZcF5dcrWTIlSHe3Pg/mtlt6/eFjObDfJureZZA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -8519,6 +9434,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +qw@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" + integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= + raf@^3.1.0, raf@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -8640,7 +9560,7 @@ rc-util@^4.0.4, rc-util@^4.15.3, rc-util@^4.4.0: react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -8764,6 +9684,48 @@ reactrangeslider@^3.0.6: resolved "https://registry.yarnpkg.com/reactrangeslider/-/reactrangeslider-3.0.6.tgz#5f3e1cef24fd3065322d4c01a0010199910f3737" integrity sha1-Xz4c7yT9MGUyLUwBoAEBmZEPNzc= +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -8798,6 +9760,13 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read@1, read@~1.0.1, read@~1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -8820,6 +9789,35 @@ readable-stream@^3.0.6, readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.1.10: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -9100,6 +10098,32 @@ request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -9163,6 +10187,11 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" @@ -9193,6 +10222,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -9208,7 +10242,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9261,7 +10295,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.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: +safe-buffer@>=5.1.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, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -9278,7 +10312,7 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: +sax@>=0.6.0, sax@~1.2.1, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -9334,7 +10368,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -9444,6 +10478,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +sha@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" + integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw== + dependencies: + graceful-fs "^4.1.2" + shallowequal@^1.0.1, shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -9490,6 +10531,16 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" +slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -9547,6 +10598,22 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -9554,6 +10621,19 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" +sorted-object@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= + +sorted-union-stream@~2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" + integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= + dependencies: + from2 "^1.3.0" + stream-iterate "^1.1.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -9654,6 +10734,11 @@ spdy@^4.0.1: select-hose "^2.0.0" spdy-transport "^3.0.0" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -9688,7 +10773,7 @@ ssri@^5.2.4: dependencies: safe-buffer "^5.1.1" -ssri@^6.0.1: +ssri@^6.0.0, ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== @@ -9740,6 +10825,14 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-iterate@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" + integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= + dependencies: + readable-stream "^2.1.5" + stream-shift "^1.0.0" + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -9750,6 +10843,11 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -9799,6 +10897,11 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -9806,6 +10909,11 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== + stringstream@~0.0.4: version "0.0.6" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" @@ -9996,7 +11104,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4.4.2: +tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -10058,7 +11166,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6: +"through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -10095,6 +11203,11 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + tiny-warning@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -10196,6 +11309,14 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -10347,6 +11468,16 @@ uglifyjs-webpack-plugin@^1.3.0: webpack-sources "^1.1.0" worker-farm "^1.5.2" +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0, umask@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + unc-path-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -10449,7 +11580,7 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^2.3.0: +update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== @@ -10527,6 +11658,18 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + util.promisify@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -10569,7 +11712,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -10579,7 +11722,7 @@ v8-compile-cache@2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -10587,6 +11730,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" @@ -10646,6 +11796,13 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + webpack-cli@^3.2.3: version "3.3.10" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" @@ -10816,7 +11973,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -10842,7 +11999,7 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -worker-farm@^1.5.2, worker-farm@^1.7.0: +worker-farm@^1.5.2, worker-farm@^1.6.0, worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== @@ -10871,7 +12028,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0: +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== @@ -10932,6 +12089,11 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -10963,6 +12125,20 @@ yargs-parser@^13.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + yargs@12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -10998,6 +12174,43 @@ yargs@13.2.4: y18n "^4.0.0" yargs-parser "^13.1.0" +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.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 "^9.0.2" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + 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" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From b207cdd55c0c0f46df9412f1b18193e78adbd603 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:41:56 +0700 Subject: [PATCH 262/320] test jenkins --- Jenkinsfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2588d36..df9226b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -61,7 +61,8 @@ pipeline { } steps{ - echo "====== its a dev!!! ======" + sh "rm -rf ${WWW}" + sh "mv ./dist ${WWW}" } } From 036dae321f2648098f43d17e7114ad18d829d8db Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:48:10 +0700 Subject: [PATCH 263/320] test jenkins --- Jenkinsfile | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index df9226b..7a0e0e7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -13,25 +13,27 @@ pipeline { } stages { - stage('CHECK') { + stage('check') { steps { echo "WWW: ${WWW}" echo "ENV: ${ENV}" + echo "WORKSPACE: ${env.WORKSPACE},${WORKSPACE}" sh 'pwd' sh 'ls' script { - if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "develop")) { + if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "dvelop")) { println "INCORRECT VARIABLES" currentBuild.result = 'FAILED' failed = true + error "Build failed :-(" return } } } } - stage('Copy ENV files') { + stage('copy env') { steps { sh "cp -a ${ENV}/. ./" } @@ -52,9 +54,9 @@ pipeline { } } - stage('Deploy: dev') { + stage('deploy') { when { - branch 'develop' + // branch 'develop' expression { !failed } @@ -65,18 +67,5 @@ pipeline { sh "mv ./dist ${WWW}" } } - - stage('Deploy: master') { - when { - branch 'master' - expression { - !failed - } - } - - steps{ - echo "====== its a MASTER!!! ======" - } - } } } \ No newline at end of file From 6c39d20b98c0ba70df3a47515b488fc899398193 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:48:59 +0700 Subject: [PATCH 264/320] test jenkins --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7a0e0e7..ccb1c1a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -22,7 +22,7 @@ pipeline { sh 'ls' script { - if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "dvelop")) { + if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "develop")) { println "INCORRECT VARIABLES" currentBuild.result = 'FAILED' failed = true From fa6f481906d3fdaf9d939b8b78de9818250721f8 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 20 Mar 2020 21:49:53 +0700 Subject: [PATCH 265/320] test jenkins --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index ccb1c1a..488628a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,7 +17,7 @@ pipeline { steps { echo "WWW: ${WWW}" echo "ENV: ${ENV}" - echo "WORKSPACE: ${env.WORKSPACE},${WORKSPACE}" + echo "WORKSPACE: ${WORKSPACE}" sh 'pwd' sh 'ls' @@ -35,7 +35,7 @@ pipeline { stage('copy env') { steps { - sh "cp -a ${ENV}/. ./" + sh "cp -a ${ENV}/. ${WORKSPACE}" } } @@ -64,7 +64,7 @@ pipeline { steps{ sh "rm -rf ${WWW}" - sh "mv ./dist ${WWW}" + sh "mv ${WORKSPACE}/dist ${WWW}" } } } From 608ec84a539f1d85d8fead2be152101962d22e52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2020 08:33:26 +0000 Subject: [PATCH 266/320] Bump lodash from 4.17.15 to 4.17.19 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] --- package-lock.json | 3438 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- yarn.lock | 44 +- 3 files changed, 3426 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3b8df2c..b968d7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,12 @@ "source-map": "0.5.7" }, "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -52,6 +58,12 @@ "trim-right": "1.0.1" }, "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -99,6 +111,14 @@ "@babel/helper-function-name": "7.1.0", "@babel/types": "7.3.2", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "@babel/helper-explode-assignable-expression": { @@ -170,6 +190,14 @@ "@babel/template": "7.2.2", "@babel/types": "7.3.2", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "@babel/helper-optimise-call-expression": { @@ -194,6 +222,14 @@ "dev": true, "requires": { "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "@babel/helper-remap-async-to-generator": { @@ -394,6 +430,14 @@ "requires": { "@babel/helper-plugin-utils": "7.0.0", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "@babel/plugin-transform-classes": { @@ -738,6 +782,12 @@ "ms": "2.1.1" } }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -757,6 +807,12 @@ "to-fast-properties": "2.0.0" }, "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -1458,6 +1514,14 @@ "mkdirp": "0.5.1", "source-map-support": "0.5.10", "webpack-log": "1.2.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "aws-sign2": { @@ -1603,6 +1667,12 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -1651,6 +1721,14 @@ "lodash": "4.17.15", "source-map": "0.5.7", "trim-right": "1.0.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "@babel/helper-function-name": { @@ -1703,6 +1781,14 @@ "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "@babel/traverse": { @@ -1721,6 +1807,14 @@ "globals": "11.11.0", "invariant": "2.2.4", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "@babel/types": { @@ -1732,6 +1826,14 @@ "esutils": "2.0.2", "lodash": "4.17.15", "to-fast-properties": "2.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "babylon": { @@ -1797,6 +1899,12 @@ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -1860,6 +1968,14 @@ "babel-runtime": "6.26.0", "babel-types": "6.26.0", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "babel-helper-explode-assignable-expression": { @@ -1937,6 +2053,14 @@ "babel-runtime": "6.26.0", "babel-types": "6.26.0", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "babel-helper-remap-async-to-generator": { @@ -2016,6 +2140,14 @@ "glob": "7.1.3", "lodash": "4.17.15", "require-package-name": "2.0.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "babel-plugin-ramda": { @@ -2164,6 +2296,14 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "babel-plugin-transform-es2015-classes": { @@ -2628,6 +2768,12 @@ "source-map-support": "0.4.18" }, "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -2665,6 +2811,14 @@ "babel-types": "6.26.0", "babylon": "6.18.0", "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "babel-traverse": { @@ -2689,6 +2843,12 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true } } }, @@ -2702,6 +2862,14 @@ "esutils": "2.0.2", "lodash": "4.17.15", "to-fast-properties": "1.0.3" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "babylon": { @@ -2873,6 +3041,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "optional": true, "requires": { "hoek": "2.16.3" } @@ -5228,6 +5397,12 @@ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -5377,6 +5552,12 @@ "esutils": "2.0.2", "isarray": "1.0.0" } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true } } }, @@ -6088,7 +6269,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -6109,12 +6291,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" @@ -6129,17 +6313,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -6256,7 +6443,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -6268,6 +6456,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "1.0.1" } @@ -6282,6 +6471,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "1.1.11" } @@ -6289,12 +6479,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "5.1.2", "yallist": "3.0.3" @@ -6313,6 +6505,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6393,7 +6586,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6405,6 +6599,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1.0.2" } @@ -6490,7 +6685,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6526,6 +6722,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -6545,6 +6742,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "2.1.1" } @@ -6588,12 +6786,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -6955,7 +7155,8 @@ "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "optional": true }, "hoist-non-react-statics": { "version": "2.5.5", @@ -7100,6 +7301,12 @@ "json5": "0.5.1", "object-assign": "4.1.1" } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true } } }, @@ -7194,6 +7401,14 @@ "is-glob": "4.0.0", "lodash": "4.17.15", "micromatch": "3.1.10" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "http-signature": { @@ -7413,6 +7628,14 @@ "string-width": "2.1.1", "strip-ansi": "4.0.0", "through": "2.3.8" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "internal-ip": { @@ -8017,6 +8240,13 @@ "requires": { "lodash": "4.17.15", "webpack-sources": "1.3.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + } } }, "latest-version": { @@ -8048,7 +8278,8 @@ "integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==" }, "leaflet-editable-polyline": { - "version": "github:muerwre/leaflet-editable-polyline#a8e481464d9c286c3a0a1392f1f96f7e2af40489" + "version": "github:muerwre/leaflet-editable-polyline#a8e481464d9c286c3a0a1392f1f96f7e2af40489", + "from": "github:muerwre/leaflet-editable-polyline#a8e481464d9c286c3a0a1392f1f96f7e2af40489" }, "leaflet-geometryutil": { "version": "0.9.1", @@ -8060,6 +8291,7 @@ }, "leaflet-routing-machine": { "version": "github:muerwre/leaflet-routing-machine#25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b", + "from": "github:muerwre/leaflet-routing-machine#25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b", "requires": { "@mapbox/corslite": "0.0.7", "@mapbox/polyline": "0.2.0", @@ -8235,6 +8467,14 @@ "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "optional": true + } } }, "source-map": { @@ -8386,9 +8626,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash._getnative": { "version": "3.9.1", @@ -9159,6 +9399,3112 @@ "sort-keys": "1.1.2" } }, + "npm": { + "version": "6.14.6", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.6.tgz", + "integrity": "sha512-axnz6iHFK6WPE0js/+mRp+4IOwpHn5tJEw5KB6FiCU764zmffrhsYHbSHi2kKqNkRBt53XasXjngZfBD3FQzrQ==", + "requires": { + "JSONStream": "^1.3.5", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "^2.0.0", + "archy": "~1.0.0", + "bin-links": "^1.1.7", + "bluebird": "^3.5.5", + "byte-size": "^5.0.1", + "cacache": "^12.0.3", + "call-limit": "^1.1.1", + "chownr": "^1.1.4", + "ci-info": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.1", + "cmd-shim": "^3.0.3", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.3.0", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.8.8", + "iferr": "^1.0.2", + "imurmurhash": "*", + "infer-owner": "^1.0.4", + "inflight": "~1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^3.0.0", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^4.0.7", + "libnpm": "^3.0.1", + "libnpmaccess": "^3.0.2", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "libnpx": "^10.2.2", + "lock-verify": "^2.1.0", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^5.1.1", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.5", + "move-concurrently": "^1.0.1", + "node-gyp": "^5.1.0", + "nopt": "^4.0.3", + "normalize-package-data": "^2.5.0", + "npm-audit-report": "^1.3.2", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "^3.0.2", + "npm-lifecycle": "^3.1.4", + "npm-package-arg": "^6.1.1", + "npm-packlist": "^1.4.8", + "npm-pick-manifest": "^3.0.2", + "npm-profile": "^4.0.4", + "npm-registry-fetch": "^4.0.5", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^9.5.12", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.8.2", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "^1.0.5", + "read-installed": "~4.0.3", + "read-package-json": "^2.1.1", + "read-package-tree": "^5.3.1", + "readable-stream": "^3.6.0", + "readdir-scoped-modules": "^1.1.0", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "^2.7.1", + "safe-buffer": "^5.1.2", + "semver": "^5.7.1", + "sha": "^3.0.0", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.1", + "stringify-package": "^1.0.1", + "tar": "^4.4.13", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "^1.1.1", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.3", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.7.0", + "write-file-atomic": "^2.4.3" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.5", + "bundled": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "agent-base": { + "version": "4.3.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "bundled": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "2.0.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.8.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.7", + "bundled": true, + "requires": { + "bluebird": "^3.5.3", + "cmd-shim": "^3.0.0", + "gentle-fs": "^2.3.0", + "graceful-fs": "^4.1.15", + "npm-normalize-package-bin": "^1.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "bluebird": { + "version": "3.5.5", + "bundled": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true + }, + "byline": { + "version": "5.0.0", + "bundled": true + }, + "byte-size": { + "version": "5.0.1", + "bundled": true + }, + "cacache": { + "version": "12.0.3", + "bundled": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.1", + "bundled": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "bundled": true + }, + "ci-info": { + "version": "2.0.0", + "bundled": true + }, + "cidr-regex": { + "version": "2.0.10", + "bundled": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.1", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "3.0.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true + }, + "colors": { + "version": "1.3.3", + "bundled": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "bundled": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "bundled": true + } + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "bundled": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "2.2.0", + "bundled": true + }, + "err-code": { + "version": "1.1.2", + "bundled": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "bundled": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "bundled": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.2", + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "bundled": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true + }, + "figgy-pudding": { + "version": "3.5.1", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "requires": { + "minipass": "^2.6.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "5.0.0", + "bundled": true + }, + "gentle-fs": { + "version": "2.3.0", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "chownr": "^1.1.2", + "cmd-shim": "^3.0.3", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "infer-owner": "^1.0.4", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "get-caller-file": { + "version": "1.0.3", + "bundled": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "bundled": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + }, + "har-validator": { + "version": "5.1.0", + "bundled": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true + }, + "has-symbols": { + "version": "1.0.0", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.8.8", + "bundled": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "bundled": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "bundled": true + }, + "ip": { + "version": "1.1.5", + "bundled": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true + }, + "is-callable": { + "version": "1.1.4", + "bundled": true + }, + "is-ci": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ci-info": "^1.5.0" + }, + "dependencies": { + "ci-info": { + "version": "1.6.0", + "bundled": true + } + } + }, + "is-cidr": { + "version": "3.0.0", + "bundled": true, + "requires": { + "cidr-regex": "^2.0.10" + } + }, + "is-date-object": { + "version": "1.0.1", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-regex": { + "version": "1.0.4", + "bundled": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "is-symbol": { + "version": "1.0.2", + "bundled": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "lcid": { + "version": "2.0.0", + "bundled": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "libcipm": { + "version": "4.0.7", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "ini": "^1.3.5", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^9.1.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpm": { + "version": "3.0.1", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "find-npm-prefix": "^1.0.2", + "libnpmaccess": "^3.0.2", + "libnpmconfig": "^1.2.1", + "libnpmhook": "^5.0.3", + "libnpmorg": "^1.0.1", + "libnpmpublish": "^1.1.2", + "libnpmsearch": "^2.0.2", + "libnpmteam": "^1.0.2", + "lock-verify": "^2.0.2", + "npm-lifecycle": "^3.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "npm-profile": "^4.0.2", + "npm-registry-fetch": "^4.0.0", + "npmlog": "^4.1.2", + "pacote": "^9.5.3", + "read-package-json": "^2.0.13", + "stringify-package": "^1.0.0" + } + }, + "libnpmaccess": { + "version": "3.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmconfig": { + "version": "1.2.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "bundled": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "bundled": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true + } + } + }, + "libnpmhook": { + "version": "5.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmorg": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmpublish": { + "version": "1.1.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-registry-fetch": "^4.0.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + } + }, + "libnpmsearch": { + "version": "2.0.2", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpmteam": { + "version": "1.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "figgy-pudding": "^3.4.1", + "get-stream": "^4.0.0", + "npm-registry-fetch": "^4.0.0" + } + }, + "libnpx": { + "version": "10.2.2", + "bundled": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "^6.1.0", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true + }, + "lru-cache": { + "version": "5.1.1", + "bundled": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "5.0.2", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mem": { + "version": "4.3.0", + "bundled": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "bundled": true + } + } + }, + "mime-db": { + "version": "1.35.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "bundled": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "bundled": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true + }, + "nice-try": { + "version": "1.0.5", + "bundled": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "5.1.0", + "bundled": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + } + }, + "nopt": { + "version": "4.0.3", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.0", + "bundled": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "npm-audit-report": { + "version": "1.3.2", + "bundled": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.2", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "3.1.4", + "bundled": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true + }, + "npm-package-arg": { + "version": "6.1.1", + "bundled": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.8", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "4.0.4", + "bundled": true, + "requires": { + "aproba": "^1.1.2 || 2", + "figgy-pudding": "^3.4.1", + "npm-registry-fetch": "^4.0.0" + } + }, + "npm-registry-fetch": { + "version": "4.0.5", + "bundled": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "bundled": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "object-keys": { + "version": "1.0.12", + "bundled": true + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "bundled": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "bundled": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "3.1.0", + "bundled": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "bundled": true + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "p-is-promise": { + "version": "2.1.0", + "bundled": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "9.5.12", + "bundled": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-normalize-package-bin": "^1.0.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^3.0.0", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "pify": { + "version": "3.0.0", + "bundled": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true + }, + "protoduck": { + "version": "5.0.1", + "bundled": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "psl": { + "version": "1.1.29", + "bundled": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "query-string": { + "version": "6.8.2", + "bundled": true, + "requires": { + "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "bundled": true + } + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.5", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.1.1", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "bundled": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.4.0", + "bundled": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "bundled": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "semver": { + "version": "5.7.1", + "bundled": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "sha": { + "version": "3.0.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "smart-buffer": { + "version": "4.1.0", + "bundled": true + }, + "socks": { + "version": "2.3.3", + "bundled": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "bundled": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "bundled": true + }, + "split-on-first": { + "version": "1.1.0", + "bundled": true + }, + "sshpk": { + "version": "1.14.2", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "bundled": true + } + } + }, + "stringify-package": { + "version": "1.0.1", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.1", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true + }, + "util-promisify": { + "version": "2.1.0", + "bundled": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.3", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.1", + "bundled": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "bundled": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.4.3", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true + }, + "yargs": { + "version": "11.1.1", + "bundled": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.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": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "bundled": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -11031,6 +14377,7 @@ }, "react-expandable-textarea": { "version": "github:muerwre/react-expandable-textarea#0cbcbbd875439090a2d48e711da241f2a83dd6b2", + "from": "github:muerwre/react-expandable-textarea#0cbcbbd875439090a2d48e711da241f2a83dd6b2", "requires": { "classnames": "2.2.6" } @@ -11593,6 +14940,13 @@ "tough-cookie": "2.4.3", "tunnel-agent": "0.6.0", "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } } }, "require-directory": { @@ -12153,6 +15507,14 @@ "requires": { "faye-websocket": "0.10.0", "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } } }, "sockjs-client": { @@ -12760,6 +16122,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true } } }, @@ -13557,9 +16925,9 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v8-compile-cache": { "version": "2.0.2", @@ -13800,6 +17168,14 @@ "requires": { "ansi-colors": "3.2.3", "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } } } } @@ -13955,6 +17331,14 @@ "requires": { "ansi-colors": "3.2.3", "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } } }, "yargs": { @@ -14003,6 +17387,14 @@ "log-symbols": "2.2.0", "loglevelnext": "1.0.5", "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } } }, "webpack-manifest-plugin": { @@ -14014,6 +17406,14 @@ "fs-extra": "7.0.1", "lodash": "4.17.15", "tapable": "1.1.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } }, "webpack-pwa-manifest": { diff --git a/package.json b/package.json index 131e7ea..b2d7a0e 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "leaflet.markercluster": "^1.4.1", "less": "^3.8.1", "less-middleware": "~2.2.1", - "lodash": "^4.17.10", + "lodash": "^4.17.19", "npm": "^6.14.3", "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", diff --git a/yarn.lock b/yarn.lock index cc4f392..fd08490 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3965,7 +3965,7 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -5915,7 +5915,7 @@ import-local@2.0.0, import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -7024,11 +7024,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -7037,33 +7032,11 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -7099,11 +7072,6 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.template@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -7134,10 +7102,10 @@ lodash.without@~4.4.0: resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -"lodash@>=3.5 <5", lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +"lodash@>=3.5 <5", lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== log-symbols@^2.1.0: version "2.2.0" From 7d4046ddc5f2307780e78ec85ad6a9e0dcbd37e2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 29 Oct 2020 11:10:42 +0700 Subject: [PATCH 267/320] added lenin's sculpture --- src/constants/stickers.ts | 3 +- src/sprites/stickers/stickers-base.svg | 165 ++++++++++++++++++++----- 2 files changed, 139 insertions(+), 29 deletions(-) diff --git a/src/constants/stickers.ts b/src/constants/stickers.ts index 03d89a4..0762c94 100644 --- a/src/constants/stickers.ts +++ b/src/constants/stickers.ts @@ -61,6 +61,7 @@ export const STICKERS: IStickers = { fields: { off: 19, title: 'Поля', title_long: 'Зеленые поля' }, beach: { off: 38, title: 'Пляж', title_long: 'Жаркий пляж' }, village: { off: 39, title: 'Деревня', title_long: 'Деревня' }, + scrulpture: { off: 46, title: 'Памятник', title_long: 'Памятник' }, empty: { off: 20, title: 'Пусто', title_long: 'Пусто' }, } }, @@ -105,7 +106,7 @@ export const STICKERS: IStickers = { pt3: { off: 42, title: '3', title_long: 'Третья точка' }, pt4: { off: 43, title: '4', title_long: 'Четвёртая точка' }, pt5: { off: 44, title: '5', title_long: 'Пятая точка' }, - pt6: { off: 45, title: '7', title_long: 'Шестая точка' }, + pt6: { off: 45, title: '6', title_long: 'Шестая точка' }, } } }; diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index 3f320f8..f5e2dbb 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -1,6 +1,4 @@ - - + 1111 1111 + + id="text2739" /> + 1 + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';fill:#ff3344;fill-opacity:1;stroke-width:4.08683">1 @@ -8336,9 +8337,9 @@ id="text11097" y="1023.6814" x="38.481041" - style="font-style:normal;font-weight:normal;font-size:27.24554825px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff3344;fill-opacity:1;stroke:none;stroke-width:4.08683252;" + style="font-style:normal;font-weight:normal;font-size:27.2455px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff3344;fill-opacity:1;stroke:none;stroke-width:4.08683" xml:space="preserve"> 3 + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';fill:#ff3344;fill-opacity:1;stroke-width:4.08683">3 @@ -8416,9 +8417,9 @@ id="text11129" y="1023.6814" x="37.95071" - style="font-style:normal;font-weight:normal;font-size:27.24554825px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff3344;fill-opacity:1;stroke:none;stroke-width:4.08683252;" + style="font-style:normal;font-weight:normal;font-size:27.2455px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff3344;fill-opacity:1;stroke:none;stroke-width:4.08683" xml:space="preserve"> 5 + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';fill:#ff3344;fill-opacity:1;stroke-width:4.08683">5 @@ -8499,9 +8500,9 @@ id="text11161" y="1023.6814" x="37.95071" - style="font-style:normal;font-weight:normal;font-size:27.24554825px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff3344;fill-opacity:1;stroke:none;stroke-width:4.08683252;" + style="font-style:normal;font-weight:normal;font-size:27.2455px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff3344;fill-opacity:1;stroke:none;stroke-width:4.08683" xml:space="preserve"> + + + + + + + + + + + + + + + + + + + From 3d65cab965242ddfb26eff1aaf92786ece5b50e6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 29 Oct 2020 11:56:44 +0700 Subject: [PATCH 268/320] added coffee icon --- src/constants/stickers.ts | 1 + src/sprites/stickers/stickers-base.svg | 184 ++++++++++++++++++++++--- 2 files changed, 166 insertions(+), 19 deletions(-) diff --git a/src/constants/stickers.ts b/src/constants/stickers.ts index 0762c94..ec0df01 100644 --- a/src/constants/stickers.ts +++ b/src/constants/stickers.ts @@ -77,6 +77,7 @@ export const STICKERS: IStickers = { fastfood: { off: 35, title: 'Фастфуд', title_long: 'Быстрая еда' }, swamp: { off: 36, title: 'Болото', title_long: 'Пошла ты,\nтрясина грёбаная!' }, beer: { off: 37, title: 'Пивко', title_long: 'В Питере - пить!' }, + coffee: { off: 47, title: 'Кофеёк', title_long: 'КОФЕЕЕЕ' }, }, }, pin: { diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index f5e2dbb..c7701b7 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -17,6 +17,35 @@ sodipodi:docname="stickers-base.svg"> + + + + + + + + + + + + style="fill:#87decd;stroke:none;stroke-width:4.62758" + d="m -18.235074,1031.1136 75.854614,-45.59011 12.754541,17.86231 -71.5306044,54.5388 -17.5528786,-13.6321 z" + id="path3709" /> - + style="fill:#d7f4ee;fill-opacity:1;stroke:none;stroke-width:2" + d="m 19.334045,1035.9433 c 0.4115,-0.1553 45.630801,-31.4474 45.630801,-31.4474 l 11.901848,13.3231 -7.082748,5.7371 -37.3731,23.7087 -12.546501,-11.2379 z" + id="path3696" + sodipodi:nodetypes="ccccccc" /> + style="fill:#002b22;stroke:none;stroke-width:1.59107" + d="m 28.093889,998.97459 c -1.0854,-0.23916 -1.4813,0.81136 -2.3695,0.46542 -0.5675,-0.006 -1.4379,-0.55314 -1.611,0.32364 0.2087,1.26145 2.2114,1.80585 3.31,1.41245 0.5289,-0.126 -0.03779,0.3777 0.633511,0.3831 -0.731,1.2094 1.1966,2.4286 1.5383,3.6586 0.4831,1.299 1.8646,1.6277 2.9457,2.2744 0.9242,0.5908 2.1789,0.9548 2.8947,1.6887 0.3581,2.3054 0.4087,4.6352 0.4269,6.9625 0.0958,1.6029 0.168,3.1964 -0.2302,4.7608 -0.1617,1.4935 -0.2931,3.0021 -0.5751,4.4714 0.0261,2.0618 -0.5999,4.0727 -0.5299,6.1367 1.0478,-0.2972 2.9606,0.2262 3.4356,-0.6142 0.076,-1.7337 0.2615,-3.47 0.3997,-5.1932 0.4512,-1.0467 -0.1778,-2.8174 1.1015,-3.2825 1.1651,0.4019 0.9274,2.0864 1.2913,3.0804 0.6002,1.5546 0.4376,3.245 0.6144,4.8758 -0.0734,1.2547 1.9584,0.8641 2.7413,1.4496 0.8148,0.3392 1.5537,0.5924 0.9992,-0.5306 -0.5864,-2.3234 -1.1963,-4.6478 -1.5341,-7.0236 0.1537,-1.2323 0.0873,-2.5856 1.5615,-2.9128 0.6339,-1.2935 1.0849,-2.8849 0.6215,-4.3123 -0.6183,-1.4804 -0.8119,-3.0648 -0.8463,-4.6563 -0.1121,-1.3655 -0.1268,-2.8112 -0.6349,-4.0857 -0.1472,-1.0832 -1.6632,-1.5349 -2.691,-2.0206 -0.8319,-1.2313 -0.1687,-2.8745 -0.2211,-4.2668 0.2269,-1.4728 -1.5457,-1.9668 -2.6598,-1.5549 -1.5397,0.4545 -1.2497,2.0091 -1.5426,3.0573 0.6993,0.3256 -0.2017,2.1318 1.2533,1.6564 0.6539,1.7098 -2.2051,1.0824 -3.086,0.6243 -0.9869,-0.5875 -2.2471,-0.8376 -3.0331,-1.696 -0.9221,-1.1173 -1.8442,-2.2347 -2.7663,-3.3521 -0.5129,0.5003 -0.0125,-1.16162 -1.045498,-1.06651 -0.5318,-0.005 0.554287,-0.81956 -0.392013,-0.7134 z" + sodipodi:nodetypes="cccccccccccccccccccccccccccccccccc" /> + + transform="translate(2664,-96.064326)"> + + + + + + + + + + + + + + + + + + + + + From 1e5d10098d3f7e4bb688b1f5b1c2f9402db6cee2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 29 Oct 2020 12:01:54 +0700 Subject: [PATCH 269/320] added coffee icon --- src/sprites/stickers/stickers-base.svg | 57 +++++++++++++------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index c7701b7..4f9569a 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -17,6 +17,18 @@ sodipodi:docname="stickers-base.svg"> + + + + @@ -29,18 +41,6 @@ offset="1" id="stop4224" /> - - - - - + + - Date: Thu, 29 Oct 2020 12:11:24 +0700 Subject: [PATCH 270/320] added coffee icon --- src/sprites/stickers/stickers-base.svg | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index 4f9569a..4830bba 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -1745,7 +1745,8 @@ y1="985.54181" x2="29.7616" y2="995.97052" - gradientUnits="userSpaceOnUse" /> + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.3223732,0,0,1.3223732,3380.1519,-1295.3774)" /> + + - Date: Thu, 29 Oct 2020 14:29:34 +0700 Subject: [PATCH 271/320] added night city icon --- src/constants/stickers.ts | 1 + src/sprites/stickers/stickers-base.svg | 117 ++++++++++++++++++++++++- 2 files changed, 115 insertions(+), 3 deletions(-) diff --git a/src/constants/stickers.ts b/src/constants/stickers.ts index ec0df01..92f4a48 100644 --- a/src/constants/stickers.ts +++ b/src/constants/stickers.ts @@ -62,6 +62,7 @@ export const STICKERS: IStickers = { beach: { off: 38, title: 'Пляж', title_long: 'Жаркий пляж' }, village: { off: 39, title: 'Деревня', title_long: 'Деревня' }, scrulpture: { off: 46, title: 'Памятник', title_long: 'Памятник' }, + night: { off: 48, title: 'Ночь', title_long: 'Ночь' }, empty: { off: 20, title: 'Пусто', title_long: 'Пусто' }, } }, diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index 4830bba..cd85883 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -17,6 +17,18 @@ sodipodi:docname="stickers-base.svg"> + + + + @@ -1747,6 +1759,16 @@ y2="995.97052" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.3223732,0,0,1.3223732,3380.1519,-1295.3774)" /> + + + + + + + + + + + + + + + + + + From 9017e63fac47ff2d04ab4a8f7fcb424dfcdca317 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 29 Oct 2020 14:41:57 +0700 Subject: [PATCH 272/320] added night city icon --- src/sprites/stickers/stickers-base.svg | 76 +++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index cd85883..254b3e7 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -1778,8 +1778,8 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="1" - inkscape:cx="3488.262" - inkscape:cy="49.260803" + inkscape:cx="3502.428" + inkscape:cy="41.179676" inkscape:document-units="px" inkscape:current-layer="g4277" showgrid="false" @@ -8879,6 +8879,78 @@ id="path4389" style="opacity:1;fill:#ff9880;fill-opacity:1;stroke:none;stroke-width:2.87841;stroke-miterlimit:4;stroke-dasharray:none" d="m 33.038883,1015.36 2.7852,1.6074 0.0488,2.5938 -2.834,-1.5489 z m 5.1094,2.6582 2.7851,1.6094 0.0508,2.5918 -2.8359,-1.5469 z m -5.1094,1.8008 2.7852,1.6074 0.0488,2.5938 -2.834,-1.5489 z m 5.1094,2.6582 2.7851,1.6094 0.0508,2.5918 -2.8359,-1.5469 z m -5.1094,1.6387 2.7852,1.6074 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6582 2.7851,1.6093 0.0508,2.5918 -2.8359,-1.5468 z m -5.1094,1.8007 2.7852,1.6075 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6602 2.7851,1.6074 0.0508,2.5918 -2.8359,-1.5469 z m -5.1094,1.8555 2.7852,1.6074 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6582 2.7851,1.6093 0.0508,2.5918 -2.8359,-1.5468 z m -5.1094,1.8008 2.7852,1.6074 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6601 2.7851,1.6074 0.0508,2.5918 -2.8359,-1.5468 z" /> + + + + + + + + + + + + + + + + + + From 25d6ecaa17f688236b48acf67c2d9b0a8f78f589 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 29 Oct 2020 14:57:12 +0700 Subject: [PATCH 273/320] added night city icon --- src/sprites/stickers/stickers-base.svg | 66 ++------------------------ 1 file changed, 3 insertions(+), 63 deletions(-) diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index 254b3e7..a68edde 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -1777,9 +1777,9 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="1" - inkscape:cx="3502.428" - inkscape:cy="41.179676" + inkscape:zoom="11.313708" + inkscape:cx="3504.2765" + inkscape:cy="47.377851" inkscape:document-units="px" inkscape:current-layer="g4277" showgrid="false" @@ -8879,70 +8879,10 @@ id="path4389" style="opacity:1;fill:#ff9880;fill-opacity:1;stroke:none;stroke-width:2.87841;stroke-miterlimit:4;stroke-dasharray:none" d="m 33.038883,1015.36 2.7852,1.6074 0.0488,2.5938 -2.834,-1.5489 z m 5.1094,2.6582 2.7851,1.6094 0.0508,2.5918 -2.8359,-1.5469 z m -5.1094,1.8008 2.7852,1.6074 0.0488,2.5938 -2.834,-1.5489 z m 5.1094,2.6582 2.7851,1.6094 0.0508,2.5918 -2.8359,-1.5469 z m -5.1094,1.6387 2.7852,1.6074 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6582 2.7851,1.6093 0.0508,2.5918 -2.8359,-1.5468 z m -5.1094,1.8007 2.7852,1.6075 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6602 2.7851,1.6074 0.0508,2.5918 -2.8359,-1.5469 z m -5.1094,1.8555 2.7852,1.6074 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6582 2.7851,1.6093 0.0508,2.5918 -2.8359,-1.5468 z m -5.1094,1.8008 2.7852,1.6074 0.0488,2.5937 -2.834,-1.5488 z m 5.1094,2.6601 2.7851,1.6074 0.0508,2.5918 -2.8359,-1.5468 z" /> - - - - - - - - - - - - - - - Date: Thu, 29 Oct 2020 15:15:52 +0700 Subject: [PATCH 274/320] added tick city icon --- src/constants/stickers.ts | 1 + src/sprites/stickers/stickers-base.svg | 398 ++++++++++++++++++++++++- 2 files changed, 395 insertions(+), 4 deletions(-) diff --git a/src/constants/stickers.ts b/src/constants/stickers.ts index 92f4a48..db6d399 100644 --- a/src/constants/stickers.ts +++ b/src/constants/stickers.ts @@ -63,6 +63,7 @@ export const STICKERS: IStickers = { village: { off: 39, title: 'Деревня', title_long: 'Деревня' }, scrulpture: { off: 46, title: 'Памятник', title_long: 'Памятник' }, night: { off: 48, title: 'Ночь', title_long: 'Ночь' }, + tick: { off: 49, title: 'Клещ!', title_long: 'Клещ!' }, empty: { off: 20, title: 'Пусто', title_long: 'Пусто' }, } }, diff --git a/src/sprites/stickers/stickers-base.svg b/src/sprites/stickers/stickers-base.svg index a68edde..a5eb5df 100644 --- a/src/sprites/stickers/stickers-base.svg +++ b/src/sprites/stickers/stickers-base.svg @@ -1777,11 +1777,11 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="11.313708" - inkscape:cx="3504.2765" - inkscape:cy="47.377851" + inkscape:zoom="1" + inkscape:cx="3561.8008" + inkscape:cy="12.434721" inkscape:document-units="px" - inkscape:current-layer="g4277" + inkscape:current-layer="g2326" showgrid="false" inkscape:window-width="1920" inkscape:window-height="1020" @@ -8893,5 +8893,395 @@ id="path4450" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ef08fadeb1f1e2b106e5aac11bdba7cbcdfd4d7f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 09:44:13 +0700 Subject: [PATCH 275/320] added ci-cd files --- .drone.yml | 84 +++++++++++++++++++++++++++++++++++++++++++ Jenkinsfile | 71 ------------------------------------ docker-compose.yml | 11 ++++++ docker/www/Dockerfile | 13 +++++++ docker/www/nginx.conf | 46 ++++++++++++++++++++++++ 5 files changed, 154 insertions(+), 71 deletions(-) create mode 100644 .drone.yml delete mode 100644 Jenkinsfile create mode 100644 docker-compose.yml create mode 100644 docker/www/Dockerfile create mode 100644 docker/www/nginx.conf diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..d57fb37 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,84 @@ +kind: pipeline +name: build +type: docker + +platform: + os: linux + arch: amd64 + +steps: + - name: compress + image: alpine + commands: + - rm -rf ./app.tar.bz2 + - tar -cjf ./app.tar.bz2 -C ./ . + - name: upload + image: drillster/drone-rsync + when: + branch: + - master + - develop + environment: + RSYNC_KEY: + from_secret: rsync_key + RSYNC_USER: + from_secret: rsync_user + PLUGIN_ARGS: -zz -O --no-perms + settings: + port: 22522 + hosts: + - vault48.org + source: ./ + user: ${rsync_user} + key: ${rsync_key} + target: /tmp/orchid-map-${DRONE_BRANCH} + include: + - "app.tar.bz2" + exclude: + - "*" + - name: build + image: appleboy/drone-ssh + when: + branch: + - master + - develop + environment: + BUILD_PATH: + from_secret: build_path + ENV_PATH: + from_secret: env_path + settings: + host: vault48.org + username: + from_secret: rsync_user + key: + from_secret: rsync_key + envs: [build_path, env_path] + port: 22522 + script_stop: true + script: + - mkdir -p $${BUILD_PATH}/${DRONE_BRANCH} + - rm -rf $${BUILD_PATH}/${DRONE_BRANCH}/* + - cd $${BUILD_PATH}/${DRONE_BRANCH} + - tar -xjf /tmp/vault-frontend-${DRONE_BRANCH}/app.tar.bz2 -C ./ + - cp -a $${ENV_PATH}/${DRONE_BRANCH}/. $${BUILD_PATH}/${DRONE_BRANCH} + - docker-compose build + - docker-compose up -d + - name: telgram_notify + image: appleboy/drone-telegram + when: + status: + - success + - failure + settings: + token: + from_secret: telegram_token + to: + from_secret: telegram_chat_id + format: markdown + message: > + {{#success build.status}}🤓{{else}}😨{{/success}} + [{{repo.name}} / {{commit.branch}}]({{ build.link }}) + ``` + {{ commit.message }} + ``` diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 488628a..0000000 --- a/Jenkinsfile +++ /dev/null @@ -1,71 +0,0 @@ -def failed = false - -pipeline { - agent any - - // parameters { - // gitParameter branchFilter: '.*/(.*)', defaultValue: 'hoogabooga', name: 'BRANCH', type: 'PT_BRANCH' - // } - - environment { - WWW = "${env.BRANCH_NAME == "master" ? env.ORCHID_STABLE_WWW : env.ORCHID_STAGING_WWW}" - ENV = "${env.BRANCH_NAME == "master" ? env.ORCHID_STABLE_ENV : env.ORCHID_STAGING_ENV}" - } - - stages { - stage('check') { - steps { - echo "WWW: ${WWW}" - echo "ENV: ${ENV}" - echo "WORKSPACE: ${WORKSPACE}" - sh 'pwd' - sh 'ls' - - script { - if("${WWW}" == "" || "${ENV}" == "" || ("${env.BRANCH_NAME}" != "master" && "${env.BRANCH_NAME}" != "develop")) { - println "INCORRECT VARIABLES" - currentBuild.result = 'FAILED' - failed = true - error "Build failed :-(" - return - } - } - } - } - - stage('copy env') { - steps { - sh "cp -a ${ENV}/. ${WORKSPACE}" - } - } - - stage('LS') { - steps { - sh "ls -a ./" - sh "ls -a ${ENV}" - sh "ls -a ./src/config" - } - } - - stage('Build') { - steps { - sh 'npm install' - sh 'npm run build' - } - } - - stage('deploy') { - when { - // branch 'develop' - expression { - !failed - } - } - - steps{ - sh "rm -rf ${WWW}" - sh "mv ${WORKSPACE}/dist ${WWW}" - } - } - } -} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..dbddd04 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +version: '3' +services: + www: + restart: always + build: + context: . + dockerfile: docker/www/Dockerfile + ports: + - ${EXPOSE}:80 + volumes: + - /etc/localtime:/etc/localtime:ro diff --git a/docker/www/Dockerfile b/docker/www/Dockerfile new file mode 100644 index 0000000..46e2cf2 --- /dev/null +++ b/docker/www/Dockerfile @@ -0,0 +1,13 @@ +# stage1 as builder +FROM node:dubnium-alpine as builder +COPY package.json yarn.lock ./ +RUN yarn +COPY . . +RUN yarn build + +FROM nginx:alpine +COPY docker/www/nginx.conf /etc/nginx/nginx.conf +RUN rm -rf /usr/share/nginx/html/* +COPY --from=builder /build /usr/share/nginx/html +EXPOSE ${EXPOSE} 80 +ENTRYPOINT ["nginx", "-g", "daemon off;"] diff --git a/docker/www/nginx.conf b/docker/www/nginx.conf new file mode 100644 index 0000000..7fbacbd --- /dev/null +++ b/docker/www/nginx.conf @@ -0,0 +1,46 @@ +worker_processes 4; + +events { worker_connections 1024; } + +http { + server { + listen 80; + root /usr/share/nginx/html; + include /etc/nginx/mime.types; + + gzip on; + gzip_min_length 1000; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain application/xml application/javascript; + + ## All static files will be served directly. + location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|xml|otf|ttf|eot|woff|woff2|svg)$ { + access_log off; + expires 30d; + add_header Cache-Control public; + gzip_static on; + + ## No need to bleed constant updates. Send the all shebang in one + ## fell swoop. + tcp_nodelay off; + + ## Set the OS file cache. + open_file_cache max=3000 inactive=120s; + open_file_cache_valid 45s; + open_file_cache_min_uses 2; + open_file_cache_errors off; + } + + location / { + gzip_static on; + try_files $uri @index; + } + + location @index { + add_header Cache-Control "no-store, no-cache, must-revalidate"; + expires -1; + try_files /index.html =404; + } + } +} + From 82bd1345a1f29969ca634340464d1809104b6925 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 10:04:30 +0700 Subject: [PATCH 276/320] added .env files --- .drone.yml | 2 +- .env | 4 ++++ .env.example | 4 ++++ .gitignore | 4 +++- src/config/frontend.example.js | 27 --------------------------- src/config/pwa.example.js | 22 ---------------------- webpack.config.js | 32 ++++++++++---------------------- 7 files changed, 22 insertions(+), 73 deletions(-) create mode 100644 .env create mode 100644 .env.example delete mode 100644 src/config/frontend.example.js delete mode 100644 src/config/pwa.example.js diff --git a/.drone.yml b/.drone.yml index d57fb37..5de196b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -60,7 +60,7 @@ steps: - mkdir -p $${BUILD_PATH}/${DRONE_BRANCH} - rm -rf $${BUILD_PATH}/${DRONE_BRANCH}/* - cd $${BUILD_PATH}/${DRONE_BRANCH} - - tar -xjf /tmp/vault-frontend-${DRONE_BRANCH}/app.tar.bz2 -C ./ + - tar -xjf /tmp/orchid-map-${DRONE_BRANCH}/app.tar.bz2 -C ./ - cp -a $${ENV_PATH}/${DRONE_BRANCH}/. $${BUILD_PATH}/${DRONE_BRANCH} - docker-compose build - docker-compose up -d diff --git a/.env b/.env new file mode 100644 index 0000000..295aeb2 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +PUBLIC_PATH = https://localhost:3000/ +API_ADDR = https://alpha-map.vault48.org:3001 +OSRM_URL = https://vault48.org:5001/route/v1 +OSRM_PROFILE = bike diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..8e9b9d8 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +PUBLIC_PATH = https://alpha-map.vault48.org/ +API_ADDR = https://alpha-map.vault48.org:3001 +OSRM_URL = https://vault48.org:5001/route/v1 +OSRM_PROFILE = bike diff --git a/.gitignore b/.gitignore index 382b80e..ecb633c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,10 +18,12 @@ yarn-error.log /config/backend.js /config/pwa.js -/src/config/frontend.js +/src/config/frontend.ts /src/config/backend.js /src/config/pwa.js # Bundle *.js.map stats.json + +.env diff --git a/src/config/frontend.example.js b/src/config/frontend.example.js deleted file mode 100644 index ba792af..0000000 --- a/src/config/frontend.example.js +++ /dev/null @@ -1,27 +0,0 @@ -import { DEFAULT_PROVIDER, PROVIDERS } from '~/constants/providers'; -import { LatLngLiteral } from 'leaflet'; - -const PUBLIC_PATH = ''; -const API_ADDR = 'https://HOSTNAME.org:3000'; -const OSRM_URL = 'https://HOSTNAME.org:5001/route/v1'; -const OSRM_PROFILE = 'bike'; -const OSRM_TEST_URL = ([south_west, north_east]: [LatLngLiteral, LatLngLiteral]) => ( - `${OSRM_URL}/${OSRM_PROFILE}/${Object.values(south_west).join(',')};${Object.values(north_east).join(',')}` -); - -export const CLIENT = { - OSRM_URL, - API_ADDR, - OSRM_TEST_URL, - OSRM_PROFILE, - STROKE_WIDTH: 5, - PUBLIC_PATH, -}; - -export const COLORS = { - PATH_COLOR: ['#ff7700', '#ff3344'], -}; - -export const PROVIDER = PROVIDERS[DEFAULT_PROVIDER]; - -export const MOBILE_BREAKPOINT = 768; diff --git a/src/config/pwa.example.js b/src/config/pwa.example.js deleted file mode 100644 index 6e99f4f..0000000 --- a/src/config/pwa.example.js +++ /dev/null @@ -1,22 +0,0 @@ -const path = require('path'); - -module.exports = { - MANIFEST: (src) => ({ - name: 'Редактор маршрутов', - short_name: 'Маршруты', - description: 'Велосипедные маршруты в новосибирске', - background_color: '#333333', - theme_color: '#01579b', - display: 'fullscreen', - 'theme-color': '#01579b', - start_url: '/', - icons: [ - { - src, // : path.resolve('./src/sprites/app.png') - sizes: [96, 128, 192, 256, 384, 512], - destination: path.join('assets', 'icons') - } - ] - }), - PUBLIC_PATH: 'https://alpha-map.vault48.org/', -}; diff --git a/webpack.config.js b/webpack.config.js index f91dd0d..f44fb84 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -8,6 +8,7 @@ const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const WebpackPwaManifest = require('webpack-pwa-manifest'); const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin'); const PWA_CONFIG = require('./src/config/pwa'); +const Dotenv = require('dotenv-webpack'); /* Plugins */ @@ -32,15 +33,6 @@ const devtool = isDevelopment ? 'cheap-module-eval-source-map' : 'source-map'; const resolve = { alias: { - // $components: path.join(__dirname, 'src/components'), - // $containers: path.join(__dirname, 'src/containers'), - // $constants: path.join(__dirname, 'src/constants'), - // $sprites: path.join(__dirname, 'src/sprites'), - // $config: path.join(__dirname, './config'), - // $styles: path.join(__dirname, 'src/styles'), - // $redux: path.join(__dirname, 'src/redux'), - // $utils: path.join(__dirname, 'src/utils'), - // $modules: path.join(__dirname, 'src/modules'), '~': path.join(__dirname, 'src'), }, extensions: ['*', '.ts', '.tsx', '.js', '.jsx', '.json'] @@ -51,24 +43,20 @@ const resolve = { module.exports = () => { /* Export */ const plugins = [ - // concatPlugin, htmlPlugin, - // flowPlugin, - // gitPlugin, new webpack.IgnorePlugin(/^osrm-text-instructions$/, /leaflet-routing-machine$/), miniCssExractPlugin, new webpack.HashedModuleIdsPlugin(), new WebpackPwaManifest(PWA_CONFIG.MANIFEST(path.resolve('./src/sprites/app.png'))), - new SWPrecacheWebpackPlugin( - { - cacheId: 'my-domain-cache-id', - dontCacheBustUrlsMatching: /\.\w{8}\./, - filename: 'service-worker.js', - minify: true, - navigateFallback: `${PWA_CONFIG.PUBLIC_PATH}index.html`, - staticFileGlobsIgnorePatterns: [/\.map$/, /manifest\.json$/] - } - ), + new Dotenv(), + new SWPrecacheWebpackPlugin({ + cacheId: 'my-domain-cache-id', + dontCacheBustUrlsMatching: /\.\w{8}\./, + filename: 'service-worker.js', + minify: true, + navigateFallback: `${PWA_CONFIG.PUBLIC_PATH}index.html`, + staticFileGlobsIgnorePatterns: [/\.map$/, /manifest\.json$/], + }), ]; return { From 91c9adba83da103baf5de7420b201599e2e222e6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 10:06:18 +0700 Subject: [PATCH 277/320] removed leaflet-editable-polyline --- package.json | 2 +- yarn.lock | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b2d7a0e..64da358 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "babel-preset-react": "^6.24.1", "babel-preset-stage-2": "^6.24.1", "css-loader": "^0.28.11", + "dotenv-webpack": "^7.0.2", "eslint": "^4.19.1", "eslint-config-airbnb": "^16.1.0", "eslint-import-resolver-babel-module": "^4.0.0", @@ -72,7 +73,6 @@ "js-md5": "^0.7.3", "leaflet": "^1.6.0", "leaflet-editable": "^1.1.0", - "leaflet-editable-polyline": "muerwre/leaflet-editable-polyline#master", "leaflet-geometryutil": "^0.9.0", "leaflet-routing-machine": "muerwre/leaflet-routing-machine#no-osrm-text", "leaflet.markercluster": "^1.4.1", diff --git a/yarn.lock b/yarn.lock index fd08490..a611dd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4274,11 +4274,30 @@ dot-prop@^4.1.0, dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" +dotenv-defaults@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-2.0.1.tgz#ea6f9632b3b5cc55e48b736760def5561f1cb7c0" + integrity sha512-ugFCyBF7ILuwpmznduHPQZBMucHHJ8T4OBManTEVjemxCm2+nqifSuW2lD2SNKdiKSH1E324kZSdJ8M04b4I/A== + dependencies: + dotenv "^8.2.0" + +dotenv-webpack@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-7.0.2.tgz#1bf2e407e92c10fbb08d815b12c991028f10f81c" + integrity sha512-RY+/5uM/XY4bGtih9f9ic8hlrUDxVcZZBPWlnX/aHhaKxcVVX9SH/5VH7CSmvVo9GL6PKvQOA0X1bc552rnatQ== + dependencies: + dotenv-defaults "^2.0.1" + dotenv@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" From 4f65aa8f895e5dde3f5b735a2014256b29c11232 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 10:07:34 +0700 Subject: [PATCH 278/320] replaced leaflet-routing-machine --- package.json | 2 +- yarn.lock | 21 +++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 64da358..527fc0e 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "leaflet": "^1.6.0", "leaflet-editable": "^1.1.0", "leaflet-geometryutil": "^0.9.0", - "leaflet-routing-machine": "muerwre/leaflet-routing-machine#no-osrm-text", + "leaflet-routing-machine": "^3.2.12", "leaflet.markercluster": "^1.4.1", "less": "^3.8.1", "less-middleware": "~2.2.1", diff --git a/yarn.lock b/yarn.lock index a611dd7..6951001 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6701,10 +6701,6 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -leaflet-editable-polyline@muerwre/leaflet-editable-polyline#master: - version "1.0.7" - resolved "https://codeload.github.com/muerwre/leaflet-editable-polyline/tar.gz/a8e481464d9c286c3a0a1392f1f96f7e2af40489" - leaflet-editable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/leaflet-editable/-/leaflet-editable-1.2.0.tgz#a3a01001764ba58ea923381ee6a1c814708a0b84" @@ -6717,13 +6713,14 @@ leaflet-geometryutil@^0.9.0: dependencies: leaflet ">=0.7.0" -leaflet-routing-machine@muerwre/leaflet-routing-machine#no-osrm-text: - version "3.2.8" - resolved "https://codeload.github.com/muerwre/leaflet-routing-machine/tar.gz/25e27d5721cbf8d9c4cc1612ecc6b99aef49de7b" +leaflet-routing-machine@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/leaflet-routing-machine/-/leaflet-routing-machine-3.2.12.tgz#9e4aef008321b0227cf894d829c3b4c1f13e4e13" + integrity sha512-HLde58G1YtD9xSIzZavJ6BPABZaV1hHeGst8ouhzuxmSC3s32NVtADT+njbIUMW1maHRCrsgTk/E4hz5QH7FrA== dependencies: "@mapbox/corslite" "0.0.7" "@mapbox/polyline" "^0.2.0" - osrm-text-instructions "^0.11.5" + osrm-text-instructions "^0.13.2" leaflet.markercluster@^1.4.1: version "1.4.1" @@ -8240,10 +8237,10 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -osrm-text-instructions@^0.11.5: - version "0.11.5" - resolved "https://registry.yarnpkg.com/osrm-text-instructions/-/osrm-text-instructions-0.11.5.tgz#9eed3614a977e0eba0e46a7ddd65e899b634c201" - integrity sha512-EKCfIXhJHsYQLcuctymvSVH7ulRXx5sGb2MdZL3NzD6XhRVZRkqwRicd9/QI27A5oXW4ojOEJ81RGay7bO6dbA== +osrm-text-instructions@^0.13.2: + version "0.13.4" + resolved "https://registry.yarnpkg.com/osrm-text-instructions/-/osrm-text-instructions-0.13.4.tgz#78bedabd84cbcabce9c9fd0fbb6b0fd9f06c7f9f" + integrity sha512-ge4ZTIetMQKAHKq2MwWf83ntzdJN20ndRKRaVNoZ3SkDkBNO99Qddz7r6+hrVx38I+ih6Rk5T1yslczAB6Q9Pg== p-defer@^1.0.0: version "1.0.0" From 6db5b62a7428065cf75ea318684dc3d1c80918fa Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 10:09:19 +0700 Subject: [PATCH 279/320] removed expandable textarea --- package.json | 1 - src/components/dialogs/SaveDialog.tsx | 7 ++----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 527fc0e..c9c13d9 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,6 @@ "rc-slider": "8.5.0", "react": "16.8.1", "react-dom": "16.8.1", - "react-expandable-textarea": "github:muerwre/react-expandable-textarea", "react-hot-loader": "^4.1.1", "react-infinite-scroller": "^1.2.2", "react-rangeslider": "^2.2.0", diff --git a/src/components/dialogs/SaveDialog.tsx b/src/components/dialogs/SaveDialog.tsx index f95574a..dac00a7 100644 --- a/src/components/dialogs/SaveDialog.tsx +++ b/src/components/dialogs/SaveDialog.tsx @@ -6,7 +6,6 @@ import { Icon } from '~/components/panels/Icon'; import { Switch } from '~/components/Switch'; import classnames from 'classnames'; -import ExpandableTextarea from 'react-expandable-textarea'; import { connect } from 'react-redux'; import { selectMap } from '~/redux/map/selectors'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; @@ -95,7 +94,7 @@ class SaveDialogUnconnected extends React.Component { componentWillUnmount = () => { this.props.editorCancelSave() }; - + render() { const { title, is_public, description } = this.state; const { @@ -139,9 +138,7 @@ class SaveDialogUnconnected extends React.Component {
      - Date: Thu, 8 Apr 2021 10:11:41 +0700 Subject: [PATCH 280/320] changed target node --- docker/www/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/www/Dockerfile b/docker/www/Dockerfile index 46e2cf2..30177f6 100644 --- a/docker/www/Dockerfile +++ b/docker/www/Dockerfile @@ -1,5 +1,5 @@ # stage1 as builder -FROM node:dubnium-alpine as builder +FROM node:erbium-alpine as builder COPY package.json yarn.lock ./ RUN yarn COPY . . From c2f42ea7211524d3051f3624cf4ce6e1e4b1faf1 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 10:35:39 +0700 Subject: [PATCH 281/320] added create-react-app --- .env | 8 +- .env.example | 8 +- .eslintrc | 72 - craco.config.js | 48 + package.json | 97 +- {src => public}/index.html | 0 src/components/Cursor.tsx | 54 - src/components/search/MapListDialogHead.tsx | 2 +- src/containers/App.tsx | 5 +- src/index.tsx | 13 +- src/utils/map/DomMarker.js | 4 +- tsconfig.json | 40 +- tsconfig.paths.json | 8 + webpack.config.js | 164 - yarn.lock | 12890 +++++++++--------- 15 files changed, 6480 insertions(+), 6933 deletions(-) delete mode 100755 .eslintrc create mode 100644 craco.config.js rename {src => public}/index.html (100%) delete mode 100644 src/components/Cursor.tsx create mode 100644 tsconfig.paths.json delete mode 100644 webpack.config.js diff --git a/.env b/.env index 295aeb2..193060e 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -PUBLIC_PATH = https://localhost:3000/ -API_ADDR = https://alpha-map.vault48.org:3001 -OSRM_URL = https://vault48.org:5001/route/v1 -OSRM_PROFILE = bike +REACT_APP_PUBLIC_PATH = https://localhost:3000/ +REACT_APP_API_ADDR = https://alpha-map.vault48.org:3001 +REACT_APP_OSRM_URL = https://vault48.org:5001/route/v1 +REACT_APP_OSRM_PROFILE = bike diff --git a/.env.example b/.env.example index 8e9b9d8..0cd2ce7 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -PUBLIC_PATH = https://alpha-map.vault48.org/ -API_ADDR = https://alpha-map.vault48.org:3001 -OSRM_URL = https://vault48.org:5001/route/v1 -OSRM_PROFILE = bike +REACT_APP_PUBLIC_PATH = https://alpha-map.vault48.org/ +REACT_APP_API_ADDR = https://alpha-map.vault48.org:3001 +REACT_APP_OSRM_URL = https://vault48.org:5001/route/v1 +REACT_APP_OSRM_PROFILE = bike diff --git a/.eslintrc b/.eslintrc deleted file mode 100755 index 85f5a51..0000000 --- a/.eslintrc +++ /dev/null @@ -1,72 +0,0 @@ -{ - "extends": "airbnb", - "parser": "babel-eslint", - "plugins": [ - "react", - "jsx-a11y", - "import" - ], - "rules": { - "quotes": 1, - "comma-dangle": 0, - "no-restricted-syntax": 1, - "new-cap": 1, - "no-continue": 1, - "no-underscore-dangle": 0, - "global-require": 1, - "react/no-multi-comp": 1, - "react/jsx-filename-extension": 0, - "import/no-unresolved": 1, - "import/prefer-default-export": 0, - "import/extensions": 1, - "no-return-assign": 1, - "max-len": 1, - "jsx-a11y/no-static-element-interactions": 0, - "jsx-a11y/click-events-have-key-events": 0, - "jsx-a11y/interactive-supports-focus": 0, - "arrow-parens": 0, - "jsx-a11y/no-autofocus": 0, - "react/jsx-closing-tag-location": 0, - "prefer-promise-reject-errors": 0, - "jsx-a11y/mouse-events-have-key-events": 0, - "camelcase": 0, - "no-trailing-spaces": 0 - }, - "globals": { - "document": false, - "window": false, - "HTMLInputElement": false, - "HTMLDivElement": false, - "Headers": false, - "FormData": false, - "WebSocket": true, - "Element": true, - "localStorage": true, - "navigator": true - }, - "env": {}, - "settings": { - "import/resolver": { - "webpack": { - "webpack.config.js": { - "resolve": { - "alias": { - "$components": "src/components", - "$containers": "src/containers", - "$constants": "src/constants", - "$sprites": "src/sprites", - "$config": "config", - "$styles": "src/styles", - "$redux": "src/redux", - "$utils": "src/utils", - "$modules": "src/modules" - }, - - "extensions": [".js", ".jsx", ".scss"], - "modules": ["config", "src", "node_modules"] - } - } - } - } - } -} diff --git a/craco.config.js b/craco.config.js new file mode 100644 index 0000000..dfcc992 --- /dev/null +++ b/craco.config.js @@ -0,0 +1,48 @@ +const CracoAlias = require('craco-alias'); +// const fastRefreshCracoPlugin = require('craco-fast-refresh'); + +module.exports = { + webpack: { + alias: { + '~': `src`, + }, + output: { + publicPath: '/', + }, + }, + eslint: { + enable: false, + mode: 'file', + }, + jest: { + setupTestFrameworkScriptFile: '/src/setupTests.js', + configure: { + moduleNameMapper: { + '^~/(.*)$': '/src/$1', + '^.+\\.scss$': 'identity-obj-proxy', + }, + snapshotSerializers: ['enzyme-to-json/serializer'], + moduleFileExtensions: ['js', 'json', 'ts', 'tsx', 'jsx', 'node'], + verbose: true, + roots: ['/src'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + '^.+\\.ts?$': 'babel-jest', + '^.+\\.js?$': 'ts-jest', + '^.+\\.jsx?$': 'babel-jest', + }, + preset: 'ts-jest/presets/js-with-ts', + testEnvironment: 'node', + }, + }, + plugins: [ + // { plugin: fastRefreshCracoPlugin }, + { + plugin: CracoAlias, + options: { + source: 'tsconfig', + tsConfigPath: 'tsconfig.paths.json', + }, + }, + ], +}; diff --git a/package.json b/package.json index c9c13d9..15086f3 100644 --- a/package.json +++ b/package.json @@ -5,105 +5,70 @@ "description": "Beta Map", "main": "./src/js/index.js", "scripts": { - "start": "NODE_ENV=development webpack-dev-server --mode development --hot --open --inline --progress", - "build": "NODE_ENV=production webpack --env production --config=webpack.config.js --progress -p", - "profile": "webpack --json > stats.json" + "start": "craco start", + "build": "craco build", + "test": "craco test" }, "author": "Grigory Chervoplyas", "license": "ISC", "keywords": [], "devDependencies": { - "@babel/cli": "^7.0.0-rc.1", - "@babel/preset-env": "^7.0.0-rc.1", "@types/classnames": "^2.2.7", "@types/leaflet": "^1.4.3", "@types/node": "^11.9.0", "@types/ramda": "^0.26.39", "@types/react": "16.8.1", - "awesome-typescript-loader": "^5.2.1", - "babel-core": "^6.26.0", - "babel-eslint": "^8.2.3", - "babel-loader": "^7.1.4", - "babel-plugin-lodash": "^3.3.4", - "babel-plugin-ramda": "^2.0.0", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.6.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-2": "^6.24.1", - "css-loader": "^0.28.11", - "dotenv-webpack": "^7.0.2", - "eslint": "^4.19.1", - "eslint-config-airbnb": "^16.1.0", - "eslint-import-resolver-babel-module": "^4.0.0", - "eslint-import-resolver-webpack": "^0.9.0", - "eslint-loader": "^2.0.0", - "eslint-plugin-babel": "^5.0.0", - "eslint-plugin-import": "^2.11.0", - "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-react": "^7.7.0", - "file-loader": "^1.1.11", - "html-webpack-plugin": "^3.2.0", - "identity-obj-proxy": "^3.0.0", - "less-loader": "^4.1.0", - "mini-css-extract-plugin": "^0.5.0", - "style-loader": "^0.21.0", - "sw-precache-webpack-plugin": "^0.11.5", - "ts-node": "^8.0.1", - "typescript": "^3.7.4", - "uglifyjs-webpack-plugin": "^1.3.0", - "webpack": "^4.6.0", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14", - "webpack-manifest-plugin": "^2.0.4", - "webpack-pwa-manifest": "^4.0.0" + "@types/react-dom": "^17.0.3", + "craco": "^0.0.3", + "craco-alias": "^2.2.0" }, "dependencies": { - "axios": "^0.18.0", - "babel-runtime": "^6.26.0", - "body-parser": "^1.18.3", + "axios": "^0.21.1", "classnames": "^2.2.6", - "clean-webpack-plugin": "^0.1.9", - "cookie-parser": "~1.4.3", + "craco-fast-refresh": "^1.0.5", "croppr": "^2.3.1", - "debug": "~2.6.9", "file-saver": "^2.0.0", "gpx-parser-builder": "^1.0.2", - "history": "^4.7.2", - "http-errors": "~1.6.2", - "js-md5": "^0.7.3", "leaflet": "^1.6.0", "leaflet-editable": "^1.1.0", "leaflet-geometryutil": "^0.9.0", "leaflet-routing-machine": "^3.2.12", "leaflet.markercluster": "^1.4.1", - "less": "^3.8.1", - "less-middleware": "~2.2.1", - "lodash": "^4.17.19", - "npm": "^6.14.3", - "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", "raleway-cyrillic": "^4.0.2", "ramda": "^0.26.1", - "rc-slider": "8.5.0", - "react": "16.8.1", - "react-dom": "16.8.1", - "react-hot-loader": "^4.1.1", + "rc-slider": "^9.7.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", "react-infinite-scroller": "^1.2.2", - "react-rangeslider": "^2.2.0", "react-redux": "^5.0.7", "react-router": "^4.3.1", + "react-scripts": "^4.0.3", "react-scrollbar": "^0.5.4", "reactrangeslider": "^3.0.6", "redux": "^4.0.1", "redux-persist": "^5.10.0", "redux-saga": "^1.0.0", - "reduxsauce": "^1.0.0", - "scrypt": "^6.0.3", - "throttle-debounce": "^2.1.0", "tt-react-custom-scrollbars": "^4.2.1-tt2", "typeface-pt-sans": "0.0.54", - "typesafe-actions": "^3.0.0", - "uuid": "^3.4.0", - "webpack-git-hash": "^1.0.2" + "typescript": "^4.2.4", + "uuid": "^3.4.0" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "eslintConfig": { + "extends": [ + "react-app" + ] } } diff --git a/src/index.html b/public/index.html similarity index 100% rename from src/index.html rename to public/index.html diff --git a/src/components/Cursor.tsx b/src/components/Cursor.tsx deleted file mode 100644 index 4f5b114..0000000 --- a/src/components/Cursor.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import { Icon } from '~/components/panels/Icon'; -import { MODES } from '~/constants/modes'; -import { STICKERS } from '~/constants/stickers'; -import { StickerIcon } from '~/components/StickerIcon'; -import { connect } from 'react-redux'; -import { selectEditor } from '~/redux/editor/selectors' - -const mapStateToProps = state => ({ - editor: selectEditor -}); - -const mapDispatchToProps = {}; - -class CursorUnconnected extends React.PureComponent { - componentDidMount() { - window.addEventListener('mousemove', this.moveCursor); - } - - moveCursor = e => { - if (!e.clientX || !e.clientY || !this.cursor || !this.cursor.style) return; - - const { clientX, clientY } = e; - - this.cursor.style.transform = `translate3d(${clientX}px, ${clientY}px, 0)`; - }; - - cursor: HTMLElement = null; - - render() { - const { - editor: { mode, set, sticker }, - } = this.props; - - const activeSticker = sticker && set && STICKERS[set] && STICKERS[set].layers[sticker]; - - return ( -
      { - this.cursor = el; - }} - > - {mode === MODES.ROUTER && } - {mode === MODES.POLY && } - {mode === MODES.STICKERS && activeSticker && } -
      - ); - } -} - -const Cursor = connect()(CursorUnconnected); - -export { Cursor } \ No newline at end of file diff --git a/src/components/search/MapListDialogHead.tsx b/src/components/search/MapListDialogHead.tsx index 02a1747..cd8edf9 100644 --- a/src/components/search/MapListDialogHead.tsx +++ b/src/components/search/MapListDialogHead.tsx @@ -46,7 +46,7 @@ const MapListDialogHead: FC = memo( onChange={onDistanceChange} defaultValue={[0, 10000]} value={distance} - pushable={25} + pushable disabled={min >= max} /> ) : ( diff --git a/src/containers/App.tsx b/src/containers/App.tsx index 972c09e..eff4a03 100644 --- a/src/containers/App.tsx +++ b/src/containers/App.tsx @@ -5,7 +5,6 @@ import { Fills } from '~/components/Fills'; import { UserPanel } from '~/components/panels/UserPanel'; import { connect } from 'react-redux'; -import { hot } from 'react-hot-loader'; import { Renderer } from '~/components/renderer/Renderer'; import { editorHideRenderer, editorSetDialogActive } from '~/redux/editor/actions'; import { LeftDialog } from '~/containers/LeftDialog'; @@ -60,7 +59,7 @@ const mapStateToProps = ({ dialog, dialog_active, renderer, - activeSticker: { sticker = null, set = null }, + activeSticker: { sticker, set }, }, }: IState) => ({ renderer_active: renderer.renderer_active, @@ -73,6 +72,6 @@ const mapStateToProps = ({ const mapDispatchToProps = { editorHideRenderer, editorSetDialogActive }; -const App = connect(mapStateToProps, mapDispatchToProps)(hot(module)(AppUnconnected)); +const App = connect(mapStateToProps, mapDispatchToProps)(AppUnconnected); export { App }; diff --git a/src/index.tsx b/src/index.tsx index 2e6eaca..f14e3c0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -13,7 +13,7 @@ const { store, persistor } = configureStore(); pushLoaderState(10); -export const Index = () => ( +const Index = () => ( @@ -22,14 +22,3 @@ export const Index = () => ( ); ReactDOM.render(, document.getElementById('index')); - -if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') { - (function() { - if ('serviceWorker' in navigator) { - navigator.serviceWorker - .register('./service-worker.js', { scope: '/' }) - .then(() => console.log('Service Worker registered successfully.')) - .catch(error => console.log('Service Worker registration failed:', error)); - } - })(); -} diff --git a/src/utils/map/DomMarker.js b/src/utils/map/DomMarker.js index a8ca9d0..ef67b5f 100644 --- a/src/utils/map/DomMarker.js +++ b/src/utils/map/DomMarker.js @@ -1,7 +1,7 @@ import { DivIcon } from 'leaflet'; export const DomMarker = DivIcon.extend({ - initialize: function (options) { + initialize: function (options: any) { this.options = options; }, @@ -15,7 +15,7 @@ export const DomMarker = DivIcon.extend({ this._setIconStyles(element, 'icon'); - return element; + return element; } }); diff --git a/tsconfig.json b/tsconfig.json index 466a91b..5e8c822 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,30 +1,32 @@ { - "allowSyntheticDefaultImports": true, + "extends": "./tsconfig.paths.json", "compilerOptions": { - "outDir": "./dist/", - "sourceMap": true, - "noImplicitAny": false, - "allowSyntheticDefaultImports": true, - "module": "commonjs", "target": "es6", - "jsx": "react", - "lib": [ "es2015", "DOM", "es6" ], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, "isolatedModules": true, - "baseUrl": ".", - "paths": { - "~/*": [ "src/*" ], - "custom_modules/*": [ - "src/custom_modules/*" - ] - } + "noEmit": true, + "jsx": "react-jsx", + "noImplicitAny": false }, "include": [ - "./src/index.tsx", - "./backend/**/*", - "./custom.d.ts" + "src" ], "exclude": [ - "./src/_modules/**/*" + "node_modules", + "**/*.spec.ts" ] } diff --git a/tsconfig.paths.json b/tsconfig.paths.json new file mode 100644 index 0000000..f221620 --- /dev/null +++ b/tsconfig.paths.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "~/*": ["src/*"] + } + } +} diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index f44fb84..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,164 +0,0 @@ -const webpack = require('webpack'); - -const HtmlWebPackPlugin = require('html-webpack-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); -const path = require('path'); -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); -const WebpackPwaManifest = require('webpack-pwa-manifest'); -const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin'); -const PWA_CONFIG = require('./src/config/pwa'); -const Dotenv = require('dotenv-webpack'); - -/* Plugins */ - -const htmlPlugin = new HtmlWebPackPlugin({ - template: './src/index.html', - filename: './index.html', - title: 'Map', - hash: false, - favicon: 'src/sprites/favicon.png', -}); - -const isDevelopment = process.env.NODE_ENV !== 'production'; - -const miniCssExractPlugin = new MiniCssExtractPlugin({ - filename: isDevelopment ? '[name].css' : '[name].[hash].css', - chunkFilename: isDevelopment ? '[id].css' : '[id].[hash].css', -}); - -const devtool = isDevelopment ? 'cheap-module-eval-source-map' : 'source-map'; - -/* Resolve */ - -const resolve = { - alias: { - '~': path.join(__dirname, 'src'), - }, - extensions: ['*', '.ts', '.tsx', '.js', '.jsx', '.json'] -}; - -/* Configuration */ - -module.exports = () => { - /* Export */ - const plugins = [ - htmlPlugin, - new webpack.IgnorePlugin(/^osrm-text-instructions$/, /leaflet-routing-machine$/), - miniCssExractPlugin, - new webpack.HashedModuleIdsPlugin(), - new WebpackPwaManifest(PWA_CONFIG.MANIFEST(path.resolve('./src/sprites/app.png'))), - new Dotenv(), - new SWPrecacheWebpackPlugin({ - cacheId: 'my-domain-cache-id', - dontCacheBustUrlsMatching: /\.\w{8}\./, - filename: 'service-worker.js', - minify: true, - navigateFallback: `${PWA_CONFIG.PUBLIC_PATH}index.html`, - staticFileGlobsIgnorePatterns: [/\.map$/, /manifest\.json$/], - }), - ]; - - return { - module: { - rules: [ - { - test: /\.css$/, - use: [ - { loader: 'style-loader' }, - { loader: 'css-loader' }, - ] - }, - { - test: /\.less$/, - use: [ - { loader: isDevelopment ? 'style-loader' : MiniCssExtractPlugin.loader }, - // { loader: 'style-loader' }, - { loader: 'css-loader' }, - { loader: 'less-loader' } - ] - }, - { - test: /\.(ts|tsx|js|jsx)$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader' - } - }, - { test: /\.(ts|tsx)?$/, loader: 'awesome-typescript-loader' }, - { - test: /\.(eot|ttf|woff|woff2|otf)$/, - use: { - loader: 'file-loader', - options: { - name: '[name].[ext]', - outputPath: 'fonts/' - } - } - }, - { - test: /\.(png|svg)$/, - use: { - loader: 'file-loader', - options: {} - } - } - ] - }, - devtool, - resolve, - plugins, - entry: { - app: './src/index.tsx', - }, - output: { - publicPath: '/', - filename: isDevelopment ? '[name].[hash].js' : '[name].[contenthash].js', - }, - optimization: { - splitChunks: { - cacheGroups: { - // vendor chunk (uncomment if you want all node_modules to be in vendor.js bundle - leaflet: { - name: 'leaflet', - chunks: 'all', - test: /node_modules\/leaflet/, - priority: 21, - }, - vendor: { - name: 'vendor', - chunks: 'all', - test: /node_modules/, - priority: 20, - reuseExistingChunk: true, - }, - commons: { - name: 'commons', - chunks: 'initial', - minChunks: 2, - minSize: 0, - reuseExistingChunk: true, - } - } - }, - minimizer: [ - new UglifyJsPlugin({ - cache: true, - parallel: true, - sourceMap: true // set to true if you want JS source maps - }), - new OptimizeCSSAssetsPlugin({}) - ], - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) - }, - devServer: { - historyApiFallback: true, - port: 8000, - // host: '192.168.88.40', - contentBase: 'dist', - publicPath: '/', - hot: true, - } - }; -}; - diff --git a/yarn.lock b/yarn.lock index 6951001..5926e94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,1058 +2,1428 @@ # yarn lockfile v1 -"@babel/cli@^7.0.0-rc.1": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.3.tgz#121beb7c273e0521eb2feeb3883a2b7435d12328" - integrity sha512-K2UXPZCKMv7KwWy9Bl4sa6+jTNP7JyDiHKzoOiUUygaEDbC60vaargZDnO9oFMvlq8pIKOOyUUgeMYrsaN9djA== +"@babel/code-frame@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: - commander "^4.0.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.1.0" - glob "^7.0.0" - lodash "^4.17.13" - make-dir "^2.1.0" - slash "^2.0.0" + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" + integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== + +"@babel/core@7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" source-map "^0.5.0" - optionalDependencies: - chokidar "^2.1.8" -"@babel/code-frame@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" - integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.6.0", "@babel/core@^7.7.5", "@babel/core@^7.8.4": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06" + integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA== dependencies: - "@babel/highlight" "7.0.0-beta.44" + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" -"@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== +"@babel/generator@^7.12.1", "@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/compat-data@^7.8.0", "@babel/compat-data@^7.8.1": - version "7.8.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.1.tgz#fc0bbbb7991e4fb2b47e168e60f2cc2c41680be9" - integrity sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw== - dependencies: - browserslist "^4.8.2" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/generator@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" - integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== - dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/types" "^7.13.0" jsesc "^2.5.1" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" - integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug== - dependencies: - "@babel/types" "^7.8.3" - jsesc "^2.5.1" - lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== +"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" + integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.12.13" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" + integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-explode-assignable-expression" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/helper-call-delegate@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" - integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" + integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/compat-data" "^7.13.12" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" -"@babel/helper-compilation-targets@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz#2deedc816fd41dca7355ef39fd40c9ea69f0719a" - integrity sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw== +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.13.0": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" + integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== dependencies: - "@babel/compat-data" "^7.8.1" - browserslist "^4.8.2" - invariant "^2.2.4" - levenary "^1.1.0" - semver "^5.5.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" -"@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" - integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== +"@babel/helper-create-regexp-features-plugin@^7.12.13": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" + integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== dependencies: - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.6.0" + "@babel/helper-annotate-as-pure" "^7.12.13" + regexpu-core "^4.7.1" -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== +"@babel/helper-define-polyfill-provider@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" + integrity sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== +"@babel/helper-explode-assignable-expression@^7.12.13": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.13.0" -"@babel/helper-function-name@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" - integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.12.13" -"@babel/helper-get-function-arity@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" - integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" + integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== +"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.13.12" -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.13.12" -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== dependencies: - "@babel/types" "^7.8.3" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.12.13" -"@babel/helper-module-transforms@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" - integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + +"@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== dependencies: - "@babel/types" "^7.8.3" + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" -"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== +"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== dependencies: - lodash "^4.17.13" + "@babel/types" "^7.13.12" -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.12.1" -"@babel/helper-replace-supers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" - integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.12.13" -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-split-export-declaration@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" - integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== - dependencies: - "@babel/types" "7.0.0-beta.44" +"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== dependencies: - "@babel/types" "^7.8.3" + "@babel/helper-function-name" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== +"@babel/helpers@^7.12.1", "@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/highlight@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" - integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== dependencies: + "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" - integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.12.3", "@babel/parser@^7.13.13", "@babel/parser@^7.7.0": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" + integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" + integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" + integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== +"@babel/plugin-proposal-class-properties@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-decorators@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" + integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.12.1" + +"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" + integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" + integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" + integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" + integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" + integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== +"@babel/plugin-proposal-numeric-separator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== +"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" + integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" + integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-compilation-targets" "^7.13.8" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.13.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" + integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" - integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" + integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-syntax-async-generators@^7.8.0": +"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" + integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-decorators@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648" + integrity sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-json-strings@^7.8.0": +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" + integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": +"@babel/plugin-syntax-jsx@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" + integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-object-rest-spread@^7.8.0": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.0": +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== +"@babel/plugin-syntax-typescript@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" + integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" + integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-classes@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" - integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" + integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" + integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" - integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" + integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" + integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" + integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" + integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-for-of@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz#15f17bce2fc95c7d59a24b299e83e81cedc22e18" - integrity sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA== +"@babel/plugin-transform-flow-strip-types@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" + integrity sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.12.1" -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== +"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" + integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" + integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" - integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" + integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" - integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" + integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" - integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" + integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" - integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== +"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-identifier" "^7.12.11" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" + integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" + integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.12.13" -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" + integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-parameters@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz#7890576a13b17325d8b7d44cb37f21dc3bbdda59" - integrity sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q== +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" + integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== dependencies: - "@babel/helper-call-delegate" "^7.8.3" - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" + integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-regenerator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" - integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" + integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== dependencies: - regenerator-transform "^0.14.0" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz#0208b1d942bf939cd4f7aa5b255d42602aa4a920" + integrity sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== +"@babel/plugin-transform-react-display-name@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== +"@babel/plugin-transform-react-display-name@^7.12.1", "@babel/plugin-transform-react-display-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" + integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== +"@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" + integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.12.17" -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== +"@babel/plugin-transform-react-jsx-self@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" + integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-typeof-symbol@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz#5cffb216fb25c8c64ba6bf5f76ce49d3ab079f4d" - integrity sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g== +"@babel/plugin-transform-react-jsx-source@^7.12.1": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" + integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== +"@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" + integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/types" "^7.13.12" -"@babel/preset-env@^7.0.0-rc.1": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.3.tgz#dc0fb2938f52bbddd79b3c861a4b3427dd3a6c54" - integrity sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg== +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== dependencies: - "@babel/compat-data" "^7.8.0" - "@babel/helper-compilation-targets" "^7.8.3" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" + integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" + integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" + integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" + integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" + integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" + integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-typescript@^7.12.1": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" + integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-typescript" "^7.12.13" + +"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" + integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" + integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/preset-env@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-compilation-targets" "^7.12.1" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.3" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.3" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.3" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.3" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.3" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.3" - browserslist "^4.8.2" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.1" core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.0" semver "^5.5.0" -"@babel/runtime-corejs3@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.8.3.tgz#a2445836d0699e5ba77eea2c790ad9ea51e2cd27" - integrity sha512-lrIU4aVbmlM/wQPzhEvzvNJskKyYptuXb0fGC0lTQTupTOYtR2Vqbu6/jf8vTr4M8Wt1nIzxVrSvPI5qESa/xA== +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.12.tgz#6dff470478290582ac282fb77780eadf32480237" + integrity sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA== + dependencies: + "@babel/compat-data" "^7.13.12" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-async-generator-functions" "^7.13.8" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-dynamic-import" "^7.13.8" + "@babel/plugin-proposal-export-namespace-from" "^7.12.13" + "@babel/plugin-proposal-json-strings" "^7.13.8" + "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-numeric-separator" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" + "@babel/plugin-transform-block-scoped-functions" "^7.12.13" + "@babel/plugin-transform-block-scoping" "^7.12.13" + "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.13.0" + "@babel/plugin-transform-dotall-regex" "^7.12.13" + "@babel/plugin-transform-duplicate-keys" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" + "@babel/plugin-transform-function-name" "^7.12.13" + "@babel/plugin-transform-literals" "^7.12.13" + "@babel/plugin-transform-member-expression-literals" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.13.0" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.13.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" + "@babel/plugin-transform-new-target" "^7.12.13" + "@babel/plugin-transform-object-super" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-property-literals" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.12.13" + "@babel/plugin-transform-reserved-words" "^7.12.13" + "@babel/plugin-transform-shorthand-properties" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" + "@babel/plugin-transform-sticky-regex" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" + "@babel/plugin-transform-typeof-symbol" "^7.12.13" + "@babel/plugin-transform-unicode-escapes" "^7.12.13" + "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.13.12" + babel-plugin-polyfill-corejs2 "^0.1.4" + babel-plugin-polyfill-corejs3 "^0.1.3" + babel-plugin-polyfill-regenerator "^0.1.2" + core-js-compat "^3.9.0" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" + integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.1" + "@babel/plugin-transform-react-jsx-development" "^7.12.1" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-react@^7.12.5": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" + integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-transform-react-display-name" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.13.12" + "@babel/plugin-transform-react-jsx-development" "^7.12.17" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-typescript@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.12.1" + +"@babel/runtime-corejs3@^7.10.2": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz#14c3f4c85de22ba88e8e86685d13e8861a82fe86" + integrity sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg== dependencies: core-js-pure "^3.0.0" - regenerator-runtime "^0.13.2" + regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.4": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1" - integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w== +"@babel/runtime@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== dependencies: - regenerator-runtime "^0.13.2" + regenerator-runtime "^0.13.4" -"@babel/template@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" - integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" + integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - lodash "^4.2.0" + regenerator-runtime "^0.13.4" -"@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== +"@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.3.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/traverse@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" - integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.7.0": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" + integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/generator" "7.0.0-beta.44" - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-split-export-declaration" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" - -"@babel/traverse@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" - integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.13" + "@babel/types" "^7.13.13" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.13" -"@babel/types@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" - integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" + integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== dependencies: - esutils "^2.0.2" - lodash "^4.2.0" + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0-beta.49", "@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@iarna/cli@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" - integrity sha512-ukITQAqVs2n9HGmn3car/Ir7d3ta650iXhrG7pjr3EWdFmJuuOVWgYsu7ftsSe5VifEFFhjxVuX9+8F7L8hwcA== +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: - signal-exit "^3.0.2" - update-notifier "^2.2.0" - yargs "^8.0.2" + exec-sh "^0.3.2" + minimist "^1.2.0" -"@jimp/bmp@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.6.8.tgz#8abbfd9e26ba17a47fab311059ea9f7dd82005b6" - integrity sha512-uxVgSkI62uAzk5ZazYHEHBehow590WAkLKmDXLzkr/XP/Hv2Fx1T4DKwJ/15IY5ktq5VAhAUWGXTyd8KWFsx7w== +"@craco/craco@^5.5.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-5.9.0.tgz#dcd34330b558596a4841374743071b7fa041dce9" + integrity sha512-2Q8gIB4W0/nPiUxr9iAKUhGsFlXYN0/wngUdK1VWtfV2NtBv+yllNn2AjieaLbttgpQinuOYmDU65vocC0NMDg== dependencies: - "@jimp/utils" "^0.6.8" - bmp-js "^0.1.0" - core-js "^2.5.7" + cross-spawn "^7.0.0" + lodash "^4.17.15" + webpack-merge "^4.2.2" -"@jimp/core@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.6.8.tgz#6a41089792516f6e64a5302d12eb562aa7847c7b" - integrity sha512-JOFqBBcSNiDiMZJFr6OJqC6viXj5NVBQISua0eacoYvo4YJtTajOIxC4MqWyUmGrDpRMZBR8QhSsIOwsFrdROA== - dependencies: - "@jimp/utils" "^0.6.8" - any-base "^1.1.0" - buffer "^5.2.0" - core-js "^2.5.7" - exif-parser "^0.1.12" - file-type "^9.0.0" - load-bmfont "^1.3.1" - mkdirp "0.5.1" - phin "^2.9.1" - pixelmatch "^4.0.2" - tinycolor2 "^1.4.1" +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@jimp/custom@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.6.8.tgz#0476d7b3f5da3121d98895a2e14f2899e602f2b6" - integrity sha512-FrYlzZRVXP2vuVwd7Nc2dlK+iZk4g6IaT1Ib8Z6vU5Kkwlt83FJIPJ2UUFABf3bF5big0wkk8ZUihWxE4Nzdng== - dependencies: - "@jimp/core" "^0.6.8" - core-js "^2.5.7" +"@csstools/normalize.css@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" + integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== -"@jimp/gif@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.6.8.tgz#848dd4e6e1a56ca2b3ce528969e44dfa99a53b14" - integrity sha512-yyOlujjQcgz9zkjM5ihZDEppn9d1brJ7jQHP5rAKmqep0G7FU1D0AKcV+Ql18RhuI/CgWs10wAVcrQpmLnu4Yw== +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" - omggif "^1.0.9" + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" -"@jimp/jpeg@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.6.8.tgz#4cad85a6d1e15759acb56bddef29aa3473859f2c" - integrity sha512-rGtXbYpFXAn471qLpTGvhbBMNHJo5KiufN+vC5AWyufntmkt5f0Ox2Cx4ijuBMDtirZchxbMLtrfGjznS4L/ew== - dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" - jpeg-js "^0.3.4" +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== -"@jimp/plugin-blit@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.6.8.tgz#646ebb631f35afc28c1e8908524bc43d1e9afa3d" - integrity sha512-7Tl6YpKTSpvwQbnGNhsfX2zyl3jRVVopd276Y2hF2zpDz9Bycow7NdfNU/4Nx1jaf96X6uWOtSVINcQ7rGd47w== - dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== -"@jimp/plugin-blur@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.6.8.tgz#7b753ae94f6099103f57c268c3b2679047eefe95" - integrity sha512-NpZCMKxXHLDQsX9zPlWtpMA660DQStY6/z8ZetyxCDbqrLe9YCXpeR4MNhdJdABIiwTm1W5FyFF4kp81PHJx3Q== - dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== -"@jimp/plugin-color@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.6.8.tgz#4101cb1208879b331db6e43ea6b96eaf8dbaedbc" - integrity sha512-jjFyU0zNmGOH2rjzHuOMU4kaia0oo82s/7UYfn5h7OUkmUZTd6Do3ZSK1PiXA7KR+s4B76/Omm6Doh/0SGb7BQ== +"@hapi/joi@^15.1.0": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" - tinycolor2 "^1.4.1" + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" -"@jimp/plugin-contain@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.6.8.tgz#af95d33b63d0478943374ae15dd2607fc69cad14" - integrity sha512-p/P2wCXhAzbmEgXvGsvmxLmbz45feF6VpR4m9suPSOr8PC/i/XvTklTqYEUidYYAft4vHgsYJdS74HKSMnH8lw== +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@hapi/hoek" "^8.3.0" -"@jimp/plugin-cover@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.6.8.tgz#490e3186627a34d93cc015c4169bac9070d6ad17" - integrity sha512-2PvWgk+PJfRsfWDI1G8Fpjrsu0ZlpNyZxO2+fqWlVo6y/y2gP4v08FqvbkcqSjNlOu2IDWIFXpgyU0sTINWZLg== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" -"@jimp/plugin-crop@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.6.8.tgz#ffec8951a2f3eccad1e3cff9afff5326bd980ce7" - integrity sha512-CbrcpWE2xxPK1n/JoTXzhRUhP4mO07mTWaSavenCg664oQl/9XCtL+A0FekuNHzIvn4myEqvkiTwN7FsbunS/Q== - dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jimp/plugin-displace@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.6.8.tgz#89df05ab7daaff6befc190bb8ac54ec8d57e533b" - integrity sha512-RmV2bPxoPE6mrPxtYSPtHxm2cGwBQr5a2p+9gH6SPy+eUMrbGjbvjwKNfXWUYD0leML+Pt5XOmAS9pIROmuruQ== +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" -"@jimp/plugin-dither@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.6.8.tgz#17e5b9f56575a871e329fef8b388e614b92d84f8" - integrity sha512-x6V/qjxe+xypjpQm7GbiMNqci1EW5UizrcebOhHr8AHijOEqHd2hjXh5f6QIGfrkTFelc4/jzq1UyCsYntqz9Q== +"@jest/core@^26.6.0", "@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" -"@jimp/plugin-flip@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.6.8.tgz#153df0c677f79d4078bb9e4c1f2ac392b96dc3a1" - integrity sha512-4il6Da6G39s9MyWBEee4jztEOUGJ40E6OlPjkMrdpDNvge6hYEAB31BczTYBP/CEY74j4LDSoY5LbcU4kv06yA== +"@jest/environment@^26.6.0", "@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" -"@jimp/plugin-gaussian@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.6.8.tgz#100abc7ae1f19fe9c09ed41625b475aae7c6093c" - integrity sha512-pVOblmjv7stZjsqloi4YzHVwAPXKGdNaHPhp4KP4vj41qtc6Hxd9z/+VWGYRTunMFac84gUToe0UKIXd6GhoKw== +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" -"@jimp/plugin-invert@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.6.8.tgz#f40bfaa3b592d21ff14ede0e49aabec88048cad0" - integrity sha512-11zuLiXDHr6tFv4U8aieXqNXQEKbDbSBG/h+X62gGTNFpyn8EVPpncHhOqrAFtZUaPibBqMFlNJ15SzwC7ExsQ== +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" -"@jimp/plugin-mask@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.6.8.tgz#e64405f7dacf0672bff74f3b95b724d9ac517f86" - integrity sha512-hZJ0OiKGJyv7hDSATwJDkunB1Ie80xJnONMgpUuUseteK45YeYNBOiZVUe8vum8QI1UwavgBzcvQ9u4fcgXc9g== +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" -"@jimp/plugin-normalize@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.6.8.tgz#a0180f2b8835e3638cdc5e057b44ac63f60db6ba" - integrity sha512-Q4oYhU+sSyTJI7pMZlg9/mYh68ujLfOxXzQGEXuw0sHGoGQs3B0Jw7jmzGa6pIS06Hup5hD2Zuh1ppvMdjJBfQ== +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" -"@jimp/plugin-print@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.6.8.tgz#66309549e01896473111e3a0ad2cee428638bd6e" - integrity sha512-2aokejGn4Drv1FesnZGqh5KEq0FQtR0drlmtyZrBH+r9cx7hh0Qgf4D1BOTDEgXkfSSngjGRjKKRW/fwOrVXYw== +"@jest/test-result@^26.6.0", "@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" - load-bmfont "^1.4.0" + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" -"@jimp/plugin-resize@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.6.8.tgz#c26d9a973f7eec51ad9018fcbbac1146f7a73aa0" - integrity sha512-27nPh8L1YWsxtfmV/+Ub5dOTpXyC0HMF2cu52RQSCYxr+Lm1+23dJF70AF1poUbUe+FWXphwuUxQzjBJza9UoA== +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" -"@jimp/plugin-rotate@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.6.8.tgz#2afda247984eeebed95c1bb1b13ccd3be5973299" - integrity sha512-GbjETvL05BDoLdszNUV4Y0yLkHf177MnqGqilA113LIvx9aD0FtUopGXYfRGVvmtTOTouoaGJUc+K6qngvKxww== +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" -"@jimp/plugin-scale@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.6.8.tgz#5de403345859bb0b30bf3e242dedd8ceb6ecb96c" - integrity sha512-GzIYWR/oCUK2jAwku23zt19V1ssaEU4pL0x2XsLNKuuJEU6DvEytJyTMXCE7OLG/MpDBQcQclJKHgiyQm5gIOQ== +"@jest/types@^26.6.0", "@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" - -"@jimp/plugins@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.6.8.tgz#5618170a986ced1ea795adcd9376122f2543b856" - integrity sha512-fMcTI72Vn/Lz6JftezTURmyP5ml/xGMe0Ljx2KRJ85IWyP33vDmGIUuutFiBEbh2+y7lRT+aTSmjs0QGa/xTmQ== - dependencies: - "@jimp/plugin-blit" "^0.6.8" - "@jimp/plugin-blur" "^0.6.8" - "@jimp/plugin-color" "^0.6.8" - "@jimp/plugin-contain" "^0.6.8" - "@jimp/plugin-cover" "^0.6.8" - "@jimp/plugin-crop" "^0.6.8" - "@jimp/plugin-displace" "^0.6.8" - "@jimp/plugin-dither" "^0.6.8" - "@jimp/plugin-flip" "^0.6.8" - "@jimp/plugin-gaussian" "^0.6.8" - "@jimp/plugin-invert" "^0.6.8" - "@jimp/plugin-mask" "^0.6.8" - "@jimp/plugin-normalize" "^0.6.8" - "@jimp/plugin-print" "^0.6.8" - "@jimp/plugin-resize" "^0.6.8" - "@jimp/plugin-rotate" "^0.6.8" - "@jimp/plugin-scale" "^0.6.8" - core-js "^2.5.7" - timm "^1.6.1" - -"@jimp/png@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.6.8.tgz#ee06cf078b381137ec7206c4bb1b4cfcbe15ca6f" - integrity sha512-JHHg/BZ7KDtHQrcG+a7fztw45rdf7okL/YwkN4qU5FH7Fcrp41nX5QnRviDtD9hN+GaNC7kvjvcqRAxW25qjew== - dependencies: - "@jimp/utils" "^0.6.8" - core-js "^2.5.7" - pngjs "^3.3.3" - -"@jimp/tiff@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.6.8.tgz#79bd22ed435edbe29d02a2c8c9bf829f988ebacc" - integrity sha512-iWHbxd+0IKWdJyJ0HhoJCGYmtjPBOusz1z1HT/DnpePs/Lo3TO4d9ALXqYfUkyG74ZK5jULZ69KLtwuhuJz1bg== - dependencies: - core-js "^2.5.7" - utif "^2.0.1" - -"@jimp/types@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.6.8.tgz#4510eb635cd00b201745d70e38f791748baa7075" - integrity sha512-vCZ/Cp2osy69VP21XOBACfHI5HeR60Rfd4Jidj4W73UL+HrFWOtyQiJ7hlToyu1vI5mR/NsUQpzyQvz56ADm5A== - dependencies: - "@jimp/bmp" "^0.6.8" - "@jimp/gif" "^0.6.8" - "@jimp/jpeg" "^0.6.8" - "@jimp/png" "^0.6.8" - "@jimp/tiff" "^0.6.8" - core-js "^2.5.7" - timm "^1.6.1" - -"@jimp/utils@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.6.8.tgz#09f794945631173567aa50f72ac28170de58a63d" - integrity sha512-7RDfxQ2C/rarNG9iso5vmnKQbcvlQjBIlF/p7/uYj72WeZgVCB+5t1fFBKJSU4WhniHX4jUMijK+wYGE3Y3bGw== - dependencies: - core-js "^2.5.7" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" "@mapbox/corslite@0.0.7": version "0.0.7" @@ -1065,6 +1435,47 @@ resolved "https://registry.yarnpkg.com/@mapbox/polyline/-/polyline-0.2.0.tgz#6e25980744aa22331f94b645a542c02d3fcfee97" integrity sha1-biWYB0SqIjMflLZFpULALT/P7pc= +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@pmmmwh/react-refresh-webpack-plugin@0.4.3", "@pmmmwh/react-refresh-webpack-plugin@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" + integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== + dependencies: + ansi-html "^0.0.7" + error-stack-parser "^2.0.6" + html-entities "^1.2.1" + native-url "^0.2.6" + schema-utils "^2.6.5" + source-map "^0.7.3" + "@redux-saga/core@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" @@ -1109,15 +1520,219 @@ resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== -"@types/classnames@^2.2.7": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.9.tgz#d868b6febb02666330410fe7f58f3c4b8258be7b" - integrity sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A== +"@rollup/plugin-node-resolve@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== + dependencies: + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== +"@rollup/plugin-replace@^2.3.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@sinonjs/commons@^1.7.0": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" + integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^1.1.1": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz#e6786b6af5799f82f7ab3a82e53f6182d2b91a58" + integrity sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== + dependencies: + ejs "^2.6.1" + magic-string "^0.25.0" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.3", "@types/babel__core@^7.1.7": + version "7.1.14" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" + integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/classnames@^2.2.7": + version "2.2.11" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.11.tgz#2521cc86f69d15c5b90664e4829d84566052c1cf" + integrity sha512-2koNhpWm3DgWRp5tpkiJ8JGc1xTn2q0l+jUNUE7oMKXUf5NpI9AIdC4kbjGNFBdHtcxBD18LAksoudAVhFKCjw== + +"@types/eslint@^7.2.6": + version "7.2.8" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.8.tgz#45cd802380fcc352e5680e1781d43c50916f12ee" + integrity sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.47" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" + integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/geojson@*": version "7946.0.7" @@ -1125,35 +1740,90 @@ integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" + integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/leaflet@^1.4.3": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.5.8.tgz#1c550803672fc5866b8b2c38512009f2b5d4205d" - integrity sha512-qpi5n4LmwenUFZ+VZ7ytRgHK+ZAclIvloL2zoKCmmj244WD2hBcLbUZ6Szvajfe3sIkSYEJ8WZ1p9VYl8tRsMA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.7.0.tgz#3700fb5d29a8214fbd496565b08ec28e40cee808" + integrity sha512-ltv5jR+VjKSMtoDkxH61Rsbo0zLU7iqyOXpVPkAX4F+79fg2eymC7t0msWsfNaEZO1FGTIQATCCCQe+ijWoicg== dependencies: "@types/geojson" "*" "@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== "@types/node@*": - version "13.1.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b" - integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A== + version "14.14.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" + integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== "@types/node@^11.9.0": - version "11.15.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.4.tgz#2c8d58f726cfbbd9b76d179475fd386d650a2fda" - integrity sha512-z7deEbNOPcS7pb7uyaZhbITh18ruGghYh86VmUL2zJPKeu9tEAqF0goQH0dhWamHoBJpkyWroNxPZjzNvbYVCw== + version "11.15.50" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.50.tgz#a8c76622a20320d4a04adf2002b04737c510ef11" + integrity sha512-kG/ZmA/uD1L1gVD7vVXQB6v+ICZlJgvakrodHiltT3Zq0YjXq5H9tfgop8MsdMGCwrcLJg9QCQDRP4DZsn9T/g== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.0.0": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== "@types/prop-types@*": version "15.7.3" @@ -1161,16 +1831,32 @@ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/q@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" - integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== "@types/ramda@^0.26.39": - version "0.26.40" - resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.26.40.tgz#4fbd3bd6a8583e2aa0830b8942fbace44ecd070a" - integrity sha512-CUmROm0dxHfg5wcB/n1+sEJQxvmdOhJiZiIcCKgWVi1Hd6ffhG6BE0Ej4nHe2vfKGTOkqcTNBjdVfLTJdlH6Hw== + version "0.26.44" + resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.26.44.tgz#70bb06f5ae60809dc83a3d804505ee3123443738" + integrity sha512-s0cj9rylWw+Ax/AnttCQzMrLZGq/OxAIZgrkRLK1QHJIF6Qabd0//acMCFM6+Xb8Bi8p8PkT2fqpaQveRju/kA== dependencies: - ts-toolbelt "^4.12.0" + ts-toolbelt "^6.3.3" + +"@types/react-dom@^17.0.3": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.3.tgz#7fdf37b8af9d6d40127137865bb3fff8871d7ee1" + integrity sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" + integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" "@types/react@16.8.1": version "16.8.1" @@ -1180,157 +1866,330 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/xml2js@^0.4.2": - version "0.4.5" - resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.5.tgz#d21759b056f282d9c7066f15bbf5c19b908f22fa" - integrity sha512-yohU3zMn0fkhlape1nxXG2bLEGZRc1FeqF80RoHaYXJN7uibaauXfhzhOJr1Xh36sn+/tx21QAOf07b/xYVk1w== +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== dependencies: "@types/node" "*" -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== +"@types/scheduler@*": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" + integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + +"@types/tapable@^1", "@types/tapable@^1.0.5": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" + integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== + +"@types/uglify-js@*": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" + integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + source-map "^0.6.1" -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== - -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== - -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== - -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== +"@types/webpack-sources@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== dependencies: - "@webassemblyjs/wast-printer" "1.8.5" + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== - -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== +"@types/webpack@^4.39.2", "@types/webpack@^4.41.8": + version "4.41.27" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.27.tgz#f47da488c8037e7f1b2dbf2714fbbacb61ec0ffc" + integrity sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA== dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== - -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== +"@types/xml2js@^0.4.2": + version "0.4.8" + resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.8.tgz#84c120c864a5976d0b5cf2f930a75d850fc2b03a" + integrity sha512-EyvT83ezOdec7BhDaEcsklWy7RSIdi6CNe95tmOAK0yx/Lm30C9K75snT3fYayK59ApC2oyW+rcHErdG05FHJA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" + "@types/node" "*" -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@types/yargs-parser@*": + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + +"@types/yargs@^15.0.0": + version "15.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" + integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^4.5.0": + version "4.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.21.0.tgz#3fce2bfa76d95c00ac4f33dff369cb593aab8878" + integrity sha512-FPUyCPKZbVGexmbCFI3EQHzCZdy2/5f+jv6k2EDljGdXSRc0cKvbndd2nHZkSLqCNOPk0jB6lGzwIkglXcYVsQ== + dependencies: + "@typescript-eslint/experimental-utils" "4.21.0" + "@typescript-eslint/scope-manager" "4.21.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + lodash "^4.17.15" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.21.0", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.21.0.tgz#0b0bb7c15d379140a660c003bdbafa71ae9134b6" + integrity sha512-cEbgosW/tUFvKmkg3cU7LBoZhvUs+ZPVM9alb25XvR0dal4qHL3SiUqHNrzoWSxaXA9gsifrYrS1xdDV6w/gIA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.21.0" + "@typescript-eslint/types" "4.21.0" + "@typescript-eslint/typescript-estree" "4.21.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@^3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^4.5.0": + version "4.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.21.0.tgz#a227fc2af4001668c3e3f7415d4feee5093894c1" + integrity sha512-eyNf7QmE5O/l1smaQgN0Lj2M/1jOuNg2NrBm1dqqQN0sVngTLyw8tdCbih96ixlhbF1oINoN8fDCyEH9SjLeIA== + dependencies: + "@typescript-eslint/scope-manager" "4.21.0" + "@typescript-eslint/types" "4.21.0" + "@typescript-eslint/typescript-estree" "4.21.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.21.0": + version "4.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.21.0.tgz#c81b661c4b8af1ec0c010d847a8f9ab76ab95b4d" + integrity sha512-kfOjF0w1Ix7+a5T1knOw00f7uAP9Gx44+OEsNQi0PvvTPLYeXJlsCJ4tYnDj5PQEYfpcgOH5yBlw7K+UEI9Agw== + dependencies: + "@typescript-eslint/types" "4.21.0" + "@typescript-eslint/visitor-keys" "4.21.0" + +"@typescript-eslint/types@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + +"@typescript-eslint/types@4.21.0": + version "4.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.21.0.tgz#abdc3463bda5d31156984fa5bc316789c960edef" + integrity sha512-+OQaupjGVVc8iXbt6M1oZMwyKQNehAfLYJJ3SdvnofK2qcjfor9pEM62rVjBknhowTkh+2HF+/KdRAc/wGBN2w== + +"@typescript-eslint/typescript-estree@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + dependencies: + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/visitor-keys" "3.10.1" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/typescript-estree@4.21.0": + version "4.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.21.0.tgz#3817bd91857beeaeff90f69f1f112ea58d350b0a" + integrity sha512-ZD3M7yLaVGVYLw4nkkoGKumb7Rog7QID9YOWobFDMQKNl+vPxqVIW/uDk+MDeGc+OHcoG2nJ2HphwiPNajKw3w== + dependencies: + "@typescript-eslint/types" "4.21.0" + "@typescript-eslint/visitor-keys" "4.21.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== + dependencies: + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/visitor-keys@4.21.0": + version "4.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.21.0.tgz#990a9acdc124331f5863c2cf21c88ba65233cd8d" + integrity sha512-dH22dROWGi5Z6p+Igc8bLVLmwy7vEe8r+8c+raPQU0LxgogPUrRAtRGtvBWmlr9waTu3n+QLt/qrS/hWzk1x5w== + dependencies: + "@typescript-eslint/types" "4.21.0" + eslint-visitor-keys "^2.0.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -1343,18 +2202,10 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -JSONStream@^1.3.4, JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1, abbrev@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" @@ -1364,127 +2215,118 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: - acorn "^3.0.4" + acorn "^7.1.1" + acorn-walk "^7.1.1" -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn@^5.5.0: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.2.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" - integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -add-dom-event-listener@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" - integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== - dependencies: - object-assign "4.x" +acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" + integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== add-px-to-style@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" integrity sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo= -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== dependencies: - es6-promisify "^5.0.0" + loader-utils "^2.0.0" + regex-parser "^2.2.11" -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: - humanize-ms "^1.2.1" + clean-stack "^2.0.0" + indent-string "^4.0.0" ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" - integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: +ajv@^8.0.1: + version "8.0.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.0.5.tgz#f07d6fdeffcdbb80485570ce3f1bc845fcc812b9" + integrity sha512-RkiLa/AeJx7+9OvniQ/qeWu0w74A8DiPPBclQ6ji3ZQkv5KamO+QGpqmi7O4JIw3rHGUXZ6CoP9tsAkn3gyazg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-html@0.0.7: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7, ansi-html@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= @@ -1494,20 +2336,15 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -1516,20 +2353,12 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= - -ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= - -any-base@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" - integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" anymatch@^2.0.0: version "2.0.0" @@ -1539,34 +2368,19 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -"aproba@^1.1.2 || 2", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arg@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" - integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1574,13 +2388,18 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= arr-diff@^4.0.0: version "4.0.0" @@ -1597,16 +2416,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-find@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" - integrity sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -1617,13 +2426,15 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.0.3, array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== +array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" is-string "^1.0.5" array-union@^1.0.1: @@ -1633,6 +2444,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -1643,27 +2459,44 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.flat@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" -asap@^2.0.0, asap@~2.0.3: +array.prototype.flatmap@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" asn1@~0.2.3: version "0.2.4" @@ -1677,11 +2510,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= - assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -1695,11 +2523,16 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: +ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -1722,615 +2555,172 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= +autoprefixer@^9.6.1: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - -awesome-typescript-loader@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" - integrity sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g== - dependencies: - chalk "^2.4.1" - enhanced-resolve "^4.0.0" - loader-utils "^1.1.0" - lodash "^4.17.5" - micromatch "^3.1.9" - mkdirp "^0.5.1" - source-map-support "^0.5.3" - webpack-log "^1.2.0" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= + postcss "^7.0.32" + postcss-value-parser "^4.1.0" aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.2.1, aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" - integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" +axe-core@^4.0.2: + version "4.1.4" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.4.tgz#f19cd99a84ee32a318b9c5b5bb8ed373ad94f143" + integrity sha512-Pdgfv6iP0gNx9ejRGa3zE7Xgkj/iclXqLfe7BnatdZz0QnLZ3jrRHUVH8wNSdN68w05Sk3ShGTb3ydktMTooig== -axobject-query@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.1.tgz#2a3b1271ec722d48a4cd4b3fcc20c853326a49a7" - integrity sha512-lF98xa/yvy6j3fBHAgQXIYl+J4eZadOSqsPojemUqClzNbBV38wWGpUbQbVEyf4eUF5yF7eHmGgGA2JiHyjeqw== +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== dependencies: - "@babel/runtime" "^7.7.4" - "@babel/runtime-corejs3" "^7.7.4" + follow-redirects "^1.10.0" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@^8.2.3: - version "8.2.6" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" - integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - eslint-scope "3.7.1" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== +babel-extract-comments@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" + integrity sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" + babylon "^6.18.0" -babel-helper-bindify-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" - integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA= +babel-jest@^26.6.0, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-explode-class@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" - integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes= - dependencies: - babel-helper-bindify-decorators "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-loader@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" - integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" -babel-plugin-lodash@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" - integrity sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg== +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: - "@babel/helper-module-imports" "^7.0.0-beta.49" - "@babel/types" "^7.0.0-beta.49" - glob "^7.1.1" - lodash "^4.17.10" - require-package-name "^2.0.1" + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" -babel-plugin-ramda@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-ramda/-/babel-plugin-ramda-2.0.0.tgz#e6708b1637dbb754e0cc0d21cd1c34750b0158c8" - integrity sha512-PZ/6fmNGshCU7Vt33JRWDDSQqZxOsav1DztZ+VBJFOamE3spyoKuIL9Ve0FQd/oXGlH5jHf/WrpCSGn0MR+YVw== +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: - "@babel/helper-module-imports" "^7.0.0" - ramda "^0.25.0" + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= +babel-plugin-macros@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" - integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= +babel-plugin-named-asset-import@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" + integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= +babel-plugin-polyfill-corejs2@^0.1.4: + version "0.1.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1" + integrity sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== + dependencies: + "@babel/compat-data" "^7.13.0" + "@babel/helper-define-polyfill-provider" "^0.1.5" + semver "^6.1.1" -babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" - integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= +babel-plugin-polyfill-corejs3@^0.1.3: + version "0.1.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" + integrity sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.1.5" + core-js-compat "^3.8.1" -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= - -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= - -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= +babel-plugin-polyfill-regenerator@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" + integrity sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.1.5" babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= - -babel-plugin-transform-async-generator-functions@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" - integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-class-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" - integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0= - dependencies: - babel-helper-explode-class "^6.24.1" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.22.0: +babel-plugin-transform-object-rest-spread@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= @@ -2338,150 +2728,59 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" -babel-plugin-transform-react-display-name@^6.23.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" - integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= - dependencies: - babel-runtime "^6.22.0" +babel-plugin-transform-react-remove-prop-types@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24= +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= +babel-preset-react-app@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz#689b60edc705f8a70ce87f47ab0e560a317d7045" + integrity sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg== dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" + "@babel/core" "7.12.3" + "@babel/plugin-proposal-class-properties" "7.12.1" + "@babel/plugin-proposal-decorators" "7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "7.12.1" + "@babel/plugin-proposal-numeric-separator" "7.12.1" + "@babel/plugin-proposal-optional-chaining" "7.12.1" + "@babel/plugin-transform-flow-strip-types" "7.12.1" + "@babel/plugin-transform-react-display-name" "7.12.1" + "@babel/plugin-transform-runtime" "7.12.1" + "@babel/preset-env" "7.12.1" + "@babel/preset-react" "7.12.1" + "@babel/preset-typescript" "7.12.1" + "@babel/runtime" "7.12.1" + babel-plugin-macros "2.8.0" + babel-plugin-transform-react-remove-prop-types "0.4.24" -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-runtime@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" - integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-env@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" - integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^3.2.6" - invariant "^2.2.2" - semver "^5.3.0" - -babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0= - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - -babel-preset-react@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A= - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - -babel-preset-stage-2@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" - integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE= - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.24.1" - babel-plugin-transform-decorators "^6.24.1" - babel-preset-stage-3 "^6.24.1" - -babel-preset-stage-3@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" - integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.24.1" - babel-plugin-transform-async-to-generator "^6.24.1" - babel-plugin-transform-exponentiation-operator "^6.24.1" - babel-plugin-transform-object-rest-spread "^6.22.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -2489,66 +2788,20 @@ babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^ core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@7.0.0-beta.44: - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" - integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== - babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= - balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" @@ -2575,33 +2828,31 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== +bfj@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + dependencies: + bluebird "^3.5.5" + check-types "^11.1.1" + hoopy "^0.1.4" + tryer "^1.0.1" big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bin-links@^1.1.2, bin-links@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.7.tgz#34b79ea9d0e575d7308afeff0c6b2fc24c793359" - integrity sha512-/eaLaTu7G7/o7PV04QPy1HRT65zf+1tFkPGv0sPTV0tRwufooYBQO3zrcyGgm+ja+ZtBf2GEuKjDRJ2pPG+yqA== - dependencies: - bluebird "^3.5.3" - cmd-shim "^3.0.0" - gentle-fs "^2.3.0" - graceful-fs "^4.1.15" - npm-normalize-package-bin "^1.0.0" - write-file-atomic "^2.3.0" - binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2609,22 +2860,22 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bmp-js@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" - integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -body-parser@1.19.0, body-parser@^1.18.3: +body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -2657,26 +2908,6 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= - dependencies: - hoek "2.x.x" - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2701,11 +2932,23 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -brorand@^1.0.1: +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -2737,26 +2980,28 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -2765,35 +3010,33 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= +browserslist@4.14.2: + version "4.14.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" -browserslist@^3.2.6: - version "3.2.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" - integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.6.2, browserslist@^4.6.4: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== dependencies: - caniuse-lite "^1.0.30000844" - electron-to-chromium "^1.3.47" + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" -browserslist@^4.0.0, browserslist@^4.8.2, browserslist@^4.8.3: - version "4.8.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.5.tgz#691af4e327ac877b25e7a3f7ee869c4ef36cdea3" - integrity sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg== +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: - caniuse-lite "^1.0.30001022" - electron-to-chromium "^1.3.338" - node-releases "^1.1.46" - -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= + node-int64 "^0.4.0" buffer-from@^1.0.0: version "1.1.1" @@ -2819,34 +3062,16 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.0: - version "5.4.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" - integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2857,29 +3082,10 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -2897,6 +3103,29 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^15.0.5: + version "15.0.6" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" + integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2912,10 +3141,13 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-limit@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" - integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" caller-callsite@^2.0.0: version "2.0.0" @@ -2924,13 +3156,6 @@ caller-callsite@^2.0.0: dependencies: callsites "^2.0.0" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" @@ -2938,56 +3163,33 @@ caller-path@^2.0.0: dependencies: caller-callsite "^2.0.0" -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" + pascal-case "^3.1.2" + tslib "^2.0.3" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" +camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-api@^3.0.0: version "3.0.0" @@ -2999,27 +3201,29 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30001022" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001022.tgz#a7721c26a4af4d8420680079dcd27754be84daf6" - integrity sha512-2RQQgO+yDEaqF4ltwrCja7oZst+FVnXHQLSJgZ678tausEljBq3/U20Fedvze+Hxqm8XLV+9OgGbtdgS7ksnRw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001181: + version "1.0.30001207" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" + integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001022: - version "1.0.30001022" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz#9eeffe580c3a8f110b7b1742dcf06a395885e4c6" - integrity sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A== +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== +case-sensitive-paths-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3028,23 +3232,25 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4. escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chokidar@^2.0.2, chokidar@^2.1.8: +check-types@^11.1.1: + version "11.1.2" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" + integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + +chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -3063,16 +3269,31 @@ chokidar@^2.0.2, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== +chokidar@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" -chownr@^1.1.2, chownr@^1.1.4: +chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -3080,23 +3301,11 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cidr-regex@^2.0.10: - version "2.0.10" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" - integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== - dependencies: - ip-regex "^2.1.0" - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -3105,17 +3314,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== - dependencies: - chalk "^1.1.3" +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== class-utils@^0.3.5: version "0.3.6" @@ -3127,77 +3329,22 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.3, 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== +classnames@2.x, classnames@^2.2.1, classnames@^2.2.5, classnames@^2.2.6: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== -clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: source-map "~0.6.0" -clean-webpack-plugin@^0.1.9: - version "0.1.19" - resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz#ceda8bb96b00fe168e9b080272960d20fdcadd6d" - integrity sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA== - dependencies: - rimraf "^2.6.1" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= - dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-table3@^0.5.0, cli-table3@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cli-width@^2.0.0: +clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cliui@^5.0.0: version "5.0.0" @@ -3208,23 +3355,14 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -clone@^2.1.1, clone@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -cmd-shim@^3.0.0, cmd-shim@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" - integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" co@^4.6.0: version "4.6.0" @@ -3240,17 +3378,10 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= - dependencies: - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== collection-visit@^1.0.0: version "1.0.0" @@ -3260,135 +3391,89 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= - dependencies: - color-name "^1.0.0" - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== +color-string@^1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - color@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== dependencies: color-convert "^1.9.1" - color-string "^1.5.2" + color-string "^1.5.4" -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - -columnify@~1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.11.0, commander@^2.20.0: +commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" - integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-classes@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" - integrity sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE= - dependencies: - component-indexof "0.0.3" - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -component-indexof@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" - integrity sha1-EdCRMSI5648yyPJa6csAL/6NPCQ= +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" compressible@~2.0.16: version "2.0.18" @@ -3420,7 +3505,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3430,14 +3515,6 @@ concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - config@^1.24.0: version "1.31.0" resolved "https://registry.yarnpkg.com/config/-/config-1.31.0.tgz#ab08aeba6536015d220cd0afe14b3e0501082542" @@ -3445,17 +3522,10 @@ config@^1.24.0: dependencies: json5 "^1.0.1" -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== connect-history-api-fallback@^1.6.0: version "1.6.0" @@ -3467,11 +3537,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3494,31 +3559,23 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.5.1: +convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" -cookie-parser@~1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.4.tgz#e6363de4ea98c3def9697b93421c09f30cf5d188" - integrity sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw== - dependencies: - cookie "0.3.1" - cookie-signature "1.0.6" +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" @@ -3541,23 +3598,28 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== +core-js-compat@^3.6.2, core-js-compat@^3.8.1, core-js-compat@^3.9.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.10.1.tgz#62183a3a77ceeffcc420d907a3e6fc67d9b27f1c" + integrity sha512-ZHQTdTPkqvw2CeHiZC970NNJcnwzT6YIueDMASKt+p3WbZsLXOcoD392SkcWhkC0wBBHhlfhqGKKsNCQUozYtg== dependencies: - browserslist "^4.8.3" + browserslist "^4.16.3" semver "7.0.0" core-js-pure@^3.0.0: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" - integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== + version "3.10.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.10.1.tgz#28642697dfcf02e0fd9f4d9891bd03a22df28ecf" + integrity sha512-PeyJH2SE0KuxY5eCGNWA+W+CeDpB6M1PN3S7Am7jSv/Ttuxz2SnWbIiVQOn/TDaGaGtxo8CRWHkXwJscbUHtVw== -core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.6.5: + version "3.10.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.1.tgz#e683963978b6806dcc6c0a4a8bd4ab0bdaf3f21a" + integrity sha512-pwCxEXnj27XG47mu7SXAwhLP3L5CrlvCB91ANUkIz40P27kUcvNfSdvyZJ9CLHiVoKSp+TTChMQMSKQEH/IQxA== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -3574,22 +3636,61 @@ cosmiconfig@^5.0.0: js-yaml "^3.13.1" parse-json "^4.0.0" +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +craco-alias@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/craco-alias/-/craco-alias-2.2.0.tgz#adfd37f1623d394cd5e72ef9bab54a1e451bd205" + integrity sha512-FLSRaCWI/CKLUO+Cb/GH9ljSYWdrlzkYf3N373Kuof0hckJ1tj+wPN0XyToR8KPUggoIB5+IDkGs1uKUBuGUiA== + +craco-fast-refresh@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/craco-fast-refresh/-/craco-fast-refresh-1.0.5.tgz#4b2eff0495ac25f5f93e99254a2da68e3b24c201" + integrity sha512-886u7dAWAdbHW2a2UK1D+oxc1Hf1MPRYatv9JGnGooDfo0AoPV6V/7f8XGwRFNJ06WQhA8dRc699V38PkMMpaA== + dependencies: + "@pmmmwh/react-refresh-webpack-plugin" "^0.4.3" + react-refresh "^0.9.0" + +craco@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/craco/-/craco-0.0.3.tgz#1e464b0ae5d9176570382d3a3fcdbf3599577012" + integrity sha512-eeibbwJm1CTf/j3xvNgNmsRS7abegp4Cfm5qtn5nE9/0JjZRas+FHj8IlT8FMFWR0XOyZFGcWZgzaTU19DNGoQ== + dependencies: + "@babel/core" "^7.6.0" + "@craco/craco" "^5.5.0" + "@types/babel__core" "^7.1.3" + "@types/webpack" "^4.39.2" + webpack "^4.41.0" + create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -3600,7 +3701,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -3617,7 +3718,16 @@ croppr@^2.3.1: resolved "https://registry.yarnpkg.com/croppr/-/croppr-2.3.1.tgz#d279e006531240fa8ebf2681e4127ae7c42b074e" integrity sha512-0rvTl4VmR3I4AahjJPF1u9IlT7ckvjIcgaLnUjYaY+UZsP9oxlVYZWYDuqM3SVCQiaI7DXMjR7wOEYT+mydOFg== -cross-spawn@6.0.5, cross-spawn@^6.0.0: +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3628,22 +3738,6 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= - dependencies: - boom "2.x.x" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -3666,24 +3760,18 @@ crypto-random-string@^1.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= -css-animation@^1.3.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/css-animation/-/css-animation-1.6.1.tgz#162064a3b0d51f958b7ff37b3d6d4de18e17039e" - integrity sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog== +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== dependencies: - babel-runtime "6.x" - component-classes "^1.2.5" + postcss "^7.0.5" css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= -css-color-names@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67" - integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== - css-declaration-sorter@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" @@ -3692,42 +3780,45 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" -css-loader@^0.28.11: - version "0.28.11" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" - integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg== +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== + dependencies: + camelcase "^6.0.0" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^2.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.3" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.1" + semver "^7.3.2" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-select@^2.0.0: +css-select@^2.0.0, css-select@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== @@ -3737,15 +3828,6 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" -css-selector-tokenizer@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" - integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -3754,35 +3836,48 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-unit-converter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" - integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" css-what@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" - integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== cssesc@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== -cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== dependencies: css-declaration-sorter "^4.0.1" cssnano-util-raw-cache "^4.0.1" @@ -3812,7 +3907,7 @@ cssnano-preset-default@^4.0.7: postcss-ordered-values "^4.1.2" postcss-reduce-initial "^4.0.3" postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" + postcss-svgo "^4.0.3" postcss-unique-selectors "^4.0.1" cssnano-util-get-arguments@^4.0.0: @@ -3837,80 +3932,49 @@ cssnano-util-same-parent@^4.0.0: resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== -cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - cssnano@^4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + version "4.1.11" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== dependencies: cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" + cssnano-preset-default "^4.0.8" is-resolvable "^1.0.0" postcss "^7.0.0" csso@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" - integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: - css-tree "1.0.0-alpha.37" + css-tree "^1.1.2" -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: - clap "^1.0.9" - source-map "^0.5.3" + cssom "~0.3.6" csstype@^2.2.0: - version "2.6.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431" - integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA== + version "2.6.16" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39" + integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" +csstype@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" + integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== cyclist@^1.0.1: version "1.0.1" @@ -3925,10 +3989,10 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -damerau-levenshtein@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" - integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA== +damerau-levenshtein@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== dashdash@^1.12.0: version "1.14.1" @@ -3937,49 +4001,56 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6.9: +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0, debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: - ms "^2.1.1" + ms "2.1.2" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -3992,16 +4063,16 @@ deep-equal@^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: +deep-is@^0.1.3, 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= +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -4010,13 +4081,6 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.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" @@ -4046,23 +4110,6 @@ 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= - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -4081,11 +4128,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -4104,45 +4146,28 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - dependencies: - repeating "^2.0.0" - -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" + integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== -dezalgo@^1.0.0, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== dependencies: - asap "^2.0.0" - wrappy "1" + address "^1.0.1" + debug "^2.6.0" -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diffie-hellman@^5.0.0: version "5.0.3" @@ -4153,6 +4178,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -4188,10 +4220,17 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dom-align@^1.7.0: - version "1.10.4" - resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.10.4.tgz#862ae4de0d11d6495c1c8ee1b195427e7caa727d" - integrity sha512-wytDzaru67AmqFOY4B9GUb/hrwWagezoYYK97D/vpK+ezg+cnuZO0Q2gltUPa7KfNmIqfRIYVCF8UhRDEHAmgQ== + version "1.12.0" + resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.0.tgz#56fb7156df0b91099830364d2d48f88963f5a29c" + integrity sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA== dom-converter@^0.2: version "0.2.0" @@ -4217,18 +4256,6 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dom-urls/-/dom-urls-1.1.0.tgz#001ddf81628cd1e706125c7176f53ccec55d918e" - integrity sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4= - dependencies: - urijs "^1.16.1" - -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= - domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -4240,9 +4267,16 @@ domelementtype@1, domelementtype@^1.3.1: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domexception@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" domhandler@^2.3.0: version "2.4.2" @@ -4251,14 +4285,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -4267,41 +4293,35 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.0, dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: - is-obj "^1.0.0" + no-case "^3.0.4" + tslib "^2.0.3" -dotenv-defaults@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-2.0.1.tgz#ea6f9632b3b5cc55e48b736760def5561f1cb7c0" - integrity sha512-ugFCyBF7ILuwpmznduHPQZBMucHHJ8T4OBManTEVjemxCm2+nqifSuW2lD2SNKdiKSH1E324kZSdJ8M04b4I/A== +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: - dotenv "^8.2.0" + is-obj "^2.0.0" -dotenv-webpack@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-7.0.2.tgz#1bf2e407e92c10fbb08d815b12c991028f10f81c" - integrity sha512-RY+/5uM/XY4bGtih9f9ic8hlrUDxVcZZBPWlnX/aHhaKxcVVX9SH/5VH7CSmvVo9GL6PKvQOA0X1bc552rnatQ== - dependencies: - dotenv-defaults "^2.0.1" +dotenv-expand@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== - -dotenv@^8.2.0: +dotenv@8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" @@ -4321,56 +4341,69 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.338, electron-to-chromium@^1.3.47: - version "1.3.340" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" - integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== +ejs@^2.6.1: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.649: + version "1.3.710" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.710.tgz#b33d316e5d6de92b916e766d8a478d19796ffe11" + integrity sha512-b3r0E2o4yc7mNmBeJviejF1rEx49PUBi+2NPa7jHEX3arkAXnVgLhR0YmV8oi6/Qf3HH2a8xzQmCjHNH0IpXWQ== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" + bn.js "^4.11.9" + brorand "^1.1.0" hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" -emoji-regex@^7.0.1, emoji-regex@^7.0.2: +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -4378,32 +4411,21 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== +enhanced-resolve@^4.3.0, enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" tapable "^1.0.0" -enhanced-resolve@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" - integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4= +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.2.0" - tapable "^0.1.8" + ansi-colors "^4.1.1" entities@^1.1.1: version "1.1.2" @@ -4411,24 +4433,14 @@ entities@^1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - -env-paths@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - -errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== +errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -4439,22 +4451,34 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: - version "1.17.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== +error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== + dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^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" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -4474,7 +4498,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@~2.0.3: +es6-iterator@2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -4483,18 +4507,6 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3, es6-promise@^4.0.5: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - es6-symbol@^3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" @@ -4503,162 +4515,141 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +escalade@^3.0.2, escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-config-airbnb-base@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" - integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: - eslint-restricted-globals "^0.1.1" + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" -eslint-config-airbnb@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" - integrity sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw== +eslint-config-react-app@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e" + integrity sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== dependencies: - eslint-config-airbnb-base "^12.1.0" + confusing-browser-globals "^1.0.10" -eslint-import-resolver-babel-module@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-4.0.0.tgz#1c596f7fb9815050292c8750d523b27a5444b4bf" - integrity sha512-aPj0+pG0H3HCaMD9eRDYEzPdMyKrLE2oNhAzTXd2w86ZBe3s7drSrrPwVTfzO1CBp13FGk8S84oRmZHZvSo0mA== - dependencies: - pkg-up "^2.0.0" - resolve "^1.4.0" - -eslint-import-resolver-node@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" - integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== dependencies: debug "^2.6.9" resolve "^1.13.1" -eslint-import-resolver-webpack@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.9.0.tgz#231ce1578ad5124da5799f029bd33d28137623e3" - integrity sha1-IxzhV4rVEk2leZ8Cm9M9KBN2I+M= - dependencies: - array-find "^1.0.0" - debug "^2.6.8" - enhanced-resolve "~0.9.0" - find-root "^1.1.0" - has "^1.0.1" - interpret "^1.0.0" - is-absolute "^0.2.3" - lodash.get "^4.4.2" - node-libs-browser "^1.0.0 || ^2.0.0" - resolve "^1.4.0" - semver "^5.3.0" - -eslint-loader@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" - integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - -eslint-module-utils@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" - integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== dependencies: debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-babel@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023" - integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w== +eslint-plugin-flowtype@^5.2.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.6.0.tgz#9ddba1ce31990c53e144b3a545b7c74b1d164fd9" + integrity sha512-XbeDejiL+SecDInj9On/9D4EM31kUp6B3uWYsBH6Vsb2CfaFWiUHvosAZx1TafVjp6izLC7D3kpix1DIpDF4Qw== dependencies: - eslint-rule-composer "^0.3.0" + lodash "^4.17.15" + string-natural-compare "^3.0.1" -eslint-plugin-import@^2.11.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz#d749a7263fb6c29980def8e960d380a6aa6aecaa" - integrity sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ== +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" has "^1.0.3" minimatch "^3.0.4" - object.values "^1.1.0" + object.values "^1.1.1" read-pkg-up "^2.0.0" - resolve "^1.12.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" -eslint-plugin-jsx-a11y@^6.0.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" - integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== +eslint-plugin-jest@^24.1.0: + version "24.3.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.4.tgz#6d90c3554de0302e879603dd6405474c98849f19" + integrity sha512-3n5oY1+fictanuFkTWPwSlehugBTAgwLnYLFsCllzE3Pl1BwywHl5fL0HFxmMjoQY8xhUDk8uAWc3S4JOHGh3A== dependencies: - "@babel/runtime" "^7.4.5" - aria-query "^3.0.0" - array-includes "^3.0.3" - ast-types-flow "^0.0.7" - axobject-query "^2.0.2" - damerau-levenshtein "^1.0.4" - emoji-regex "^7.0.2" - has "^1.0.3" - jsx-ast-utils "^2.2.1" + "@typescript-eslint/experimental-utils" "^4.0.1" -eslint-plugin-react@^7.7.0: - version "7.18.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.0.tgz#2317831284d005b30aff8afb7c4e906f13fa8e7e" - integrity sha512-p+PGoGeV4SaZRDsXqdj9OWcOrOpZn8gXoGPcIQTzo2IDMbAKhNDnME9myZWqO3Ic4R3YmwAZ1lDjWl2R2hMUVQ== +eslint-plugin-jsx-a11y@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + +eslint-plugin-react@^7.21.5: + version "7.23.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz#f1a2e844c0d1967c822388204a8bc4dee8415b11" + integrity sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ== + dependencies: + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" - object.fromentries "^2.0.2" - object.values "^1.1.1" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.0.4" + object.entries "^1.1.3" + object.fromentries "^2.0.4" + object.values "^1.1.3" prop-types "^15.7.2" - resolve "^1.14.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.4" -eslint-restricted-globals@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" - integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= - -eslint-rule-composer@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" - integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= +eslint-plugin-testing-library@^3.9.2: + version "3.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz#609ec2b0369da7cf2e6d9edff5da153cc31d87bd" + integrity sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA== dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" + "@typescript-eslint/experimental-utils" "^3.10.1" eslint-scope@^4.0.3: version "4.0.3" @@ -4668,92 +4659,133 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-visitor-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@^4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-webpack-plugin@^2.5.2: + version "2.5.3" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.3.tgz#a125585a1d8bb9c939f2a920a9bc9be4a21cdb58" + integrity sha512-LewNevZf9ghDCxCGT6QltNWVi8KIYWc4LKcin8K9Azh1hypG7YAmobUDIU67fAPa+eMjRnU4rjEkLbYI1w5/UA== + dependencies: + "@types/eslint" "^7.2.6" + arrify "^2.0.1" + jest-worker "^26.6.2" + micromatch "^4.0.2" + schema-utils "^3.0.0" + +eslint@^7.11.0: + version "7.23.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.23.0.tgz#8d029d252f6e8cf45894b4bee08f5493f8e94325" + integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^2.0.0" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" + glob-parent "^5.0.0" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" + is-glob "^4.0.0" + js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" + levn "^0.4.1" + lodash "^4.17.21" + minimatch "^3.0.4" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" -espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4765,19 +4797,19 @@ etag@~1.8.1: integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== dependencies: original "^1.0.0" @@ -4789,18 +4821,10 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -4815,10 +4839,25 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exif-parser@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" - integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-brackets@^2.1.4: version "2.1.4" @@ -4833,12 +4872,17 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= +expect@^26.6.0, expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - homedir-polyfill "^1.0.1" + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" express@^4.17.1: version "4.17.1" @@ -4898,20 +4942,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.0, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -4936,17 +4971,24 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.0.0: +fast-glob@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -4956,68 +4998,62 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== dependencies: - websocket-driver ">=0.5.1" + reusify "^1.0.4" -faye-websocket@~0.11.1: +faye-websocket@^0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - escape-string-regexp "^1.0.5" + bser "2.1.1" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -file-loader@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" - integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - loader-utils "^1.0.2" - schema-utils "^0.4.5" + flat-cache "^3.0.4" + +file-loader@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" + integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" file-saver@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.2.tgz#06d6e728a9ea2df2cce2f8d9e84dfcdc338ec17a" - integrity sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw== - -file-type@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" - integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" + integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filesize@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5028,6 +5064,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -5041,24 +5084,6 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -5068,23 +5093,22 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-npm-prefix@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" - integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" @@ -5100,25 +5124,18 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -findup-sync@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" + flatted "^3.1.0" + rimraf "^3.0.2" -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== flatten@^1.0.2: version "1.0.3" @@ -5133,19 +5150,10 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -follow-redirects@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" - integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== - dependencies: - debug "^3.0.0" +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.13.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" + integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== for-in@^1.0.2: version "1.0.2" @@ -5157,14 +5165,18 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= +fork-ts-checker-webpack-plugin@4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" form-data@~2.3.2: version "2.3.3" @@ -5192,14 +5204,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -5217,28 +5221,33 @@ fs-extra@^7.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: - minipass "^2.6.0" + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= @@ -5254,13 +5263,18 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.11" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" - integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" nan "^2.12.1" +fsevents@^2.1.2, fsevents@^2.1.3, fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5271,69 +5285,49 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - -gentle-fs@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.0.tgz#13538db5029400f98684be4894e8a7d8f0d1ea7f" - integrity sha512-3k2CgAmPxuz7S6nKK+AqFE2AdM1QuwqKLPKzIET3VRwK++3q96MsNFobScDjlCrq97ZJ8y5R725MOlm6ffUCjg== - dependencies: - aproba "^1.1.2" - chownr "^1.1.2" - cmd-shim "^3.0.3" - fs-vacuum "^1.2.10" - graceful-fs "^4.1.11" - iferr "^0.1.5" - infer-owner "^1.0.4" - mkdirp "^0.5.1" - path-is-inside "^1.0.2" - read-cmd-shim "^1.0.1" - slide "^1.1.6" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stream@^4.0.0, get-stream@^4.1.0: +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -5354,7 +5348,14 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, 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== @@ -5366,13 +5367,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -5380,26 +5374,6 @@ global-modules@2.0.0: dependencies: global-prefix "^3.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - global-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" @@ -5409,31 +5383,48 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -global@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" - integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= - dependencies: - min-document "^2.19.0" - process "~0.5.1" - -globals@^11.0.1, globals@^11.1.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globals@^13.6.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" + integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== + dependencies: + type-fest "^0.20.2" + +globby@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^11.0.1: + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" globby@^6.1.0: version "6.1.0" @@ -5446,23 +5437,6 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - gpx-parser-builder@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/gpx-parser-builder/-/gpx-parser-builder-1.0.2.tgz#80c54d06acfa334291490c27ed5edbea7cff1e64" @@ -5470,40 +5444,40 @@ gpx-parser-builder@^1.0.2: dependencies: isomorphic-xml2js "~0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" handle-thing@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" - integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.1.0, har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" harmony-reflect@^1.4.6: @@ -5511,32 +5485,25 @@ harmony-reflect@^1.4.6: resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -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" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== has-value@^0.3.1: version "0.3.1" @@ -5569,7 +5536,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.1, has@^1.0.3: +has@^1.0.0, 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== @@ -5577,12 +5544,13 @@ has@^1.0.0, has@^1.0.1, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -5592,17 +5560,7 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -he@1.2.x: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -5624,7 +5582,7 @@ history@^4.7.2: tiny-warning "^1.0.0" value-equal "^1.0.1" -hmac-drbg@^1.0.0: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -5633,11 +5591,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= - hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" @@ -5650,30 +5603,15 @@ hoist-non-react-statics@^3.3.0: dependencies: react-is "^16.7.0" -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" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== - -hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hpack.js@^2.1.6: version "2.1.6" @@ -5695,43 +5633,52 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - -html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" + whatwg-encoding "^1.0.5" -html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" - integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= +html-entities@^1.2.1, html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" + integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" util.promisify "1.0.0" -htmlparser2@^3.3.0: +htmlparser2@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -5743,11 +5690,6 @@ htmlparser2@^3.3.0: inherits "^2.0.1" readable-stream "^3.1.1" -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -5785,18 +5727,10 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== http-proxy-middleware@0.19.1: version "0.19.1" @@ -5809,23 +5743,14 @@ http-proxy-middleware@0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -5840,41 +5765,26 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@~0.4.13: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== dependencies: - postcss "^6.0.1" + postcss "^7.0.14" -identity-obj-proxy@^3.0.0: +identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= @@ -5882,36 +5792,36 @@ identity-obj-proxy@^3.0.0: harmony-reflect "^1.4.6" ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -iferr@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" - integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immer@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" + integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= dependencies: - minimatch "^3.0.4" - -ignore@^3.3.3: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + import-from "^2.1.0" import-fresh@^2.0.0: version "2.0.0" @@ -5921,12 +5831,22 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" -import-local@2.0.0, import-local@^2.0.0: +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -5934,17 +5854,23 @@ import-local@2.0.0, import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== indexes-of@^1.0.1: version "1.0.1" @@ -5956,7 +5882,7 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflight@^1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -5979,44 +5905,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-ip@^4.3.0: version "4.3.0" @@ -6026,44 +5918,33 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0, interpret@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" -invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@1.1.5, ip@^1.1.0, ip@^1.1.5: +ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== - -ipaddr.js@^1.9.0: +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== @@ -6078,14 +5959,6 @@ is-absolute-url@^3.0.3: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== -is-absolute@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" - integrity sha1-IN5p89uULvLYe5wto28XIjWxtes= - dependencies: - is-relative "^0.2.1" - is-windows "^0.2.0" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -6101,9 +5974,11 @@ is-accessor-descriptor@^1.0.0: 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== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -6115,6 +5990,11 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -6122,34 +6002,36 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== -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== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: - ci-info "^1.5.0" - -is-cidr@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.0.tgz#72e233d8e1c4cd1d3f11713fcce3eba7b0e3476f" - integrity sha512-3kxTForpuj8O4iHn0ocsn1jxRm5VYm60GDghK6HXmpn4IyZOoRy9/GmdjFA2yEMqw91TB1/K3bFTuI7FlFNR1g== - dependencies: - cidr-regex "^2.0.10" + ci-info "^2.0.0" is-color-stop@^1.0.0: version "1.1.0" @@ -6163,6 +6045,13 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" +is-core-module@^2.0.0, is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6205,6 +6094,11 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-docker@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.0.tgz#b037c8815281edaad6c2562648a5f5f18839d5f7" + integrity sha512-K4GwB4i/HzhAzwP/XSlspzRdFTI9N8OxJOyOU7Y5Rz+p+WBokXWVWblaJeBkggthmoSV0OoGTH5thJNvplpkvQ== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -6222,29 +6116,20 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^3.1.0: version "3.1.0" @@ -6253,25 +6138,27 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: +is-module@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== is-number@^3.0.0: version "3.0.0" @@ -6280,28 +6167,26 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-obj@^1.0.0: +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - is-path-in-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" @@ -6309,13 +6194,6 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -6335,94 +6213,62 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-potential-custom-element-name@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-redirect@^1.0.0: +is-regex@^1.0.4, is-regex@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.0.4, 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@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" - integrity sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU= - dependencies: - is-unc-path "^0.1.1" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= - dependencies: - html-comment-regex "^1.1.0" - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unc-path@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" - integrity sha1-arBTpyVzwQJQ/0FqOBTDUXivObk= - dependencies: - unc-path-regex "^0.1.0" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw= - -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -6432,10 +6278,12 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" - integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" isarray@0.0.1: version "0.0.1" @@ -6477,67 +6325,531 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -jimp@^0.6.0: - version "0.6.8" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.6.8.tgz#63074984337cc469cd4030946e503e7c02a18b5c" - integrity sha512-F7emeG7Hp61IM8VFbNvWENLTuHe0ghizWPuP4JS9ujx2r5mCVYEd/zdaz6M2M42ZdN41blxPajLWl9FXo7Mr2Q== +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: - "@jimp/custom" "^0.6.8" - "@jimp/plugins" "^0.6.8" - "@jimp/types" "^0.6.8" - core-js "^2.5.7" - regenerator-runtime "^0.13.3" + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -jpeg-js@^0.3.4: - version "0.3.6" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.6.tgz#c40382aac9506e7d1f2d856eb02f6c7b2a98b37c" - integrity sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw== +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -js-base64@^2.1.9: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" -js-md5@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2" - integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ== - -js-tokens@^3.0.0, js-tokens@^3.0.2: +istanbul-reports@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-circus@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-26.6.0.tgz#7d9647b2e7f921181869faae1f90a2629fd70705" + integrity sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.0" + "@jest/test-result" "^26.6.0" + "@jest/types" "^26.6.0" + "@types/babel__traverse" "^7.0.4" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^26.6.0" + is-generator-fn "^2.0.0" + jest-each "^26.6.0" + jest-matcher-utils "^26.6.0" + jest-message-util "^26.6.0" + jest-runner "^26.6.0" + jest-runtime "^26.6.0" + jest-snapshot "^26.6.0" + jest-util "^26.6.0" + pretty-format "^26.6.0" + stack-utils "^2.0.2" + throat "^5.0.0" + +jest-cli@^26.6.0: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.0, jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.0, jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.0, jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.0.tgz#070fe7159af87b03e50f52ea5e17ee95bbee40e1" + integrity sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ== + dependencies: + "@jest/types" "^26.6.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.0, jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.0, jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.0, jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watch-typeahead@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" + integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + +jest-watcher@^26.3.0, jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^26.5.0, jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@26.6.0: + version "26.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.0.tgz#546b25a1d8c888569dbbe93cae131748086a4a25" + integrity sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA== + dependencies: + "@jest/core" "^26.6.0" + import-local "^3.0.2" + jest-cli "^26.6.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@^3.9.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= +jsdom@^16.4.0: + version "16.5.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.2.tgz#583fac89a0aea31dbf6237e7e4bedccd9beab472" + integrity sha512-JxNtPt9C1ut85boCbJmffaQ06NBnzkQY/MWO3YxPW8IWS38A26z+B1oBvA9LwKrytewdfymnhi4UNH3/RAgZrg== + dependencies: + abab "^2.0.5" + acorn "^8.1.0" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "6.0.1" + request "^2.88.2" + request-promise-native "^1.0.9" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.4" + xml-name-validator "^3.0.0" jsesc@^2.5.1: version "2.5.2" @@ -6549,21 +6861,26 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +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" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -6574,28 +6891,16 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@^3.3.2: +json3@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6603,6 +6908,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -6610,15 +6922,14 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" jsprim@^1.2.2: version "1.4.1" @@ -6630,13 +6941,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" - integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== dependencies: - array-includes "^3.0.3" - object.assign "^4.1.0" + array-includes "^3.1.2" + object.assign "^4.1.2" killable@^1.0.1: version "1.0.1" @@ -6667,6 +6978,28 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + last-call-webpack-plugin@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" @@ -6675,41 +7008,15 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - leaflet-editable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/leaflet-editable/-/leaflet-editable-1.2.0.tgz#a3a01001764ba58ea923381ee6a1c814708a0b84" integrity sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ== leaflet-geometryutil@^0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/leaflet-geometryutil/-/leaflet-geometryutil-0.9.1.tgz#1dd379d7923a8a625266181c1983910a8e8dfc02" - integrity sha512-DKYLzFBsEcmZSl1fXLM+Pd+7t5IHmY6Ps7XeSnWL1ngr1qxQfcVzhkJT9gxfZrmFWiL96c23xQ0aLcHocV2tVA== + version "0.9.3" + resolved "https://registry.yarnpkg.com/leaflet-geometryutil/-/leaflet-geometryutil-0.9.3.tgz#e10fa302d99d4b1d3c6365a1f39298635a2704cd" + integrity sha512-Wi6YvfNx/Xu9q35AEfXpsUXmIFLen/MO+C2qimxHRnjyeyOxBhdcZa6kSiReaOX0cGK7yQInqrzz0dkIqZ8Dpg== dependencies: leaflet ">=0.7.0" @@ -6723,76 +7030,29 @@ leaflet-routing-machine@^3.2.12: osrm-text-instructions "^0.13.2" leaflet.markercluster@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.4.1.tgz#b53f2c4f2ca7306ddab1dbb6f1861d5e8aa6c5e5" - integrity sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.0.tgz#54db42485da32fc3d92c7ae22d0d7982879e0b67" + integrity sha512-Fvf/cq4o806mJL50n+fZW9+QALDDLPvt7vuAjlD2vfnxx3srMDs2vWINJze4nKYJYRY45OC6tM/669C3pLwMCA== leaflet@>=0.7.0, leaflet@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.6.0.tgz#aecbb044b949ec29469eeb31c77a88e2f448f308" - integrity sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ== - -less-loader@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.1.0.tgz#2c1352c5b09a4f84101490274fd51674de41363e" - integrity sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg== - dependencies: - clone "^2.1.1" - loader-utils "^1.1.0" - pify "^3.0.0" - -less-middleware@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/less-middleware/-/less-middleware-2.2.1.tgz#41bfc801b01acadb39bd380feda7fcc6a1da7b8c" - integrity sha512-1fDsyifwRGObMmqaZhkTDAmVnvgpZmdf6ZTSCbVv9vt+xhlzOz5TDNlLCbITsusEB3d0OKOEadwN9ic3PyOWCg== - dependencies: - less "~2.7.1" - mkdirp "~0.5.1" - node.extend "~2.0.0" - -less@^3.8.1: - version "3.10.3" - resolved "https://registry.yarnpkg.com/less/-/less-3.10.3.tgz#417a0975d5eeecc52cff4bcfa3c09d35781e6792" - integrity sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow== - dependencies: - clone "^2.1.2" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - mime "^1.4.1" - mkdirp "^0.5.0" - promise "^7.1.1" - request "^2.83.0" - source-map "~0.6.0" - -less@~2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" - integrity sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ== - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - mime "^1.2.11" - mkdirp "^0.5.0" - promise "^7.1.1" - request "2.81.0" - source-map "^0.5.3" + version "1.7.1" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19" + integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw== leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levenary@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.0.tgz#fc146fe75f32dc483a0a2c64aef720f602cd6210" - integrity sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ== +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - leven "^3.1.0" + prelude-ls "^1.2.1" + type-check "~0.4.0" -levn@^0.3.0, levn@~0.3.0: +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -6800,140 +7060,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libcipm@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.7.tgz#76cd675c98bdaae64db88b782b01b804b6d02c8a" - integrity sha512-fTq33otU3PNXxxCTCYCYe7V96o59v/o7bvtspmbORXpgFk+wcWrGf5x6tBgui5gCed/45/wtPomBsZBYm5KbIw== - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.1" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - graceful-fs "^4.1.11" - ini "^1.3.5" - lock-verify "^2.0.2" - mkdirp "^0.5.1" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - pacote "^9.1.0" - read-package-json "^2.0.13" - rimraf "^2.6.2" - worker-farm "^1.6.0" - -libnpm@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" - integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.3" - find-npm-prefix "^1.0.2" - libnpmaccess "^3.0.2" - libnpmconfig "^1.2.1" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmpublish "^1.1.2" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - lock-verify "^2.0.2" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - npm-profile "^4.0.2" - npm-registry-fetch "^4.0.0" - npmlog "^4.1.2" - pacote "^9.5.3" - read-package-json "^2.0.13" - stringify-package "^1.0.0" - -libnpmaccess@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" - integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== - dependencies: - aproba "^2.0.0" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" - -libnpmconfig@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" - integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== - dependencies: - figgy-pudding "^3.5.1" - find-up "^3.0.0" - ini "^1.3.5" - -libnpmhook@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" - integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpmorg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" - integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpmpublish@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" - integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" - semver "^5.5.1" - ssri "^6.0.1" - -libnpmsearch@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" - integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== - dependencies: - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpmteam@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" - integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== - dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpx@^10.2.2: - version "10.2.2" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.2.tgz#5a4171b9b92dd031463ef66a4af9f5cbd6b09572" - integrity sha512-ujaYToga1SAX5r7FU5ShMFi88CWpY75meNZtr6RtEyv4l2ZK3+Wgvxq2IqlwWBiDZOqhumdeiocPS1aKrCMe3A== - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^11.0.0" - line-height@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.1.1.tgz#e86705fbf0a6f50607aed65500d69db2d9db37e2" @@ -6941,30 +7067,10 @@ line-height@^0.1.1: dependencies: computed-style "~0.1.3" -load-bmfont@^1.3.1, load-bmfont@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" - integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g== - dependencies: - buffer-equal "0.0.1" - mime "^1.3.4" - parse-bmfont-ascii "^1.0.3" - parse-bmfont-binary "^1.0.5" - parse-bmfont-xml "^1.1.4" - phin "^2.9.1" - xhr "^2.0.1" - xtend "^4.0.0" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= load-json-file@^2.0.0: version "2.0.0" @@ -6976,20 +7082,12 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" -loader-fs-cache@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" - integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== - dependencies: - find-cache-dir "^0.1.1" - mkdirp "0.5.1" - loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -6998,15 +7096,23 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2. emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" locate-path@^2.0.0: version "2.0.0" @@ -7024,71 +7130,39 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lock-verify@^2.0.2, lock-verify@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.0.tgz#12432feb68bb647071c78c44bde16029a0f7d935" - integrity sha512-BhM1Vqsu7x0s+EalTifNjdDPks+ZjdAhComvnA6VcCIlDOI5ouELXqAe1BYuEIP4zGN0W08xVm6byJV1LnCiJg== +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: - "@iarna/cli" "^1.2.0" - npm-package-arg "^6.1.0" - semver "^5.4.1" - -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== - dependencies: - signal-exit "^3.0.2" - -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + p-locate "^4.1.0" lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - -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.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: +lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.template@^4.4.0: +lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== @@ -7103,45 +7177,25 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: +lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= +"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -"lodash@>=3.5 <5", lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -loglevel@^1.6.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" - integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== - -loglevelnext@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" - integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== - dependencies: - es6-symbol "^3.1.1" - object.assign "^4.1.0" +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -7150,31 +7204,12 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" + tslib "^2.0.3" lru-cache@^5.1.1: version "5.1.1" @@ -7183,14 +7218,21 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - pify "^3.0.0" + yallist "^4.0.0" -make-dir@^2.0.0, make-dir@^2.1.0: +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -7198,50 +7240,25 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-error@^1.1.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== - -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" + semver "^6.0.0" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: - p-defer "^1.0.0" + tmpl "1.0.x" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -7249,11 +7266,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7263,43 +7275,22 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -meant@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" - integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" - integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA= - -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -7315,33 +7306,32 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -7360,6 +7350,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -7368,51 +7366,40 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.7: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: - mime-db "1.43.0" + mime-db "1.47.0" -mime@1.6.0, mime@^1.2.11, mime@^1.3.4, mime@^1.4.1: +mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.0, mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - -mini-css-extract-plugin@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0" - integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw== +mini-css-extract-plugin@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" + integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== dependencies: loader-utils "^1.1.0" + normalize-url "1.9.1" schema-utils "^1.0.0" webpack-sources "^1.1.0" @@ -7421,63 +7408,58 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" + minipass "^3.0.0" -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: - minipass "^2.9.0" + minipass "^3.0.0" -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" mississippi@^3.0.0: version "3.0.0" @@ -7503,20 +7485,18 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -mkdirp@^0.5.3, mkdirp@~0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" - integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -7539,11 +7519,16 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -7557,20 +7542,15 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.0.8, nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== nanomatch@^1.2.9: version "1.2.13" @@ -7589,6 +7569,13 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +native-url@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" + integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== + dependencies: + querystring "^0.2.0" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -7599,10 +7586,10 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== next-tick@~1.0.0: version "1.0.0" @@ -7614,45 +7601,25 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: - lower-case "^1.1.1" + lower-case "^2.0.2" + tslib "^2.0.3" -node-fetch-npm@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.3.tgz#efae4aacb0500444e449a51fc1467397775ebc38" - integrity sha512-DgwoKEsqLnFZtk3ap7GWBHcHwnUhsNmQqEDcdjfQ8GofLEFJ081NAd4Uin3R7RFZBWVJCwHISw1oaEqPgSLloA== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-gyp@^5.0.2, node-gyp@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" - integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" - -"node-libs-browser@^1.0.0 || ^2.0.0", node-libs-browser@^2.2.1: +node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== @@ -7681,38 +7648,29 @@ node-gyp@^5.0.2, node-gyp@^5.1.0: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^1.1.46: - version "1.1.47" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" - integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== - dependencies: - semver "^6.3.0" +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node.extend@~2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-2.0.2.tgz#b4404525494acc99740f3703c496b7d5182cc6cc" - integrity sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ== +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: - has "^1.0.3" - is "^3.2.1" + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" +node-releases@^1.1.61, node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== -nopt@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -7729,7 +7687,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -7739,7 +7697,7 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-url@^1.4.0: +normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= @@ -7754,107 +7712,6 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -npm-audit-report@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.2.tgz#303bc78cd9e4c226415076a4f7e528c89fc77018" - integrity sha512-abeqS5ONyXNaZJPGAf6TOUMNdSe1Y6cpc9MLBRn+CuUoYbfdca6AxOyXVlfIv9OgKX+cacblbG5w7A6ccwoTPw== - dependencies: - cli-table3 "^0.5.0" - console-control-strings "^1.1.0" - -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= - -npm-install-checks@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" - integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-logical-tree@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" - integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== - -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== - dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.1.12, npm-packlist@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-profile@^4.0.2, npm-profile@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" - integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ== - dependencies: - aproba "^1.1.2 || 2" - figgy-pudding "^3.4.1" - npm-registry-fetch "^4.0.0" - -npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.3.tgz#3c2179e39e04f9348b1c2979545951d36bee8766" - integrity sha512-WGvUx0lkKFhu9MbiGFuT9nG2NpfQ+4dCJwRwwtK2HK5izJEvwDxMeUyqbuMS7N/OkpVCqDorV6rO5E4V9F8lJw== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.2.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7862,143 +7719,14 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= - -npm@^6.14.3: - version "6.14.3" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.3.tgz#a122618543c6670765cf5e827cd996b5552f9b65" - integrity sha512-3tQYVEEdSGQGYoXhZvNqW8faqCidfMMaL387RdDo4Uu5kQy4IgvJ13NIsWVMQ6e3QWlbicNMSpFiyzYfMUuPDw== +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - JSONStream "^1.3.5" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - aproba "^2.0.0" - archy "~1.0.0" - bin-links "^1.1.7" - bluebird "^3.5.5" - byte-size "^5.0.1" - cacache "^12.0.3" - call-limit "^1.1.1" - chownr "^1.1.4" - ci-info "^2.0.0" - cli-columns "^3.1.2" - cli-table3 "^0.5.1" - cmd-shim "^3.0.3" - columnify "~1.5.4" - config-chain "^1.1.12" - detect-indent "~5.0.0" - detect-newline "^2.1.0" - dezalgo "~1.0.3" - editor "~1.0.0" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.3.0" - glob "^7.1.6" - graceful-fs "^4.2.3" - has-unicode "~2.0.1" - hosted-git-info "^2.8.8" - iferr "^1.0.2" - infer-owner "^1.0.4" - inflight "~1.0.6" - inherits "^2.0.4" - ini "^1.3.5" - init-package-json "^1.10.3" - is-cidr "^3.0.0" - json-parse-better-errors "^1.0.2" - lazy-property "~1.0.0" - libcipm "^4.0.7" - libnpm "^3.0.1" - libnpmaccess "^3.0.2" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - libnpx "^10.2.2" - lock-verify "^2.1.0" - lockfile "^1.0.4" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "^5.1.1" - meant "~1.0.1" - mississippi "^3.0.0" - mkdirp "^0.5.3" - move-concurrently "^1.0.1" - node-gyp "^5.1.0" - nopt "~4.0.1" - normalize-package-data "^2.5.0" - npm-audit-report "^1.3.2" - npm-cache-filename "~1.0.2" - npm-install-checks "^3.0.2" - npm-lifecycle "^3.1.4" - npm-package-arg "^6.1.1" - npm-packlist "^1.4.8" - npm-pick-manifest "^3.0.2" - npm-profile "^4.0.4" - npm-registry-fetch "^4.0.3" - npm-user-validate "~1.0.0" - npmlog "~4.1.2" - once "~1.4.0" - opener "^1.5.1" - osenv "^0.1.5" - pacote "^9.5.12" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" - qrcode-terminal "^0.12.0" - query-string "^6.8.2" - qw "~1.0.1" - read "~1.0.7" - read-cmd-shim "^1.0.5" - read-installed "~4.0.3" - read-package-json "^2.1.1" - read-package-tree "^5.3.1" - readable-stream "^3.6.0" - readdir-scoped-modules "^1.1.0" - request "^2.88.0" - retry "^0.12.0" - rimraf "^2.7.1" - safe-buffer "^5.1.2" - semver "^5.7.1" - sha "^3.0.0" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "^6.0.1" - stringify-package "^1.0.1" - tar "^4.4.13" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "^1.1.1" - unpipe "~1.0.0" - update-notifier "^2.5.0" - uuid "^3.3.3" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "~3.0.0" - which "^1.3.1" - worker-farm "^1.7.0" - write-file-atomic "^2.4.3" + path-key "^3.0.0" -npmlog@^4.1.2, npmlog@~4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@^1.0.2, nth-check@~1.0.1: +nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== @@ -8010,22 +7738,17 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= -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" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -8039,22 +7762,20 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== - -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-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== 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== + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.12, 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== @@ -8066,43 +7787,44 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries@^1.1.0, object.entries@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" - integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.0, object.entries@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" has "^1.0.3" -object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== +object.fromentries@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.2" object.pick@^1.3.0: version "1.3.0" @@ -8111,14 +7833,14 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== +object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" obuf@^1.0.0, obuf@^1.1.2: @@ -8126,11 +7848,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -omggif@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" - integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -8143,24 +7860,27 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - mimic-fn "^1.0.0" + mimic-fn "^2.1.0" -opener@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== +open@^7.0.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" opn@^5.5.0: version "5.5.0" @@ -8169,15 +7889,15 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optimize-css-assets-webpack-plugin@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572" - integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA== +optimize-css-assets-webpack-plugin@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== dependencies: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.2: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -8189,6 +7909,18 @@ optionator@^0.8.2: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -8201,62 +7933,21 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-locale@^3.0.0, os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4, osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - osrm-text-instructions@^0.13.2: version "0.13.4" resolved "https://registry.yarnpkg.com/osrm-text-instructions/-/osrm-text-instructions-0.13.4.tgz#78bedabd84cbcabce9c9fd0fbb6b0fd9f06c7f9f" integrity sha512-ge4ZTIetMQKAHKq2MwWf83ntzdJN20ndRKRaVNoZ3SkDkBNO99Qddz7r6+hrVx38I+ih6Rk5T1yslczAB6Q9Pg== -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -8264,13 +7955,20 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -8285,16 +7983,25 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -8312,56 +8019,10 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: - version "9.5.12" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" - integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== - dependencies: - bluebird "^3.5.3" - cacache "^12.0.2" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.3" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-normalize-package-bin "^1.0.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.12" - npm-pick-manifest "^3.0.0" - npm-registry-fetch "^4.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.2" - safe-buffer "^5.1.2" - semver "^5.6.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -pako@^1.0.5, pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -8372,48 +8033,32 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: - no-case "^2.2.0" + dot-case "^3.0.4" + tslib "^2.0.3" -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: - asn1.js "^4.0.0" + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-bmfont-ascii@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" - integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= - -parse-bmfont-binary@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" - integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= - -parse-bmfont-xml@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" - integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== - dependencies: - xml-parse-from-string "^1.0.0" - xml2js "^0.4.5" - -parse-headers@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" - integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -8429,16 +8074,34 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -8454,24 +8117,22 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -8481,6 +8142,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -8491,22 +8157,13 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-to-regexp@^1.0.1, path-to-regexp@^1.7.0: +path-to-regexp@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: isarray "0.0.1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -8514,10 +8171,15 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -8535,21 +8197,16 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -phin@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" - integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -8567,19 +8224,12 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pixelmatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" - integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: - pngjs "^3.0.0" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" + node-modules-regexp "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" @@ -8595,64 +8245,106 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: - find-up "^2.1.0" + find-up "^4.0.0" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== +pkg-up@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" -pngjs@^3.0.0, pngjs@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" -portfinder@^1.0.25: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== dependencies: async "^2.6.2" debug "^3.1.1" - mkdirp "^0.5.1" + mkdirp "^0.5.5" 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" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-browser-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" + integrity sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig== + dependencies: + postcss "^7" postcss-calc@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" - integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== dependencies: - css-unit-converter "^1.1.1" - postcss "^7.0.5" - postcss-selector-parser "^5.0.0-rc.4" - postcss-value-parser "^3.3.1" + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" postcss-colormin@^4.0.3: version "4.0.3" @@ -8665,14 +8357,6 @@ postcss-colormin@^4.0.3: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - postcss-convert-values@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" @@ -8681,12 +8365,36 @@ postcss-convert-values@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== dependencies: - postcss "^5.0.14" + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" postcss-discard-comments@^4.0.2: version "4.0.2" @@ -8695,13 +8403,6 @@ postcss-discard-comments@^4.0.2: dependencies: postcss "^7.0.0" -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= - dependencies: - postcss "^5.0.4" - postcss-discard-duplicates@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" @@ -8709,13 +8410,6 @@ postcss-discard-duplicates@^4.0.2: dependencies: postcss "^7.0.0" -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= - dependencies: - postcss "^5.0.14" - postcss-discard-empty@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" @@ -8723,13 +8417,6 @@ postcss-discard-empty@^4.0.1: dependencies: postcss "^7.0.0" -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= - dependencies: - postcss "^5.0.16" - postcss-discard-overridden@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" @@ -8737,36 +8424,113 @@ postcss-discard-overridden@^4.0.1: dependencies: postcss "^7.0.0" -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== - dependencies: - postcss "^5.0.4" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: +postcss-env-function@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== dependencies: - postcss "^5.0.4" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-flexbugs-fixes@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" + integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + dependencies: + lodash.template "^4.5.0" + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" postcss-merge-longhand@^4.0.11: version "4.0.11" @@ -8778,17 +8542,6 @@ postcss-merge-longhand@^4.0.11: postcss-value-parser "^3.0.0" stylehacks "^4.0.0" -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - postcss-merge-rules@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" @@ -8801,20 +8554,6 @@ postcss-merge-rules@^4.0.3: postcss-selector-parser "^3.0.0" vendors "^1.0.0" -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - postcss-minify-font-values@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" @@ -8823,14 +8562,6 @@ postcss-minify-font-values@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - postcss-minify-gradients@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" @@ -8841,16 +8572,6 @@ postcss-minify-gradients@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - postcss-minify-params@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" @@ -8863,16 +8584,6 @@ postcss-minify-params@^4.0.2: postcss-value-parser "^3.0.0" uniqs "^2.0.0" -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - postcss-minify-selectors@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" @@ -8883,43 +8594,45 @@ postcss-minify-selectors@^4.0.2: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== dependencies: - postcss "^6.0.1" + postcss "^7.0.5" -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= +postcss-modules-local-by-default@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" + icss-utils "^4.0.0" + postcss "^7.0.6" -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== dependencies: - postcss "^5.0.5" + postcss "^7.0.2" postcss-normalize-charset@^4.0.1: version "4.0.1" @@ -8984,16 +8697,6 @@ postcss-normalize-unicode@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - postcss-normalize-url@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" @@ -9012,13 +8715,16 @@ postcss-normalize-whitespace@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= +postcss-normalize@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize/-/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" + integrity sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ== dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" + "@csstools/normalize.css" "^10.1.0" + browserslist "^4.6.2" + postcss "^7.0.17" + postcss-browser-comments "^3.0.0" + sanitize.css "^10.0.0" postcss-ordered-values@^4.1.2: version "4.1.2" @@ -9029,20 +8735,78 @@ postcss-ordered-values@^4.1.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + postcss "^7.0.2" -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== dependencies: - postcss "^5.0.4" + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" postcss-reduce-initial@^4.0.3: version "4.0.3" @@ -9054,15 +8818,6 @@ postcss-reduce-initial@^4.0.3: has "^1.0.0" postcss "^7.0.0" -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - postcss-reduce-transforms@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" @@ -9073,25 +8828,46 @@ postcss-reduce-transforms@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" + postcss "^7.0.2" + +postcss-safe-parser@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz#459dd27df6bc2ba64608824ba39e45dacf5e852d" + integrity sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ== + dependencies: + postcss "^8.1.0" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" postcss-selector-parser@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== dependencies: - dot-prop "^4.1.1" + dot-prop "^5.2.0" indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^5.0.0-rc.4: +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: version "5.0.0" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== @@ -9100,35 +8876,25 @@ postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== dependencies: - is-svg "^3.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" svgo "^1.0.0" -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - postcss-unique-selectors@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" @@ -9138,80 +8904,94 @@ postcss-unique-selectors@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" -postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: +postcss-value-parser@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" -postcss@^6.0.1: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.5: - version "7.0.26" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" - integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.1.0: + version "8.2.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.9.tgz#fd95ff37b5cee55c409b3fdd237296ab4096fba3" + integrity sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.22" + source-map "^0.6.1" + prefix-style@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" integrity sha1-ZrupqHDP2jCKXcIOhekSCTLJWgY= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0, prepend-http@^1.0.1: +prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" - integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk= +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== dependencies: - renderkid "^2.0.1" - utila "~0.4" + lodash "^4.17.20" + renderkid "^2.0.4" -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +pretty-format@^26.6.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" process-nextick-args@~2.0.0: version "2.0.1" @@ -9223,44 +9003,40 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1, promise-inflight@~1.0.1: +promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= +promise@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== dependencies: - err-code "^1.0.0" - retry "^0.10.0" + asap "~2.0.6" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== +prompts@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== dependencies: - asap "~2.0.3" + kleur "^3.0.3" + sisteransi "^1.0.5" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= +prompts@^2.0.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== dependencies: - read "1" + kleur "^3.0.3" + sisteransi "^1.0.5" -prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -9269,40 +9045,23 @@ prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, pr object-assign "^4.1.1" react-is "^16.8.1" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" - proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" - ipaddr.js "1.9.0" + ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24, psl@^1.1.28: - version "1.7.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== +psl@^1.1.28, psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pt-sans-cyrillic@0.0.4: version "0.0.4" @@ -9321,7 +9080,7 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" -pump@^2.0.0, pump@^2.0.1: +pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== @@ -9351,7 +9110,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -9366,21 +9125,11 @@ q@^1.1.2: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= - qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -9394,15 +9143,6 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^6.8.2: - version "6.11.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.1.tgz#ab021f275d463ce1b61e88f0ce6988b3e8fe7c2c" - integrity sha512-1ZvJOUl8ifkkBxu2ByVM/8GijMIPx+cef7u3yroO3Ogm4DOdZcF5dcrWTIlSHe3Pg/mtlt6/eFjObDfJureZZA== - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -9413,17 +9153,22 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + querystringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -raf@^3.1.0, raf@^3.4.0: +raf@^3.1.0, raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== @@ -9435,17 +9180,12 @@ raleway-cyrillic@^4.0.2: resolved "https://registry.yarnpkg.com/raleway-cyrillic/-/raleway-cyrillic-4.0.2.tgz#1dc2b3aea6302b08536ecee3188c92d258b88ce1" integrity sha1-HcKzrqYwKwhTbs7jGIyS0li4jOE= -ramda@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" - integrity sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ== - ramda@^0.26.1: version "0.26.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -9475,114 +9215,120 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc-align@^2.4.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-2.4.5.tgz#c941a586f59d1017f23a428f0b468663fb7102ab" - integrity sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw== +rc-align@^4.0.0: + version "4.0.9" + resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.9.tgz#46d8801c4a139ff6a65ad1674e8efceac98f85f2" + integrity sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw== dependencies: - babel-runtime "^6.26.0" + "@babel/runtime" "^7.10.1" + classnames "2.x" dom-align "^1.7.0" - prop-types "^15.5.8" - rc-util "^4.0.4" + rc-util "^5.3.0" + resize-observer-polyfill "^1.5.1" -rc-animate@2.x: - version "2.10.2" - resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.10.2.tgz#217fdc76ff26cbf425a5caf87cc8a36ba4598456" - integrity sha512-cE/A7piAzoWFSgUD69NmmMraqCeqVBa51UErod8NS3LUEqWfppSVagHfa0qHAlwPVPiIBg3emRONyny3eiH0Dg== +rc-motion@^2.0.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.4.1.tgz#323f47c8635e6b2bc0cba2dfad25fc415b58e1dc" + integrity sha512-TWLvymfMu8SngPx5MDH8dQ0D2RYbluNTfam4hY/dNNx9RQ3WtGuZ/GXHi2ymLMzH+UNd6EEFYkOuR5JTTtm8Xg== dependencies: - babel-runtime "6.x" - classnames "^2.2.6" - css-animation "^1.3.2" - prop-types "15.x" - raf "^3.4.0" - rc-util "^4.15.3" - react-lifecycles-compat "^3.0.4" + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.2.1" -rc-slider@8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-8.5.0.tgz#6fae97d8ba59a012af69a00409f21925b8954cf5" - integrity sha512-dw1kA7Dr6GOmPZFsy+yMxVyqmckeUtYVdfNOdQcI9O8mXkoCwlxXolMK9bW/TTlXCc8ztaXkJkyTVXl/Gkg5Tw== +rc-slider@^9.7.2: + version "9.7.2" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-9.7.2.tgz#282f571f7582752ebaa33964e441184f4e79ad74" + integrity sha512-mVaLRpDo6otasBs6yVnG02ykI3K6hIrLTNfT5eyaqduFv95UODI9PDS6fWuVVehVpdS4ENgOSwsTjrPVun+k9g== dependencies: - babel-runtime "6.x" + "@babel/runtime" "^7.10.1" classnames "^2.2.5" - prop-types "^15.5.4" - rc-tooltip "^3.7.0" - rc-util "^4.0.4" - shallowequal "^1.0.1" - warning "^3.0.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.2: - version "2.6.5" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-2.6.5.tgz#140a857cf28bd0fa01b9aecb1e26a50a700e9885" - integrity sha512-m6Cts9hLeZWsTvWnuMm7oElhf+03GOjOLfTuU0QmdB9ZrW7jR2IpI5rpNM7i9MvAAlMAmTx5Zr7g3uu/aMvZAw== - dependencies: - babel-runtime "6.x" - classnames "^2.2.6" - prop-types "15.x" - rc-align "^2.4.0" - rc-animate "2.x" - rc-util "^4.4.0" - react-lifecycles-compat "^3.0.4" - -rc-util@^4.0.4, rc-util@^4.15.3, rc-util@^4.4.0: - version "4.19.0" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.19.0.tgz#f3b5e3a02cc0a667d127784068e1236c095dbcbf" - integrity sha512-mptALlLwpeczS3nrv83DbwJNeupolbuvlIEjcvimSiWI8NUBjpF0HgG3kWp1RymiuiRCNm9yhaXqDz0a99dpgQ== - dependencies: - add-dom-event-listener "^1.1.0" - babel-runtime "6.x" - prop-types "^15.5.10" - react-lifecycles-compat "^3.0.4" + rc-tooltip "^5.0.1" + rc-util "^5.0.0" shallowequal "^1.1.0" -rc@^1.0.1, rc@^1.1.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== +rc-tooltip@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.1.0.tgz#abb453c463c31a705aa01d268279f4ae6ae3b15f" + integrity sha512-pFqD1JZwNIpbdcefB7k5xREoHAWM/k3yQwYF0iminbmDXERgq4rvBfUwIvlCqqZSM7HDr9hYeYr6ZsVNaKtvCQ== dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" + "@babel/runtime" "^7.11.2" + rc-trigger "^5.0.0" -react-dom@16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4" - integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg== +rc-trigger@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.3.tgz#8c55046ab432d7b52d51c69afb57ebb5bbe37e17" + integrity sha512-6Fokao07HUbqKIDkDRFEM0AGZvsvK0Fbp8A/KFgl1ngaqfO1nY037cISCG1Jm5fxImVsXp9awdkP7Vu5cxjjog== + dependencies: + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + rc-align "^4.0.0" + rc-motion "^2.0.0" + rc-util "^5.5.0" + +rc-util@^5.0.0, rc-util@^5.2.1, rc-util@^5.3.0, rc-util@^5.5.0: + version "5.9.8" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.9.8.tgz#dfcacc1f7b7c45fa18ab786e2b530dd0509073f1" + integrity sha512-typLSHYGf5irvGLYQshs0Ra3aze086h0FhzsAkyirMunYZ7b3Te8gKa5PVaanoHaZa9sS6qx98BxgysoRP+6Tw== + dependencies: + "@babel/runtime" "^7.12.5" + react-is "^16.12.0" + shallowequal "^1.1.0" + +react-app-polyfill@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz#a0bea50f078b8a082970a9d853dc34b6dcc6a3cf" + integrity sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA== + dependencies: + core-js "^3.6.5" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.7" + whatwg-fetch "^3.4.1" + +react-dev-utils@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" + integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== + dependencies: + "@babel/code-frame" "7.10.4" + address "1.1.2" + browserslist "4.14.2" + chalk "2.4.2" + cross-spawn "7.0.3" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.1.0" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "4.1.6" + global-modules "2.0.0" + globby "11.0.1" + gzip-size "5.1.1" + immer "8.0.1" + is-root "2.1.0" + loader-utils "2.0.0" + open "^7.0.2" + pkg-up "3.1.0" + prompts "2.4.0" + react-error-overlay "^6.0.9" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.1" + scheduler "^0.20.2" -"react-expandable-textarea@github:muerwre/react-expandable-textarea": - version "0.0.1" - resolved "https://codeload.github.com/muerwre/react-expandable-textarea/tar.gz/0cbcbbd875439090a2d48e711da241f2a83dd6b2" - dependencies: - classnames "^2.2.6" - -react-hot-loader@^4.1.1: - version "4.12.19" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.19.tgz#99a1c763352828f404fa51cd887c5e16bb5b74d1" - integrity sha512-p8AnA4QE2GtrvkdmqnKrEiijtVlqdTIDCHZOwItkI9kW51bt5XnQ/4Anz8giiWf9kqBpEQwsmnChDCAFBRyR/Q== - dependencies: - fast-levenshtein "^2.0.6" - global "^4.3.0" - hoist-non-react-statics "^3.3.0" - loader-utils "^1.1.0" - prop-types "^15.6.1" - react-lifecycles-compat "^3.0.4" - shallowequal "^1.1.0" - source-map "^0.7.3" +react-error-overlay@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== react-infinite-scroller@^1.2.2: version "1.2.4" @@ -9591,12 +9337,17 @@ react-infinite-scroller@^1.2.2: dependencies: prop-types "^15.5.8" -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: - 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.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + 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-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-lifecycles-compat@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -9610,14 +9361,6 @@ react-motion@^0.5.2: prop-types "^15.5.8" raf "^3.1.0" -react-rangeslider@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/react-rangeslider/-/react-rangeslider-2.2.0.tgz#4362b01f4f5a455f0815d371d496f69ca4c6b5aa" - integrity sha512-5K7Woa+cyqZ5wiW5+KhqGV+3+FiFxGKQ9rUxTMh52sObXVYEeBbfxFrp1eBvS8mRIxnUbHz9ppnFP0LhwOyNeg== - dependencies: - classnames "^2.2.3" - resize-observer-polyfill "^1.4.2" - react-redux@^5.0.7: version "5.1.2" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.2.tgz#b19cf9e21d694422727bf798e934a916c4080f57" @@ -9631,6 +9374,16 @@ react-redux@^5.0.7: react-is "^16.6.0" react-lifecycles-compat "^3.0.0" +react-refresh@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react-refresh@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" + integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== + react-router@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" @@ -9644,6 +9397,72 @@ react-router@^4.3.1: prop-types "^15.6.1" warning "^4.0.1" +react-scripts@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-4.0.3.tgz#b1cafed7c3fa603e7628ba0f187787964cb5d345" + integrity sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A== + dependencies: + "@babel/core" "7.12.3" + "@pmmmwh/react-refresh-webpack-plugin" "0.4.3" + "@svgr/webpack" "5.5.0" + "@typescript-eslint/eslint-plugin" "^4.5.0" + "@typescript-eslint/parser" "^4.5.0" + babel-eslint "^10.1.0" + babel-jest "^26.6.0" + babel-loader "8.1.0" + babel-plugin-named-asset-import "^0.3.7" + babel-preset-react-app "^10.0.0" + bfj "^7.0.2" + camelcase "^6.1.0" + case-sensitive-paths-webpack-plugin "2.3.0" + css-loader "4.3.0" + dotenv "8.2.0" + dotenv-expand "5.1.0" + eslint "^7.11.0" + eslint-config-react-app "^6.0.0" + eslint-plugin-flowtype "^5.2.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jest "^24.1.0" + eslint-plugin-jsx-a11y "^6.3.1" + eslint-plugin-react "^7.21.5" + eslint-plugin-react-hooks "^4.2.0" + eslint-plugin-testing-library "^3.9.2" + eslint-webpack-plugin "^2.5.2" + file-loader "6.1.1" + fs-extra "^9.0.1" + html-webpack-plugin "4.5.0" + identity-obj-proxy "3.0.0" + jest "26.6.0" + jest-circus "26.6.0" + jest-resolve "26.6.0" + jest-watch-typeahead "0.6.1" + mini-css-extract-plugin "0.11.3" + optimize-css-assets-webpack-plugin "5.0.4" + pnp-webpack-plugin "1.6.4" + postcss-flexbugs-fixes "4.2.1" + postcss-loader "3.0.0" + postcss-normalize "8.0.1" + postcss-preset-env "6.7.0" + postcss-safe-parser "5.0.2" + prompts "2.4.0" + react-app-polyfill "^2.0.0" + react-dev-utils "^11.0.3" + react-refresh "^0.8.3" + resolve "1.18.1" + resolve-url-loader "^3.1.2" + sass-loader "^10.0.5" + semver "7.3.2" + style-loader "1.3.0" + terser-webpack-plugin "4.2.3" + ts-pnp "1.2.0" + url-loader "4.1.1" + webpack "4.44.2" + webpack-dev-server "3.11.1" + webpack-manifest-plugin "2.2.0" + workbox-webpack-plugin "5.1.4" + optionalDependencies: + fsevents "^2.1.3" + react-scrollbar@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/react-scrollbar/-/react-scrollbar-0.5.6.tgz#bd57b45714f8d70e56813fe299d7fb3a2e42a27b" @@ -9653,71 +9472,19 @@ react-scrollbar@^0.5.4: line-height "^0.1.1" react-motion "^0.5.2" -react@16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a" - integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ== +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.13.1" reactrangeslider@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/reactrangeslider/-/reactrangeslider-3.0.6.tgz#5f3e1cef24fd3065322d4c01a0010199910f3737" integrity sha1-Xz4c7yT9MGUyLUwBoAEBmZEPNzc= -read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== - dependencies: - graceful-fs "^4.1.2" - -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= - dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" - integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - npm-normalize-package-bin "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -9726,14 +9493,14 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" read-pkg@^2.0.0: version "2.0.0" @@ -9744,14 +9511,17 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: - mute-stream "~0.0.4" + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -9764,16 +9534,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606" - integrity sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -9782,26 +9543,6 @@ readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.1.10: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -9811,29 +9552,19 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + picomatch "^2.2.1" -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" - integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== - dependencies: - balanced-match "^1.0.0" + minimatch "3.0.4" redux-persist@^5.10.0: version "5.10.0" @@ -9855,50 +9586,34 @@ redux@^4.0.1, redux@^4.0.4: loose-envify "^1.4.0" symbol-observable "^1.2.0" -reduxsauce@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/reduxsauce/-/reduxsauce-1.1.2.tgz#fd5f2d8564dfd3e95754c3c7ccc1a5ef4d8be628" - integrity sha512-Z/LH/rwEVvxXiBGMrLOytrqXVDcWaVvt2wNhgycLy4WKEx2WDqKeukog711nCPMIrz9WrzD+pZUBGGt49uicWg== - dependencies: - ramda "^0.26.1" - -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" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" -regenerate@^1.2.1, regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: - version "0.13.3" - 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, regenerator-runtime@^0.13.7: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== - dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -9908,89 +9623,49 @@ 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== +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" + unicode-match-property-value-ecmascript "^1.2.0" -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== dependencies: jsesc "~0.5.0" -regjsparser@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" - integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: +relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -10000,89 +9675,44 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= -renderkid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" - integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== +renderkid@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" + integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== dependencies: - css-select "^1.1.0" + css-select "^2.0.2" dom-converter "^0.2" - htmlparser2 "^3.3.0" + htmlparser2 "^3.10.1" + lodash "^4.17.20" strip-ansi "^3.0.0" - utila "^0.4.0" repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== 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= -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== dependencies: - is-finite "^1.0.0" + lodash "^4.17.19" -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= +request-promise-native@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" -request@^2.83.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -request@^2.88.0: +request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -10113,35 +9743,22 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -require-package-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" - integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resize-observer-polyfill@^1.4.2: +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== @@ -10153,18 +9770,12 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + resolve-from "^5.0.0" resolve-from@^3.0.0: version "3.0.0" @@ -10176,46 +9787,89 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== +resolve-url-loader@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" + integrity sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.4.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== +resolve@1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== dependencies: + is-core-module "^2.0.0" path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -10226,17 +9880,17 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -10248,12 +9902,52 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= +rollup-plugin-babel@^4.3.3: + version "4.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== dependencies: - is-promise "^2.1.0" + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-terser@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" + integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^4.0.0" + terser "^4.6.2" + +rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^1.31.1: + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" @@ -10262,27 +9956,15 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@>=5.1.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, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" @@ -10296,27 +9978,57 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@>=0.6.0, sax@~1.2.1, sax@~1.2.4: +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize.css@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" + integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== + +sass-loader@^10.0.5: + version "10.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" + integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sax@>=0.6.0, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.13.1: - version "0.13.6" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" - integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -10326,33 +10038,37 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -scrypt@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" - integrity sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0= +schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: - nan "^2.0.8" + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.7: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== +selfsigned@^1.10.8: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== dependencies: - node-forge "0.9.0" + node-forge "^0.10.0" -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -10362,11 +10078,23 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.3.0: +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1, semver@^7.3.2: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -10386,15 +10114,19 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" @@ -10419,12 +10151,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -serviceworker-cache-polyfill@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb" - integrity sha1-3hnuc77yGrPAdAo3sz22JGS6ves= - -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -10462,14 +10189,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -sha@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" - integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw== - dependencies: - graceful-fs "^4.1.2" - -shallowequal@^1.0.1, shallowequal@^1.1.0: +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== @@ -10481,15 +10201,46 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== simple-swizzle@^0.2.2: version "0.2.2" @@ -10498,32 +10249,24 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - is-fullwidth-code-point "^2.0.0" - -slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" snapdragon-node@^2.0.1: version "2.1.1" @@ -10555,48 +10298,26 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== dependencies: - hoek "2.x.x" - -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== - dependencies: - debug "^3.2.5" + debug "^3.2.6" eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" sort-keys@^1.0.0: version "1.1.2" @@ -10605,25 +10326,12 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-resolve@^0.5.0: +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== @@ -10634,66 +10342,64 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== +source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "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.3: +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3, 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== +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== spdy-transport@^3.0.0: version "3.0.0" @@ -10707,10 +10413,10 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" - integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -10718,11 +10424,6 @@ spdy@^4.0.1: select-hose "^2.0.0" spdy-transport "^3.0.0" -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -10750,25 +10451,37 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== +ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -10782,6 +10495,11 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -10809,14 +10527,6 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -10827,27 +10537,18 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" @@ -10858,21 +10559,43 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -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== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" -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== +string.prototype.matchall@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" + integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has-symbols "^1.0.1" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - function-bind "^1.1.1" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -10881,11 +10604,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -10893,15 +10611,21 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-package@^1.0.0, stringify-package@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" - integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" -stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== +strip-ansi@6.0.0, strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" @@ -10910,13 +10634,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -10924,42 +10641,46 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" + integrity sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== + dependencies: + babel-extract-comments "^1.0.0" + babel-plugin-transform-object-rest-spread "^6.26.0" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-loader@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.21.0.tgz#68c52e5eb2afc9ca92b6274be277ee59aea3a852" - integrity sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg== +style-loader@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== dependencies: - loader-utils "^1.1.0" - schema-utils "^0.4.5" + loader-utils "^2.0.0" + schema-utils "^2.7.0" stylehacks@^4.0.0: version "4.0.3" @@ -10970,46 +10691,41 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -supports-color@6.1.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" + has-flag "^3.0.0" -svgo@^1.0.0: +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.0.0, svgo@^1.2.2: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== @@ -11028,119 +10744,136 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" -sw-precache-webpack-plugin@^0.11.5: - version "0.11.5" - resolved "https://registry.yarnpkg.com/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.5.tgz#9b53f65a4966e3adc298e256b3cef7a55c73fdfd" - integrity sha512-K6E52DbYyzGNXGyv2LhI2Duomr3t/2FFMmnGdHZ1Ruk3ulFHDMASJtg3WpA3CXlWODZx189tTaOIO5mWkSKyVg== - dependencies: - del "^3.0.0" - sw-precache "^5.2.1" - uglify-es "^3.3.9" - -sw-precache@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.2.1.tgz#06134f319eec68f3b9583ce9a7036b1c119f7179" - integrity sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw== - dependencies: - dom-urls "^1.1.0" - es6-promise "^4.0.5" - glob "^7.1.1" - lodash.defaults "^4.2.0" - lodash.template "^4.4.0" - meow "^3.7.0" - mkdirp "^0.5.1" - pretty-bytes "^4.0.2" - sw-toolbox "^3.4.0" - update-notifier "^2.3.0" - -sw-toolbox@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5" - integrity sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U= - dependencies: - path-to-regexp "^1.0.1" - serviceworker-cache-polyfill "^4.0.0" - symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tapable@^0.1.8: - version "0.1.10" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" - integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q= +table@^6.0.4: + version "6.0.9" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb" + integrity sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ== + dependencies: + ajv "^8.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== +tar@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + +tempy@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== dependencies: - execa "^0.7.0" + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" - integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^4.0.0" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2: - version "4.6.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" - integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ== +terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" -text-table@~0.2.0: +terser@^5.3.4: + version "5.6.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" + integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throttle-debounce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" - integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== through2@^2.0.0: version "2.0.5" @@ -11150,64 +10883,37 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -"through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" -timm@^1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd" - integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw== - timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= tiny-invariant@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== - -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== tiny-warning@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tinycolor2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" - integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= to-arraybuffer@^1.0.0: version "1.0.1" @@ -11221,11 +10927,6 @@ to-camel-case@1.0.0: dependencies: to-space-case "^1.0.0" -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -11251,6 +10952,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -11273,27 +10981,7 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - -tough-cookie@~2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== - dependencies: - punycode "^1.4.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -11301,36 +10989,63 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -ts-node@^8.0.1: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" - integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - arg "^4.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.6" - yn "3.1.1" + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" -ts-toolbelt@^4.12.0: - version "4.14.6" - resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-4.14.6.tgz#9a232f62276caeee4fa9e81e0c4bffa047de0765" - integrity sha512-SONcnRd93+LuYGfn/CZg5A5qhCODohZslAVZKHHu5bnwUxoXLqd2k2VIdwRUXYfKnY+UCeNbI2pTPz+Dno6Mpg== +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-pnp@1.2.0, ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +ts-toolbelt@^6.3.3: + version "6.15.5" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83" + integrity sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A== + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== + +tsutils@^3.17.1: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" tt-react-custom-scrollbars@^4.2.1-tt2: version "4.2.1-tt2" @@ -11358,6 +11073,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -11365,6 +11087,36 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -11379,9 +11131,16 @@ type@^1.0.1: integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" - integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" typedarray@^0.0.6: version "0.0.6" @@ -11393,11 +11152,6 @@ typeface-pt-sans@0.0.54: resolved "https://registry.yarnpkg.com/typeface-pt-sans/-/typeface-pt-sans-0.0.54.tgz#b6d5a409b2ee618b961f1116b86c421a18a7efd0" integrity sha512-uvf3OIiTRXBly8iXD09iNZcLndJ89iGCyzWh4YzxdL+OMXPZxROupW8OR4JYo1RRfhzCdvebE6W/KrKDnAbdmw== -typesafe-actions@^3.0.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/typesafe-actions/-/typesafe-actions-3.4.0.tgz#cdf925941eafc75a659ebc2d584b673b86a1a5ab" - integrity sha512-FW6f61NEe8B8vDftLs3vFMLzyROvqlDS6jhbc2j/fPlCZ6MsY3V4bE4i83uPGfy7Kvvq70ePtsb4nPes9ROXqw== - typescript-compare@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" @@ -11417,55 +11171,20 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@^3.7.4: - version "3.7.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" - integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== +typescript@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" + integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== -uglify-es@^3.3.4, uglify-es@^3.3.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -uglifyjs-webpack-plugin@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" - integrity sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw== - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - schema-utils "^0.4.5" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.3.4" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= - -unc-path-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -11480,15 +11199,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== union-value@^1.0.0: version "1.0.1" @@ -11510,7 +11229,7 @@ uniqs@^2.0.0: resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= -unique-filename@^1.1.0, unique-filename@^1.1.1: +unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== @@ -11531,11 +11250,16 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -universalify@^0.1.0: +universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -11554,65 +11278,36 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -upath@^1.1.1: +upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -urijs@^1.16.1: - version "1.19.2" - resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.2.tgz#f9be09f00c4c5134b7cb3cf475c1dd394526265a" - integrity sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w== - urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= +url-loader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== dependencies: - prepend-http "^1.0.1" + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" -url-parse@^1.4.3: - version "1.4.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" - integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== +url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -11630,30 +11325,11 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -utif@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759" - integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg== - dependencies: - pako "^1.0.5" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= - -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - util.promisify@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -11686,7 +11362,7 @@ util@^0.11.0: dependencies: inherits "2.0.3" -utila@^0.4.0, utila@~0.4: +utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= @@ -11696,17 +11372,31 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: +uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" + integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -11714,13 +11404,6 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" @@ -11732,9 +11415,9 @@ vary@~1.1.2: integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vendors@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" - integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== verror@1.10.0: version "1.10.0" @@ -11750,12 +11433,26 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: - loose-envify "^1.0.0" + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" warning@^4.0.1: version "4.0.3" @@ -11764,14 +11461,23 @@ warning@^4.0.1: dependencies: loose-envify "^1.0.0" -watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -11780,34 +11486,20 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== -webpack-cli@^3.2.3: - version "3.3.10" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" - integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== - dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== dependencies: memory-fs "^0.4.1" mime "^2.4.4" @@ -11815,10 +11507,10 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.1.14: - version "3.10.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz#1ff3e5cccf8e0897aa3f5909c654e623f69b1c0e" - integrity sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA== +webpack-dev-server@3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#c74028bf5ba8885aaf230e48a20e8936ab8511f0" + integrity sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -11828,46 +11520,31 @@ webpack-dev-server@^3.1.14: debug "^4.1.1" del "^4.1.1" express "^4.17.1" - html-entities "^1.2.1" + html-entities "^1.3.1" http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.6" + loglevel "^1.6.8" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.25" + portfinder "^1.0.26" schema-utils "^1.0.0" - selfsigned "^1.10.7" + selfsigned "^1.10.8" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.19" - sockjs-client "1.4.0" - spdy "^4.0.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" - yargs "12.0.5" - -webpack-git-hash@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/webpack-git-hash/-/webpack-git-hash-1.0.2.tgz#03f0663fdfc93bcfae55a333dae27dde7eb4b6da" - integrity sha1-A/BmP9/JO8+uVaMz2uJ93n60tto= - -webpack-log@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" - integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - loglevelnext "^1.0.1" - uuid "^3.1.0" + yargs "^13.3.2" webpack-log@^2.0.0: version "2.0.0" @@ -11877,7 +11554,7 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-manifest-plugin@^2.0.4: +webpack-manifest-plugin@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== @@ -11887,16 +11564,14 @@ webpack-manifest-plugin@^2.0.4: object.entries "^1.1.0" tapable "^1.0.0" -webpack-pwa-manifest@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/webpack-pwa-manifest/-/webpack-pwa-manifest-4.1.1.tgz#f9fb9880e82b564026253b30dcbded2858a8b8ea" - integrity sha512-jnQsbU0O56OUATDPBKePe5HHoKfSN5zSKAqiSbD9JfIOXlfsHdja4+19RNy2uj//WX1byFZz2ZAdRtrelKPE/Q== +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== dependencies: - css-color-names "^1.0.0" - jimp "^0.6.0" - mime "^2.4.0" + lodash "^4.17.15" -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -11904,99 +11579,305 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.6.0: - version "4.41.5" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" - integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== +webpack@4.44.2: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" loader-utils "^1.2.3" memory-fs "^0.4.1" micromatch "^3.1.10" - mkdirp "^0.5.1" + mkdirp "^0.5.3" neo-async "^2.6.1" node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" + watchpack "^1.7.4" webpack-sources "^1.4.1" -websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== +webpack@^4.41.0: + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== dependencies: - http-parser-js ">=0.4.0 <0.4.11" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.5.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.4.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" + integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== + dependencies: + lodash "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: - string-width "^1.0.2 || 2" + isexe "^2.0.0" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -worker-farm@^1.5.2, worker-farm@^1.6.0, worker-farm@^1.7.0: +workbox-background-sync@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" + integrity sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== + dependencies: + workbox-core "^5.1.4" + +workbox-broadcast-update@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz#0eeb89170ddca7f6914fa3523fb14462891f2cfc" + integrity sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== + dependencies: + workbox-core "^5.1.4" + +workbox-build@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-5.1.4.tgz#23d17ed5c32060c363030c8823b39d0eabf4c8c7" + integrity sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== + dependencies: + "@babel/core" "^7.8.4" + "@babel/preset-env" "^7.8.4" + "@babel/runtime" "^7.8.4" + "@hapi/joi" "^15.1.0" + "@rollup/plugin-node-resolve" "^7.1.1" + "@rollup/plugin-replace" "^2.3.1" + "@surma/rollup-plugin-off-main-thread" "^1.1.1" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^8.1.0" + glob "^7.1.6" + lodash.template "^4.5.0" + pretty-bytes "^5.3.0" + rollup "^1.31.1" + rollup-plugin-babel "^4.3.3" + rollup-plugin-terser "^5.3.1" + source-map "^0.7.3" + source-map-url "^0.4.0" + stringify-object "^3.3.0" + strip-comments "^1.0.2" + tempy "^0.3.0" + upath "^1.2.0" + workbox-background-sync "^5.1.4" + workbox-broadcast-update "^5.1.4" + workbox-cacheable-response "^5.1.4" + workbox-core "^5.1.4" + workbox-expiration "^5.1.4" + workbox-google-analytics "^5.1.4" + workbox-navigation-preload "^5.1.4" + workbox-precaching "^5.1.4" + workbox-range-requests "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + workbox-streams "^5.1.4" + workbox-sw "^5.1.4" + workbox-window "^5.1.4" + +workbox-cacheable-response@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz#9ff26e1366214bdd05cf5a43da9305b274078a54" + integrity sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== + dependencies: + workbox-core "^5.1.4" + +workbox-core@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4" + integrity sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== + +workbox-expiration@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-5.1.4.tgz#92b5df461e8126114943a3b15c55e4ecb920b163" + integrity sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== + dependencies: + workbox-core "^5.1.4" + +workbox-google-analytics@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz#b3376806b1ac7d7df8418304d379707195fa8517" + integrity sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== + dependencies: + workbox-background-sync "^5.1.4" + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + workbox-strategies "^5.1.4" + +workbox-navigation-preload@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz#30d1b720d26a05efc5fa11503e5cc1ed5a78902a" + integrity sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== + dependencies: + workbox-core "^5.1.4" + +workbox-precaching@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-5.1.4.tgz#874f7ebdd750dd3e04249efae9a1b3f48285fe6b" + integrity sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== + dependencies: + workbox-core "^5.1.4" + +workbox-range-requests@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz#7066a12c121df65bf76fdf2b0868016aa2bab859" + integrity sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== + dependencies: + workbox-core "^5.1.4" + +workbox-routing@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-5.1.4.tgz#3e8cd86bd3b6573488d1a2ce7385e547b547e970" + integrity sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== + dependencies: + workbox-core "^5.1.4" + +workbox-strategies@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-5.1.4.tgz#96b1418ccdfde5354612914964074d466c52d08c" + integrity sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-streams@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-5.1.4.tgz#05754e5e3667bdc078df2c9315b3f41210d8cac0" + integrity sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== + dependencies: + workbox-core "^5.1.4" + workbox-routing "^5.1.4" + +workbox-sw@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-5.1.4.tgz#2bb34c9f7381f90d84cef644816d45150011d3db" + integrity sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== + +workbox-webpack-plugin@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz#7bfe8c16e40fe9ed8937080ac7ae9c8bde01e79c" + integrity sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ== + dependencies: + "@babel/runtime" "^7.5.5" + fast-json-stable-stringify "^2.0.0" + source-map-url "^0.4.0" + upath "^1.1.2" + webpack-sources "^1.3.0" + workbox-build "^5.1.4" + +workbox-window@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-5.1.4.tgz#2740f7dea7f93b99326179a62f1cc0ca2c93c863" + integrity sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== + dependencies: + workbox-core "^5.1.4" + +worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: errno "~0.1.7" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + microevent.ts "~0.1.1" wrap-ansi@^5.1.0: version "5.1.0" @@ -12007,26 +11888,29 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" + is-typedarray "^1.0.0" signal-exit "^3.0.2" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" + typedarray-to-buffer "^3.1.5" ws@^6.2.1: version "6.2.1" @@ -12035,27 +11919,17 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -xdg-basedir@^3.0.0: +ws@^7.4.4: + version "7.4.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== + +xml-name-validator@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xhr@^2.0.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" - integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== - dependencies: - global "~4.3.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xml-parse-from-string@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" - integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= - -xml2js@^0.4.19, xml2js@^0.4.5: +xml2js@^0.4.19: version "0.4.23" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== @@ -12068,134 +11942,86 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.1.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= - dependencies: - camelcase "^4.1.0" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.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 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" - os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.0" + yargs-parser "^13.1.2" -yargs@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" - integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^3.1.0" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^4.2.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" + y18n "^4.0.0" + yargs-parser "^18.1.2" -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= - 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" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 4e18eba55877b6ecfbfa440f5fbb6513853aa584 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 10:59:49 +0700 Subject: [PATCH 282/320] made global less styles --- src/styles/button.less | 128 +-- src/styles/dialogs.less | 1025 ++++++++++++------------ src/styles/gpx.less | 156 ++-- src/styles/logo.less | 36 +- src/styles/main.less | 274 +++---- src/styles/map.less | 647 +++++++-------- src/styles/panel.less | 1488 ++++++++++++++++++----------------- src/styles/progress.less | 28 +- src/styles/renderer.less | 90 +-- src/styles/router.less | 72 +- src/styles/save.less | 324 ++++---- src/styles/slider.less | 565 ++++++------- src/styles/stickers.less | 472 +++++------ src/styles/switch.less | 54 +- src/styles/user-button.less | 286 +++---- 15 files changed, 2846 insertions(+), 2799 deletions(-) diff --git a/src/styles/button.less b/src/styles/button.less index 8cbc2ad..a5b6336 100644 --- a/src/styles/button.less +++ b/src/styles/button.less @@ -1,70 +1,72 @@ -.button { - background: #444444; - padding: 4px 16px; - height: 18px; - line-height: 1em; - border-radius: @button_radius; - font-family: inherit; - font-size: 1em; - display: inline-flex; - align-items: center; - cursor: pointer; - user-select: none; - box-shadow: inset rgba(100,100,100, 0.3) 1px 0, inset rgba(0,0,0, 0.1) -1px 0; - color: white; - font-weight: 400; - border: none; - position: relative; - - &.outline { - box-shadow: inset #444444 0 0 0 1px; - background: transparent; - } - - &.primary { - background: #3c78db; - color: white; - } - - &.danger { - background: #ed2f3b; - color: white; - } - - &.success { - background: #17bf6d; - color: white; - } - - &.disabled { - opacity: 0.5; - touch-action: none; - pointer-events: none; - } - - input[type="file"] { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: 0; - } -} - -.button-group { - display: flex; - +:global { .button { - border-radius: 0; - margin: 0; + background: #444444; + padding: 4px 16px; + height: 18px; + line-height: 1em; + border-radius: @button_radius; + font-family: inherit; + font-size: 1em; + display: inline-flex; + align-items: center; + cursor: pointer; + user-select: none; + box-shadow: inset rgba(100, 100, 100, 0.3) 1px 0, inset rgba(0,0,0, 0.1) -1px 0; + color: white; + font-weight: 400; + border: none; + position: relative; - &:first-child { - border-radius: @button_radius 0 0 @button_radius; + &.outline { + box-shadow: inset #444444 0 0 0 1px; + background: transparent; } - &:last-child { - border-radius: 0 @button_radius @button_radius 0; + &.primary { + background: #3c78db; + color: white; + } + + &.danger { + background: #ed2f3b; + color: white; + } + + &.success { + background: #17bf6d; + color: white; + } + + &.disabled { + opacity: 0.5; + touch-action: none; + pointer-events: none; + } + + input[type="file"] { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + } + } + + .button-group { + display: flex; + + .button { + border-radius: 0; + margin: 0; + + &:first-child { + border-radius: @button_radius 0 0 @button_radius; + } + + &:last-child { + border-radius: 0 @button_radius @button_radius 0; + } } } } diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less index 0fcad20..e85efa9 100644 --- a/src/styles/dialogs.less +++ b/src/styles/dialogs.less @@ -1,541 +1,544 @@ -.dialog { - position: fixed; - left: 0; - top: 0; - width: 360px; - height: 100%; - z-index: 5; - display: flex; - flex-direction: column; - - padding: 10px 10px 68px 10px; - box-sizing: border-box; - - transform: translate3d(-100%, 0, 0); - pointer-events: none; - transition: transform 500ms, background-color 500ms 500ms; - - &.active { - transform: translate3d(0, 0, 0); - pointer-events: all; - transition: transform 500ms 250ms, background-color 250ms; - - .dialog-close-button { - opacity: 1; - transform: translate3d(0, 0, 0); - } - } - - @media (max-width: @mobile_breakpoint) { - width: 100%; - z-index: 6; - transform: translate3d(0, 100%, 0); - padding: 0 0 68px 0; - - &.active { - background: rgba(19, 45, 53, 0.95); - } - } -} - -.dialog-close-button { - position: absolute; - right: -38px; - bottom: 68px; - background: @red_secondary; - width: 48px; - height: 48px; - transform: translate3d(-48px, 0, 0); - border-radius: 0 @panel_radius @panel_radius 0; - opacity: 0; - - transition: all 250ms 250ms; - z-index: -1; - cursor: pointer; - - display: flex; - align-items: center; - justify-content: center; - - svg { - fill: white; - width: 40px; - height: 40px; - } - - @media (max-width: @mobile_breakpoint) { - border-radius: @panel_radius; - bottom: 0; - right: 0; - width: 100%; - height: 68px; - background: @dialog_background; - } -} - -.dialog-content { - background: @dialog_background; - overflow: hidden; - position: relative; - border-radius: @panel_radius @panel_radius 0 @panel_radius; - box-shadow: @dialog_shadow; - - display: flex; - flex-direction: column; - - a { - color: white; - opacity: 0.8; - } - - &.full { - flex: 1; - } -} - -.dialog-flex-scroll { - display: flex; - align-items: flex-end; - justify-content: center; - // height: 100%; -} - -.nominatim-dialog-content { - padding-bottom: 48px; - min-height: 25vh; -} - -.nominatim-list-item { - padding: 10px; - color: white; - cursor: pointer; - transition: background-color 0.25s; - display: flex; - align-items: center; - justify-content: center; - // padding-bottom: 200px; - - &:hover { - background: rgba(255, 255, 255, 0.1); - } - - .title { - text-overflow: hidden; - font-size: 12px; - -webkit-line-clamp: 2; - } -} - -.dialog-shader { - &::before, - &::after { - content: ' '; - height: 40px; - width: 100%; +:global { + .dialog { + position: fixed; left: 0; top: 0; - background: linear-gradient(180deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); - position: absolute; - z-index: 5; - pointer-events: none; - } - - &::after { - top: auto; - bottom: 0; - background: linear-gradient(0deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); - } -} - -.dialog-maplist { - box-sizing: border-box; - padding: 10px 0 0 0; -} - -@keyframes pulse { - 0% { - opacity: 1; - } - 100% { - opacity: 0.5; - } -} - -@keyframes spin { - 0% { - transform: rotate(0); - } - 100% { - transform: rotate(360deg); - } -} - -.dialog-maplist-pulse { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - z-index: 10; - background: linear-gradient(fade(@loading_shade, 0%), @loading_shade 70%); - height: 100px; - pointer-events: none; - transition: opacity 100ms; - opacity: 0; - - &.active { - opacity: 1; - animation: pulse 500ms 250ms infinite alternate; - } -} - -.dialog-maplist-loader { - display: flex; - margin-bottom: 10px; - text-transform: uppercase; - color: white; - align-items: center; - justify-content: center; - user-select: none; - opacity: 0.1; - - position: absolute; - width: 100%; - height: 100%; - pointer-events: none; - padding-top: 200px; - box-sizing: border-box; - font-weight: 600; - font-size: 20px; - text-align: center; - - .spin { - animation: spin infinite reverse 2s linear; - } - .dialog-maplist-icon { - position: absolute; - left: 50%; - top: 50%; - margin-left: -100px; - margin-top: -100px; - - svg { - width: 200px; - height: 200px; - fill: white; - } - } -} - -.route-row-wrapper { - padding: 0 10px; - position: relative; - margin-bottom: 10px; - transition: all 500ms; - display: flex; - flex-direction: column; - - &.has_edit { - //transform: translateY(-2px); - .route-row { - background: fade(@green_secondary, 30%); - } - } - - &.is_menu_target { - .route-row, - .route-row-fav { - transform: translateX(-120px); - } - - .route-row-edit-menu { - width: 120px; - } - } -} - -.route-row-editor { - color: white; - padding: 5px 0 5px; -} - -.route-row-buttons { - flex: 1; - flex-direction: row; - display: flex; - align-items: center; -} - -.route-row-view { - overflow: hidden; - transition: height 500ms; - position: relative; - display: flex; - - &.has_menu { - padding-right: 32px; - } -} - -.route-row-edit { - background: fade(@green_secondary, 30%); -} - -.route-row-drop { - background: fade(@red_secondary, 20%); - - .route-row { - align-items: center; - } -} - -.route-row { - background: rgba(255, 255, 255, 0.05); - padding: 10px 10px 5px 10px; - color: white; - user-select: none; - cursor: pointer; - transition: background 250ms, transform 500ms; - position: relative; - flex: 1; - min-height: 64px; - box-sizing: border-box; - display: flex; - flex-direction: column; - justify-content: center; - align-items: stretch; - - &:hover { - background: rgba(255, 255, 255, 0.1); - - .route-row-panel { - transform: scaleY(1); - pointer-events: all; - touch-action: initial; - } - } -} - -.route-row-edit-button { - width: 32px; - background: rgba(255, 255, 255, 0.08); - fill: rgba(255, 255, 255, 0.5); - display: flex; - justify-content: center; - align-items: center; - transition: all 250ms; - position: absolute; - top: 0; - right: 0; - height: 100%; - - &:hover { - background: rgba(255, 255, 255, 0.1); - } -} - -.route-row-fav { - width: 32px; - display: flex; - align-items: center; - justify-content: center; - fill: fade(white, 30%); - background: fade(white, 8%); - cursor: pointer; - transition: background 250ms, transform 500ms; - - &:hover { - background: fade(white, 10%); - } -} - -.route-row-edit-menu { - width: 0; - height: 100%; - right: 32px; - bottom: 0; - position: absolute; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; - transition: all 500ms; - display: flex; - fill: fade(white, 30%); - - div { - width: 60px; + width: 360px; height: 100%; + z-index: 5; display: flex; - justify-content: center; - align-items: center; + flex-direction: column; - &:first-child { - box-shadow: fade(black, 30%) 1px 0; + padding: 10px 10px 68px 10px; + box-sizing: border-box; + + transform: translate3d(-100%, 0, 0); + pointer-events: none; + transition: transform 500ms, background-color 500ms 500ms; + + &.active { + transform: translate3d(0, 0, 0); + pointer-events: all; + transition: transform 500ms 250ms, background-color 250ms; + + .dialog-close-button { + opacity: 1; + transform: translate3d(0, 0, 0); + } } - &:hover { - background: fade(@red_secondary, 30%); - } + @media (max-width: @mobile_breakpoint) { + width: 100%; + z-index: 6; + transform: translate3d(0, 100%, 0); + padding: 0 0 68px 0; - &.modify-button { - &:hover { - background: fade(@green_secondary, 30%); + &.active { + background: rgba(19, 45, 53, 0.95); } } } -} -.route-title { - margin-bottom: 5px; - font-weight: bold; + .dialog-close-button { + position: absolute; + right: -38px; + bottom: 68px; + background: @red_secondary; + width: 48px; + height: 48px; + transform: translate3d(-48px, 0, 0); + border-radius: 0 @panel_radius @panel_radius 0; + opacity: 0; - text-overflow: ellipsis; - overflow: hidden; - position: relative; - max-height: 2.4em; - word-break: break-word; - display: flex; + transition: all 250ms 250ms; + z-index: -1; + cursor: pointer; - .route-row-corner { - svg { - fill: fade(white, 50%); - margin-right: 2px; - flex-shrink: 0; - } - } -} - -.route-description { - font-size: 0.9em; - opacity: 0.3; - margin-bottom: 5px; - display: grid; - grid-template-columns: 2fr 1fr; - - svg { - width: 20px; - height: 20px; - fill: white; - vertical-align: text-bottom; - margin-bottom: -2px; - } - - span { - padding-right: 10px; - - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - } -} - -.dialog-head { - background: rgba(255, 255, 255, 0.1); - padding: 10px; - color: white; -} - -.dialog-tabs { - background: rgba(255, 255, 255, 0); - border-radius: @panel_radius @panel_radius 0 0; - height: 32px; - user-select: none; - flex-direction: row; - display: flex; - - .dialog-tab { - display: inline-flex; + display: flex; align-items: center; justify-content: center; + + svg { + fill: white; + width: 40px; + height: 40px; + } + + @media (max-width: @mobile_breakpoint) { + border-radius: @panel_radius; + bottom: 0; + right: 0; + width: 100%; + height: 68px; + background: @dialog_background; + } + } + + .dialog-content { + background: @dialog_background; + overflow: hidden; + position: relative; + border-radius: @panel_radius @panel_radius 0 @panel_radius; + box-shadow: @dialog_shadow; + + display: flex; + flex-direction: column; + + a { + color: white; + opacity: 0.8; + } + + &.full { + flex: 1; + } + } + + .dialog-flex-scroll { + display: flex; + align-items: flex-end; + justify-content: center; + // height: 100%; + } + + .nominatim-dialog-content { + padding-bottom: 48px; + min-height: 25vh; + } + + .nominatim-list-item { + padding: 10px; color: white; - padding: 0 20px; cursor: pointer; - border-radius: @panel_radius @panel_radius 0 0; - flex: 1; - height: 32px; + transition: background-color 0.25s; + display: flex; + align-items: center; + justify-content: center; + // padding-bottom: 200px; + + &:hover { + background: rgba(255, 255, 255, 0.1); + } + + .title { + text-overflow: hidden; + font-size: 12px; + -webkit-line-clamp: 2; + } + } + + .dialog-shader { + &::before, + &::after { + content: ' '; + height: 40px; + width: 100%; + left: 0; + top: 0; + background: linear-gradient(180deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); + position: absolute; + z-index: 5; + pointer-events: none; + } + + &::after { + top: auto; + bottom: 0; + background: linear-gradient(0deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); + } + } + + .dialog-maplist { + box-sizing: border-box; + padding: 10px 0 0 0; + } + + @keyframes pulse { + 0% { + opacity: 1; + } + 100% { + opacity: 0.5; + } + } + + @keyframes spin { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } + } + + .dialog-maplist-pulse { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 10; + background: linear-gradient(fade(@loading_shade, 0%), @loading_shade 70%); + height: 100px; + pointer-events: none; + transition: opacity 100ms; + opacity: 0; &.active { + opacity: 1; + animation: pulse 500ms 250ms infinite alternate; + } + } + + .dialog-maplist-loader { + display: flex; + margin-bottom: 10px; + text-transform: uppercase; + color: white; + align-items: center; + justify-content: center; + user-select: none; + opacity: 0.1; + + position: absolute; + width: 100%; + height: 100%; + pointer-events: none; + padding-top: 200px; + box-sizing: border-box; + font-weight: 600; + font-size: 20px; + text-align: center; + + .spin { + animation: spin infinite reverse 2s linear; + } + + .dialog-maplist-icon { + position: absolute; + left: 50%; + top: 50%; + margin-left: -100px; + margin-top: -100px; + + svg { + width: 200px; + height: 200px; + fill: white; + } + } + } + + .route-row-wrapper { + padding: 0 10px; + position: relative; + margin-bottom: 10px; + transition: all 500ms; + display: flex; + flex-direction: column; + + &.has_edit { + //transform: translateY(-2px); + .route-row { + background: fade(@green_secondary, 30%); + } + } + + &.is_menu_target { + .route-row, + .route-row-fav { + transform: translateX(-120px); + } + + .route-row-edit-menu { + width: 120px; + } + } + } + + .route-row-editor { + color: white; + padding: 5px 0 5px; + } + + .route-row-buttons { + flex: 1; + flex-direction: row; + display: flex; + align-items: center; + } + + .route-row-view { + overflow: hidden; + transition: height 500ms; + position: relative; + display: flex; + + &.has_menu { + padding-right: 32px; + } + } + + .route-row-edit { + background: fade(@green_secondary, 30%); + } + + .route-row-drop { + background: fade(@red_secondary, 20%); + + .route-row { + align-items: center; + } + } + + .route-row { + background: rgba(255, 255, 255, 0.05); + padding: 10px 10px 5px 10px; + color: white; + user-select: none; + cursor: pointer; + transition: background 250ms, transform 500ms; + position: relative; + flex: 1; + min-height: 64px; + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: center; + align-items: stretch; + + &:hover { + background: rgba(255, 255, 255, 0.1); + + .route-row-panel { + transform: scaleY(1); + pointer-events: all; + touch-action: initial; + } + } + } + + .route-row-edit-button { + width: 32px; + background: rgba(255, 255, 255, 0.08); + fill: rgba(255, 255, 255, 0.5); + display: flex; + justify-content: center; + align-items: center; + transition: all 250ms; + position: absolute; + top: 0; + right: 0; + height: 100%; + + &:hover { background: rgba(255, 255, 255, 0.1); } } - @media (max-width: @mobile_breakpoint) { - height: 48px; + .route-row-fav { + width: 32px; + display: flex; + align-items: center; + justify-content: center; + fill: fade(white, 30%); + background: fade(white, 8%); + cursor: pointer; + transition: background 250ms, transform 500ms; + + &:hover { + background: fade(white, 10%); + } + } + + .route-row-edit-menu { + width: 0; + height: 100%; + right: 32px; + bottom: 0; + position: absolute; + background: rgba(0, 0, 0, 0.1); + overflow: hidden; + transition: all 500ms; + display: flex; + fill: fade(white, 30%); + + div { + width: 60px; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + + &:first-child { + box-shadow: fade(black, 30%) 1px 0; + } + + &:hover { + background: fade(@red_secondary, 30%); + } + + &.modify-button { + &:hover { + background: fade(@green_secondary, 30%); + } + } + } + } + + .route-title { + margin-bottom: 5px; + font-weight: bold; + + text-overflow: ellipsis; + overflow: hidden; + position: relative; + max-height: 2.4em; + word-break: break-word; + display: flex; + + .route-row-corner { + svg { + fill: fade(white, 50%); + margin-right: 2px; + flex-shrink: 0; + } + } + } + + .route-description { + font-size: 0.9em; + opacity: 0.3; + margin-bottom: 5px; + display: grid; + grid-template-columns: 2fr 1fr; + + svg { + width: 20px; + height: 20px; + fill: white; + vertical-align: text-bottom; + margin-bottom: -2px; + } + + span { + padding-right: 10px; + + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + } + + .dialog-head { + background: rgba(255, 255, 255, 0.1); + padding: 10px; + color: white; + } + + .dialog-tabs { + background: rgba(255, 255, 255, 0); + border-radius: @panel_radius @panel_radius 0 0; + height: 32px; + user-select: none; + flex-direction: row; + display: flex; .dialog-tab { + display: inline-flex; + align-items: center; + justify-content: center; + color: white; + padding: 0 20px; + cursor: pointer; + border-radius: @panel_radius @panel_radius 0 0; + flex: 1; + height: 32px; + + &.active { + background: rgba(255, 255, 255, 0.1); + } + } + + @media (max-width: @mobile_breakpoint) { height: 48px; + + .dialog-tab { + height: 48px; + } + } + } + + .dialog-head-title { + font-size: 20px; + text-transform: uppercase; + } + + .app-info-changelog { + color: white; + padding: 10px; + font-size: 0.8em; + user-select: none; + + div { + opacity: 0.8; + } + } + + .app-info-number { + width: 16px; + } + + .app-info-changelog-item { + text-transform: uppercase; + display: flex; + flex: 1; + + .app-info-current { + font-size: 0.9em; + opacity: 0.3; + display: inline; + padding-left: 10px; + } + } + + .app-info-version { + padding-bottom: 5px; + flex: 1; + flex-direction: column-reverse; + } + + .app-info-release { + padding-bottom: 5px; + display: flex; + flex: 1; + } + + .app-info-build { + padding-bottom: 5px; + display: flex; + flex-direction: column-reverse; + flex: 1; + } + + .app-info-change { + display: flex; + flex-direction: row; + padding-bottom: 5px; + + .app-info-number { + width: 20px; + } + + span { + flex: 1; + } + } + + .app-info-list { + padding: 5px 0; + + div { + padding: 5px 0; } } } - -.dialog-head-title { - font-size: 20px; - text-transform: uppercase; -} - -.app-info-changelog { - color: white; - padding: 10px; - font-size: 0.8em; - user-select: none; - - div { - opacity: 0.8; - } -} - -.app-info-number { - width: 16px; -} - -.app-info-changelog-item { - text-transform: uppercase; - display: flex; - flex: 1; - - .app-info-current { - font-size: 0.9em; - opacity: 0.3; - display: inline; - padding-left: 10px; - } -} - -.app-info-version { - padding-bottom: 5px; - flex: 1; - flex-direction: column-reverse; -} - -.app-info-release { - padding-bottom: 5px; - display: flex; - flex: 1; -} - -.app-info-build { - padding-bottom: 5px; - display: flex; - flex-direction: column-reverse; - flex: 1; -} - -.app-info-change { - display: flex; - flex-direction: row; - padding-bottom: 5px; - - .app-info-number { - width: 20px; - } - - span { - flex: 1; - } -} - -.app-info-list { - padding: 5px 0; - - div { - padding: 5px 0; - } -} diff --git a/src/styles/gpx.less b/src/styles/gpx.less index 82b9f2c..695c73d 100644 --- a/src/styles/gpx.less +++ b/src/styles/gpx.less @@ -1,99 +1,101 @@ -.gpx-title { - display: flex; - flex-direction: row; - padding: 10px; -} - -.gpx-row { - display: flex; - align-items: center; - justify-content: flex-start; - flex-direction: row; - padding: 5px 10px; - min-width: 0; - - &_disabled { - opacity: 0.5; +:global { + .gpx-title { + display: flex; + flex-direction: row; + padding: 10px; } - &__title { - flex: 1; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - margin: 0 10px; - cursor: pointer; - } - - &__buttons { + .gpx-row { display: flex; align-items: center; - justify-content: center; + justify-content: flex-start; + flex-direction: row; + padding: 5px 10px; + min-width: 0; - svg { - fill: white; + &_disabled { + opacity: 0.5; } - > div { - padding: 0 5px; + &__title { + flex: 1; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + margin: 0 10px; + cursor: pointer; + } + + &__buttons { + display: flex; + align-items: center; + justify-content: center; + + svg { + fill: white; + } + + > div { + padding: 0 5px; + cursor: pointer; + + &:last-child { + padding-right: 0; + } + + &:first-child { + padding-left: 0; + } + } + } + + &__color { + width: 8px; + height: 8px; + border-radius: 100%; cursor: pointer; + // span { + + // } + } + } + + .gpx-buttons { + padding: 10px; + + & > * { + margin: 2.5px 0; + &:last-child { - padding-right: 0; + margin-bottom: 0; } &:first-child { - padding-left: 0; + margin-top: 0; } } - } - &__color { - width: 8px; - height: 8px; - border-radius: 100%; - cursor: pointer; - - // span { - - // } - } -} - -.gpx-buttons { - padding: 10px; - - & > * { - margin: 2.5px 0; - - &:last-child { - margin-bottom: 0; - } - - &:first-child { - margin-top: 0; + & > .button { + width: 100%; + box-sizing: border-box; + position: relative; + height: 32px; + align-items: center; + justify-content: center; } } - & > .button { - width: 100%; + .gpx-confirm { + position: absolute; + bottom: 5%; + left: 5%; + z-index: 5; + width: 90%; + padding: 10px; + border-radius: @panel_radius; box-sizing: border-box; - position: relative; - height: 32px; - align-items: center; - justify-content: center; + background: lighten(@bar_background, 10%); + box-shadow: rgba(0, 0, 0, 0.5) 0 5px 5px 10px; } } - -.gpx-confirm { - position: absolute; - bottom: 5%; - left: 5%; - z-index: 5; - width: 90%; - padding: 10px; - border-radius: @panel_radius; - box-sizing: border-box; - background: lighten(@bar_background, 10%); - box-shadow: rgba(0,0,0,0.5) 0 5px 5px 10px; -} \ No newline at end of file diff --git a/src/styles/logo.less b/src/styles/logo.less index e6fdfa0..8d9272e 100644 --- a/src/styles/logo.less +++ b/src/styles/logo.less @@ -1,24 +1,24 @@ -.logo-preview { - position: fixed; - right: 0; - bottom: 58px; +:global { + .logo-preview { + position: fixed; + right: 0; + bottom: 58px; - width: 400px; - height: 100%; + width: 400px; + height: 100%; - opacity: 0.5; - pointer-events: none; - z-index: 2; - background: 100% 100% no-repeat; + opacity: 0.5; + pointer-events: none; + z-index: 2; + background: 100% 100% no-repeat; - &.top { - background-position: 100% 0; - } + &.top { + background-position: 100% 0; + } - @media (max-width: @mobile_breakpoint) { - transform: scale(0.5); - transform-origin: 100% 100%; + @media (max-width: @mobile_breakpoint) { + transform: scale(0.5); + transform-origin: 100% 100%; + } } } - - diff --git a/src/styles/main.less b/src/styles/main.less index 2e79d9e..70e6c95 100644 --- a/src/styles/main.less +++ b/src/styles/main.less @@ -15,153 +15,159 @@ @import 'switch.less'; @import 'gpx.less'; -body { - font-family: 'Rubik', sans-serif; - font-size: 15px; - // letter-spacing: 0.4px; - padding: 0; - font-weight: 400; - -webkit-font-smoothing: antialiased; -} +:global { + body { + font-family: 'Rubik', sans-serif; + font-size: 15px; + // letter-spacing: 0.4px; + padding: 0; + font-weight: 400; + -webkit-font-smoothing: antialiased; + } -.gray { - opacity: 0.5; -} + .gray { + opacity: 0.5; + } -.big { - font-size: 1em; - font-weight: 500; -} + .big { + font-size: 1em; + font-weight: 500; + } -.upper { - text-transform: uppercase; -} + .upper { + text-transform: uppercase; + } -.small { - font-size: 0.9em; -} + .small { + font-size: 0.9em; + } -.white { - color: white; -} + .white { + color: white; + } -.success { - color: @color_success; -} + .success { + color: @color_success; + } -.primary { - color: @color_primary; -} + .primary { + color: @color_primary; + } -.danger { - color: @color_danger; -} + .danger { + color: @color_danger; + } -.cursor-tooltip { - position: fixed; - top: 4px; - left: 4px; - width: 10px; - height: 10px; - z-index: 1; - pointer-events: none; + .cursor-tooltip { + position: fixed; + top: 4px; + left: 4px; + width: 10px; + height: 10px; + z-index: 1; + pointer-events: none; - svg { + svg { + width: 20px; + height: 20px; + stroke-width: 4; + fill: black; + } + + @media (hover: none) { + display: none; + } + } + + .cursor-icon-sticker { width: 20px; height: 20px; - stroke-width: 4; - fill: black; - } - - @media(hover: none) { - display: none; - } -} - -.cursor-icon-sticker { - width: 20px; - height: 20px; - background-size: cover; - background-position: 0 50%; - position: absolute; - top: -30px; -} - -.track-vertical { - position: absolute; - right: 0; - height: 100%; - width: 10px !important; -} - -.thumb-vertical { - position: absolute; - width: 20px !important; - left: -10px; - border-radius: 4px 0 0 4px; - transition: background 250ms; - cursor: grab; - - &:hover, &:active { - background: rgba(255, 255, 255, 0.3); - } - - &::after { - content: ' '; - width: 5px; - height: 100%; - display: block; - right: 0; + background-size: cover; + background-position: 0 50%; position: absolute; + top: -30px; + } + + .track-vertical { + position: absolute; + right: 0; + height: 100%; + width: 10px !important; + } + + .thumb-vertical { + position: absolute; + width: 20px !important; + left: -10px; border-radius: 4px 0 0 4px; - background: rgba(255, 255, 255, 0.5); + transition: background 250ms; + cursor: grab; + + &:hover, &:active { + background: rgba(255, 255, 255, 0.3); + } + + &::after { + content: ' '; + width: 5px; + height: 100%; + display: block; + right: 0; + position: absolute; + border-radius: 4px 0 0 4px; + background: rgba(255, 255, 255, 0.5); + } + } + + .pointer { + cursor: pointer; + } + + @media (max-width: @mobile_breakpoint) { + .desktop-only { + display: none; + } + } + + @media (min-width: @mobile_breakpoint) { + .mobile-only { + display: none; + } + } + + h2 { + font: inherit; + font-size: 18px; + font-weight: 400; + text-transform: uppercase; + margin: 10px 0; + } + + hr { + border: none; + height: 2px; + background: rgba(0, 0, 0, 0.3); + } + + input { + width: 100%; + padding: 5px 10px 5px 10px; + background: rgba(0, 0, 0, 0.3); + border-radius: @panel_radius; + border: none; + outline: none; + color: white; + + font-family: inherit; + font-size: 14px; + font-weight: 200; + } + + .relative { + position: relative; + } + + .justify-end { + justify-content: flex-end; } } - -.pointer { - cursor: pointer; -} - -@media (max-width: @mobile_breakpoint) { - .desktop-only { display: none; } -} - -@media (min-width: @mobile_breakpoint) { - .mobile-only { display: none; } -} - -h2 { - font: inherit; - font-size: 18px; - font-weight: 400; - text-transform: uppercase; - margin: 10px 0; -} - -hr { - border: none; - height: 2px; - background: rgba(0, 0, 0, 0.3); -} - -input { - width: 100%; - padding: 5px 10px 5px 10px; - background: rgba(0, 0, 0, 0.3); - border-radius: @panel_radius; - border: none; - outline: none; - color: white; - - font-family: inherit; - font-size: 14px; - font-weight: 200; -} - -.relative { - position: relative; -} - -.justify-end { - justify-content: flex-end; -} diff --git a/src/styles/map.less b/src/styles/map.less index 08a1cb3..69ada45 100644 --- a/src/styles/map.less +++ b/src/styles/map.less @@ -1,366 +1,367 @@ -#map { - width: 50% !important; - height: 100%; - position: absolute; - z-index: 1; - left: 0; - top: 0; - - cursor: crosshair; -} - -.leaflet-control-zoom { - display: none; -} - -.leaflet-touch .leaflet-bar a { - border-radius: @panel_radius !important; -} - -@keyframes vertex_spin { - 0% { - transform: scale(1); - } - 100% { - transform: scale(1.2); - } -} - -.leaflet-vertex-drag-helper { - pointer-events: none !important; - background: fade(red, 50%); - border-radius: 12px; - - &::after { - content: ' '; - width: 24px; - height: 24px; - border: 2px solid @red_secondary; - border-radius: 24px; +:global { + #map { + width: 50% !important; + height: 100%; position: absolute; - top: -9px; - left: -9px; - animation: vertex_spin 500ms infinite linear alternate; - } -} - -.vertex-icon-mixin(@left, @right) { - &::after { - content: ' '; - position: absolute; - top: 4px; - left: @left; - right: @right; - width: 8px; - height: 8px; - background: white; - border-radius: 8px; - transform: scale(1); - transition: transform 150ms; - } -} - -.leaflet-vertex-icon { - outline: none !important; - border-radius: 10px; - opacity: 1; - border: none; - width: 16px !important; - height: 16px !important; - margin-left: -8px !important; - margin-top: -8px !important; - background: transparent; - position: absolute; - cursor: grab; - - &::before { - width: 24px; - height: 24px; - background: none; - content: ' '; - position: absolute; - transform: translate(-4px, -4px); - border-radius: 16px; - top: 0; + z-index: 1; left: 0; + top: 0; + + cursor: crosshair; } - @media (max-width: @mobile_breakpoint) { - &::before { - width: 32px; - height: 32px; - transform: translate(-8px, -8px); - background: rgba(255, 50, 0, 0.3); + .leaflet-control-zoom { + display: none; + } + + .leaflet-touch .leaflet-bar a { + border-radius: @panel_radius !important; + } + + @keyframes vertex_spin { + 0% { + transform: scale(1); + } + 100% { + transform: scale(1.2); } } - .vertex-icon-mixin(4px, auto); - - &:hover { - opacity: 1; - } -} - -.leaflet-arrow { - position: absolute; - left: -18px; - top: -18px; - width: 48px; - height: 48px; - pointer-events: none; -} - -.leaflet-arrow-icon { - pointer-events: none !important; -} - -.leaflet-km-marker, -.leaflet-km-marker-2 { - position: absolute; - z-index: 0 !important; - - .leaflet-km-dist { - background: @red_secondary; - color: white; - border-radius: 8px; - font-size: 12px; - text-align: center; - height: 14px; - display: inline-flex; - align-items: center; - justify-content: center; - position: relative; - top: 50%; - left: 50%; - font-weight: bold; - padding: 0 2px; - - svg { - position: absolute; - top: -16px; - left: 50%; - transform: translate(-50%, 0); - } - - &.reverse { - svg { - transform: translate(-50%, 0) rotate(180deg); - } - } - } -} - -.start-marker { - svg { - position: absolute; - left: -4px; - top: -4px; - } -} - -.end-marker { - .leaflet-km-dist { - left: auto; - right: -3px; - top: -2px; - position: absolute; - z-index: -10; - padding: 1px 15px 1px 6px; - border-radius: 10px; + .leaflet-vertex-drag-helper { + pointer-events: none !important; + background: fade(red, 50%); + border-radius: 12px; &::after { content: ' '; - width: 8px; - height: 8px; - border-radius: 4px; - background: white; + width: 24px; + height: 24px; + border: 2px solid @red_secondary; + border-radius: 24px; position: absolute; - right: 4px; - top: 4px; + top: -9px; + left: -9px; + animation: vertex_spin 500ms infinite linear alternate; } } - &.right { - .leaflet-km-dist { - padding: 2px 4px 2px 16px; - left: -3px; - right: auto; + .vertex-icon-mixin(@left, @right) { + &::after { + content: ' '; + position: absolute; + top: 4px; + left: @left; + right: @right; + width: 8px; + height: 8px; + background: white; + border-radius: 8px; + transform: scale(1); + transition: transform 150ms; + } + } - &::after { - left: 5px; - right: auto; + .leaflet-vertex-icon { + outline: none !important; + border-radius: 10px; + opacity: 1; + border: none; + width: 16px !important; + height: 16px !important; + margin-left: -8px !important; + margin-top: -8px !important; + background: transparent; + position: absolute; + cursor: grab; + + &::before { + width: 24px; + height: 24px; + background: none; + content: ' '; + position: absolute; + transform: translate(-4px, -4px); + border-radius: 16px; + top: 0; + left: 0; + } + + @media (max-width: @mobile_breakpoint) { + &::before { + width: 32px; + height: 32px; + transform: translate(-8px, -8px); + background: rgba(255, 50, 0, 0.3); + } + } + + .vertex-icon-mixin(4px, auto); + + &:hover { + opacity: 1; + } + } + + .leaflet-arrow { + position: absolute; + left: -18px; + top: -18px; + width: 48px; + height: 48px; + pointer-events: none; + } + + .leaflet-arrow-icon { + pointer-events: none !important; + } + + .leaflet-km-marker, + .leaflet-km-marker-2 { + position: absolute; + z-index: 0 !important; + + .leaflet-km-dist { + background: @red_secondary; + color: white; + border-radius: 8px; + font-size: 12px; + text-align: center; + height: 14px; + display: inline-flex; + align-items: center; + justify-content: center; + position: relative; + top: 50%; + left: 50%; + font-weight: bold; + padding: 0 2px; + + svg { + position: absolute; + top: -16px; + left: 50%; + transform: translate(-50%, 0); + } + + &.reverse { + svg { + transform: translate(-50%, 0) rotate(180deg); + } } } } -} -.router-marker { - div { - background: @router_line; - color: white; - left: auto; - right: 15px; - // transform: translate(50%, 0); - top: -3px; - position: absolute; - z-index: -10; - padding: 0 6px 0 6px; - border-radius: 12px; - font-weight: bold; - } - - &.right { - div { - right: auto; - left: 15px; + .start-marker { + svg { + position: absolute; + left: -4px; + top: -4px; } } -} -.leaflet-km-marker-2 { - .leaflet-km-dist { - background: green; + .end-marker { + .leaflet-km-dist { + left: auto; + right: -3px; + top: -2px; + position: absolute; + z-index: -10; + padding: 1px 15px 1px 6px; + border-radius: 10px; + + &::after { + content: ' '; + width: 8px; + height: 8px; + border-radius: 4px; + background: white; + position: absolute; + right: 4px; + top: 4px; + } + } + + &.right { + .leaflet-km-dist { + padding: 2px 4px 2px 16px; + left: -3px; + right: auto; + + &::after { + left: 5px; + right: auto; + } + } + } } -} -.touch-hinter-poly { - stroke: rgba(255, 50, 0, 0.1); - cursor: grab; + .router-marker { + div { + background: @router_line; + color: white; + left: auto; + right: 15px; + // transform: translate(50%, 0); + top: -3px; + position: absolute; + z-index: -10; + padding: 0 6px 0 6px; + border-radius: 12px; + font-weight: bold; + } - @media (max-width: @mobile_breakpoint) { - stroke: rgba(255, 50, 0, 0.2); + &.right { + div { + right: auto; + left: 15px; + } + } } -} -.leaflet-control-container .leaflet-routing-container-hide { - display: none; -} + .leaflet-km-marker-2 { + .leaflet-km-dist { + background: green; + } + } -.leaflet-bar { - box-shadow: @bar_shadow !important; - border: none !important; -} + .touch-hinter-poly { + stroke: rgba(255, 50, 0, 0.1); + cursor: grab; -.leaflet-bar a { - background: @bar_background; - color: white; - text-shadow: none; - user-select: none; - border-bottom: none; + @media (max-width: @mobile_breakpoint) { + stroke: rgba(255, 50, 0, 0.2); + } + } - &:hover { + .leaflet-control-container .leaflet-routing-container-hide { + display: none; + } + + .leaflet-bar { + box-shadow: @bar_shadow !important; + border: none !important; + } + + .leaflet-bar a { background: @bar_background; color: white; + text-shadow: none; + user-select: none; border-bottom: none; - } -} -.location-marker { - width: 20px; - height: 3px; - margin-left: -10px; - margin-top: -2px; - outline: none; - z-index: 10001; - background: @red_secondary; - - &:after { - content: ' '; - box-shadow: 0 0 0 3px @red_secondary; - background: white; - border-radius: 8px; - width: 8px; - height: 8px; - position: absolute; - left: 6px; - top: -3px; + &:hover { + background: @bar_background; + color: white; + border-bottom: none; + } } - &:before { - content: ' '; - display: block; - width: 3px; - height: 20px; - background: @red_secondary; - left: 8.5px; - top: -9px; - position: absolute; - } -} - -.leaflet-top { - top: 42px; -} - -.leaflet-div-icon { - background: none !important; - border: none !important; -} - -.custom-marker-cluster { - width: 24px; - height: 24px; - background: @cluster_small; - border-radius: 16px; - display: flex; - align-items: center; - justify-content: center; - color: white; - box-shadow: fade(@cluster_small, 70%) 0 0 0 5px; - font-weight: bold; - font-size: 13px; - transform: translate(-12px, -12px); - transition: box-shadow 250ms; - position: relative; - outline: none; - - &:hover { - box-shadow: fade(@cluster_small, 70%) 0 0 0 7px; - } - - span { + .location-marker { + width: 20px; + height: 3px; + margin-left: -10px; + margin-top: -2px; outline: none; - position: absolute; - right: -7px; - bottom: 11px; + z-index: 10001; + background: @red_secondary; + + &:after { + content: ' '; + box-shadow: 0 0 0 3px @red_secondary; + background: white; + border-radius: 8px; + width: 8px; + height: 8px; + position: absolute; + left: 6px; + top: -3px; + } + + &:before { + content: ' '; + display: block; + width: 3px; + height: 20px; + background: @red_secondary; + left: 8.5px; + top: -9px; + position: absolute; + } + } + + .leaflet-top { + top: 42px; + } + + .leaflet-div-icon { + background: none !important; + border: none !important; + } + + .custom-marker-cluster { + width: 24px; + height: 24px; background: @cluster_small; - width: 16px; - height: 16px; + border-radius: 16px; display: flex; align-items: center; justify-content: center; - border-radius: 8px; - font-size: 11px; + color: white; + box-shadow: fade(@cluster_small, 70%) 0 0 0 5px; + font-weight: bold; + font-size: 13px; + transform: translate(-12px, -12px); + transition: box-shadow 250ms; + position: relative; + outline: none; + + &:hover { + box-shadow: fade(@cluster_small, 70%) 0 0 0 7px; + } + + span { + outline: none; + position: absolute; + right: -7px; + bottom: 11px; + background: @cluster_small; + width: 16px; + height: 16px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + font-size: 11px; + } + } + + #canvas { + background: #eeeeee; + z-index: 0; + + > div { + width: 100%; + height: 100%; + } + } + + .leaflet-pane { + user-select: none; + } + + .current-location { + width: 0; + height: 0; + position: relative; + + svg { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + fill: @bar_background; + stroke: white; + stroke-width: 0.2px; + } } } - -#canvas { - background: #eeeeee; - z-index: 0; - - > div { - width: 100%; - height: 100%; - } -} - -.leaflet-pane { - user-select: none; -} - -.current-location { - width: 0; - height: 0; - position: relative; - - svg { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - fill: @bar_background; - stroke: white; - stroke-width: 0.2px; - } -} - \ No newline at end of file diff --git a/src/styles/panel.less b/src/styles/panel.less index 20f47f0..5c8c4f9 100644 --- a/src/styles/panel.less +++ b/src/styles/panel.less @@ -1,794 +1,796 @@ -.control-bar { - background: @bar_background; - border-radius: @panel_radius; - display: flex; - box-shadow: @bar_shadow; - align-items: center; - justify-content: center; - - @media (max-width: @mobile_breakpoint) { - box-shadow: none; - } -} - -.control-bar-padded { - padding: 0 5px; -} - -.control-sep { - height: 36px; - background: #222222; - width: 4px; - - @media (max-width: @mobile_breakpoint) { - margin-left: -1px; - margin-right: -1px; - width: 6px; - } -} - -.secondary-bar { - background: #222222; - margin: 0 -1px; - padding: 0 1px; - - &:first-child { - border-radius: @panel_radius 0 0 @panel_radius; - } - - .panel & button { - height: 40px; - padding: 4px; - } - - &__undo { - opacity: 0; - transform: translate(50px, 0); - pointer-events: none; - touch-action: none; - transition: transform 0.25s, opacity 0.25s; - z-index: -1; - - &.active { - opacity: 1; - transform: translate(0, 0); - pointer-events: all; - touch-action: initial; - } - } -} - -.panel { - position: fixed; - left: 10px; - bottom: 10px; - z-index: 6; - color: white; - display: flex; - align-items: center; - transform: translateY(100px); - transition: transform 500ms; - - &.active { - transform: translateY(0); - } - - &.right { - left: auto; - right: 10px; - } - - &.center { - left: 50%; - right: auto; - transform: translateX(-50%); - } - - button { - border: none; - background: transparent; - padding: 8px; - outline: none; - cursor: pointer; - display: inline-flex; - color: white; +:global { + .control-bar { + background: @bar_background; + border-radius: @panel_radius; + display: flex; + box-shadow: @bar_shadow; align-items: center; - transition: background-color 500ms; - height: 48px; - box-sizing: border-box; - user-select: none; - position: relative; + justify-content: center; - &:hover { - background: rgba(100, 100, 100, 0.2); + @media (max-width: @mobile_breakpoint) { + box-shadow: none; } + } - span { - margin-right: 8px; - font-size: 14px; - font-weight: 500; - margin-left: 8px; - text-transform: uppercase; + .control-bar-padded { + padding: 0 5px; + } + + .control-sep { + height: 36px; + background: #222222; + width: 4px; + + @media (max-width: @mobile_breakpoint) { + margin-left: -1px; + margin-right: -1px; + width: 6px; } + } + + .secondary-bar { + background: #222222; + margin: 0 -1px; + padding: 0 1px; &:first-child { border-radius: @panel_radius 0 0 @panel_radius; } - &:last-child { - border-radius: 0 @panel_radius @panel_radius 0; + .panel & button { + height: 40px; + padding: 4px; + } + + &__undo { + opacity: 0; + transform: translate(50px, 0); + pointer-events: none; + touch-action: none; + transition: transform 0.25s, opacity 0.25s; + z-index: -1; + + &.active { + opacity: 1; + transform: translate(0, 0); + pointer-events: all; + touch-action: initial; + } + } + } + + .panel { + position: fixed; + left: 10px; + bottom: 10px; + z-index: 6; + color: white; + display: flex; + align-items: center; + transform: translateY(100px); + transition: transform 500ms; + + &.active { + transform: translateY(0); + } + + &.right { + left: auto; + right: 10px; + } + + &.center { + left: 50%; + right: auto; + transform: translateX(-50%); + } + + button { + border: none; + background: transparent; + padding: 8px; + outline: none; + cursor: pointer; + display: inline-flex; + color: white; + align-items: center; + transition: background-color 500ms; + height: 48px; + box-sizing: border-box; + user-select: none; + position: relative; + + &:hover { + background: rgba(100, 100, 100, 0.2); + } + + span { + margin-right: 8px; + font-size: 14px; + font-weight: 500; + margin-left: 8px; + text-transform: uppercase; + } + + &:first-child { + border-radius: @panel_radius 0 0 @panel_radius; + } + + &:last-child { + border-radius: 0 @panel_radius @panel_radius 0; + } + + &.active { + svg { + fill: url(#activeButtonGradient); + stroke: url(#activeButtonGradient); + } + } + + &.disabled, + &.inactive { + color: #999999; + + svg { + fill: #999999; + } + } + + &.disabled { + pointer-events: none; + } + + &.highlighted { + background: rgba(255, 255, 255, 0.1); + } + + &.cancel { + // background: linear-gradient(270deg, #0f5871, #444444 60%); + } + + &.primary { + background: linear-gradient(150deg, @blue_primary, @blue_secondary) 50% 50% no-repeat; + background-size: 100% 100%; + } + + &.success { + background: linear-gradient(150deg, @green_primary, @green_secondary) 50% 50% no-repeat; + background-size: 100% 100%; + } + + &.danger { + background: linear-gradient(150deg, @red_primary, @red_secondary) 50% 50% no-repeat; + background-size: 100% 100%; + } + + &.single { + border-radius: @panel_radius; + } + + svg { + fill: white; + stroke: white; + display: inline; + fill-rule: evenodd; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-width: 3; + } + } + } + + .panel-tooltip { + position: absolute; + bottom: 58px; + left: 50%; + background: @tooltip_background; + padding: 10px; + transform: translate(-50%, -10px); + border-radius: @panel_radius; + opacity: 0; + pointer-events: none; + transition: all 250ms; + font-size: 13px; + color: white; + + @media (max-width: @mobile_breakpoint) { + display: none; + } + + &::after { + content: ' '; + width: 10px; + height: 10px; + position: absolute; + background: @tooltip_background; + bottom: 0; + transform: translate(-50%, 5px) rotate(45deg); + left: 50%; + } + + &.top { + bottom: auto; + top: 43px; + transform: translate(-50%, 10px); + + &::after { + bottom: auto; + top: 0; + transform: translate(-50%, -5px) rotate(45deg); + } + } + } + + .panel button, + .tooltip-container { + position: relative; + + &:hover .panel-tooltip { + opacity: 1; + transform: translate(-50%, 0); + } + } + + .control-bar-counter { + color: white; + min-width: 12px; + height: 12px; + border-radius: 10px; + font-weight: 600; + font-size: 10px; + position: absolute; + bottom: 50%; + right: 50%; + box-sizing: border-box; + transform: translate(50%, 50%); + line-height: 12px; + } + + .panel-separator { + height: 48px; + width: 4px; + background: #222222; + } + + .panel-user { + @media (max-width: @mobile_breakpoint) { + z-index: 3; + flex-direction: column-reverse; + align-items: flex-start; + + .control-sep { + opacity: 0; + height: 10px; + } + } + + @media (max-width: @micro_breakpoint) { + bottom: 68px; + } + } + + .control-dialog { + position: absolute; + right: 10px; + bottom: 68px; + z-index: 3; + color: white; + box-sizing: border-box; + // padding-bottom: 48px; + box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px; + background: #222222; + border-radius: @panel_radius; + + &.bottom.right { + width: 100%; + max-width: 500px; + } + + &.top { + bottom: auto; + top: 52px; + } + + &.left, + &__left { + right: auto; + left: 10px; + + @media (max-width: @micro_breakpoint) { + left: 68px; + } + } + + .helper:first-child { + border-radius: @panel_radius @panel_radius 0 0; + } + + .helper:last-child { + border-radius: 0 0 @panel_radius @panel_radius; + } + + .helper:only-child { + border-radius: @panel_radius; + } + + &__big { + width: calc(100% - 20px); + max-width: 620px; + + @media (max-width: @micro_breakpoint) { + width: calc(100% - 78px); + } + } + + &__medium { + width: calc(100% - 20px); + max-width: 417px; + + @media (max-width: @micro_breakpoint) { + width: calc(100% - 78px); + } + } + + &__small { + width: calc(100% - 20px); + max-width: 324px; + + @media (max-width: @micro_breakpoint) { + width: calc(100% - 78px); + } + } + } + + .control-dialog-provider { + width: 500px; + + @media (max-width: @mobile_breakpoint) { + width: 100%; + left: 0; + padding: 0 10px; + } + } + + .helper { + // width: 500px; + padding: 12px; + font-weight: 200; + font-size: 1em; + display: flex; + + //background: #222222; + //border-radius: @panel_radius; + box-shadow: @bar_shadow; + + @media (max-width: @mobile_breakpoint) { + box-shadow: none; + } + } + + .helper-prefetch { + flex-direction: column; + } + + .helper__text { + width: 100%; + display: flex; + align-items: center; + + svg { + fill: white; + width: 24px; + height: 24px; + margin-right: 6px; + } + + &.success { + color: @color_success; + + svg { + fill: @color_success; + } + } + + &.primary { + color: @color_danger; + + svg { + fill: @color_danger; + } + } + + &.danger { + color: @color_danger; + + svg { + fill: @color_danger; + } + } + } + + .flex_1 { + flex: 1; + } + + .helper__icon_button { + width: 32px; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + background: none; + border: none; + outline: none; + cursor: pointer; + + svg { + margin-right: 0; + } + + &.inactive { + opacity: 0.5; } &.active { svg { fill: url(#activeButtonGradient); - stroke: url(#activeButtonGradient); } } + } - &.disabled, - &.inactive { - color: #999999; + .helper__buttons { + display: flex; + align-items: center; + user-select: none; - svg { - fill: #999999; - } - } - - &.disabled { - pointer-events: none; - } - - &.highlighted { - background: rgba(255, 255, 255, 0.1); - } - - &.cancel { - // background: linear-gradient(270deg, #0f5871, #444444 60%); - } - - &.primary { - background: linear-gradient(150deg, @blue_primary, @blue_secondary) 50% 50% no-repeat; - background-size: 100% 100%; - } - - &.success { - background: linear-gradient(150deg, @green_primary, @green_secondary) 50% 50% no-repeat; - background-size: 100% 100%; - } - - &.danger { - background: linear-gradient(150deg, @red_primary, @red_secondary) 50% 50% no-repeat; - background-size: 100% 100%; - } - - &.single { - border-radius: @panel_radius; + .button { + margin-left: 10px; } svg { fill: white; stroke: white; - display: inline; - fill-rule: evenodd; - stroke-linecap: butt; - stroke-linejoin: miter; - stroke-miterlimit: 4; - stroke-dasharray: none; - stroke-width: 3; + + cursor: pointer; + opacity: 0.5; + transition: opacity 250ms; } - } -} -.panel-tooltip { - position: absolute; - bottom: 58px; - left: 50%; - background: @tooltip_background; - padding: 10px; - transform: translate(-50%, -10px); - border-radius: @panel_radius; - opacity: 0; - pointer-events: none; - transition: all 250ms; - font-size: 13px; - color: white; - - @media (max-width: @mobile_breakpoint) { - display: none; - } - - &::after { - content: ' '; - width: 10px; - height: 10px; - position: absolute; - background: @tooltip_background; - bottom: 0; - transform: translate(-50%, 5px) rotate(45deg); - left: 50%; - } - - &.top { - bottom: auto; - top: 43px; - transform: translate(-50%, 10px); - - &::after { - bottom: auto; - top: 0; - transform: translate(-50%, -5px) rotate(45deg); - } - } -} - -.panel button, -.tooltip-container { - position: relative; - - &:hover .panel-tooltip { - opacity: 1; - transform: translate(-50%, 0); - } -} - -.control-bar-counter { - color: white; - min-width: 12px; - height: 12px; - border-radius: 10px; - font-weight: 600; - font-size: 10px; - position: absolute; - bottom: 50%; - right: 50%; - box-sizing: border-box; - transform: translate(50%, 50%); - line-height: 12px; -} - -.panel-separator { - height: 48px; - width: 4px; - background: #222222; -} - -.panel-user { - @media (max-width: @mobile_breakpoint) { - z-index: 3; - flex-direction: column-reverse; - align-items: flex-start; - - .control-sep { - opacity: 0; - height: 10px; - } - } - - @media (max-width: @micro_breakpoint) { - bottom: 68px; - } -} - -.control-dialog { - position: absolute; - right: 10px; - bottom: 68px; - z-index: 3; - color: white; - box-sizing: border-box; - // padding-bottom: 48px; - box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px; - background: #222222; - border-radius: @panel_radius; - - &.bottom.right { - width: 100%; - max-width: 500px; - } - - &.top { - bottom: auto; - top: 52px; - } - - &.left, - &__left { - right: auto; - left: 10px; - - @media (max-width: @micro_breakpoint) { - left: 68px; - } - } - - .helper:first-child { - border-radius: @panel_radius @panel_radius 0 0; - } - - .helper:last-child { - border-radius: 0 0 @panel_radius @panel_radius; - } - - .helper:only-child { - border-radius: @panel_radius; - } - - &__big { - width: calc(100% - 20px); - max-width: 620px; - - @media (max-width: @micro_breakpoint) { - width: calc(100% - 78px); - } - } - - &__medium { - width: calc(100% - 20px); - max-width: 417px; - - @media (max-width: @micro_breakpoint) { - width: calc(100% - 78px); - } - } - - &__small { - width: calc(100% - 20px); - max-width: 324px; - - @media (max-width: @micro_breakpoint) { - width: calc(100% - 78px); - } - } -} - -.control-dialog-provider { - width: 500px; - - @media (max-width: @mobile_breakpoint) { - width: 100%; - left: 0; - padding: 0 10px; - } -} - -.helper { - // width: 500px; - padding: 12px; - font-weight: 200; - font-size: 1em; - display: flex; - - //background: #222222; - //border-radius: @panel_radius; - box-shadow: @bar_shadow; - - @media (max-width: @mobile_breakpoint) { - box-shadow: none; - } -} - -.helper-prefetch { - flex-direction: column; -} - -.helper__text { - width: 100%; - display: flex; - align-items: center; - - svg { - fill: white; - width: 24px; - height: 24px; - margin-right: 6px; - } - - &.success { - color: @color_success; - - svg { - fill: @color_success; - } - } - - &.primary { - color: @color_danger; - - svg { - fill: @color_danger; - } - } - - &.danger { - color: @color_danger; - - svg { - fill: @color_danger; - } - } -} - -.flex_1 { - flex: 1; -} - -.helper__icon_button { - width: 32px; - display: flex; - align-items: center; - justify-content: center; - padding: 0; - background: none; - border: none; - outline: none; - cursor: pointer; - - svg { - margin-right: 0; - } - - &.inactive { - opacity: 0.5; - } - - &.active { - svg { - fill: url(#activeButtonGradient); - } - } -} - -.helper__buttons { - display: flex; - align-items: center; - user-select: none; - - .button { - margin-left: 10px; - } - - svg { - fill: white; - stroke: white; - - cursor: pointer; - opacity: 0.5; - transition: opacity 250ms; - } - - &:hover svg { - opacity: 1; - } -} - -.trash-buttons { - @media (max-width: @mobile_breakpoint) { - flex-direction: column; - - .button-group { - margin-bottom: 10px; - } - } -} - -.logo-helper { - width: 200px; - flex-direction: column; - padding: 16px 0 16px 0; - position: relative; - overflow: hidden; -} - -.helper-back { - width: 200px; - height: 200px; - z-index: -1; - position: absolute; - bottom: 0; - right: 0; - - svg { - fill: @bar_background; - } -} - -.helper-menu-item { - padding: 8px 20px; - user-select: none; - cursor: pointer; - position: relative; - - &:hover { - background: rgba(255, 255, 255, 0.1); - } - - &.active { - &::after { - content: ' '; - width: 16px; - height: 4px; - left: 0; - top: 14px; - position: absolute; - background: white; - } - } -} - -.provider-helper { - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - grid-column-gap: 10px; - grid-row-gap: 10px; - - .provider-helper-thumb { - height: 100px; - background: #333333; - display: flex; - align-items: flex-end; - justify-content: center; - background: 50% 50% no-repeat; - border-radius: @panel_radius; - cursor: pointer; - position: relative; - } - - .provider-helper-check { - width: 40px; - height: 40px; - position: absolute; - bottom: 50%; - right: 50%; - background: rgba(0, 0, 0, 0.7); - border-radius: 20px; - transform: translate(50%, 50%); - - svg { - fill: white; - padding: 4px; - } - } -} - -.status-panel { - position: fixed; - top: 10px; - left: 10px; - height: 32px; - z-index: 5; - display: flex; - - &.bottom { - top: auto; - bottom: 68px; - } - - &.right { - left: auto; - right: 10px; - - .status-bar { - margin-right: 0; - margin-left: 10px; - } - } -} - -.status-bar { - background: #222222; - display: flex; - font-weight: 200; - color: #cccccc; - user-select: none; - border-radius: @panel_radius; - margin-right: 10px; - align-items: center; - justify-content: center; - box-shadow: @bar_shadow; - outline: none; - position: relative; - - @media (max-width: @mobile_breakpoint) { - box-shadow: none; - } - - span { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - flex: 1; - text-transform: uppercase; - font-size: 0.9em; - } - - &.square { - width: 32px; - } - - &.padded { - padding: 0 10px; - } - - &.warning { - background-color: shade(@red_secondary, 10%); - - svg { - //fill: @red_secondary; - fill: black; - } - } - - &.icon-only { - padding: 0 10px 0 15px; - } - - &.top-control { - justify-content: flex-start; - } - - svg { - fill: #cccccc; - margin-left: -5px; - } - - &:hover { - .status-bar-tip { + &:hover svg { opacity: 1; } } -} -.status-bar-tip { - position: absolute; - background: @bar_background; - top: 100%; - padding: 10px; - margin-top: 10px; - right: 0; - border-radius: @panel_radius; - touch-action: none; - pointer-events: none; - opacity: 0; - transition: opacity 250ms; -} + .trash-buttons { + @media (max-width: @mobile_breakpoint) { + flex-direction: column; -.status-bar-sep { - height: 24px; - width: 1px; - background: rgba(255, 255, 255, 0.2); - margin: 0 8px 0 5px; -} - -.dialog-prefetch-stage { - font-size: 1em; - text-transform: uppercase; - opacity: 0.7; -} - -.dialog-prefetch-progress { - padding: 10px 0 5px; -} - -.speed-helper { - width: 300px; - padding: 0 20px; - - .rc-slider { - width: 100%; - } -} - -.title-dialog-wrapper { - position: fixed; - bottom: 0; - left: 0; - width: 360px; - height: 100%; - background: transparent; - z-index: 2; - padding: 10px 10px 58px 10px; - box-sizing: border-box; - display: flex; - align-items: flex-end; - pointer-events: none; - touch-action: none; -} - -.title-dialog-sizer { - height: 100%; - width: 100%; - display: flex; - align-items: flex-end; -} - -.title-dialog { - z-index: 2; - transition: opacity 500ms, transform 1s; - transform: translate(0, 68px); - user-select: none; - pointer-events: all; - touch-action: auto; - display: flex; - flex-direction: column; - opacity: 0; - align-items: flex-start; - - @media (max-width: @mobile_breakpoint) { - display: none; - } - - &.active { - opacity: 1; - transform: translate(0, 0); - } - - .title-dialog-pane { - margin-bottom: 10px; - padding: 10px; - background: @title_dialog_color; - color: fade(white, 50%); - font-size: 13px; - box-sizing: border-box; - border-radius: @panel_radius; - - h2 { - margin: 0; - padding: 0 5px 0 0; - font-weight: 400; - font-size: 1.6em; - color: white; + .button-group { + margin-bottom: 10px; + } } } - .title-dialog-text { - overflow: hidden; - transition: height 500ms; - line-height: 14px; - padding: 0; + .logo-helper { + width: 200px; + flex-direction: column; + padding: 16px 0 16px 0; position: relative; - color: white; + overflow: hidden; + } - > div { - margin: 10px; - white-space: pre-line; + .helper-back { + width: 200px; + height: 200px; + z-index: -1; + position: absolute; + bottom: 0; + right: 0; + + svg { + fill: @bar_background; + } + } + + .helper-menu-item { + padding: 8px 20px; + user-select: none; + cursor: pointer; + position: relative; + + &:hover { + background: rgba(255, 255, 255, 0.1); } - &.has_shade { - ::after { + &.active { + &::after { content: ' '; - width: 100%; - height: 40px; - background: linear-gradient(fade(@title_dialog_color, 0), @title_dialog_color); - position: absolute; - bottom: 0; + width: 16px; + height: 4px; left: 0; - transition: opacity 250ms; - pointer-events: none; - touch-action: none; + top: 14px; + position: absolute; + background: white; + } + } + } + + .provider-helper { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-column-gap: 10px; + grid-row-gap: 10px; + + .provider-helper-thumb { + height: 100px; + background: #333333; + display: flex; + align-items: flex-end; + justify-content: center; + background: 50% 50% no-repeat; + border-radius: @panel_radius; + cursor: pointer; + position: relative; + } + + .provider-helper-check { + width: 40px; + height: 40px; + position: absolute; + bottom: 50%; + right: 50%; + background: rgba(0, 0, 0, 0.7); + border-radius: 20px; + transform: translate(50%, 50%); + + svg { + fill: white; + padding: 4px; + } + } + } + + .status-panel { + position: fixed; + top: 10px; + left: 10px; + height: 32px; + z-index: 5; + display: flex; + + &.bottom { + top: auto; + bottom: 68px; + } + + &.right { + left: auto; + right: 10px; + + .status-bar { + margin-right: 0; + margin-left: 10px; + } + } + } + + .status-bar { + background: #222222; + display: flex; + font-weight: 200; + color: #cccccc; + user-select: none; + border-radius: @panel_radius; + margin-right: 10px; + align-items: center; + justify-content: center; + box-shadow: @bar_shadow; + outline: none; + position: relative; + + @media (max-width: @mobile_breakpoint) { + box-shadow: none; + } + + span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; + text-transform: uppercase; + font-size: 0.9em; + } + + &.square { + width: 32px; + } + + &.padded { + padding: 0 10px; + } + + &.warning { + background-color: shade(@red_secondary, 10%); + + svg { + //fill: @red_secondary; + fill: black; + } + } + + &.icon-only { + padding: 0 10px 0 15px; + } + + &.top-control { + justify-content: flex-start; + } + + svg { + fill: #cccccc; + margin-left: -5px; + } + + &:hover { + .status-bar-tip { + opacity: 1; + } + } + } + + .status-bar-tip { + position: absolute; + background: @bar_background; + top: 100%; + padding: 10px; + margin-top: 10px; + right: 0; + border-radius: @panel_radius; + touch-action: none; + pointer-events: none; + opacity: 0; + transition: opacity 250ms; + } + + .status-bar-sep { + height: 24px; + width: 1px; + background: rgba(255, 255, 255, 0.2); + margin: 0 8px 0 5px; + } + + .dialog-prefetch-stage { + font-size: 1em; + text-transform: uppercase; + opacity: 0.7; + } + + .dialog-prefetch-progress { + padding: 10px 0 5px; + } + + .speed-helper { + width: 300px; + padding: 0 20px; + + .rc-slider { + width: 100%; + } + } + + .title-dialog-wrapper { + position: fixed; + bottom: 0; + left: 0; + width: 360px; + height: 100%; + background: transparent; + z-index: 2; + padding: 10px 10px 58px 10px; + box-sizing: border-box; + display: flex; + align-items: flex-end; + pointer-events: none; + touch-action: none; + } + + .title-dialog-sizer { + height: 100%; + width: 100%; + display: flex; + align-items: flex-end; + } + + .title-dialog { + z-index: 2; + transition: opacity 500ms, transform 1s; + transform: translate(0, 68px); + user-select: none; + pointer-events: all; + touch-action: auto; + display: flex; + flex-direction: column; + opacity: 0; + align-items: flex-start; + + @media (max-width: @mobile_breakpoint) { + display: none; + } + + &.active { + opacity: 1; + transform: translate(0, 0); + } + + .title-dialog-pane { + margin-bottom: 10px; + padding: 10px; + background: @title_dialog_color; + color: fade(white, 50%); + font-size: 13px; + box-sizing: border-box; + border-radius: @panel_radius; + + h2 { + margin: 0; + padding: 0 5px 0 0; + font-weight: 400; + font-size: 1.6em; + color: white; + } + } + + .title-dialog-text { + overflow: hidden; + transition: height 500ms; + line-height: 14px; + padding: 0; + position: relative; + color: white; + + > div { + margin: 10px; + white-space: pre-line; } - &:hover { + &.has_shade { ::after { - opacity: 0; + content: ' '; + width: 100%; + height: 40px; + background: linear-gradient(fade(@title_dialog_color, 0), @title_dialog_color); + position: absolute; + bottom: 0; + left: 0; + transition: opacity 250ms; + pointer-events: none; + touch-action: none; + } + + &:hover { + ::after { + opacity: 0; + } } } } } -} -.location-bar { - width: 32px; -} + .location-bar { + width: 32px; + } -.nominatim-panel { - position: fixed; - bottom: 53px; - left: 10px; - width: 272px; -} + .nominatim-panel { + position: fixed; + bottom: 53px; + left: 10px; + width: 272px; + } -.nominatim-search-input { - padding-left: 10px; - flex: 1; + .nominatim-search-input { + padding-left: 10px; + flex: 1; + } } diff --git a/src/styles/progress.less b/src/styles/progress.less index 9e0314d..a9506a5 100644 --- a/src/styles/progress.less +++ b/src/styles/progress.less @@ -1,16 +1,18 @@ -.progress { - width: 100%; - position: relative; - height: 5px; - background: #111111; - border-radius: @panel_radius; - box-sizing: border-box; - - .bar { - width: 30%; - background: linear-gradient(270deg, @blue_primary, @blue_secondary); - height: 100%; +:global { + .progress { + width: 100%; + position: relative; + height: 5px; + background: #111111; border-radius: @panel_radius; - transition: width 500ms; + box-sizing: border-box; + + .bar { + width: 30%; + background: linear-gradient(270deg, @blue_primary, @blue_secondary); + height: 100%; + border-radius: @panel_radius; + transition: width 500ms; + } } } diff --git a/src/styles/renderer.less b/src/styles/renderer.less index bbe84d5..eeb1cba 100644 --- a/src/styles/renderer.less +++ b/src/styles/renderer.less @@ -1,53 +1,55 @@ -.renderer-shade { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1000; - background: rgba(0, 0, 0, 0.9); - display: flex; - align-items: center; - justify-content: center; - padding-bottom: 80px; - box-sizing: border-box; - - > div { +:global { + .renderer-shade { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; + background: rgba(0, 0, 0, 0.9); display: flex; align-items: center; justify-content: center; - position: relative; - transition: opacity 250ms; + padding-bottom: 80px; + box-sizing: border-box; + + > div { + display: flex; + align-items: center; + justify-content: center; + position: relative; + transition: opacity 250ms; + } + + img#rendererOutput { + width: 300px; + height: 300px; + } + + .croppr-region { + box-shadow: rgba(255, 255, 255, 0.2) 0 0 0 6px, rgba(0, 0, 0, 0.3) 0 0 0 1px; + border: none; + position: absolute; + top: 0; + left: 0; + overflow: hidden; + } + + .croppr-handle { + width: 12px; + height: 12px; + border-radius: 8px; + border: none; + box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px; + } } - img#rendererOutput { - width: 300px; - height: 300px; - } - - .croppr-region { - box-shadow: rgba(255, 255, 255, 0.2) 0 0 0 6px, rgba(0, 0, 0, 0.3) 0 0 0 1px; - border: none; + .renderer-logo { position: absolute; - top: 0; - left: 0; - overflow: hidden; - } + bottom: 0; + right: 0; + pointer-events: none; - .croppr-handle { - width: 12px; - height: 12px; - border-radius: 8px; - border: none; - box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px; + transform-origin: 100% 100%; } } - -.renderer-logo { - position: absolute; - bottom: 0; - right: 0; - pointer-events: none; - - transform-origin: 100% 100%; -} diff --git a/src/styles/router.less b/src/styles/router.less index 1f16eee..e9bd686 100644 --- a/src/styles/router.less +++ b/src/styles/router.less @@ -1,41 +1,43 @@ -.router-waypoint { - width: 40px; - height: 40px; - margin-left: -20px; - margin-top: -20px; - outline: none; - z-index: 10001; +:global { + .router-waypoint { + width: 40px; + height: 40px; + margin-left: -20px; + margin-top: -20px; + outline: none; + z-index: 10001; + + &:after { + content: ' '; + display: block; + width: 20px; + height: 20px; + border-radius: 10px; + box-shadow: 0 0 0 2px @router_line; + position: absolute; + left: 10px; + top: 10px; + } + + &:before { + content: ' '; + display: block; + width: 5px; + height: 5px; + border-radius: 10px; + box-shadow: 0 0 0 2px @router_line; + background: @router_line; + position: absolute; + left: 18px; + top: 18px; + } - &:after { - content: ' '; - display: block; - width: 20px; - height: 20px; - border-radius: 10px; - box-shadow: 0 0 0 2px @router_line; - position: absolute; - left: 10px; - top: 10px; } - &:before { - content: ' '; - display: block; - width: 5px; - height: 5px; - border-radius: 10px; - box-shadow: 0 0 0 2px @router_line; - background: @router_line; - position: absolute; - left: 18px; - top: 18px; + .router-helper { } -} - -.router-helper { -} - -.router-helper__button { - white-space: nowrap; + .router-helper__button { + white-space: nowrap; + } } diff --git a/src/styles/save.less b/src/styles/save.less index 33179cd..226c7cd 100644 --- a/src/styles/save.less +++ b/src/styles/save.less @@ -1,173 +1,185 @@ -.save-helper { - padding: 0; - flex-direction: column; -} - -.save-title { - padding: 10px; - width: 100%; - background: linear-gradient(175deg, #abc837 -50%, #009c80 150%); - flex-direction: column; - border-radius: @panel_radius @panel_radius 0 0; - font-weight: 200; - box-sizing: border-box; -} - -@keyframes jump { - 0% { transform: translate3d(0, 0, 0) scale(0.5); } - 100% { transform: translate3d(0, -20px, 0) scale(1); } -} - -.save-loader { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: @loading_shade; - z-index: 2; - display: flex; - align-items: center; - justify-content: center; - transition: opacity 250ms; - opacity: 0; - touch-action: none; - pointer-events: none; - text-transform: uppercase; - font-size: 1.2em; - color: fade(white, 70%); - - svg { - fill: white; - - &:nth-child(2) { animation-delay: 200ms; } - &:nth-child(3) { animation-delay: 400ms; } +:global { + .save-helper { + padding: 0; + flex-direction: column; } - &.active { - opacity: 1; - touch-action: auto; - pointer-events: all; + .save-title { + padding: 10px; + width: 100%; + background: linear-gradient(175deg, #abc837 -50%, #009c80 150%); + flex-direction: column; + border-radius: @panel_radius @panel_radius 0 0; + font-weight: 200; + box-sizing: border-box; + } - svg { - animation: jump infinite alternate 600ms; + @keyframes jump { + 0% { + transform: translate3d(0, 0, 0) scale(0.5); + } + 100% { + transform: translate3d(0, -20px, 0) scale(1); } } -} -.save-description { - padding: 5px 10px; -} - -.save-title-input { - background: rgba(0, 0, 0, 0.3); - border-radius: @panel_radius; - display: flex; - - input { + .save-loader { + position: absolute; + top: 0; + left: 0; width: 100%; - padding: 5px; - background: transparent; - border: none; - outline: none; - color: white; + height: 100%; + background: @loading_shade; + z-index: 2; + display: flex; + align-items: center; + justify-content: center; + transition: opacity 250ms; + opacity: 0; + touch-action: none; + pointer-events: none; + text-transform: uppercase; + font-size: 1.2em; + color: fade(white, 70%); - font-family: inherit; - font-size: 14px; - font-weight: 200; - } -} + svg { + fill: white; -.save-title-label { - display: flex; - padding: 5px 10px; - background: rgba(0,0,0,0.1); - height: 100%; -} + &:nth-child(2) { + animation-delay: 200ms; + } -.save-address-input { - background: rgba(0, 0, 0, 0.2); - border-radius: 2px; - display: flex; - margin-bottom: 5px; + &:nth-child(3) { + animation-delay: 400ms; + } + } - input { - padding: 5px 5px 5px 2px; - background: transparent; - } -} + &.active { + opacity: 1; + touch-action: auto; + pointer-events: all; -.save-address-label { - display: flex; - padding: 5px 0 5px 10px; - height: 100%; - opacity: 0.5; - white-space: nowrap; -} - -.save-address-copy { - background: rgba(255, 255, 255, 0.1); - padding: 0 5px; - border-radius: 0 @panel_radius @panel_radius 0; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: background-color 250ms; - - &:hover { - background: rgba(255, 255, 255, 0.2); + svg { + animation: jump infinite alternate 600ms; + } + } } - svg { - fill: white; - } -} -.save-text { - padding: 10px; - line-height: 1.1em; - min-height: 2.2em; - font-size: 0.9em; -} - -.save-buttons { - display: flex; - padding: 0px; - margin-top: 20px; - margin-bottom: 5px; - - .button { - margin-left: 10px; - } -} - -.save-buttons-text { - flex: 1; - padding: 0 10px 2px 10px; - align-items: center; - display: flex; - - .switch { - margin-right: 0.5em; - } -} - -.save-description { - textarea { - background: rgba(0,0,0,0.3); - outline: none; - border: none; - border-radius: 3px; - width: 100%; - resize: none; - color: inherit; - font: inherit; + .save-description { padding: 5px 10px; - font-size: 14px; + } + + .save-title-input { + background: rgba(0, 0, 0, 0.3); + border-radius: @panel_radius; + display: flex; + + input { + width: 100%; + padding: 5px; + background: transparent; + border: none; + outline: none; + color: white; + + font-family: inherit; + font-size: 14px; + font-weight: 200; + } + } + + .save-title-label { + display: flex; + padding: 5px 10px; + background: rgba(0, 0, 0, 0.1); + height: 100%; + } + + .save-address-input { + background: rgba(0, 0, 0, 0.2); + border-radius: 2px; + display: flex; + margin-bottom: 5px; + + input { + padding: 5px 5px 5px 2px; + background: transparent; + } + } + + .save-address-label { + display: flex; + padding: 5px 0 5px 10px; + height: 100%; + opacity: 0.5; + white-space: nowrap; + } + + .save-address-copy { + background: rgba(255, 255, 255, 0.1); + padding: 0 5px; + border-radius: 0 @panel_radius @panel_radius 0; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 250ms; + + &:hover { + background: rgba(255, 255, 255, 0.2); + } + + svg { + fill: white; + } + } + + .save-text { + padding: 10px; + line-height: 1.1em; + min-height: 2.2em; + font-size: 0.9em; + } + + .save-buttons { + display: flex; + padding: 0px; + margin-top: 20px; + margin-bottom: 5px; + + .button { + margin-left: 10px; + } + } + + .save-buttons-text { + flex: 1; + padding: 0 10px 2px 10px; + align-items: center; + display: flex; + + .switch { + margin-right: 0.5em; + } + } + + .save-description { + textarea { + background: rgba(0, 0, 0, 0.3); + outline: none; + border: none; + border-radius: 3px; + width: 100%; + resize: none; + color: inherit; + font: inherit; + padding: 5px 10px; + font-size: 14px; + } + } + + .save-controls { + padding: 5px 10px; + user-select: none; } } - -.save-controls { - padding: 5px 10px; - user-select: none; -} diff --git a/src/styles/slider.less b/src/styles/slider.less index 243e8be..7241e58 100644 --- a/src/styles/slider.less +++ b/src/styles/slider.less @@ -11,329 +11,334 @@ @ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1); @ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); -.borderBox() { - box-sizing: border-box; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari - - * { +:global { + .borderBox() { box-sizing: border-box; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari - } -} -.@{prefixClass} { - position: relative; - height: 40px; - padding: 15px 0; - // width: 100%; - margin: 8px; - border-radius: @border-radius-base; - touch-action: none; - - .borderBox(); - - &-rail { - position: absolute; - width: 100%; - background-color: rgba(0, 0, 0, 0.3); - height: 4px; - border-radius: @border-radius-base; - pointer-events: none; - } - - &-track { - position: absolute; - left: 0; - height: 4px; - border-radius: @border-radius-base; - background: linear-gradient(270deg, @red_secondary, @blue_secondary); - // background-size: 320px 100px; - } - - &-handle { - position: absolute; - margin-left: -7px; - margin-top: -5px; - width: 14px; - height: 14px; - cursor: pointer; - cursor: -webkit-grab; - cursor: grab; - border-radius: 50%; - border: solid 2px tint(@primary-color, 50%); - background-color: #fff; - touch-action: pan-x; - - &::after { - content: ''; - display: block; - width: 40px; - height: 50px; - position: absolute; - left: -15px; - top: -16px; - border-radius: 4px; - background: black; - opacity: 0.2; - } - - &:focus { - // border-color: tint(@primary-color, 20%); - box-shadow: 0 0 0 4px tint(@primary-color, 50%); - outline: none; - } - - &-click-focused:focus { - // border-color: tint(@primary-color, 50%); - box-shadow: unset; - } - - &:hover { - border-color: tint(@primary-color, 20%); - } - - &:active { - border-color: tint(@primary-color, 20%); - box-shadow: 0 0 5px tint(@primary-color, 20%); - cursor: -webkit-grabbing; - cursor: grabbing; + * { + box-sizing: border-box; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari } } - &-mark { - position: absolute; - top: 18px; - left: 0; - width: 100%; - font-size: 12px; - pointer-events: none; - } - - &-mark-text { - position: absolute; - display: inline-block; - vertical-align: middle; - text-align: center; - cursor: pointer; - color: rgba(255, 255, 255, 0.3); - padding-top: 10px; - } - - &-step { - position: absolute; - width: 100%; - height: 4px; - background: transparent; - } - - &-dot { - position: absolute; - bottom: -2; - margin-left: -0.5px; - width: 1px; - height: 12px; - // border: 2px solid #e9e9e9; - background-color: black; - opacity: 0.2; - cursor: pointer; - border-radius: 50%; - vertical-align: middle; - &-active { - // border-color: tint(@primary-color, 50%); - background-color: white; - opacity: 0.2; - } - } - - &-disabled { - .@{prefixClass}-track { - background-color: @disabledColor; - } - - .@{prefixClass}-handle, .@{prefixClass}-dot { - border-color: @disabledColor; - box-shadow: none; - background-color: #fff; - cursor: not-allowed; - opacity: 0; - } - - .@{prefixClass}-mark-text, .@{prefixClass}-dot, .@{prefixClass}-track { - cursor: not-allowed!important; - opacity: 0; - } - } -} - -.@{prefixClass}-vertical { - width: 14px; - height: 100%; - padding: 0 5px; - .@{prefixClass} { + position: relative; + height: 40px; + padding: 15px 0; + // width: 100%; + margin: 8px; + border-radius: @border-radius-base; + touch-action: none; + + .borderBox(); + &-rail { - height: 100%; - width: 4px; + position: absolute; + width: 100%; + background-color: rgba(0, 0, 0, 0.3); + height: 4px; + border-radius: @border-radius-base; + pointer-events: none; } &-track { - left: 5px; - bottom: 0; - width: 4px; + position: absolute; + left: 0; + height: 4px; + border-radius: @border-radius-base; + background: linear-gradient(270deg, @red_secondary, @blue_secondary); + // background-size: 320px 100px; } &-handle { - margin-left: -5px; - margin-bottom: -7px; - touch-action: pan-y; + position: absolute; + margin-left: -7px; + margin-top: -5px; + width: 14px; + height: 14px; + cursor: pointer; + cursor: -webkit-grab; + cursor: grab; + border-radius: 50%; + border: solid 2px tint(@primary-color, 50%); + background-color: #fff; + touch-action: pan-x; - position: relative; + &::after { + content: ''; + display: block; + width: 40px; + height: 50px; + position: absolute; + left: -15px; + top: -16px; + border-radius: 4px; + background: black; + opacity: 0.2; + } + + &:focus { + // border-color: tint(@primary-color, 20%); + box-shadow: 0 0 0 4px tint(@primary-color, 50%); + outline: none; + } + + &-click-focused:focus { + // border-color: tint(@primary-color, 50%); + box-shadow: unset; + } + + &:hover { + border-color: tint(@primary-color, 20%); + } + + &:active { + border-color: tint(@primary-color, 20%); + box-shadow: 0 0 5px tint(@primary-color, 20%); + cursor: -webkit-grabbing; + cursor: grabbing; + } } &-mark { - top: 0; - left: 18px; - height: 100%; + position: absolute; + top: 18px; + left: 0; + width: 100%; + font-size: 12px; + pointer-events: none; + } + + &-mark-text { + position: absolute; + display: inline-block; + vertical-align: middle; + text-align: center; + cursor: pointer; + color: rgba(255, 255, 255, 0.3); + padding-top: 10px; } &-step { - height: 100%; - width: 4px; + position: absolute; + width: 100%; + height: 4px; + background: transparent; } &-dot { - left: 2px; - margin-bottom: -4px; - &:first-child { - margin-bottom: -4px; + position: absolute; + bottom: -2; + margin-left: -0.5px; + width: 1px; + height: 12px; + // border: 2px solid #e9e9e9; + background-color: black; + opacity: 0.2; + cursor: pointer; + border-radius: 50%; + vertical-align: middle; + + &-active { + // border-color: tint(@primary-color, 50%); + background-color: white; + opacity: 0.2; } - &:last-child { - margin-bottom: -4px; + } + + &-disabled { + .@{prefixClass}-track { + background-color: @disabledColor; + } + + .@{prefixClass}-handle, .@{prefixClass}-dot { + border-color: @disabledColor; + box-shadow: none; + background-color: #fff; + cursor: not-allowed; + opacity: 0; + } + + .@{prefixClass}-mark-text, .@{prefixClass}-dot, .@{prefixClass}-track { + cursor: not-allowed !important; + opacity: 0; } } } -} -.motion-common() { - animation-duration: .3s; - animation-fill-mode: both; - display: block !important; -} + .@{prefixClass}-vertical { + width: 14px; + height: 100%; + padding: 0 5px; -.make-motion(@className, @keyframeName) { - .@{className}-enter, .@{className}-appear { - .motion-common(); - animation-play-state: paused; - } - .@{className}-leave { - .motion-common(); - animation-play-state: paused; - } - .@{className}-enter.@{className}-enter-active, .@{className}-appear.@{className}-appear-active { - animation-name: ~"@{keyframeName}In"; - animation-play-state: running; - } - .@{className}-leave.@{className}-leave-active { - animation-name: ~"@{keyframeName}Out"; - animation-play-state: running; - } -} -.zoom-motion(@className, @keyframeName) { - .make-motion(@className, @keyframeName); - .@{className}-enter, .@{className}-appear { - transform: scale(0, 0); // need this by yiminghe - animation-timing-function: @ease-out-quint; - } - .@{className}-leave { - animation-timing-function: @ease-in-quint; - } -} -.zoom-motion(rc-slider-tooltip-zoom-down, rcSliderTooltipZoomDown); + .@{prefixClass} { + &-rail { + height: 100%; + width: 4px; + } -@keyframes rcSliderTooltipZoomDownIn { - 0% { - opacity: 0; - transform-origin: 50% 100%; - transform: scale(0, 0); - } - 100% { - transform-origin: 50% 100%; - transform: scale(1, 1); - } -} + &-track { + left: 5px; + bottom: 0; + width: 4px; + } -@keyframes rcSliderTooltipZoomDownOut { - 0% { - transform-origin: 50% 100%; - transform: scale(1, 1); - } - 100% { - opacity: 0; - transform-origin: 50% 100%; - transform: scale(0, 0); - } -} + &-handle { + margin-left: -5px; + margin-bottom: -7px; + touch-action: pan-y; -.@{prefixClass}-tooltip { - position: absolute; - left: -9999px; - top: -9999px; - visibility: visible; + position: relative; + } - .borderBox(); + &-mark { + top: 0; + left: 18px; + height: 100%; + } - &-hidden { - display: none; + &-step { + height: 100%; + width: 4px; + } + + &-dot { + left: 2px; + margin-bottom: -4px; + + &:first-child { + margin-bottom: -4px; + } + + &:last-child { + margin-bottom: -4px; + } + } + } } - &-placement-top { - padding: @tooltip-arrow-width 0 @tooltip-distance 0; + .motion-common() { + animation-duration: .3s; + animation-fill-mode: both; + display: block !important; } - &-inner { - padding: 6px 2px; - min-width: 24px; - height: 24px; - font-size: 12px; - line-height: 1; - color: @tooltip-color; - text-align: center; - text-decoration: none; - background-color: @tooltip-bg; - border-radius: @border-radius-base; - box-shadow: 0 0 4px #d9d9d9; + .make-motion(@className, @keyframeName) { + .@{className}-enter, .@{className}-appear { + .motion-common(); + animation-play-state: paused; + } + .@{className}-leave { + .motion-common(); + animation-play-state: paused; + } + .@{className}-enter.@{className}-enter-active, .@{className}-appear.@{className}-appear-active { + animation-name: ~"@{keyframeName}In"; + animation-play-state: running; + } + .@{className}-leave.@{className}-leave-active { + animation-name: ~"@{keyframeName}Out"; + animation-play-state: running; + } + } + .zoom-motion(@className, @keyframeName) { + .make-motion(@className, @keyframeName); + .@{className}-enter, .@{className}-appear { + transform: scale(0, 0); // need this by yiminghe + animation-timing-function: @ease-out-quint; + } + .@{className}-leave { + animation-timing-function: @ease-in-quint; + } + } + .zoom-motion(rc-slider-tooltip-zoom-down, rcSliderTooltipZoomDown); + + @keyframes rcSliderTooltipZoomDownIn { + 0% { + opacity: 0; + transform-origin: 50% 100%; + transform: scale(0, 0); + } + 100% { + transform-origin: 50% 100%; + transform: scale(1, 1); + } } - &-arrow { + @keyframes rcSliderTooltipZoomDownOut { + 0% { + transform-origin: 50% 100%; + transform: scale(1, 1); + } + 100% { + opacity: 0; + transform-origin: 50% 100%; + transform: scale(0, 0); + } + } + + .@{prefixClass}-tooltip { position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; + left: -9999px; + top: -9999px; + visibility: visible; + + .borderBox(); + + &-hidden { + display: none; + } + + &-placement-top { + padding: @tooltip-arrow-width 0 @tooltip-distance 0; + } + + &-inner { + padding: 6px 2px; + min-width: 24px; + height: 24px; + font-size: 12px; + line-height: 1; + color: @tooltip-color; + text-align: center; + text-decoration: none; + background-color: @tooltip-bg; + border-radius: @border-radius-base; + box-shadow: 0 0 4px #d9d9d9; + } + + &-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + } + + &-placement-top &-arrow { + bottom: @tooltip-distance - @tooltip-arrow-width; + left: 50%; + margin-left: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; + } } - &-placement-top &-arrow { - bottom: @tooltip-distance - @tooltip-arrow-width; - left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; - } -} - -.range-placeholder { - height: 40px; - padding: 15px 0; - box-sizing: border-box; - margin: 8px; - - &::after { - content: ' '; - display: block; - width: 100%; - background-color: rgba(0, 0, 0, 0.3); - height: 4px; - border-radius: 6px; - pointer-events: none; + .range-placeholder { + height: 40px; + padding: 15px 0; + box-sizing: border-box; + margin: 8px; + + &::after { + content: ' '; + display: block; + width: 100%; + background-color: rgba(0, 0, 0, 0.3); + height: 4px; + border-radius: 6px; + pointer-events: none; + } } } diff --git a/src/styles/stickers.less b/src/styles/stickers.less index b676bd3..29efd5a 100644 --- a/src/styles/stickers.less +++ b/src/styles/stickers.less @@ -1,263 +1,265 @@ -.leaflet-dragging .sticker-container { - transition: none !important; -} - -.sticker-container { - outline: none; - position: relative; - transition: transform 250ms; - cursor: pointer; - z-index: 10; - - &.leaflet-drag-target { +:global { + .leaflet-dragging .sticker-container { transition: none !important; } - &:before { - content: ' '; - background: @red_secondary; + .sticker-container { + outline: none; + position: relative; + transition: transform 250ms; + cursor: pointer; + z-index: 10; + + &.leaflet-drag-target { + transition: none !important; + } + + &:before { + content: ' '; + background: @red_secondary; + width: 48px; + height: 48px; + left: -24px; + top: -24px; + position: absolute; + border-radius: 40px; + opacity: 0.25; + transform: scale(0.5); + transition: opacity 250ms, transform 500ms; + } + + &:active { + transition: transform 250ms; + + .sticker-delete { + pointer-events: none; + } + } + + &:hover, &:active { + &:before { + opacity: 0.3; + transform: scale(1); + } + } + + &.inactive { + pointer-events: none; + transition: transform 250ms; + + .sticker-delete { + display: none; + } + + .sticker-desc.is_empty { + display: none; + } + } + + @media (hover: hover) { + transition: none; + } + } + + .sticker-label { width: 48px; height: 48px; - left: -24px; - top: -24px; position: absolute; - border-radius: 40px; - opacity: 0.25; - transform: scale(0.5); - transition: opacity 250ms, transform 500ms; + //background: white; + //border-radius: 32px; + left: 0; + top: 0; + outline: none; + + //&:after { + // content: ' '; + // box-shadow: 0 0 0 1px #ff3344; + // width: 80px; + // height: 80px; + // left: -16px; + // top: -16px; + // position: absolute; + // border-radius: 40px; + // pointer-events: none; + // opacity: 0; + //} + + svg { + left: -8px; + top: -8px; + position: relative; + z-index: 0; + } + + .sticker-image { + width: 72px; + height: 72px; + left: -12px; + top: -12px; + position: relative; + z-index: 0; + background-size: cover; + } + + &.left { + .sticker-desc { + padding: 10px 36px 10px 10px; + left: auto; + right: 24px; + } + } } - &:active { + .sticker-wrapper { + will-change: transform; transition: transform 250ms; - .sticker-delete { - pointer-events: none; + @media (hover: hover) { + transition: transform 0ms; } } - &:hover, &:active { - &:before { - opacity: 0.3; - transform: scale(1); - } - } - - &.inactive { - pointer-events: none; - transition: transform 250ms; - - .sticker-delete { - display: none; - } - - .sticker-desc.is_empty { - display: none; - } - } - - @media(hover: hover) { - transition: none; - } -} - -.sticker-label { - width: 48px; - height: 48px; - position: absolute; - //background: white; - //border-radius: 32px; - left: 0; - top: 0; - outline: none; - - //&:after { - // content: ' '; - // box-shadow: 0 0 0 1px #ff3344; - // width: 80px; - // height: 80px; - // left: -16px; - // top: -16px; - // position: absolute; - // border-radius: 40px; - // pointer-events: none; - // opacity: 0; - //} - - svg { - left: -8px; - top: -8px; - position: relative; - z-index: 0; - } - - .sticker-image { - width: 72px; - height: 72px; - left: -12px; - top: -12px; - position: relative; - z-index: 0; - background-size: cover; - } - - &.left { - .sticker-desc { - padding: 10px 36px 10px 10px; - left: auto; - right: 24px; - } - } -} - -.sticker-wrapper { - will-change: transform; - transition: transform 250ms; - - @media (hover: hover) { - transition: transform 0ms; - } -} - -.sticker-arrow { - position: absolute; - transform-origin: 0 0; - left: 0; - top: 0; - pointer-events: none; - - &:after { - content: ' '; - background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='38' viewBox='0 0 38 38' preserveAspectRatio='none'%3E%3Cpolygon points='0,0 38,20 38,38 20,38' style='fill:%23ff3344;' /%3E%3C/svg%3E") no-repeat; - width: 50px; - height: 50px; + .sticker-arrow { + position: absolute; transform-origin: 0 0; - transform: rotate(-45deg); left: 0; top: 0; + pointer-events: none; + + &:after { + content: ' '; + background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='38' viewBox='0 0 38 38' preserveAspectRatio='none'%3E%3Cpolygon points='0,0 38,20 38,38 20,38' style='fill:%23ff3344;' /%3E%3C/svg%3E") no-repeat; + width: 50px; + height: 50px; + transform-origin: 0 0; + transform: rotate(-45deg); + left: 0; + top: 0; + position: absolute; + } + } + + .sticker-delete { position: absolute; - } -} + width: 24px; + height: 24px; + background: red; + border-radius: 24px; + transition: transform 500ms; + transform: scale(1); + opacity: 1; + pointer-events: all; + left: 28px; + top: -16px; + z-index: 20; -.sticker-delete { - position: absolute; - width: 24px; - height: 24px; - background: red; - border-radius: 24px; - transition: transform 500ms; - transform: scale(1); - opacity: 1; - pointer-events: all; - left: 28px; - top: -16px; - z-index: 20; + &:hover { + transform: scale(1.2) !important; + } - &:hover { - transform: scale(1.2) !important; + &::before, &::after { + content: ' '; + position: absolute; + left: 11px; + top: 6px; + width: 2px; + height: 12px; + background: white; + transform: rotate(45deg); + } + + &::after { + transform: rotate(-45deg); + } } - &::before, &::after { - content: ' '; + .leaflet-control-container .leaflet-routing-container-hide { + display: none; + } + + .stickers-helper { + flex-direction: column; + padding-top: 0; + } + + .stickers-grid { + // display: grid; + // grid-template-columns: repeat( auto-fit , minmax(48px, 1fr) ); + display: flex; + flex-wrap: wrap; + } + + .stickers-set-title { + opacity: 0.3; + font-size: 0.8em; + padding: 10px 0; + display: flex; + align-items: center; + text-transform: uppercase; + + &::after { + content: ' '; + height: 1px; + flex: 1; + background-color: #666666; + margin-left: 10px; + } + } + + .sticker-preview { + float: left; + cursor: pointer; + transform: scale(1); + transition: transform 250ms; + width: 48px; + height: 48px; + background-size: cover; + background-repeat: no-repeat; + background-position: 0 50%; + position: relative; + + &:hover { + transform: scale(1.5); + z-index: 2; + } + } + + .sticker-desc { + min-width: 60px; + z-index: -1; + height: auto; + background: #222222; position: absolute; - left: 11px; - top: 6px; - width: 2px; - height: 12px; - background: white; - transform: rotate(45deg); + top: 50%; + left: 24px; + transform: translate3d(0, -50%, 0); + color: white; + box-sizing: border-box; + padding: 10px 10px 10px 36px; } - &::after { - transform: rotate(-45deg); - } -} - -.leaflet-control-container .leaflet-routing-container-hide { - display: none; -} - -.stickers-helper { - flex-direction: column; - padding-top: 0; -} - -.stickers-grid { - // display: grid; - // grid-template-columns: repeat( auto-fit , minmax(48px, 1fr) ); - display: flex; - flex-wrap: wrap; -} - -.stickers-set-title { - opacity: 0.3; - font-size: 0.8em; - padding: 10px 0; - display: flex; - align-items: center; - text-transform: uppercase; - - &::after { - content: ' '; - height: 1px; - flex: 1; - background-color: #666666; - margin-left: 10px; - } -} - -.sticker-preview { - float: left; - cursor: pointer; - transform: scale(1); - transition: transform 250ms; - width: 48px; - height: 48px; - background-size: cover; - background-repeat: no-repeat; - background-position: 0 50%; - position: relative; - - &:hover { - transform: scale(1.5); - z-index: 2; - } -} - -.sticker-desc { - min-width: 60px; - z-index: -1; - height: auto; - background: #222222; - position: absolute; - top: 50%; - left: 24px; - transform: translate3d(0, -50%, 0); - color: white; - box-sizing: border-box; - padding: 10px 10px 10px 36px; -} - -.sticker-desc-sizer { - position: relative; - width: 100%; - height: 100%; - color: rgba(0,0,0,0); - white-space: nowrap; - padding: 1px; - - textarea { - position: absolute; - left: 0; - top: 0; + .sticker-desc-sizer { + position: relative; width: 100%; height: 100%; - font: inherit; - padding: 0; - border: none; - background: none; - color: white; - resize: none; - outline: none; - overflow: hidden; + color: rgba(0, 0, 0, 0); + white-space: nowrap; + padding: 1px; + + textarea { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + font: inherit; + padding: 0; + border: none; + background: none; + color: white; + resize: none; + outline: none; + overflow: hidden; + } } } diff --git a/src/styles/switch.less b/src/styles/switch.less index 8895b4c..445efdf 100644 --- a/src/styles/switch.less +++ b/src/styles/switch.less @@ -1,32 +1,34 @@ -.switch { - height: 1em; - width: 2em; - border-radius: 0.5em; - box-shadow: inset white 0 0 0 0.1em; - display: inline-flex; - vertical-align: text-top; - position: relative; - top: 0.05em; - transition: all 500ms; - - &::after { - content: ' '; - position: absolute; - left: 0.2em; - top: 0.2em; - width: 0.6em; - height: 0.6em; - border-radius: 0.3em; - background: white; +:global { + .switch { + height: 1em; + width: 2em; + border-radius: 0.5em; + box-shadow: inset white 0 0 0 0.1em; + display: inline-flex; + vertical-align: text-top; + position: relative; + top: 0.05em; transition: all 500ms; - } - - &.active { - background: white; &::after { - left: 1.2em; - background: #333333; + content: ' '; + position: absolute; + left: 0.2em; + top: 0.2em; + width: 0.6em; + height: 0.6em; + border-radius: 0.3em; + background: white; + transition: all 500ms; + } + + &.active { + background: white; + + &::after { + left: 1.2em; + background: #333333; + } } } } diff --git a/src/styles/user-button.less b/src/styles/user-button.less index 378ba24..f2d2866 100644 --- a/src/styles/user-button.less +++ b/src/styles/user-button.less @@ -1,156 +1,160 @@ -.user-bar { - // width: 160px; +:global { + .user-bar { + // width: 160px; - .button { - width: 100%; - } -} -.user-bar-guest { - // width: 168px; - @media (min-width: @mobile_breakpoint) { - width: 158px; - } -} - -.user-button { - width: 120px; - padding-left: 48px; - height: 48px; - display: flex; - - user-select: none; - cursor: pointer; - - @media (max-width: @mobile_breakpoint) { - width: 0; - - .user-button-fields { - display: none; + .button { + width: 100%; } } -} -.user-button-picture { - width: 48px; - height: 48px; - background-size: cover; - background: rgba(0, 0, 0, 0.3) 50% 50%; - border-radius: 3px 0 0 3px; - position: absolute; - left: 0; - top: 0; -} - -.user-button-fields { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; - padding: 0 10px 0 10px; - overflow: hidden; - box-sizing: border-box; - - div { - width: 100%; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } -} - -.user-button-name { - font-size: 14px; -} - -.user-button-text { - font-size: 12px; - opacity: 0.5; - padding-top: 2px; - font-weight: 500; -} - - -.user-panel { - position: relative; -} - -.user-panel-menu { - position: absolute; - bottom: 58px; - left: 0; - width: 219px; - background: @dialog_background; - border-radius: @panel_radius; - padding: 0; - box-sizing: border-box; - z-index: -1; - - @media (max-width: @mobile_breakpoint) { - left: 0; - z-index: 4; - } -} -.user-panel-title { - font-size: 20px; - padding: 10px; - - background: rgba(0,0,0, 0.5); - box-shadow: inset rgba(255,255,255,0.1) 0 -1px; - border-radius: @panel_radius @panel_radius 0 0; - user-select: none; -} - -.user-panel-ver { - font-size: 12px; - vertical-align: text-top; - opacity: 0.5; - padding-left: 3px; - position: relative; - top: 3px; -} - -.user-panel-item { - padding: 10px 10px; - position: relative; - cursor: pointer; - width: 100%; - transition: all 250ms; - color: white; - box-sizing: border-box; - user-select: none; - display: block; - border-bottom: 1px solid rgba(255,255,255,0.1); - text-decoration: none; - - &:first-child::after { - border-radius: 3px 3px 0 0; + .user-bar-guest { + // width: 168px; + @media (min-width: @mobile_breakpoint) { + width: 158px; + } } - &::after { - content: ' '; + .user-button { + width: 120px; + padding-left: 48px; + height: 48px; + display: flex; + + user-select: none; + cursor: pointer; + + @media (max-width: @mobile_breakpoint) { + width: 0; + + .user-button-fields { + display: none; + } + } + } + + .user-button-picture { + width: 48px; + height: 48px; + background-size: cover; + background: rgba(0, 0, 0, 0.3) 50% 50%; + border-radius: 3px 0 0 3px; position: absolute; left: 0; top: 0; - width: 100%; + } + + .user-button-fields { height: 100%; - background: linear-gradient(150deg, @blue_primary, @blue_secondary); - opacity: 0; - transition: opacity 0.3s; - z-index: -1; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0 10px 0 10px; + overflow: hidden; + box-sizing: border-box; + + div { + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } } - &:hover::after { + .user-button-name { + font-size: 14px; + } + + .user-button-text { + font-size: 12px; opacity: 0.5; - } -} - -.user-panel-text { - padding: 10px; - opacity: 0.5; - font-weight: 200; - border-bottom: 1px solid rgba(255,255,255,0.1); - - div { - padding-top: 5px; + padding-top: 2px; + font-weight: 500; + } + + + .user-panel { + position: relative; + } + + .user-panel-menu { + position: absolute; + bottom: 58px; + left: 0; + width: 219px; + background: @dialog_background; + border-radius: @panel_radius; + padding: 0; + box-sizing: border-box; + z-index: -1; + + @media (max-width: @mobile_breakpoint) { + left: 0; + z-index: 4; + } + } + + .user-panel-title { + font-size: 20px; + padding: 10px; + + background: rgba(0, 0, 0, 0.5); + box-shadow: inset rgba(255, 255, 255, 0.1) 0 -1px; + border-radius: @panel_radius @panel_radius 0 0; + user-select: none; + } + + .user-panel-ver { + font-size: 12px; + vertical-align: text-top; + opacity: 0.5; + padding-left: 3px; + position: relative; + top: 3px; + } + + .user-panel-item { + padding: 10px 10px; + position: relative; + cursor: pointer; + width: 100%; + transition: all 250ms; + color: white; + box-sizing: border-box; + user-select: none; + display: block; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + text-decoration: none; + + &:first-child::after { + border-radius: 3px 3px 0 0; + } + + &::after { + content: ' '; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: linear-gradient(150deg, @blue_primary, @blue_secondary); + opacity: 0; + transition: opacity 0.3s; + z-index: -1; + } + + &:hover::after { + opacity: 0.5; + } + } + + .user-panel-text { + padding: 10px; + opacity: 0.5; + font-weight: 200; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + + div { + padding-top: 5px; + } } } From 9b52ff10e53e37645896f3a8f57da3d80bfa8d71 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 11:21:13 +0700 Subject: [PATCH 283/320] fixed styles --- public/images/icon.svg | 425 ++ public/images/stickers-base.svg | 9287 +++++++++++++++++++++++ src/components/Fills.tsx | 2 +- src/components/panels/Icon.tsx | 2 +- src/index.tsx | 2 +- src/styles/_main.scss | 171 + src/styles/{button.less => button.scss} | 8 +- src/styles/colors.less | 35 - src/styles/colors.scss | 35 + src/styles/dialogs.less | 544 -- src/styles/dialogs.scss | 542 ++ src/styles/gpx.less | 101 - src/styles/gpx.scss | 99 + src/styles/logo.less | 24 - src/styles/logo.scss | 22 + src/styles/main.less | 173 - src/styles/map.less | 367 - src/styles/map.scss | 365 + src/styles/panel.less | 796 -- src/styles/panel.scss | 794 ++ src/styles/progress.less | 18 - src/styles/progress.scss | 16 + src/styles/renderer.less | 55 - src/styles/renderer.scss | 53 + src/styles/router.less | 43 - src/styles/router.scss | 41 + src/styles/save.less | 185 - src/styles/save.scss | 183 + src/styles/{slider.less => slider.scss} | 135 +- src/styles/stickers.less | 265 - src/styles/stickers.scss | 263 + src/styles/switch.less | 34 - src/styles/switch.scss | 32 + src/styles/user-button.less | 160 - src/styles/user-button.scss | 158 + 35 files changed, 12539 insertions(+), 2896 deletions(-) create mode 100644 public/images/icon.svg create mode 100644 public/images/stickers-base.svg create mode 100644 src/styles/_main.scss rename src/styles/{button.less => button.scss} (87%) delete mode 100644 src/styles/colors.less create mode 100644 src/styles/colors.scss delete mode 100644 src/styles/dialogs.less create mode 100644 src/styles/dialogs.scss delete mode 100644 src/styles/gpx.less create mode 100644 src/styles/gpx.scss delete mode 100644 src/styles/logo.less create mode 100644 src/styles/logo.scss delete mode 100644 src/styles/main.less delete mode 100644 src/styles/map.less create mode 100644 src/styles/map.scss delete mode 100644 src/styles/panel.less create mode 100644 src/styles/panel.scss delete mode 100644 src/styles/progress.less create mode 100644 src/styles/progress.scss delete mode 100644 src/styles/renderer.less create mode 100644 src/styles/renderer.scss delete mode 100644 src/styles/router.less create mode 100644 src/styles/router.scss delete mode 100644 src/styles/save.less create mode 100644 src/styles/save.scss rename src/styles/{slider.less => slider.scss} (58%) delete mode 100644 src/styles/stickers.less create mode 100644 src/styles/stickers.scss delete mode 100644 src/styles/switch.less create mode 100644 src/styles/switch.scss delete mode 100644 src/styles/user-button.less create mode 100644 src/styles/user-button.scss diff --git a/public/images/icon.svg b/public/images/icon.svg new file mode 100644 index 0000000..514ad8d --- /dev/null +++ b/public/images/icon.svg @@ -0,0 +1,425 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/stickers-base.svg b/public/images/stickers-base.svg new file mode 100644 index 0000000..a5eb5df --- /dev/null +++ b/public/images/stickers-base.svg @@ -0,0 +1,9287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + 1111 + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + 2 + + + + + + + + + 3 + + + + + + + + + 4 + + + + + + + + + + + 5 + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/Fills.tsx b/src/components/Fills.tsx index 52e0d6f..d7d25cd 100644 --- a/src/components/Fills.tsx +++ b/src/components/Fills.tsx @@ -43,6 +43,6 @@ export const Fills = () => ( - + ); diff --git a/src/components/panels/Icon.tsx b/src/components/panels/Icon.tsx index a381018..f6b318c 100644 --- a/src/components/panels/Icon.tsx +++ b/src/components/panels/Icon.tsx @@ -4,7 +4,7 @@ export const Icon = memo(({ icon, size = 32 }: { icon: string; size?: number }) - + diff --git a/src/index.tsx b/src/index.tsx index f14e3c0..2845015 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { App } from '~/containers/App'; -import '~/styles/main.less'; +import '~/styles/_main.scss'; import { Provider } from 'react-redux'; import { PersistGate } from 'redux-persist/integration/react'; diff --git a/src/styles/_main.scss b/src/styles/_main.scss new file mode 100644 index 0000000..100678c --- /dev/null +++ b/src/styles/_main.scss @@ -0,0 +1,171 @@ +@import 'colors.scss'; + +@import 'map.scss'; +@import 'panel.scss'; +@import 'router.scss'; +@import 'stickers.scss'; +@import 'button.scss'; +@import 'logo.scss'; +@import 'user-button.scss'; +@import 'save.scss'; +@import 'renderer.scss'; +@import 'dialogs.scss'; +@import 'progress.scss'; +@import 'slider.scss'; +@import 'switch.scss'; +@import 'gpx.scss'; + +body { + font-family: 'Rubik', sans-serif; + font-size: 15px; + // letter-spacing: 0.4px; + padding: 0; + font-weight: 400; + -webkit-font-smoothing: antialiased; +} + +.gray { + opacity: 0.5; +} + +.big { + font-size: 1em; + font-weight: 500; +} + +.upper { + text-transform: uppercase; +} + +.small { + font-size: 0.9em; +} + +.white { + color: white; +} + +.success { + color: $color_success; +} + +.primary { + color: $color_primary; +} + +.danger { + color: $color_danger; +} + +.cursor-tooltip { + position: fixed; + top: 4px; + left: 4px; + width: 10px; + height: 10px; + z-index: 1; + pointer-events: none; + + svg { + width: 20px; + height: 20px; + stroke-width: 4; + fill: black; + } + + @media (hover: none) { + display: none; + } +} + +.cursor-icon-sticker { + width: 20px; + height: 20px; + background-size: cover; + background-position: 0 50%; + position: absolute; + top: -30px; +} + +.track-vertical { + position: absolute; + right: 0; + height: 100%; + width: 10px !important; +} + +.thumb-vertical { + position: absolute; + width: 20px !important; + left: -10px; + border-radius: 4px 0 0 4px; + transition: background 250ms; + cursor: grab; + + &:hover, &:active { + background: rgba(255, 255, 255, 0.3); + } + + &::after { + content: ' '; + width: 5px; + height: 100%; + display: block; + right: 0; + position: absolute; + border-radius: 4px 0 0 4px; + background: rgba(255, 255, 255, 0.5); + } +} + +.pointer { + cursor: pointer; +} + +@media (max-width: $mobile_breakpoint) { + .desktop-only { + display: none; + } +} + +@media (min-width: $mobile_breakpoint) { + .mobile-only { + display: none; + } +} + +h2 { + font: inherit; + font-size: 18px; + font-weight: 400; + text-transform: uppercase; + margin: 10px 0; +} + +hr { + border: none; + height: 2px; + background: rgba(0, 0, 0, 0.3); +} + +input { + width: 100%; + padding: 5px 10px 5px 10px; + background: rgba(0, 0, 0, 0.3); + border-radius: $panel_radius; + border: none; + outline: none; + color: white; + + font-family: inherit; + font-size: 14px; + font-weight: 200; +} + +.relative { + position: relative; +} + +.justify-end { + justify-content: flex-end; +} diff --git a/src/styles/button.less b/src/styles/button.scss similarity index 87% rename from src/styles/button.less rename to src/styles/button.scss index a5b6336..b17de87 100644 --- a/src/styles/button.less +++ b/src/styles/button.scss @@ -1,10 +1,9 @@ -:global { .button { background: #444444; padding: 4px 16px; height: 18px; line-height: 1em; - border-radius: @button_radius; + border-radius: $button_radius; font-family: inherit; font-size: 1em; display: inline-flex; @@ -61,12 +60,11 @@ margin: 0; &:first-child { - border-radius: @button_radius 0 0 @button_radius; + border-radius: $button_radius 0 0 $button_radius; } &:last-child { - border-radius: 0 @button_radius @button_radius 0; + border-radius: 0 $button_radius $button_radius 0; } } } -} diff --git a/src/styles/colors.less b/src/styles/colors.less deleted file mode 100644 index 7d759f3..0000000 --- a/src/styles/colors.less +++ /dev/null @@ -1,35 +0,0 @@ -@blue_primary: #55ddff; -@blue_secondary: #7137c8; - -@router_line: #4597d0; - -@bar_background: #333333; -@dialog_background: #271535; - -@location_line: #ff3344; - -@green_primary: #abc837; -@green_secondary: #009c80; - -@red_primary: #ff7034; -@red_secondary: #ff3344; - -@panel_radius: 8px; -@button_radius: 6px; - -@color_primary: #4597d0; -@color_success: #7cd766; -@color_danger: #ff3344; - -@bar_shadow: rgba(0,0,0,0.3) 0 2px 0, inset rgba(255, 255, 255, 0.05) 1px 1px; -@dialog_shadow: rgba(0,0,0,0.3) 0 2px 0; - -@mobile_breakpoint: 768px; -@micro_breakpoint: 450px; - -@tooltip_background: #123740; - -@loading_shade: darken(fade(@blue_secondary, 80%), 20%); -@cluster_small: #0069a7; - -@title_dialog_color: fade(#111111, 85%); diff --git a/src/styles/colors.scss b/src/styles/colors.scss new file mode 100644 index 0000000..c6b9fea --- /dev/null +++ b/src/styles/colors.scss @@ -0,0 +1,35 @@ +$blue_primary: #55ddff; +$blue_secondary: #7137c8; + +$router_line: #4597d0; + +$bar_background: #333333; +$dialog_background: #271535; + +$location_line: #ff3344; + +$green_primary: #abc837; +$green_secondary: #009c80; + +$red_primary: #ff7034; +$red_secondary: #ff3344; + +$panel_radius: 8px; +$button_radius: 6px; + +$color_primary: #4597d0; +$color_success: #7cd766; +$color_danger: #ff3344; + +$bar_shadow: rgba(0,0,0,0.3) 0 2px 0, inset rgba(255, 255, 255, 0.05) 1px 1px; +$dialog_shadow: rgba(0,0,0,0.3) 0 2px 0; + +$mobile_breakpoint: 768px; +$micro_breakpoint: 450px; + +$tooltip_background: #123740; + +$loading_shade: darken($blue_secondary, 20%); +$cluster_small: #0069a7; + +$title_dialog_color: fade(#111111, 85%); diff --git a/src/styles/dialogs.less b/src/styles/dialogs.less deleted file mode 100644 index e85efa9..0000000 --- a/src/styles/dialogs.less +++ /dev/null @@ -1,544 +0,0 @@ -:global { - .dialog { - position: fixed; - left: 0; - top: 0; - width: 360px; - height: 100%; - z-index: 5; - display: flex; - flex-direction: column; - - padding: 10px 10px 68px 10px; - box-sizing: border-box; - - transform: translate3d(-100%, 0, 0); - pointer-events: none; - transition: transform 500ms, background-color 500ms 500ms; - - &.active { - transform: translate3d(0, 0, 0); - pointer-events: all; - transition: transform 500ms 250ms, background-color 250ms; - - .dialog-close-button { - opacity: 1; - transform: translate3d(0, 0, 0); - } - } - - @media (max-width: @mobile_breakpoint) { - width: 100%; - z-index: 6; - transform: translate3d(0, 100%, 0); - padding: 0 0 68px 0; - - &.active { - background: rgba(19, 45, 53, 0.95); - } - } - } - - .dialog-close-button { - position: absolute; - right: -38px; - bottom: 68px; - background: @red_secondary; - width: 48px; - height: 48px; - transform: translate3d(-48px, 0, 0); - border-radius: 0 @panel_radius @panel_radius 0; - opacity: 0; - - transition: all 250ms 250ms; - z-index: -1; - cursor: pointer; - - display: flex; - align-items: center; - justify-content: center; - - svg { - fill: white; - width: 40px; - height: 40px; - } - - @media (max-width: @mobile_breakpoint) { - border-radius: @panel_radius; - bottom: 0; - right: 0; - width: 100%; - height: 68px; - background: @dialog_background; - } - } - - .dialog-content { - background: @dialog_background; - overflow: hidden; - position: relative; - border-radius: @panel_radius @panel_radius 0 @panel_radius; - box-shadow: @dialog_shadow; - - display: flex; - flex-direction: column; - - a { - color: white; - opacity: 0.8; - } - - &.full { - flex: 1; - } - } - - .dialog-flex-scroll { - display: flex; - align-items: flex-end; - justify-content: center; - // height: 100%; - } - - .nominatim-dialog-content { - padding-bottom: 48px; - min-height: 25vh; - } - - .nominatim-list-item { - padding: 10px; - color: white; - cursor: pointer; - transition: background-color 0.25s; - display: flex; - align-items: center; - justify-content: center; - // padding-bottom: 200px; - - &:hover { - background: rgba(255, 255, 255, 0.1); - } - - .title { - text-overflow: hidden; - font-size: 12px; - -webkit-line-clamp: 2; - } - } - - .dialog-shader { - &::before, - &::after { - content: ' '; - height: 40px; - width: 100%; - left: 0; - top: 0; - background: linear-gradient(180deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); - position: absolute; - z-index: 5; - pointer-events: none; - } - - &::after { - top: auto; - bottom: 0; - background: linear-gradient(0deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); - } - } - - .dialog-maplist { - box-sizing: border-box; - padding: 10px 0 0 0; - } - - @keyframes pulse { - 0% { - opacity: 1; - } - 100% { - opacity: 0.5; - } - } - - @keyframes spin { - 0% { - transform: rotate(0); - } - 100% { - transform: rotate(360deg); - } - } - - .dialog-maplist-pulse { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - z-index: 10; - background: linear-gradient(fade(@loading_shade, 0%), @loading_shade 70%); - height: 100px; - pointer-events: none; - transition: opacity 100ms; - opacity: 0; - - &.active { - opacity: 1; - animation: pulse 500ms 250ms infinite alternate; - } - } - - .dialog-maplist-loader { - display: flex; - margin-bottom: 10px; - text-transform: uppercase; - color: white; - align-items: center; - justify-content: center; - user-select: none; - opacity: 0.1; - - position: absolute; - width: 100%; - height: 100%; - pointer-events: none; - padding-top: 200px; - box-sizing: border-box; - font-weight: 600; - font-size: 20px; - text-align: center; - - .spin { - animation: spin infinite reverse 2s linear; - } - - .dialog-maplist-icon { - position: absolute; - left: 50%; - top: 50%; - margin-left: -100px; - margin-top: -100px; - - svg { - width: 200px; - height: 200px; - fill: white; - } - } - } - - .route-row-wrapper { - padding: 0 10px; - position: relative; - margin-bottom: 10px; - transition: all 500ms; - display: flex; - flex-direction: column; - - &.has_edit { - //transform: translateY(-2px); - .route-row { - background: fade(@green_secondary, 30%); - } - } - - &.is_menu_target { - .route-row, - .route-row-fav { - transform: translateX(-120px); - } - - .route-row-edit-menu { - width: 120px; - } - } - } - - .route-row-editor { - color: white; - padding: 5px 0 5px; - } - - .route-row-buttons { - flex: 1; - flex-direction: row; - display: flex; - align-items: center; - } - - .route-row-view { - overflow: hidden; - transition: height 500ms; - position: relative; - display: flex; - - &.has_menu { - padding-right: 32px; - } - } - - .route-row-edit { - background: fade(@green_secondary, 30%); - } - - .route-row-drop { - background: fade(@red_secondary, 20%); - - .route-row { - align-items: center; - } - } - - .route-row { - background: rgba(255, 255, 255, 0.05); - padding: 10px 10px 5px 10px; - color: white; - user-select: none; - cursor: pointer; - transition: background 250ms, transform 500ms; - position: relative; - flex: 1; - min-height: 64px; - box-sizing: border-box; - display: flex; - flex-direction: column; - justify-content: center; - align-items: stretch; - - &:hover { - background: rgba(255, 255, 255, 0.1); - - .route-row-panel { - transform: scaleY(1); - pointer-events: all; - touch-action: initial; - } - } - } - - .route-row-edit-button { - width: 32px; - background: rgba(255, 255, 255, 0.08); - fill: rgba(255, 255, 255, 0.5); - display: flex; - justify-content: center; - align-items: center; - transition: all 250ms; - position: absolute; - top: 0; - right: 0; - height: 100%; - - &:hover { - background: rgba(255, 255, 255, 0.1); - } - } - - .route-row-fav { - width: 32px; - display: flex; - align-items: center; - justify-content: center; - fill: fade(white, 30%); - background: fade(white, 8%); - cursor: pointer; - transition: background 250ms, transform 500ms; - - &:hover { - background: fade(white, 10%); - } - } - - .route-row-edit-menu { - width: 0; - height: 100%; - right: 32px; - bottom: 0; - position: absolute; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; - transition: all 500ms; - display: flex; - fill: fade(white, 30%); - - div { - width: 60px; - height: 100%; - display: flex; - justify-content: center; - align-items: center; - - &:first-child { - box-shadow: fade(black, 30%) 1px 0; - } - - &:hover { - background: fade(@red_secondary, 30%); - } - - &.modify-button { - &:hover { - background: fade(@green_secondary, 30%); - } - } - } - } - - .route-title { - margin-bottom: 5px; - font-weight: bold; - - text-overflow: ellipsis; - overflow: hidden; - position: relative; - max-height: 2.4em; - word-break: break-word; - display: flex; - - .route-row-corner { - svg { - fill: fade(white, 50%); - margin-right: 2px; - flex-shrink: 0; - } - } - } - - .route-description { - font-size: 0.9em; - opacity: 0.3; - margin-bottom: 5px; - display: grid; - grid-template-columns: 2fr 1fr; - - svg { - width: 20px; - height: 20px; - fill: white; - vertical-align: text-bottom; - margin-bottom: -2px; - } - - span { - padding-right: 10px; - - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - } - } - - .dialog-head { - background: rgba(255, 255, 255, 0.1); - padding: 10px; - color: white; - } - - .dialog-tabs { - background: rgba(255, 255, 255, 0); - border-radius: @panel_radius @panel_radius 0 0; - height: 32px; - user-select: none; - flex-direction: row; - display: flex; - - .dialog-tab { - display: inline-flex; - align-items: center; - justify-content: center; - color: white; - padding: 0 20px; - cursor: pointer; - border-radius: @panel_radius @panel_radius 0 0; - flex: 1; - height: 32px; - - &.active { - background: rgba(255, 255, 255, 0.1); - } - } - - @media (max-width: @mobile_breakpoint) { - height: 48px; - - .dialog-tab { - height: 48px; - } - } - } - - .dialog-head-title { - font-size: 20px; - text-transform: uppercase; - } - - .app-info-changelog { - color: white; - padding: 10px; - font-size: 0.8em; - user-select: none; - - div { - opacity: 0.8; - } - } - - .app-info-number { - width: 16px; - } - - .app-info-changelog-item { - text-transform: uppercase; - display: flex; - flex: 1; - - .app-info-current { - font-size: 0.9em; - opacity: 0.3; - display: inline; - padding-left: 10px; - } - } - - .app-info-version { - padding-bottom: 5px; - flex: 1; - flex-direction: column-reverse; - } - - .app-info-release { - padding-bottom: 5px; - display: flex; - flex: 1; - } - - .app-info-build { - padding-bottom: 5px; - display: flex; - flex-direction: column-reverse; - flex: 1; - } - - .app-info-change { - display: flex; - flex-direction: row; - padding-bottom: 5px; - - .app-info-number { - width: 20px; - } - - span { - flex: 1; - } - } - - .app-info-list { - padding: 5px 0; - - div { - padding: 5px 0; - } - } -} diff --git a/src/styles/dialogs.scss b/src/styles/dialogs.scss new file mode 100644 index 0000000..ed7d7f5 --- /dev/null +++ b/src/styles/dialogs.scss @@ -0,0 +1,542 @@ +.dialog { + position: fixed; + left: 0; + top: 0; + width: 360px; + height: 100%; + z-index: 5; + display: flex; + flex-direction: column; + + padding: 10px 10px 68px 10px; + box-sizing: border-box; + + transform: translate3d(-100%, 0, 0); + pointer-events: none; + transition: transform 500ms, background-color 500ms 500ms; + + &.active { + transform: translate3d(0, 0, 0); + pointer-events: all; + transition: transform 500ms 250ms, background-color 250ms; + + .dialog-close-button { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } + + @media (max-width: $mobile_breakpoint) { + width: 100%; + z-index: 6; + transform: translate3d(0, 100%, 0); + padding: 0 0 68px 0; + + &.active { + background: rgba(19, 45, 53, 0.95); + } + } +} + +.dialog-close-button { + position: absolute; + right: -38px; + bottom: 68px; + background: $red_secondary; + width: 48px; + height: 48px; + transform: translate3d(-48px, 0, 0); + border-radius: 0 $panel_radius $panel_radius 0; + opacity: 0; + + transition: all 250ms 250ms; + z-index: -1; + cursor: pointer; + + display: flex; + align-items: center; + justify-content: center; + + svg { + fill: white; + width: 40px; + height: 40px; + } + + @media (max-width: $mobile_breakpoint) { + border-radius: $panel_radius; + bottom: 0; + right: 0; + width: 100%; + height: 68px; + background: $dialog_background; + } +} + +.dialog-content { + background: $dialog_background; + overflow: hidden; + position: relative; + border-radius: $panel_radius $panel_radius 0 $panel_radius; + box-shadow: $dialog_shadow; + + display: flex; + flex-direction: column; + + a { + color: white; + opacity: 0.8; + } + + &.full { + flex: 1; + } +} + +.dialog-flex-scroll { + display: flex; + align-items: flex-end; + justify-content: center; + // height: 100%; +} + +.nominatim-dialog-content { + padding-bottom: 48px; + min-height: 25vh; +} + +.nominatim-list-item { + padding: 10px; + color: white; + cursor: pointer; + transition: background-color 0.25s; + display: flex; + align-items: center; + justify-content: center; + // padding-bottom: 200px; + + &:hover { + background: rgba(255, 255, 255, 0.1); + } + + .title { + text-overflow: hidden; + font-size: 12px; + -webkit-line-clamp: 2; + } +} + +.dialog-shader { + &::before, + &::after { + content: ' '; + height: 40px; + width: 100%; + left: 0; + top: 0; + background: linear-gradient(180deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); + position: absolute; + z-index: 5; + pointer-events: none; + } + + &::after { + top: auto; + bottom: 0; + background: linear-gradient(0deg, rgba(39, 21, 53, 1), rgba(39, 21, 53, 0)); + } +} + +.dialog-maplist { + box-sizing: border-box; + padding: 10px 0 0 0; +} + +@keyframes pulse { + 0% { + opacity: 1; + } + 100% { + opacity: 0.5; + } +} + +@keyframes spin { + 0% { + transform: rotate(0); + } + 100% { + transform: rotate(360deg); + } +} + +.dialog-maplist-pulse { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + z-index: 10; + background: linear-gradient(fade($loading_shade, 0%), $loading_shade 70%); + height: 100px; + pointer-events: none; + transition: opacity 100ms; + opacity: 0; + + &.active { + opacity: 1; + animation: pulse 500ms 250ms infinite alternate; + } +} + +.dialog-maplist-loader { + display: flex; + margin-bottom: 10px; + text-transform: uppercase; + color: white; + align-items: center; + justify-content: center; + user-select: none; + opacity: 0.1; + + position: absolute; + width: 100%; + height: 100%; + pointer-events: none; + padding-top: 200px; + box-sizing: border-box; + font-weight: 600; + font-size: 20px; + text-align: center; + + .spin { + animation: spin infinite reverse 2s linear; + } + + .dialog-maplist-icon { + position: absolute; + left: 50%; + top: 50%; + margin-left: -100px; + margin-top: -100px; + + svg { + width: 200px; + height: 200px; + fill: white; + } + } +} + +.route-row-wrapper { + padding: 0 10px; + position: relative; + margin-bottom: 10px; + transition: all 500ms; + display: flex; + flex-direction: column; + + &.has_edit { + //transform: translateY(-2px); + .route-row { + background: fade($green_secondary, 30%); + } + } + + &.is_menu_target { + .route-row, + .route-row-fav { + transform: translateX(-120px); + } + + .route-row-edit-menu { + width: 120px; + } + } +} + +.route-row-editor { + color: white; + padding: 5px 0 5px; +} + +.route-row-buttons { + flex: 1; + flex-direction: row; + display: flex; + align-items: center; +} + +.route-row-view { + overflow: hidden; + transition: height 500ms; + position: relative; + display: flex; + + &.has_menu { + padding-right: 32px; + } +} + +.route-row-edit { + background: fade($green_secondary, 30%); +} + +.route-row-drop { + background: fade($red_secondary, 20%); + + .route-row { + align-items: center; + } +} + +.route-row { + background: rgba(255, 255, 255, 0.05); + padding: 10px 10px 5px 10px; + color: white; + user-select: none; + cursor: pointer; + transition: background 250ms, transform 500ms; + position: relative; + flex: 1; + min-height: 64px; + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: center; + align-items: stretch; + + &:hover { + background: rgba(255, 255, 255, 0.1); + + .route-row-panel { + transform: scaleY(1); + pointer-events: all; + touch-action: initial; + } + } +} + +.route-row-edit-button { + width: 32px; + background: rgba(255, 255, 255, 0.08); + fill: rgba(255, 255, 255, 0.5); + display: flex; + justify-content: center; + align-items: center; + transition: all 250ms; + position: absolute; + top: 0; + right: 0; + height: 100%; + + &:hover { + background: rgba(255, 255, 255, 0.1); + } +} + +.route-row-fav { + width: 32px; + display: flex; + align-items: center; + justify-content: center; + fill: fade(white, 30%); + background: fade(white, 8%); + cursor: pointer; + transition: background 250ms, transform 500ms; + + &:hover { + background: fade(white, 10%); + } +} + +.route-row-edit-menu { + width: 0; + height: 100%; + right: 32px; + bottom: 0; + position: absolute; + background: rgba(0, 0, 0, 0.1); + overflow: hidden; + transition: all 500ms; + display: flex; + fill: fade(white, 30%); + + div { + width: 60px; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + + &:first-child { + box-shadow: fade(black, 30%) 1px 0; + } + + &:hover { + background: fade($red_secondary, 30%); + } + + &.modify-button { + &:hover { + background: fade($green_secondary, 30%); + } + } + } +} + +.route-title { + margin-bottom: 5px; + font-weight: bold; + + text-overflow: ellipsis; + overflow: hidden; + position: relative; + max-height: 2.4em; + word-break: break-word; + display: flex; + + .route-row-corner { + svg { + fill: fade(white, 50%); + margin-right: 2px; + flex-shrink: 0; + } + } +} + +.route-description { + font-size: 0.9em; + opacity: 0.3; + margin-bottom: 5px; + display: grid; + grid-template-columns: 2fr 1fr; + + svg { + width: 20px; + height: 20px; + fill: white; + vertical-align: text-bottom; + margin-bottom: -2px; + } + + span { + padding-right: 10px; + + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } +} + +.dialog-head { + background: rgba(255, 255, 255, 0.1); + padding: 10px; + color: white; +} + +.dialog-tabs { + background: rgba(255, 255, 255, 0); + border-radius: $panel_radius $panel_radius 0 0; + height: 32px; + user-select: none; + flex-direction: row; + display: flex; + + .dialog-tab { + display: inline-flex; + align-items: center; + justify-content: center; + color: white; + padding: 0 20px; + cursor: pointer; + border-radius: $panel_radius $panel_radius 0 0; + flex: 1; + height: 32px; + + &.active { + background: rgba(255, 255, 255, 0.1); + } + } + + @media (max-width: $mobile_breakpoint) { + height: 48px; + + .dialog-tab { + height: 48px; + } + } +} + +.dialog-head-title { + font-size: 20px; + text-transform: uppercase; +} + +.app-info-changelog { + color: white; + padding: 10px; + font-size: 0.8em; + user-select: none; + + div { + opacity: 0.8; + } +} + +.app-info-number { + width: 16px; +} + +.app-info-changelog-item { + text-transform: uppercase; + display: flex; + flex: 1; + + .app-info-current { + font-size: 0.9em; + opacity: 0.3; + display: inline; + padding-left: 10px; + } +} + +.app-info-version { + padding-bottom: 5px; + flex: 1; + flex-direction: column-reverse; +} + +.app-info-release { + padding-bottom: 5px; + display: flex; + flex: 1; +} + +.app-info-build { + padding-bottom: 5px; + display: flex; + flex-direction: column-reverse; + flex: 1; +} + +.app-info-change { + display: flex; + flex-direction: row; + padding-bottom: 5px; + + .app-info-number { + width: 20px; + } + + span { + flex: 1; + } +} + +.app-info-list { + padding: 5px 0; + + div { + padding: 5px 0; + } +} diff --git a/src/styles/gpx.less b/src/styles/gpx.less deleted file mode 100644 index 695c73d..0000000 --- a/src/styles/gpx.less +++ /dev/null @@ -1,101 +0,0 @@ -:global { - .gpx-title { - display: flex; - flex-direction: row; - padding: 10px; - } - - .gpx-row { - display: flex; - align-items: center; - justify-content: flex-start; - flex-direction: row; - padding: 5px 10px; - min-width: 0; - - &_disabled { - opacity: 0.5; - } - - &__title { - flex: 1; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - margin: 0 10px; - cursor: pointer; - } - - &__buttons { - display: flex; - align-items: center; - justify-content: center; - - svg { - fill: white; - } - - > div { - padding: 0 5px; - cursor: pointer; - - &:last-child { - padding-right: 0; - } - - &:first-child { - padding-left: 0; - } - } - } - - &__color { - width: 8px; - height: 8px; - border-radius: 100%; - cursor: pointer; - - // span { - - // } - } - } - - .gpx-buttons { - padding: 10px; - - & > * { - margin: 2.5px 0; - - &:last-child { - margin-bottom: 0; - } - - &:first-child { - margin-top: 0; - } - } - - & > .button { - width: 100%; - box-sizing: border-box; - position: relative; - height: 32px; - align-items: center; - justify-content: center; - } - } - - .gpx-confirm { - position: absolute; - bottom: 5%; - left: 5%; - z-index: 5; - width: 90%; - padding: 10px; - border-radius: @panel_radius; - box-sizing: border-box; - background: lighten(@bar_background, 10%); - box-shadow: rgba(0, 0, 0, 0.5) 0 5px 5px 10px; - } -} diff --git a/src/styles/gpx.scss b/src/styles/gpx.scss new file mode 100644 index 0000000..05d5310 --- /dev/null +++ b/src/styles/gpx.scss @@ -0,0 +1,99 @@ +.gpx-title { + display: flex; + flex-direction: row; + padding: 10px; +} + +.gpx-row { + display: flex; + align-items: center; + justify-content: flex-start; + flex-direction: row; + padding: 5px 10px; + min-width: 0; + + &_disabled { + opacity: 0.5; + } + + &__title { + flex: 1; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + margin: 0 10px; + cursor: pointer; + } + + &__buttons { + display: flex; + align-items: center; + justify-content: center; + + svg { + fill: white; + } + + > div { + padding: 0 5px; + cursor: pointer; + + &:last-child { + padding-right: 0; + } + + &:first-child { + padding-left: 0; + } + } + } + + &__color { + width: 8px; + height: 8px; + border-radius: 100%; + cursor: pointer; + + // span { + + // } + } +} + +.gpx-buttons { + padding: 10px; + + & > * { + margin: 2.5px 0; + + &:last-child { + margin-bottom: 0; + } + + &:first-child { + margin-top: 0; + } + } + + & > .button { + width: 100%; + box-sizing: border-box; + position: relative; + height: 32px; + align-items: center; + justify-content: center; + } +} + +.gpx-confirm { + position: absolute; + bottom: 5%; + left: 5%; + z-index: 5; + width: 90%; + padding: 10px; + border-radius: $panel_radius; + box-sizing: border-box; + background: lighten($bar_background, 10%); + box-shadow: rgba(0, 0, 0, 0.5) 0 5px 5px 10px; +} diff --git a/src/styles/logo.less b/src/styles/logo.less deleted file mode 100644 index 8d9272e..0000000 --- a/src/styles/logo.less +++ /dev/null @@ -1,24 +0,0 @@ -:global { - .logo-preview { - position: fixed; - right: 0; - bottom: 58px; - - width: 400px; - height: 100%; - - opacity: 0.5; - pointer-events: none; - z-index: 2; - background: 100% 100% no-repeat; - - &.top { - background-position: 100% 0; - } - - @media (max-width: @mobile_breakpoint) { - transform: scale(0.5); - transform-origin: 100% 100%; - } - } -} diff --git a/src/styles/logo.scss b/src/styles/logo.scss new file mode 100644 index 0000000..b036d68 --- /dev/null +++ b/src/styles/logo.scss @@ -0,0 +1,22 @@ +.logo-preview { + position: fixed; + right: 0; + bottom: 58px; + + width: 400px; + height: 100%; + + opacity: 0.5; + pointer-events: none; + z-index: 2; + background: 100% 100% no-repeat; + + &.top { + background-position: 100% 0; + } + + @media (max-width: $mobile_breakpoint) { + transform: scale(0.5); + transform-origin: 100% 100%; + } +} diff --git a/src/styles/main.less b/src/styles/main.less deleted file mode 100644 index 70e6c95..0000000 --- a/src/styles/main.less +++ /dev/null @@ -1,173 +0,0 @@ -@import 'colors.less'; - -@import 'map.less'; -@import 'panel.less'; -@import 'router.less'; -@import 'stickers.less'; -@import 'button.less'; -@import 'logo.less'; -@import 'user-button.less'; -@import 'save.less'; -@import 'renderer.less'; -@import 'dialogs.less'; -@import 'progress.less'; -@import 'slider.less'; -@import 'switch.less'; -@import 'gpx.less'; - -:global { - body { - font-family: 'Rubik', sans-serif; - font-size: 15px; - // letter-spacing: 0.4px; - padding: 0; - font-weight: 400; - -webkit-font-smoothing: antialiased; - } - - .gray { - opacity: 0.5; - } - - .big { - font-size: 1em; - font-weight: 500; - } - - .upper { - text-transform: uppercase; - } - - .small { - font-size: 0.9em; - } - - .white { - color: white; - } - - .success { - color: @color_success; - } - - .primary { - color: @color_primary; - } - - .danger { - color: @color_danger; - } - - .cursor-tooltip { - position: fixed; - top: 4px; - left: 4px; - width: 10px; - height: 10px; - z-index: 1; - pointer-events: none; - - svg { - width: 20px; - height: 20px; - stroke-width: 4; - fill: black; - } - - @media (hover: none) { - display: none; - } - } - - .cursor-icon-sticker { - width: 20px; - height: 20px; - background-size: cover; - background-position: 0 50%; - position: absolute; - top: -30px; - } - - .track-vertical { - position: absolute; - right: 0; - height: 100%; - width: 10px !important; - } - - .thumb-vertical { - position: absolute; - width: 20px !important; - left: -10px; - border-radius: 4px 0 0 4px; - transition: background 250ms; - cursor: grab; - - &:hover, &:active { - background: rgba(255, 255, 255, 0.3); - } - - &::after { - content: ' '; - width: 5px; - height: 100%; - display: block; - right: 0; - position: absolute; - border-radius: 4px 0 0 4px; - background: rgba(255, 255, 255, 0.5); - } - } - - .pointer { - cursor: pointer; - } - - @media (max-width: @mobile_breakpoint) { - .desktop-only { - display: none; - } - } - - @media (min-width: @mobile_breakpoint) { - .mobile-only { - display: none; - } - } - - h2 { - font: inherit; - font-size: 18px; - font-weight: 400; - text-transform: uppercase; - margin: 10px 0; - } - - hr { - border: none; - height: 2px; - background: rgba(0, 0, 0, 0.3); - } - - input { - width: 100%; - padding: 5px 10px 5px 10px; - background: rgba(0, 0, 0, 0.3); - border-radius: @panel_radius; - border: none; - outline: none; - color: white; - - font-family: inherit; - font-size: 14px; - font-weight: 200; - } - - .relative { - position: relative; - } - - .justify-end { - justify-content: flex-end; - } -} diff --git a/src/styles/map.less b/src/styles/map.less deleted file mode 100644 index 69ada45..0000000 --- a/src/styles/map.less +++ /dev/null @@ -1,367 +0,0 @@ -:global { - #map { - width: 50% !important; - height: 100%; - position: absolute; - z-index: 1; - left: 0; - top: 0; - - cursor: crosshair; - } - - .leaflet-control-zoom { - display: none; - } - - .leaflet-touch .leaflet-bar a { - border-radius: @panel_radius !important; - } - - @keyframes vertex_spin { - 0% { - transform: scale(1); - } - 100% { - transform: scale(1.2); - } - } - - .leaflet-vertex-drag-helper { - pointer-events: none !important; - background: fade(red, 50%); - border-radius: 12px; - - &::after { - content: ' '; - width: 24px; - height: 24px; - border: 2px solid @red_secondary; - border-radius: 24px; - position: absolute; - top: -9px; - left: -9px; - animation: vertex_spin 500ms infinite linear alternate; - } - } - - .vertex-icon-mixin(@left, @right) { - &::after { - content: ' '; - position: absolute; - top: 4px; - left: @left; - right: @right; - width: 8px; - height: 8px; - background: white; - border-radius: 8px; - transform: scale(1); - transition: transform 150ms; - } - } - - .leaflet-vertex-icon { - outline: none !important; - border-radius: 10px; - opacity: 1; - border: none; - width: 16px !important; - height: 16px !important; - margin-left: -8px !important; - margin-top: -8px !important; - background: transparent; - position: absolute; - cursor: grab; - - &::before { - width: 24px; - height: 24px; - background: none; - content: ' '; - position: absolute; - transform: translate(-4px, -4px); - border-radius: 16px; - top: 0; - left: 0; - } - - @media (max-width: @mobile_breakpoint) { - &::before { - width: 32px; - height: 32px; - transform: translate(-8px, -8px); - background: rgba(255, 50, 0, 0.3); - } - } - - .vertex-icon-mixin(4px, auto); - - &:hover { - opacity: 1; - } - } - - .leaflet-arrow { - position: absolute; - left: -18px; - top: -18px; - width: 48px; - height: 48px; - pointer-events: none; - } - - .leaflet-arrow-icon { - pointer-events: none !important; - } - - .leaflet-km-marker, - .leaflet-km-marker-2 { - position: absolute; - z-index: 0 !important; - - .leaflet-km-dist { - background: @red_secondary; - color: white; - border-radius: 8px; - font-size: 12px; - text-align: center; - height: 14px; - display: inline-flex; - align-items: center; - justify-content: center; - position: relative; - top: 50%; - left: 50%; - font-weight: bold; - padding: 0 2px; - - svg { - position: absolute; - top: -16px; - left: 50%; - transform: translate(-50%, 0); - } - - &.reverse { - svg { - transform: translate(-50%, 0) rotate(180deg); - } - } - } - } - - .start-marker { - svg { - position: absolute; - left: -4px; - top: -4px; - } - } - - .end-marker { - .leaflet-km-dist { - left: auto; - right: -3px; - top: -2px; - position: absolute; - z-index: -10; - padding: 1px 15px 1px 6px; - border-radius: 10px; - - &::after { - content: ' '; - width: 8px; - height: 8px; - border-radius: 4px; - background: white; - position: absolute; - right: 4px; - top: 4px; - } - } - - &.right { - .leaflet-km-dist { - padding: 2px 4px 2px 16px; - left: -3px; - right: auto; - - &::after { - left: 5px; - right: auto; - } - } - } - } - - .router-marker { - div { - background: @router_line; - color: white; - left: auto; - right: 15px; - // transform: translate(50%, 0); - top: -3px; - position: absolute; - z-index: -10; - padding: 0 6px 0 6px; - border-radius: 12px; - font-weight: bold; - } - - &.right { - div { - right: auto; - left: 15px; - } - } - } - - .leaflet-km-marker-2 { - .leaflet-km-dist { - background: green; - } - } - - .touch-hinter-poly { - stroke: rgba(255, 50, 0, 0.1); - cursor: grab; - - @media (max-width: @mobile_breakpoint) { - stroke: rgba(255, 50, 0, 0.2); - } - } - - .leaflet-control-container .leaflet-routing-container-hide { - display: none; - } - - .leaflet-bar { - box-shadow: @bar_shadow !important; - border: none !important; - } - - .leaflet-bar a { - background: @bar_background; - color: white; - text-shadow: none; - user-select: none; - border-bottom: none; - - &:hover { - background: @bar_background; - color: white; - border-bottom: none; - } - } - - .location-marker { - width: 20px; - height: 3px; - margin-left: -10px; - margin-top: -2px; - outline: none; - z-index: 10001; - background: @red_secondary; - - &:after { - content: ' '; - box-shadow: 0 0 0 3px @red_secondary; - background: white; - border-radius: 8px; - width: 8px; - height: 8px; - position: absolute; - left: 6px; - top: -3px; - } - - &:before { - content: ' '; - display: block; - width: 3px; - height: 20px; - background: @red_secondary; - left: 8.5px; - top: -9px; - position: absolute; - } - } - - .leaflet-top { - top: 42px; - } - - .leaflet-div-icon { - background: none !important; - border: none !important; - } - - .custom-marker-cluster { - width: 24px; - height: 24px; - background: @cluster_small; - border-radius: 16px; - display: flex; - align-items: center; - justify-content: center; - color: white; - box-shadow: fade(@cluster_small, 70%) 0 0 0 5px; - font-weight: bold; - font-size: 13px; - transform: translate(-12px, -12px); - transition: box-shadow 250ms; - position: relative; - outline: none; - - &:hover { - box-shadow: fade(@cluster_small, 70%) 0 0 0 7px; - } - - span { - outline: none; - position: absolute; - right: -7px; - bottom: 11px; - background: @cluster_small; - width: 16px; - height: 16px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 8px; - font-size: 11px; - } - } - - #canvas { - background: #eeeeee; - z-index: 0; - - > div { - width: 100%; - height: 100%; - } - } - - .leaflet-pane { - user-select: none; - } - - .current-location { - width: 0; - height: 0; - position: relative; - - svg { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - fill: @bar_background; - stroke: white; - stroke-width: 0.2px; - } - } -} diff --git a/src/styles/map.scss b/src/styles/map.scss new file mode 100644 index 0000000..433979a --- /dev/null +++ b/src/styles/map.scss @@ -0,0 +1,365 @@ +#map { + width: 50% !important; + height: 100%; + position: absolute; + z-index: 1; + left: 0; + top: 0; + + cursor: crosshair; +} + +.leaflet-control-zoom { + display: none; +} + +.leaflet-touch .leaflet-bar a { + border-radius: $panel_radius !important; +} + +@keyframes vertex_spin { + 0% { + transform: scale(1); + } + 100% { + transform: scale(1.2); + } +} + +.leaflet-vertex-drag-helper { + pointer-events: none !important; + background: fade(red, 50%); + border-radius: 12px; + + &::after { + content: ' '; + width: 24px; + height: 24px; + border: 2px solid $red_secondary; + border-radius: 24px; + position: absolute; + top: -9px; + left: -9px; + animation: vertex_spin 500ms infinite linear alternate; + } +} + +@mixin vertex-icon-mixin($left, $right) { + &::after { + content: ' '; + position: absolute; + top: 4px; + left: $left; + right: $right; + width: 8px; + height: 8px; + background: white; + border-radius: 8px; + transform: scale(1); + transition: transform 150ms; + } +} + +.leaflet-vertex-icon { + outline: none !important; + border-radius: 10px; + opacity: 1; + border: none; + width: 16px !important; + height: 16px !important; + margin-left: -8px !important; + margin-top: -8px !important; + background: transparent; + position: absolute; + cursor: grab; + + &::before { + width: 24px; + height: 24px; + background: none; + content: ' '; + position: absolute; + transform: translate(-4px, -4px); + border-radius: 16px; + top: 0; + left: 0; + } + + @media (max-width: $mobile_breakpoint) { + &::before { + width: 32px; + height: 32px; + transform: translate(-8px, -8px); + background: rgba(255, 50, 0, 0.3); + } + } + + @include vertex-icon-mixin(4px, auto); + + &:hover { + opacity: 1; + } +} + +.leaflet-arrow { + position: absolute; + left: -18px; + top: -18px; + width: 48px; + height: 48px; + pointer-events: none; +} + +.leaflet-arrow-icon { + pointer-events: none !important; +} + +.leaflet-km-marker, +.leaflet-km-marker-2 { + position: absolute; + z-index: 0 !important; + + .leaflet-km-dist { + background: $red_secondary; + color: white; + border-radius: 8px; + font-size: 12px; + text-align: center; + height: 14px; + display: inline-flex; + align-items: center; + justify-content: center; + position: relative; + top: 50%; + left: 50%; + font-weight: bold; + padding: 0 2px; + + svg { + position: absolute; + top: -16px; + left: 50%; + transform: translate(-50%, 0); + } + + &.reverse { + svg { + transform: translate(-50%, 0) rotate(180deg); + } + } + } +} + +.start-marker { + svg { + position: absolute; + left: -4px; + top: -4px; + } +} + +.end-marker { + .leaflet-km-dist { + left: auto; + right: -3px; + top: -2px; + position: absolute; + z-index: -10; + padding: 1px 15px 1px 6px; + border-radius: 10px; + + &::after { + content: ' '; + width: 8px; + height: 8px; + border-radius: 4px; + background: white; + position: absolute; + right: 4px; + top: 4px; + } + } + + &.right { + .leaflet-km-dist { + padding: 2px 4px 2px 16px; + left: -3px; + right: auto; + + &::after { + left: 5px; + right: auto; + } + } + } +} + +.router-marker { + div { + background: $router_line; + color: white; + left: auto; + right: 15px; + // transform: translate(50%, 0); + top: -3px; + position: absolute; + z-index: -10; + padding: 0 6px 0 6px; + border-radius: 12px; + font-weight: bold; + } + + &.right { + div { + right: auto; + left: 15px; + } + } +} + +.leaflet-km-marker-2 { + .leaflet-km-dist { + background: green; + } +} + +.touch-hinter-poly { + stroke: rgba(255, 50, 0, 0.1); + cursor: grab; + + @media (max-width: $mobile_breakpoint) { + stroke: rgba(255, 50, 0, 0.2); + } +} + +.leaflet-control-container .leaflet-routing-container-hide { + display: none; +} + +.leaflet-bar { + box-shadow: $bar_shadow !important; + border: none !important; +} + +.leaflet-bar a { + background: $bar_background; + color: white; + text-shadow: none; + user-select: none; + border-bottom: none; + + &:hover { + background: $bar_background; + color: white; + border-bottom: none; + } +} + +.location-marker { + width: 20px; + height: 3px; + margin-left: -10px; + margin-top: -2px; + outline: none; + z-index: 10001; + background: $red_secondary; + + &:after { + content: ' '; + box-shadow: 0 0 0 3px $red_secondary; + background: white; + border-radius: 8px; + width: 8px; + height: 8px; + position: absolute; + left: 6px; + top: -3px; + } + + &:before { + content: ' '; + display: block; + width: 3px; + height: 20px; + background: $red_secondary; + left: 8.5px; + top: -9px; + position: absolute; + } +} + +.leaflet-top { + top: 42px; +} + +.leaflet-div-icon { + background: none !important; + border: none !important; +} + +.custom-marker-cluster { + width: 24px; + height: 24px; + background: $cluster_small; + border-radius: 16px; + display: flex; + align-items: center; + justify-content: center; + color: white; + box-shadow: fade($cluster_small, 70%) 0 0 0 5px; + font-weight: bold; + font-size: 13px; + transform: translate(-12px, -12px); + transition: box-shadow 250ms; + position: relative; + outline: none; + + &:hover { + box-shadow: fade($cluster_small, 70%) 0 0 0 7px; + } + + span { + outline: none; + position: absolute; + right: -7px; + bottom: 11px; + background: $cluster_small; + width: 16px; + height: 16px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + font-size: 11px; + } +} + +#canvas { + background: #eeeeee; + z-index: 0; + + > div { + width: 100%; + height: 100%; + } +} + +.leaflet-pane { + user-select: none; +} + +.current-location { + width: 0; + height: 0; + position: relative; + + svg { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + fill: $bar_background; + stroke: white; + stroke-width: 0.2px; + } +} diff --git a/src/styles/panel.less b/src/styles/panel.less deleted file mode 100644 index 5c8c4f9..0000000 --- a/src/styles/panel.less +++ /dev/null @@ -1,796 +0,0 @@ -:global { - .control-bar { - background: @bar_background; - border-radius: @panel_radius; - display: flex; - box-shadow: @bar_shadow; - align-items: center; - justify-content: center; - - @media (max-width: @mobile_breakpoint) { - box-shadow: none; - } - } - - .control-bar-padded { - padding: 0 5px; - } - - .control-sep { - height: 36px; - background: #222222; - width: 4px; - - @media (max-width: @mobile_breakpoint) { - margin-left: -1px; - margin-right: -1px; - width: 6px; - } - } - - .secondary-bar { - background: #222222; - margin: 0 -1px; - padding: 0 1px; - - &:first-child { - border-radius: @panel_radius 0 0 @panel_radius; - } - - .panel & button { - height: 40px; - padding: 4px; - } - - &__undo { - opacity: 0; - transform: translate(50px, 0); - pointer-events: none; - touch-action: none; - transition: transform 0.25s, opacity 0.25s; - z-index: -1; - - &.active { - opacity: 1; - transform: translate(0, 0); - pointer-events: all; - touch-action: initial; - } - } - } - - .panel { - position: fixed; - left: 10px; - bottom: 10px; - z-index: 6; - color: white; - display: flex; - align-items: center; - transform: translateY(100px); - transition: transform 500ms; - - &.active { - transform: translateY(0); - } - - &.right { - left: auto; - right: 10px; - } - - &.center { - left: 50%; - right: auto; - transform: translateX(-50%); - } - - button { - border: none; - background: transparent; - padding: 8px; - outline: none; - cursor: pointer; - display: inline-flex; - color: white; - align-items: center; - transition: background-color 500ms; - height: 48px; - box-sizing: border-box; - user-select: none; - position: relative; - - &:hover { - background: rgba(100, 100, 100, 0.2); - } - - span { - margin-right: 8px; - font-size: 14px; - font-weight: 500; - margin-left: 8px; - text-transform: uppercase; - } - - &:first-child { - border-radius: @panel_radius 0 0 @panel_radius; - } - - &:last-child { - border-radius: 0 @panel_radius @panel_radius 0; - } - - &.active { - svg { - fill: url(#activeButtonGradient); - stroke: url(#activeButtonGradient); - } - } - - &.disabled, - &.inactive { - color: #999999; - - svg { - fill: #999999; - } - } - - &.disabled { - pointer-events: none; - } - - &.highlighted { - background: rgba(255, 255, 255, 0.1); - } - - &.cancel { - // background: linear-gradient(270deg, #0f5871, #444444 60%); - } - - &.primary { - background: linear-gradient(150deg, @blue_primary, @blue_secondary) 50% 50% no-repeat; - background-size: 100% 100%; - } - - &.success { - background: linear-gradient(150deg, @green_primary, @green_secondary) 50% 50% no-repeat; - background-size: 100% 100%; - } - - &.danger { - background: linear-gradient(150deg, @red_primary, @red_secondary) 50% 50% no-repeat; - background-size: 100% 100%; - } - - &.single { - border-radius: @panel_radius; - } - - svg { - fill: white; - stroke: white; - display: inline; - fill-rule: evenodd; - stroke-linecap: butt; - stroke-linejoin: miter; - stroke-miterlimit: 4; - stroke-dasharray: none; - stroke-width: 3; - } - } - } - - .panel-tooltip { - position: absolute; - bottom: 58px; - left: 50%; - background: @tooltip_background; - padding: 10px; - transform: translate(-50%, -10px); - border-radius: @panel_radius; - opacity: 0; - pointer-events: none; - transition: all 250ms; - font-size: 13px; - color: white; - - @media (max-width: @mobile_breakpoint) { - display: none; - } - - &::after { - content: ' '; - width: 10px; - height: 10px; - position: absolute; - background: @tooltip_background; - bottom: 0; - transform: translate(-50%, 5px) rotate(45deg); - left: 50%; - } - - &.top { - bottom: auto; - top: 43px; - transform: translate(-50%, 10px); - - &::after { - bottom: auto; - top: 0; - transform: translate(-50%, -5px) rotate(45deg); - } - } - } - - .panel button, - .tooltip-container { - position: relative; - - &:hover .panel-tooltip { - opacity: 1; - transform: translate(-50%, 0); - } - } - - .control-bar-counter { - color: white; - min-width: 12px; - height: 12px; - border-radius: 10px; - font-weight: 600; - font-size: 10px; - position: absolute; - bottom: 50%; - right: 50%; - box-sizing: border-box; - transform: translate(50%, 50%); - line-height: 12px; - } - - .panel-separator { - height: 48px; - width: 4px; - background: #222222; - } - - .panel-user { - @media (max-width: @mobile_breakpoint) { - z-index: 3; - flex-direction: column-reverse; - align-items: flex-start; - - .control-sep { - opacity: 0; - height: 10px; - } - } - - @media (max-width: @micro_breakpoint) { - bottom: 68px; - } - } - - .control-dialog { - position: absolute; - right: 10px; - bottom: 68px; - z-index: 3; - color: white; - box-sizing: border-box; - // padding-bottom: 48px; - box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px; - background: #222222; - border-radius: @panel_radius; - - &.bottom.right { - width: 100%; - max-width: 500px; - } - - &.top { - bottom: auto; - top: 52px; - } - - &.left, - &__left { - right: auto; - left: 10px; - - @media (max-width: @micro_breakpoint) { - left: 68px; - } - } - - .helper:first-child { - border-radius: @panel_radius @panel_radius 0 0; - } - - .helper:last-child { - border-radius: 0 0 @panel_radius @panel_radius; - } - - .helper:only-child { - border-radius: @panel_radius; - } - - &__big { - width: calc(100% - 20px); - max-width: 620px; - - @media (max-width: @micro_breakpoint) { - width: calc(100% - 78px); - } - } - - &__medium { - width: calc(100% - 20px); - max-width: 417px; - - @media (max-width: @micro_breakpoint) { - width: calc(100% - 78px); - } - } - - &__small { - width: calc(100% - 20px); - max-width: 324px; - - @media (max-width: @micro_breakpoint) { - width: calc(100% - 78px); - } - } - } - - .control-dialog-provider { - width: 500px; - - @media (max-width: @mobile_breakpoint) { - width: 100%; - left: 0; - padding: 0 10px; - } - } - - .helper { - // width: 500px; - padding: 12px; - font-weight: 200; - font-size: 1em; - display: flex; - - //background: #222222; - //border-radius: @panel_radius; - box-shadow: @bar_shadow; - - @media (max-width: @mobile_breakpoint) { - box-shadow: none; - } - } - - .helper-prefetch { - flex-direction: column; - } - - .helper__text { - width: 100%; - display: flex; - align-items: center; - - svg { - fill: white; - width: 24px; - height: 24px; - margin-right: 6px; - } - - &.success { - color: @color_success; - - svg { - fill: @color_success; - } - } - - &.primary { - color: @color_danger; - - svg { - fill: @color_danger; - } - } - - &.danger { - color: @color_danger; - - svg { - fill: @color_danger; - } - } - } - - .flex_1 { - flex: 1; - } - - .helper__icon_button { - width: 32px; - display: flex; - align-items: center; - justify-content: center; - padding: 0; - background: none; - border: none; - outline: none; - cursor: pointer; - - svg { - margin-right: 0; - } - - &.inactive { - opacity: 0.5; - } - - &.active { - svg { - fill: url(#activeButtonGradient); - } - } - } - - .helper__buttons { - display: flex; - align-items: center; - user-select: none; - - .button { - margin-left: 10px; - } - - svg { - fill: white; - stroke: white; - - cursor: pointer; - opacity: 0.5; - transition: opacity 250ms; - } - - &:hover svg { - opacity: 1; - } - } - - .trash-buttons { - @media (max-width: @mobile_breakpoint) { - flex-direction: column; - - .button-group { - margin-bottom: 10px; - } - } - } - - .logo-helper { - width: 200px; - flex-direction: column; - padding: 16px 0 16px 0; - position: relative; - overflow: hidden; - } - - .helper-back { - width: 200px; - height: 200px; - z-index: -1; - position: absolute; - bottom: 0; - right: 0; - - svg { - fill: @bar_background; - } - } - - .helper-menu-item { - padding: 8px 20px; - user-select: none; - cursor: pointer; - position: relative; - - &:hover { - background: rgba(255, 255, 255, 0.1); - } - - &.active { - &::after { - content: ' '; - width: 16px; - height: 4px; - left: 0; - top: 14px; - position: absolute; - background: white; - } - } - } - - .provider-helper { - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - grid-column-gap: 10px; - grid-row-gap: 10px; - - .provider-helper-thumb { - height: 100px; - background: #333333; - display: flex; - align-items: flex-end; - justify-content: center; - background: 50% 50% no-repeat; - border-radius: @panel_radius; - cursor: pointer; - position: relative; - } - - .provider-helper-check { - width: 40px; - height: 40px; - position: absolute; - bottom: 50%; - right: 50%; - background: rgba(0, 0, 0, 0.7); - border-radius: 20px; - transform: translate(50%, 50%); - - svg { - fill: white; - padding: 4px; - } - } - } - - .status-panel { - position: fixed; - top: 10px; - left: 10px; - height: 32px; - z-index: 5; - display: flex; - - &.bottom { - top: auto; - bottom: 68px; - } - - &.right { - left: auto; - right: 10px; - - .status-bar { - margin-right: 0; - margin-left: 10px; - } - } - } - - .status-bar { - background: #222222; - display: flex; - font-weight: 200; - color: #cccccc; - user-select: none; - border-radius: @panel_radius; - margin-right: 10px; - align-items: center; - justify-content: center; - box-shadow: @bar_shadow; - outline: none; - position: relative; - - @media (max-width: @mobile_breakpoint) { - box-shadow: none; - } - - span { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - flex: 1; - text-transform: uppercase; - font-size: 0.9em; - } - - &.square { - width: 32px; - } - - &.padded { - padding: 0 10px; - } - - &.warning { - background-color: shade(@red_secondary, 10%); - - svg { - //fill: @red_secondary; - fill: black; - } - } - - &.icon-only { - padding: 0 10px 0 15px; - } - - &.top-control { - justify-content: flex-start; - } - - svg { - fill: #cccccc; - margin-left: -5px; - } - - &:hover { - .status-bar-tip { - opacity: 1; - } - } - } - - .status-bar-tip { - position: absolute; - background: @bar_background; - top: 100%; - padding: 10px; - margin-top: 10px; - right: 0; - border-radius: @panel_radius; - touch-action: none; - pointer-events: none; - opacity: 0; - transition: opacity 250ms; - } - - .status-bar-sep { - height: 24px; - width: 1px; - background: rgba(255, 255, 255, 0.2); - margin: 0 8px 0 5px; - } - - .dialog-prefetch-stage { - font-size: 1em; - text-transform: uppercase; - opacity: 0.7; - } - - .dialog-prefetch-progress { - padding: 10px 0 5px; - } - - .speed-helper { - width: 300px; - padding: 0 20px; - - .rc-slider { - width: 100%; - } - } - - .title-dialog-wrapper { - position: fixed; - bottom: 0; - left: 0; - width: 360px; - height: 100%; - background: transparent; - z-index: 2; - padding: 10px 10px 58px 10px; - box-sizing: border-box; - display: flex; - align-items: flex-end; - pointer-events: none; - touch-action: none; - } - - .title-dialog-sizer { - height: 100%; - width: 100%; - display: flex; - align-items: flex-end; - } - - .title-dialog { - z-index: 2; - transition: opacity 500ms, transform 1s; - transform: translate(0, 68px); - user-select: none; - pointer-events: all; - touch-action: auto; - display: flex; - flex-direction: column; - opacity: 0; - align-items: flex-start; - - @media (max-width: @mobile_breakpoint) { - display: none; - } - - &.active { - opacity: 1; - transform: translate(0, 0); - } - - .title-dialog-pane { - margin-bottom: 10px; - padding: 10px; - background: @title_dialog_color; - color: fade(white, 50%); - font-size: 13px; - box-sizing: border-box; - border-radius: @panel_radius; - - h2 { - margin: 0; - padding: 0 5px 0 0; - font-weight: 400; - font-size: 1.6em; - color: white; - } - } - - .title-dialog-text { - overflow: hidden; - transition: height 500ms; - line-height: 14px; - padding: 0; - position: relative; - color: white; - - > div { - margin: 10px; - white-space: pre-line; - } - - &.has_shade { - ::after { - content: ' '; - width: 100%; - height: 40px; - background: linear-gradient(fade(@title_dialog_color, 0), @title_dialog_color); - position: absolute; - bottom: 0; - left: 0; - transition: opacity 250ms; - pointer-events: none; - touch-action: none; - } - - &:hover { - ::after { - opacity: 0; - } - } - } - } - } - - .location-bar { - width: 32px; - } - - .nominatim-panel { - position: fixed; - bottom: 53px; - left: 10px; - width: 272px; - } - - .nominatim-search-input { - padding-left: 10px; - flex: 1; - } -} diff --git a/src/styles/panel.scss b/src/styles/panel.scss new file mode 100644 index 0000000..775f956 --- /dev/null +++ b/src/styles/panel.scss @@ -0,0 +1,794 @@ +.control-bar { + background: $bar_background; + border-radius: $panel_radius; + display: flex; + box-shadow: $bar_shadow; + align-items: center; + justify-content: center; + + @media (max-width: $mobile_breakpoint) { + box-shadow: none; + } +} + +.control-bar-padded { + padding: 0 5px; +} + +.control-sep { + height: 36px; + background: #222222; + width: 4px; + + @media (max-width: $mobile_breakpoint) { + margin-left: -1px; + margin-right: -1px; + width: 6px; + } +} + +.secondary-bar { + background: #222222; + margin: 0 -1px; + padding: 0 1px; + + &:first-child { + border-radius: $panel_radius 0 0 $panel_radius; + } + + .panel & button { + height: 40px; + padding: 4px; + } + + &__undo { + opacity: 0; + transform: translate(50px, 0); + pointer-events: none; + touch-action: none; + transition: transform 0.25s, opacity 0.25s; + z-index: -1; + + &.active { + opacity: 1; + transform: translate(0, 0); + pointer-events: all; + touch-action: initial; + } + } +} + +.panel { + position: fixed; + left: 10px; + bottom: 10px; + z-index: 6; + color: white; + display: flex; + align-items: center; + transform: translateY(100px); + transition: transform 500ms; + + &.active { + transform: translateY(0); + } + + &.right { + left: auto; + right: 10px; + } + + &.center { + left: 50%; + right: auto; + transform: translateX(-50%); + } + + button { + border: none; + background: transparent; + padding: 8px; + outline: none; + cursor: pointer; + display: inline-flex; + color: white; + align-items: center; + transition: background-color 500ms; + height: 48px; + box-sizing: border-box; + user-select: none; + position: relative; + + &:hover { + background: rgba(100, 100, 100, 0.2); + } + + span { + margin-right: 8px; + font-size: 14px; + font-weight: 500; + margin-left: 8px; + text-transform: uppercase; + } + + &:first-child { + border-radius: $panel_radius 0 0 $panel_radius; + } + + &:last-child { + border-radius: 0 $panel_radius $panel_radius 0; + } + + &.active { + svg { + fill: url(#activeButtonGradient); + stroke: url(#activeButtonGradient); + } + } + + &.disabled, + &.inactive { + color: #999999; + + svg { + fill: #999999; + } + } + + &.disabled { + pointer-events: none; + } + + &.highlighted { + background: rgba(255, 255, 255, 0.1); + } + + &.cancel { + // background: linear-gradient(270deg, #0f5871, #444444 60%); + } + + &.primary { + background: linear-gradient(150deg, $blue_primary, $blue_secondary) 50% 50% no-repeat; + background-size: 100% 100%; + } + + &.success { + background: linear-gradient(150deg, $green_primary, $green_secondary) 50% 50% no-repeat; + background-size: 100% 100%; + } + + &.danger { + background: linear-gradient(150deg, $red_primary, $red_secondary) 50% 50% no-repeat; + background-size: 100% 100%; + } + + &.single { + border-radius: $panel_radius; + } + + svg { + fill: white; + stroke: white; + display: inline; + fill-rule: evenodd; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-width: 3; + } + } +} + +.panel-tooltip { + position: absolute; + bottom: 58px; + left: 50%; + background: $tooltip_background; + padding: 10px; + transform: translate(-50%, -10px); + border-radius: $panel_radius; + opacity: 0; + pointer-events: none; + transition: all 250ms; + font-size: 13px; + color: white; + + @media (max-width: $mobile_breakpoint) { + display: none; + } + + &::after { + content: ' '; + width: 10px; + height: 10px; + position: absolute; + background: $tooltip_background; + bottom: 0; + transform: translate(-50%, 5px) rotate(45deg); + left: 50%; + } + + &.top { + bottom: auto; + top: 43px; + transform: translate(-50%, 10px); + + &::after { + bottom: auto; + top: 0; + transform: translate(-50%, -5px) rotate(45deg); + } + } +} + +.panel button, +.tooltip-container { + position: relative; + + &:hover .panel-tooltip { + opacity: 1; + transform: translate(-50%, 0); + } +} + +.control-bar-counter { + color: white; + min-width: 12px; + height: 12px; + border-radius: 10px; + font-weight: 600; + font-size: 10px; + position: absolute; + bottom: 50%; + right: 50%; + box-sizing: border-box; + transform: translate(50%, 50%); + line-height: 12px; +} + +.panel-separator { + height: 48px; + width: 4px; + background: #222222; +} + +.panel-user { + @media (max-width: $mobile_breakpoint) { + z-index: 3; + flex-direction: column-reverse; + align-items: flex-start; + + .control-sep { + opacity: 0; + height: 10px; + } + } + + @media (max-width: $micro_breakpoint) { + bottom: 68px; + } +} + +.control-dialog { + position: absolute; + right: 10px; + bottom: 68px; + z-index: 3; + color: white; + box-sizing: border-box; + // padding-bottom: 48px; + box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px; + background: #222222; + border-radius: $panel_radius; + + &.bottom.right { + width: 100%; + max-width: 500px; + } + + &.top { + bottom: auto; + top: 52px; + } + + &.left, + &__left { + right: auto; + left: 10px; + + @media (max-width: $micro_breakpoint) { + left: 68px; + } + } + + .helper:first-child { + border-radius: $panel_radius $panel_radius 0 0; + } + + .helper:last-child { + border-radius: 0 0 $panel_radius $panel_radius; + } + + .helper:only-child { + border-radius: $panel_radius; + } + + &__big { + width: calc(100% - 20px); + max-width: 620px; + + @media (max-width: $micro_breakpoint) { + width: calc(100% - 78px); + } + } + + &__medium { + width: calc(100% - 20px); + max-width: 417px; + + @media (max-width: $micro_breakpoint) { + width: calc(100% - 78px); + } + } + + &__small { + width: calc(100% - 20px); + max-width: 324px; + + @media (max-width: $micro_breakpoint) { + width: calc(100% - 78px); + } + } +} + +.control-dialog-provider { + width: 500px; + + @media (max-width: $mobile_breakpoint) { + width: 100%; + left: 0; + padding: 0 10px; + } +} + +.helper { + // width: 500px; + padding: 12px; + font-weight: 200; + font-size: 1em; + display: flex; + + //background: #222222; + //border-radius: $panel_radius; + box-shadow: $bar_shadow; + + @media (max-width: $mobile_breakpoint) { + box-shadow: none; + } +} + +.helper-prefetch { + flex-direction: column; +} + +.helper__text { + width: 100%; + display: flex; + align-items: center; + + svg { + fill: white; + width: 24px; + height: 24px; + margin-right: 6px; + } + + &.success { + color: $color_success; + + svg { + fill: $color_success; + } + } + + &.primary { + color: $color_danger; + + svg { + fill: $color_danger; + } + } + + &.danger { + color: $color_danger; + + svg { + fill: $color_danger; + } + } +} + +.flex_1 { + flex: 1; +} + +.helper__icon_button { + width: 32px; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + background: none; + border: none; + outline: none; + cursor: pointer; + + svg { + margin-right: 0; + } + + &.inactive { + opacity: 0.5; + } + + &.active { + svg { + fill: url(#activeButtonGradient); + } + } +} + +.helper__buttons { + display: flex; + align-items: center; + user-select: none; + + .button { + margin-left: 10px; + } + + svg { + fill: white; + stroke: white; + + cursor: pointer; + opacity: 0.5; + transition: opacity 250ms; + } + + &:hover svg { + opacity: 1; + } +} + +.trash-buttons { + @media (max-width: $mobile_breakpoint) { + flex-direction: column; + + .button-group { + margin-bottom: 10px; + } + } +} + +.logo-helper { + width: 200px; + flex-direction: column; + padding: 16px 0 16px 0; + position: relative; + overflow: hidden; +} + +.helper-back { + width: 200px; + height: 200px; + z-index: -1; + position: absolute; + bottom: 0; + right: 0; + + svg { + fill: $bar_background; + } +} + +.helper-menu-item { + padding: 8px 20px; + user-select: none; + cursor: pointer; + position: relative; + + &:hover { + background: rgba(255, 255, 255, 0.1); + } + + &.active { + &::after { + content: ' '; + width: 16px; + height: 4px; + left: 0; + top: 14px; + position: absolute; + background: white; + } + } +} + +.provider-helper { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-column-gap: 10px; + grid-row-gap: 10px; + + .provider-helper-thumb { + height: 100px; + background: #333333; + display: flex; + align-items: flex-end; + justify-content: center; + background: 50% 50% no-repeat; + border-radius: $panel_radius; + cursor: pointer; + position: relative; + } + + .provider-helper-check { + width: 40px; + height: 40px; + position: absolute; + bottom: 50%; + right: 50%; + background: rgba(0, 0, 0, 0.7); + border-radius: 20px; + transform: translate(50%, 50%); + + svg { + fill: white; + padding: 4px; + } + } +} + +.status-panel { + position: fixed; + top: 10px; + left: 10px; + height: 32px; + z-index: 5; + display: flex; + + &.bottom { + top: auto; + bottom: 68px; + } + + &.right { + left: auto; + right: 10px; + + .status-bar { + margin-right: 0; + margin-left: 10px; + } + } +} + +.status-bar { + background: #222222; + display: flex; + font-weight: 200; + color: #cccccc; + user-select: none; + border-radius: $panel_radius; + margin-right: 10px; + align-items: center; + justify-content: center; + box-shadow: $bar_shadow; + outline: none; + position: relative; + + @media (max-width: $mobile_breakpoint) { + box-shadow: none; + } + + span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; + text-transform: uppercase; + font-size: 0.9em; + } + + &.square { + width: 32px; + } + + &.padded { + padding: 0 10px; + } + + &.warning { + background-color: shade($red_secondary, 10%); + + svg { + //fill: $red_secondary; + fill: black; + } + } + + &.icon-only { + padding: 0 10px 0 15px; + } + + &.top-control { + justify-content: flex-start; + } + + svg { + fill: #cccccc; + margin-left: -5px; + } + + &:hover { + .status-bar-tip { + opacity: 1; + } + } +} + +.status-bar-tip { + position: absolute; + background: $bar_background; + top: 100%; + padding: 10px; + margin-top: 10px; + right: 0; + border-radius: $panel_radius; + touch-action: none; + pointer-events: none; + opacity: 0; + transition: opacity 250ms; +} + +.status-bar-sep { + height: 24px; + width: 1px; + background: rgba(255, 255, 255, 0.2); + margin: 0 8px 0 5px; +} + +.dialog-prefetch-stage { + font-size: 1em; + text-transform: uppercase; + opacity: 0.7; +} + +.dialog-prefetch-progress { + padding: 10px 0 5px; +} + +.speed-helper { + width: 300px; + padding: 0 20px; + + .rc-slider { + width: 100%; + } +} + +.title-dialog-wrapper { + position: fixed; + bottom: 0; + left: 0; + width: 360px; + height: 100%; + background: transparent; + z-index: 2; + padding: 10px 10px 58px 10px; + box-sizing: border-box; + display: flex; + align-items: flex-end; + pointer-events: none; + touch-action: none; +} + +.title-dialog-sizer { + height: 100%; + width: 100%; + display: flex; + align-items: flex-end; +} + +.title-dialog { + z-index: 2; + transition: opacity 500ms, transform 1s; + transform: translate(0, 68px); + user-select: none; + pointer-events: all; + touch-action: auto; + display: flex; + flex-direction: column; + opacity: 0; + align-items: flex-start; + + @media (max-width: $mobile_breakpoint) { + display: none; + } + + &.active { + opacity: 1; + transform: translate(0, 0); + } + + .title-dialog-pane { + margin-bottom: 10px; + padding: 10px; + background: $title_dialog_color; + color: fade(white, 50%); + font-size: 13px; + box-sizing: border-box; + border-radius: $panel_radius; + + h2 { + margin: 0; + padding: 0 5px 0 0; + font-weight: 400; + font-size: 1.6em; + color: white; + } + } + + .title-dialog-text { + overflow: hidden; + transition: height 500ms; + line-height: 14px; + padding: 0; + position: relative; + color: white; + + > div { + margin: 10px; + white-space: pre-line; + } + + &.has_shade { + ::after { + content: ' '; + width: 100%; + height: 40px; + background: linear-gradient(fade($title_dialog_color, 0), $title_dialog_color); + position: absolute; + bottom: 0; + left: 0; + transition: opacity 250ms; + pointer-events: none; + touch-action: none; + } + + &:hover { + ::after { + opacity: 0; + } + } + } + } +} + +.location-bar { + width: 32px; +} + +.nominatim-panel { + position: fixed; + bottom: 53px; + left: 10px; + width: 272px; +} + +.nominatim-search-input { + padding-left: 10px; + flex: 1; +} diff --git a/src/styles/progress.less b/src/styles/progress.less deleted file mode 100644 index a9506a5..0000000 --- a/src/styles/progress.less +++ /dev/null @@ -1,18 +0,0 @@ -:global { - .progress { - width: 100%; - position: relative; - height: 5px; - background: #111111; - border-radius: @panel_radius; - box-sizing: border-box; - - .bar { - width: 30%; - background: linear-gradient(270deg, @blue_primary, @blue_secondary); - height: 100%; - border-radius: @panel_radius; - transition: width 500ms; - } - } -} diff --git a/src/styles/progress.scss b/src/styles/progress.scss new file mode 100644 index 0000000..dd59173 --- /dev/null +++ b/src/styles/progress.scss @@ -0,0 +1,16 @@ +.progress { + width: 100%; + position: relative; + height: 5px; + background: #111111; + border-radius: $panel_radius; + box-sizing: border-box; + + .bar { + width: 30%; + background: linear-gradient(270deg, $blue_primary, $blue_secondary); + height: 100%; + border-radius: $panel_radius; + transition: width 500ms; + } +} diff --git a/src/styles/renderer.less b/src/styles/renderer.less deleted file mode 100644 index eeb1cba..0000000 --- a/src/styles/renderer.less +++ /dev/null @@ -1,55 +0,0 @@ -:global { - .renderer-shade { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1000; - background: rgba(0, 0, 0, 0.9); - display: flex; - align-items: center; - justify-content: center; - padding-bottom: 80px; - box-sizing: border-box; - - > div { - display: flex; - align-items: center; - justify-content: center; - position: relative; - transition: opacity 250ms; - } - - img#rendererOutput { - width: 300px; - height: 300px; - } - - .croppr-region { - box-shadow: rgba(255, 255, 255, 0.2) 0 0 0 6px, rgba(0, 0, 0, 0.3) 0 0 0 1px; - border: none; - position: absolute; - top: 0; - left: 0; - overflow: hidden; - } - - .croppr-handle { - width: 12px; - height: 12px; - border-radius: 8px; - border: none; - box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px; - } - } - - .renderer-logo { - position: absolute; - bottom: 0; - right: 0; - pointer-events: none; - - transform-origin: 100% 100%; - } -} diff --git a/src/styles/renderer.scss b/src/styles/renderer.scss new file mode 100644 index 0000000..bbe84d5 --- /dev/null +++ b/src/styles/renderer.scss @@ -0,0 +1,53 @@ +.renderer-shade { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; + background: rgba(0, 0, 0, 0.9); + display: flex; + align-items: center; + justify-content: center; + padding-bottom: 80px; + box-sizing: border-box; + + > div { + display: flex; + align-items: center; + justify-content: center; + position: relative; + transition: opacity 250ms; + } + + img#rendererOutput { + width: 300px; + height: 300px; + } + + .croppr-region { + box-shadow: rgba(255, 255, 255, 0.2) 0 0 0 6px, rgba(0, 0, 0, 0.3) 0 0 0 1px; + border: none; + position: absolute; + top: 0; + left: 0; + overflow: hidden; + } + + .croppr-handle { + width: 12px; + height: 12px; + border-radius: 8px; + border: none; + box-shadow: rgba(0, 0, 0, 0.3) 0 0 0 1px; + } +} + +.renderer-logo { + position: absolute; + bottom: 0; + right: 0; + pointer-events: none; + + transform-origin: 100% 100%; +} diff --git a/src/styles/router.less b/src/styles/router.less deleted file mode 100644 index e9bd686..0000000 --- a/src/styles/router.less +++ /dev/null @@ -1,43 +0,0 @@ -:global { - .router-waypoint { - width: 40px; - height: 40px; - margin-left: -20px; - margin-top: -20px; - outline: none; - z-index: 10001; - - &:after { - content: ' '; - display: block; - width: 20px; - height: 20px; - border-radius: 10px; - box-shadow: 0 0 0 2px @router_line; - position: absolute; - left: 10px; - top: 10px; - } - - &:before { - content: ' '; - display: block; - width: 5px; - height: 5px; - border-radius: 10px; - box-shadow: 0 0 0 2px @router_line; - background: @router_line; - position: absolute; - left: 18px; - top: 18px; - } - - } - - .router-helper { - } - - .router-helper__button { - white-space: nowrap; - } -} diff --git a/src/styles/router.scss b/src/styles/router.scss new file mode 100644 index 0000000..db28f70 --- /dev/null +++ b/src/styles/router.scss @@ -0,0 +1,41 @@ +.router-waypoint { + width: 40px; + height: 40px; + margin-left: -20px; + margin-top: -20px; + outline: none; + z-index: 10001; + + &:after { + content: ' '; + display: block; + width: 20px; + height: 20px; + border-radius: 10px; + box-shadow: 0 0 0 2px $router_line; + position: absolute; + left: 10px; + top: 10px; + } + + &:before { + content: ' '; + display: block; + width: 5px; + height: 5px; + border-radius: 10px; + box-shadow: 0 0 0 2px $router_line; + background: $router_line; + position: absolute; + left: 18px; + top: 18px; + } + +} + +.router-helper { +} + +.router-helper__button { + white-space: nowrap; +} diff --git a/src/styles/save.less b/src/styles/save.less deleted file mode 100644 index 226c7cd..0000000 --- a/src/styles/save.less +++ /dev/null @@ -1,185 +0,0 @@ -:global { - .save-helper { - padding: 0; - flex-direction: column; - } - - .save-title { - padding: 10px; - width: 100%; - background: linear-gradient(175deg, #abc837 -50%, #009c80 150%); - flex-direction: column; - border-radius: @panel_radius @panel_radius 0 0; - font-weight: 200; - box-sizing: border-box; - } - - @keyframes jump { - 0% { - transform: translate3d(0, 0, 0) scale(0.5); - } - 100% { - transform: translate3d(0, -20px, 0) scale(1); - } - } - - .save-loader { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: @loading_shade; - z-index: 2; - display: flex; - align-items: center; - justify-content: center; - transition: opacity 250ms; - opacity: 0; - touch-action: none; - pointer-events: none; - text-transform: uppercase; - font-size: 1.2em; - color: fade(white, 70%); - - svg { - fill: white; - - &:nth-child(2) { - animation-delay: 200ms; - } - - &:nth-child(3) { - animation-delay: 400ms; - } - } - - &.active { - opacity: 1; - touch-action: auto; - pointer-events: all; - - svg { - animation: jump infinite alternate 600ms; - } - } - } - - .save-description { - padding: 5px 10px; - } - - .save-title-input { - background: rgba(0, 0, 0, 0.3); - border-radius: @panel_radius; - display: flex; - - input { - width: 100%; - padding: 5px; - background: transparent; - border: none; - outline: none; - color: white; - - font-family: inherit; - font-size: 14px; - font-weight: 200; - } - } - - .save-title-label { - display: flex; - padding: 5px 10px; - background: rgba(0, 0, 0, 0.1); - height: 100%; - } - - .save-address-input { - background: rgba(0, 0, 0, 0.2); - border-radius: 2px; - display: flex; - margin-bottom: 5px; - - input { - padding: 5px 5px 5px 2px; - background: transparent; - } - } - - .save-address-label { - display: flex; - padding: 5px 0 5px 10px; - height: 100%; - opacity: 0.5; - white-space: nowrap; - } - - .save-address-copy { - background: rgba(255, 255, 255, 0.1); - padding: 0 5px; - border-radius: 0 @panel_radius @panel_radius 0; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: background-color 250ms; - - &:hover { - background: rgba(255, 255, 255, 0.2); - } - - svg { - fill: white; - } - } - - .save-text { - padding: 10px; - line-height: 1.1em; - min-height: 2.2em; - font-size: 0.9em; - } - - .save-buttons { - display: flex; - padding: 0px; - margin-top: 20px; - margin-bottom: 5px; - - .button { - margin-left: 10px; - } - } - - .save-buttons-text { - flex: 1; - padding: 0 10px 2px 10px; - align-items: center; - display: flex; - - .switch { - margin-right: 0.5em; - } - } - - .save-description { - textarea { - background: rgba(0, 0, 0, 0.3); - outline: none; - border: none; - border-radius: 3px; - width: 100%; - resize: none; - color: inherit; - font: inherit; - padding: 5px 10px; - font-size: 14px; - } - } - - .save-controls { - padding: 5px 10px; - user-select: none; - } -} diff --git a/src/styles/save.scss b/src/styles/save.scss new file mode 100644 index 0000000..862b130 --- /dev/null +++ b/src/styles/save.scss @@ -0,0 +1,183 @@ +.save-helper { + padding: 0; + flex-direction: column; +} + +.save-title { + padding: 10px; + width: 100%; + background: linear-gradient(175deg, #abc837 -50%, #009c80 150%); + flex-direction: column; + border-radius: $panel_radius $panel_radius 0 0; + font-weight: 200; + box-sizing: border-box; +} + +@keyframes jump { + 0% { + transform: translate3d(0, 0, 0) scale(0.5); + } + 100% { + transform: translate3d(0, -20px, 0) scale(1); + } +} + +.save-loader { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: $loading_shade; + z-index: 2; + display: flex; + align-items: center; + justify-content: center; + transition: opacity 250ms; + opacity: 0; + touch-action: none; + pointer-events: none; + text-transform: uppercase; + font-size: 1.2em; + color: fade(white, 70%); + + svg { + fill: white; + + &:nth-child(2) { + animation-delay: 200ms; + } + + &:nth-child(3) { + animation-delay: 400ms; + } + } + + &.active { + opacity: 1; + touch-action: auto; + pointer-events: all; + + svg { + animation: jump infinite alternate 600ms; + } + } +} + +.save-description { + padding: 5px 10px; +} + +.save-title-input { + background: rgba(0, 0, 0, 0.3); + border-radius: $panel_radius; + display: flex; + + input { + width: 100%; + padding: 5px; + background: transparent; + border: none; + outline: none; + color: white; + + font-family: inherit; + font-size: 14px; + font-weight: 200; + } +} + +.save-title-label { + display: flex; + padding: 5px 10px; + background: rgba(0, 0, 0, 0.1); + height: 100%; +} + +.save-address-input { + background: rgba(0, 0, 0, 0.2); + border-radius: 2px; + display: flex; + margin-bottom: 5px; + + input { + padding: 5px 5px 5px 2px; + background: transparent; + } +} + +.save-address-label { + display: flex; + padding: 5px 0 5px 10px; + height: 100%; + opacity: 0.5; + white-space: nowrap; +} + +.save-address-copy { + background: rgba(255, 255, 255, 0.1); + padding: 0 5px; + border-radius: 0 $panel_radius $panel_radius 0; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 250ms; + + &:hover { + background: rgba(255, 255, 255, 0.2); + } + + svg { + fill: white; + } +} + +.save-text { + padding: 10px; + line-height: 1.1em; + min-height: 2.2em; + font-size: 0.9em; +} + +.save-buttons { + display: flex; + padding: 0px; + margin-top: 20px; + margin-bottom: 5px; + + .button { + margin-left: 10px; + } +} + +.save-buttons-text { + flex: 1; + padding: 0 10px 2px 10px; + align-items: center; + display: flex; + + .switch { + margin-right: 0.5em; + } +} + +.save-description { + textarea { + background: rgba(0, 0, 0, 0.3); + outline: none; + border: none; + border-radius: 3px; + width: 100%; + resize: none; + color: inherit; + font: inherit; + padding: 5px 10px; + font-size: 14px; + } +} + +.save-controls { + padding: 5px 10px; + user-select: none; +} diff --git a/src/styles/slider.less b/src/styles/slider.scss similarity index 58% rename from src/styles/slider.less rename to src/styles/slider.scss index 7241e58..c974fcb 100644 --- a/src/styles/slider.less +++ b/src/styles/slider.scss @@ -1,44 +1,42 @@ -@prefixClass: rc-slider; +$disabledColor: #ccc; +$border-radius-base: 6px; +$primary-color: transparent; +$tooltip-color: #fff; +$tooltip-bg: darken(#666, 4%); +$tooltip-arrow-width: 4px; +$tooltip-distance: $tooltip-arrow-width+4; +$tooltip-arrow-color: $tooltip-bg; +$ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1); +$ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); -@disabledColor: #ccc; -@border-radius-base: 6px; -@primary-color: transparent; -@tooltip-color: #fff; -@tooltip-bg: tint(#666, 4%); -@tooltip-arrow-width: 4px; -@tooltip-distance: @tooltip-arrow-width+4; -@tooltip-arrow-color: @tooltip-bg; -@ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1); -@ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); +@mixin borderBox() { + box-sizing: border-box; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari -:global { - .borderBox() { + * { box-sizing: border-box; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari - - * { - box-sizing: border-box; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); // remove tap highlight color for mobile safari - } } +} - .@{prefixClass} { +:global { + .rc-slider { position: relative; height: 40px; padding: 15px 0; // width: 100%; margin: 8px; - border-radius: @border-radius-base; + border-radius: $border-radius-base; touch-action: none; - .borderBox(); + @include borderBox(); &-rail { position: absolute; width: 100%; background-color: rgba(0, 0, 0, 0.3); height: 4px; - border-radius: @border-radius-base; + border-radius: $border-radius-base; pointer-events: none; } @@ -46,8 +44,8 @@ position: absolute; left: 0; height: 4px; - border-radius: @border-radius-base; - background: linear-gradient(270deg, @red_secondary, @blue_secondary); + border-radius: $border-radius-base; + background: linear-gradient(270deg, $red_secondary, $blue_secondary); // background-size: 320px 100px; } @@ -57,11 +55,9 @@ margin-top: -5px; width: 14px; height: 14px; - cursor: pointer; - cursor: -webkit-grab; cursor: grab; border-radius: 50%; - border: solid 2px tint(@primary-color, 50%); + border: solid 2px darken($primary-color, 50%); background-color: #fff; touch-action: pan-x; @@ -79,24 +75,23 @@ } &:focus { - // border-color: tint(@primary-color, 20%); - box-shadow: 0 0 0 4px tint(@primary-color, 50%); + // border-color: darken($primary-color, 20%); + box-shadow: 0 0 0 4px darken($primary-color, 50%); outline: none; } &-click-focused:focus { - // border-color: tint(@primary-color, 50%); + // border-color: darken($primary-color, 50%); box-shadow: unset; } &:hover { - border-color: tint(@primary-color, 20%); + border-color: darken($primary-color, 20%); } &:active { - border-color: tint(@primary-color, 20%); - box-shadow: 0 0 5px tint(@primary-color, 20%); - cursor: -webkit-grabbing; + border-color: darken($primary-color, 20%); + box-shadow: 0 0 5px darken($primary-color, 20%); cursor: grabbing; } } @@ -141,38 +136,38 @@ vertical-align: middle; &-active { - // border-color: tint(@primary-color, 50%); + // border-color: darken($primary-color, 50%); background-color: white; opacity: 0.2; } } &-disabled { - .@{prefixClass}-track { - background-color: @disabledColor; + .rc-slider-track { + background-color: $disabledColor; } - .@{prefixClass}-handle, .@{prefixClass}-dot { - border-color: @disabledColor; + .rc-slider-handle, .rc-slider-dot { + border-color: $disabledColor; box-shadow: none; background-color: #fff; cursor: not-allowed; opacity: 0; } - .@{prefixClass}-mark-text, .@{prefixClass}-dot, .@{prefixClass}-track { + .rc-slider-mark-text, .rc-slider-dot, .rc-slider-track { cursor: not-allowed !important; opacity: 0; } } } - .@{prefixClass}-vertical { + .rc-slider-vertical { width: 14px; height: 100%; padding: 0 5px; - .@{prefixClass} { + .rc-slider { &-rail { height: 100%; width: 4px; @@ -218,42 +213,6 @@ } } - .motion-common() { - animation-duration: .3s; - animation-fill-mode: both; - display: block !important; - } - - .make-motion(@className, @keyframeName) { - .@{className}-enter, .@{className}-appear { - .motion-common(); - animation-play-state: paused; - } - .@{className}-leave { - .motion-common(); - animation-play-state: paused; - } - .@{className}-enter.@{className}-enter-active, .@{className}-appear.@{className}-appear-active { - animation-name: ~"@{keyframeName}In"; - animation-play-state: running; - } - .@{className}-leave.@{className}-leave-active { - animation-name: ~"@{keyframeName}Out"; - animation-play-state: running; - } - } - .zoom-motion(@className, @keyframeName) { - .make-motion(@className, @keyframeName); - .@{className}-enter, .@{className}-appear { - transform: scale(0, 0); // need this by yiminghe - animation-timing-function: @ease-out-quint; - } - .@{className}-leave { - animation-timing-function: @ease-in-quint; - } - } - .zoom-motion(rc-slider-tooltip-zoom-down, rcSliderTooltipZoomDown); - @keyframes rcSliderTooltipZoomDownIn { 0% { opacity: 0; @@ -278,20 +237,20 @@ } } - .@{prefixClass}-tooltip { + .rc-slider-tooltip { position: absolute; left: -9999px; top: -9999px; visibility: visible; - .borderBox(); + @include borderBox(); &-hidden { display: none; } &-placement-top { - padding: @tooltip-arrow-width 0 @tooltip-distance 0; + padding: $tooltip-arrow-width 0 $tooltip-distance 0; } &-inner { @@ -300,11 +259,11 @@ height: 24px; font-size: 12px; line-height: 1; - color: @tooltip-color; + color: $tooltip-color; text-align: center; text-decoration: none; - background-color: @tooltip-bg; - border-radius: @border-radius-base; + background-color: $tooltip-bg; + border-radius: $border-radius-base; box-shadow: 0 0 4px #d9d9d9; } @@ -317,11 +276,11 @@ } &-placement-top &-arrow { - bottom: @tooltip-distance - @tooltip-arrow-width; + bottom: $tooltip-distance - $tooltip-arrow-width; left: 50%; - margin-left: -@tooltip-arrow-width; - border-width: @tooltip-arrow-width @tooltip-arrow-width 0; - border-top-color: @tooltip-arrow-color; + margin-left: -$tooltip-arrow-width; + border-width: $tooltip-arrow-width $tooltip-arrow-width 0; + border-top-color: $tooltip-arrow-color; } } diff --git a/src/styles/stickers.less b/src/styles/stickers.less deleted file mode 100644 index 29efd5a..0000000 --- a/src/styles/stickers.less +++ /dev/null @@ -1,265 +0,0 @@ -:global { - .leaflet-dragging .sticker-container { - transition: none !important; - } - - .sticker-container { - outline: none; - position: relative; - transition: transform 250ms; - cursor: pointer; - z-index: 10; - - &.leaflet-drag-target { - transition: none !important; - } - - &:before { - content: ' '; - background: @red_secondary; - width: 48px; - height: 48px; - left: -24px; - top: -24px; - position: absolute; - border-radius: 40px; - opacity: 0.25; - transform: scale(0.5); - transition: opacity 250ms, transform 500ms; - } - - &:active { - transition: transform 250ms; - - .sticker-delete { - pointer-events: none; - } - } - - &:hover, &:active { - &:before { - opacity: 0.3; - transform: scale(1); - } - } - - &.inactive { - pointer-events: none; - transition: transform 250ms; - - .sticker-delete { - display: none; - } - - .sticker-desc.is_empty { - display: none; - } - } - - @media (hover: hover) { - transition: none; - } - } - - .sticker-label { - width: 48px; - height: 48px; - position: absolute; - //background: white; - //border-radius: 32px; - left: 0; - top: 0; - outline: none; - - //&:after { - // content: ' '; - // box-shadow: 0 0 0 1px #ff3344; - // width: 80px; - // height: 80px; - // left: -16px; - // top: -16px; - // position: absolute; - // border-radius: 40px; - // pointer-events: none; - // opacity: 0; - //} - - svg { - left: -8px; - top: -8px; - position: relative; - z-index: 0; - } - - .sticker-image { - width: 72px; - height: 72px; - left: -12px; - top: -12px; - position: relative; - z-index: 0; - background-size: cover; - } - - &.left { - .sticker-desc { - padding: 10px 36px 10px 10px; - left: auto; - right: 24px; - } - } - } - - .sticker-wrapper { - will-change: transform; - transition: transform 250ms; - - @media (hover: hover) { - transition: transform 0ms; - } - } - - .sticker-arrow { - position: absolute; - transform-origin: 0 0; - left: 0; - top: 0; - pointer-events: none; - - &:after { - content: ' '; - background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='38' viewBox='0 0 38 38' preserveAspectRatio='none'%3E%3Cpolygon points='0,0 38,20 38,38 20,38' style='fill:%23ff3344;' /%3E%3C/svg%3E") no-repeat; - width: 50px; - height: 50px; - transform-origin: 0 0; - transform: rotate(-45deg); - left: 0; - top: 0; - position: absolute; - } - } - - .sticker-delete { - position: absolute; - width: 24px; - height: 24px; - background: red; - border-radius: 24px; - transition: transform 500ms; - transform: scale(1); - opacity: 1; - pointer-events: all; - left: 28px; - top: -16px; - z-index: 20; - - &:hover { - transform: scale(1.2) !important; - } - - &::before, &::after { - content: ' '; - position: absolute; - left: 11px; - top: 6px; - width: 2px; - height: 12px; - background: white; - transform: rotate(45deg); - } - - &::after { - transform: rotate(-45deg); - } - } - - .leaflet-control-container .leaflet-routing-container-hide { - display: none; - } - - .stickers-helper { - flex-direction: column; - padding-top: 0; - } - - .stickers-grid { - // display: grid; - // grid-template-columns: repeat( auto-fit , minmax(48px, 1fr) ); - display: flex; - flex-wrap: wrap; - } - - .stickers-set-title { - opacity: 0.3; - font-size: 0.8em; - padding: 10px 0; - display: flex; - align-items: center; - text-transform: uppercase; - - &::after { - content: ' '; - height: 1px; - flex: 1; - background-color: #666666; - margin-left: 10px; - } - } - - .sticker-preview { - float: left; - cursor: pointer; - transform: scale(1); - transition: transform 250ms; - width: 48px; - height: 48px; - background-size: cover; - background-repeat: no-repeat; - background-position: 0 50%; - position: relative; - - &:hover { - transform: scale(1.5); - z-index: 2; - } - } - - .sticker-desc { - min-width: 60px; - z-index: -1; - height: auto; - background: #222222; - position: absolute; - top: 50%; - left: 24px; - transform: translate3d(0, -50%, 0); - color: white; - box-sizing: border-box; - padding: 10px 10px 10px 36px; - } - - .sticker-desc-sizer { - position: relative; - width: 100%; - height: 100%; - color: rgba(0, 0, 0, 0); - white-space: nowrap; - padding: 1px; - - textarea { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - font: inherit; - padding: 0; - border: none; - background: none; - color: white; - resize: none; - outline: none; - overflow: hidden; - } - } -} diff --git a/src/styles/stickers.scss b/src/styles/stickers.scss new file mode 100644 index 0000000..7cc207f --- /dev/null +++ b/src/styles/stickers.scss @@ -0,0 +1,263 @@ +.leaflet-dragging .sticker-container { + transition: none !important; +} + +.sticker-container { + outline: none; + position: relative; + transition: transform 250ms; + cursor: pointer; + z-index: 10; + + &.leaflet-drag-target { + transition: none !important; + } + + &:before { + content: ' '; + background: $red_secondary; + width: 48px; + height: 48px; + left: -24px; + top: -24px; + position: absolute; + border-radius: 40px; + opacity: 0.25; + transform: scale(0.5); + transition: opacity 250ms, transform 500ms; + } + + &:active { + transition: transform 250ms; + + .sticker-delete { + pointer-events: none; + } + } + + &:hover, &:active { + &:before { + opacity: 0.3; + transform: scale(1); + } + } + + &.inactive { + pointer-events: none; + transition: transform 250ms; + + .sticker-delete { + display: none; + } + + .sticker-desc.is_empty { + display: none; + } + } + + @media (hover: hover) { + transition: none; + } +} + +.sticker-label { + width: 48px; + height: 48px; + position: absolute; + //background: white; + //border-radius: 32px; + left: 0; + top: 0; + outline: none; + + //&:after { + // content: ' '; + // box-shadow: 0 0 0 1px #ff3344; + // width: 80px; + // height: 80px; + // left: -16px; + // top: -16px; + // position: absolute; + // border-radius: 40px; + // pointer-events: none; + // opacity: 0; + //} + + svg { + left: -8px; + top: -8px; + position: relative; + z-index: 0; + } + + .sticker-image { + width: 72px; + height: 72px; + left: -12px; + top: -12px; + position: relative; + z-index: 0; + background-size: cover; + } + + &.left { + .sticker-desc { + padding: 10px 36px 10px 10px; + left: auto; + right: 24px; + } + } +} + +.sticker-wrapper { + will-change: transform; + transition: transform 250ms; + + @media (hover: hover) { + transition: transform 0ms; + } +} + +.sticker-arrow { + position: absolute; + transform-origin: 0 0; + left: 0; + top: 0; + pointer-events: none; + + &:after { + content: ' '; + background: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='38' height='38' viewBox='0 0 38 38' preserveAspectRatio='none'%3E%3Cpolygon points='0,0 38,20 38,38 20,38' style='fill:%23ff3344;' /%3E%3C/svg%3E") no-repeat; + width: 50px; + height: 50px; + transform-origin: 0 0; + transform: rotate(-45deg); + left: 0; + top: 0; + position: absolute; + } +} + +.sticker-delete { + position: absolute; + width: 24px; + height: 24px; + background: red; + border-radius: 24px; + transition: transform 500ms; + transform: scale(1); + opacity: 1; + pointer-events: all; + left: 28px; + top: -16px; + z-index: 20; + + &:hover { + transform: scale(1.2) !important; + } + + &::before, &::after { + content: ' '; + position: absolute; + left: 11px; + top: 6px; + width: 2px; + height: 12px; + background: white; + transform: rotate(45deg); + } + + &::after { + transform: rotate(-45deg); + } +} + +.leaflet-control-container .leaflet-routing-container-hide { + display: none; +} + +.stickers-helper { + flex-direction: column; + padding-top: 0; +} + +.stickers-grid { + // display: grid; + // grid-template-columns: repeat( auto-fit , minmax(48px, 1fr) ); + display: flex; + flex-wrap: wrap; +} + +.stickers-set-title { + opacity: 0.3; + font-size: 0.8em; + padding: 10px 0; + display: flex; + align-items: center; + text-transform: uppercase; + + &::after { + content: ' '; + height: 1px; + flex: 1; + background-color: #666666; + margin-left: 10px; + } +} + +.sticker-preview { + float: left; + cursor: pointer; + transform: scale(1); + transition: transform 250ms; + width: 48px; + height: 48px; + background-size: cover; + background-repeat: no-repeat; + background-position: 0 50%; + position: relative; + + &:hover { + transform: scale(1.5); + z-index: 2; + } +} + +.sticker-desc { + min-width: 60px; + z-index: -1; + height: auto; + background: #222222; + position: absolute; + top: 50%; + left: 24px; + transform: translate3d(0, -50%, 0); + color: white; + box-sizing: border-box; + padding: 10px 10px 10px 36px; +} + +.sticker-desc-sizer { + position: relative; + width: 100%; + height: 100%; + color: rgba(0, 0, 0, 0); + white-space: nowrap; + padding: 1px; + + textarea { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + font: inherit; + padding: 0; + border: none; + background: none; + color: white; + resize: none; + outline: none; + overflow: hidden; + } +} diff --git a/src/styles/switch.less b/src/styles/switch.less deleted file mode 100644 index 445efdf..0000000 --- a/src/styles/switch.less +++ /dev/null @@ -1,34 +0,0 @@ -:global { - .switch { - height: 1em; - width: 2em; - border-radius: 0.5em; - box-shadow: inset white 0 0 0 0.1em; - display: inline-flex; - vertical-align: text-top; - position: relative; - top: 0.05em; - transition: all 500ms; - - &::after { - content: ' '; - position: absolute; - left: 0.2em; - top: 0.2em; - width: 0.6em; - height: 0.6em; - border-radius: 0.3em; - background: white; - transition: all 500ms; - } - - &.active { - background: white; - - &::after { - left: 1.2em; - background: #333333; - } - } - } -} diff --git a/src/styles/switch.scss b/src/styles/switch.scss new file mode 100644 index 0000000..8895b4c --- /dev/null +++ b/src/styles/switch.scss @@ -0,0 +1,32 @@ +.switch { + height: 1em; + width: 2em; + border-radius: 0.5em; + box-shadow: inset white 0 0 0 0.1em; + display: inline-flex; + vertical-align: text-top; + position: relative; + top: 0.05em; + transition: all 500ms; + + &::after { + content: ' '; + position: absolute; + left: 0.2em; + top: 0.2em; + width: 0.6em; + height: 0.6em; + border-radius: 0.3em; + background: white; + transition: all 500ms; + } + + &.active { + background: white; + + &::after { + left: 1.2em; + background: #333333; + } + } +} diff --git a/src/styles/user-button.less b/src/styles/user-button.less deleted file mode 100644 index f2d2866..0000000 --- a/src/styles/user-button.less +++ /dev/null @@ -1,160 +0,0 @@ -:global { - .user-bar { - // width: 160px; - - .button { - width: 100%; - } - } - - .user-bar-guest { - // width: 168px; - @media (min-width: @mobile_breakpoint) { - width: 158px; - } - } - - .user-button { - width: 120px; - padding-left: 48px; - height: 48px; - display: flex; - - user-select: none; - cursor: pointer; - - @media (max-width: @mobile_breakpoint) { - width: 0; - - .user-button-fields { - display: none; - } - } - } - - .user-button-picture { - width: 48px; - height: 48px; - background-size: cover; - background: rgba(0, 0, 0, 0.3) 50% 50%; - border-radius: 3px 0 0 3px; - position: absolute; - left: 0; - top: 0; - } - - .user-button-fields { - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; - padding: 0 10px 0 10px; - overflow: hidden; - box-sizing: border-box; - - div { - width: 100%; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - } - - .user-button-name { - font-size: 14px; - } - - .user-button-text { - font-size: 12px; - opacity: 0.5; - padding-top: 2px; - font-weight: 500; - } - - - .user-panel { - position: relative; - } - - .user-panel-menu { - position: absolute; - bottom: 58px; - left: 0; - width: 219px; - background: @dialog_background; - border-radius: @panel_radius; - padding: 0; - box-sizing: border-box; - z-index: -1; - - @media (max-width: @mobile_breakpoint) { - left: 0; - z-index: 4; - } - } - - .user-panel-title { - font-size: 20px; - padding: 10px; - - background: rgba(0, 0, 0, 0.5); - box-shadow: inset rgba(255, 255, 255, 0.1) 0 -1px; - border-radius: @panel_radius @panel_radius 0 0; - user-select: none; - } - - .user-panel-ver { - font-size: 12px; - vertical-align: text-top; - opacity: 0.5; - padding-left: 3px; - position: relative; - top: 3px; - } - - .user-panel-item { - padding: 10px 10px; - position: relative; - cursor: pointer; - width: 100%; - transition: all 250ms; - color: white; - box-sizing: border-box; - user-select: none; - display: block; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - text-decoration: none; - - &:first-child::after { - border-radius: 3px 3px 0 0; - } - - &::after { - content: ' '; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: linear-gradient(150deg, @blue_primary, @blue_secondary); - opacity: 0; - transition: opacity 0.3s; - z-index: -1; - } - - &:hover::after { - opacity: 0.5; - } - } - - .user-panel-text { - padding: 10px; - opacity: 0.5; - font-weight: 200; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - - div { - padding-top: 5px; - } - } -} diff --git a/src/styles/user-button.scss b/src/styles/user-button.scss new file mode 100644 index 0000000..eec7fbc --- /dev/null +++ b/src/styles/user-button.scss @@ -0,0 +1,158 @@ +.user-bar { + // width: 160px; + + .button { + width: 100%; + } +} + +.user-bar-guest { + // width: 168px; + @media (min-width: $mobile_breakpoint) { + width: 158px; + } +} + +.user-button { + width: 120px; + padding-left: 48px; + height: 48px; + display: flex; + + user-select: none; + cursor: pointer; + + @media (max-width: $mobile_breakpoint) { + width: 0; + + .user-button-fields { + display: none; + } + } +} + +.user-button-picture { + width: 48px; + height: 48px; + background-size: cover; + background: rgba(0, 0, 0, 0.3) 50% 50%; + border-radius: 3px 0 0 3px; + position: absolute; + left: 0; + top: 0; +} + +.user-button-fields { + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + padding: 0 10px 0 10px; + overflow: hidden; + box-sizing: border-box; + + div { + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} + +.user-button-name { + font-size: 14px; +} + +.user-button-text { + font-size: 12px; + opacity: 0.5; + padding-top: 2px; + font-weight: 500; +} + + +.user-panel { + position: relative; +} + +.user-panel-menu { + position: absolute; + bottom: 58px; + left: 0; + width: 219px; + background: $dialog_background; + border-radius: $panel_radius; + padding: 0; + box-sizing: border-box; + z-index: -1; + + @media (max-width: $mobile_breakpoint) { + left: 0; + z-index: 4; + } +} + +.user-panel-title { + font-size: 20px; + padding: 10px; + + background: rgba(0, 0, 0, 0.5); + box-shadow: inset rgba(255, 255, 255, 0.1) 0 -1px; + border-radius: $panel_radius $panel_radius 0 0; + user-select: none; +} + +.user-panel-ver { + font-size: 12px; + vertical-align: text-top; + opacity: 0.5; + padding-left: 3px; + position: relative; + top: 3px; +} + +.user-panel-item { + padding: 10px 10px; + position: relative; + cursor: pointer; + width: 100%; + transition: all 250ms; + color: white; + box-sizing: border-box; + user-select: none; + display: block; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + text-decoration: none; + + &:first-child::after { + border-radius: 3px 3px 0 0; + } + + &::after { + content: ' '; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: linear-gradient(150deg, $blue_primary, $blue_secondary); + opacity: 0; + transition: opacity 0.3s; + z-index: -1; + } + + &:hover::after { + opacity: 0.5; + } +} + +.user-panel-text { + padding: 10px; + opacity: 0.5; + font-weight: 200; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + + div { + padding-top: 5px; + } +} From 478c557a2b7725e60539e0c5b40034d6d72ddfea Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 11:24:17 +0700 Subject: [PATCH 284/320] removed reactrangeslider dependency --- .env | 2 +- package.json | 2 +- yarn.lock | 443 +++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 431 insertions(+), 16 deletions(-) diff --git a/.env b/.env index 193060e..3dd4857 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ REACT_APP_PUBLIC_PATH = https://localhost:3000/ -REACT_APP_API_ADDR = https://alpha-map.vault48.org:3001 +REACT_APP_API_ADDR = https://backend.alpha-map.vault48.org/ REACT_APP_OSRM_URL = https://vault48.org:5001/route/v1 REACT_APP_OSRM_PROFILE = bike diff --git a/package.json b/package.json index 15086f3..023f22f 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "leaflet-geometryutil": "^0.9.0", "leaflet-routing-machine": "^3.2.12", "leaflet.markercluster": "^1.4.1", + "node-sass": "^5.0.0", "pt-sans-cyrillic": "0.0.4", "raleway-cyrillic": "^4.0.2", "ramda": "^0.26.1", @@ -45,7 +46,6 @@ "react-router": "^4.3.1", "react-scripts": "^4.0.3", "react-scrollbar": "^0.5.4", - "reactrangeslider": "^3.0.6", "redux": "^4.0.1", "redux-persist": "^5.10.0", "redux-saga": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 5926e94..2fe8ccd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2207,6 +2207,11 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2309,6 +2314,11 @@ alphanum-sort@^1.0.0: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -2336,6 +2346,11 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -2346,6 +2361,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -2376,11 +2396,19 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2416,6 +2444,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -2538,6 +2571,11 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -3181,11 +3219,24 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + camelcase@^6.0.0, camelcase@^6.1.0, camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" @@ -3232,6 +3283,17 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -3378,6 +3440,11 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3537,6 +3604,11 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3718,7 +3790,7 @@ croppr@^2.3.1: resolved "https://registry.yarnpkg.com/croppr/-/croppr-2.3.1.tgz#d279e006531240fa8ebf2681e4127ae7c42b074e" integrity sha512-0rvTl4VmR3I4AahjJPF1u9IlT7ckvjIcgaLnUjYaY+UZsP9oxlVYZWYDuqM3SVCQiaI7DXMjR7wOEYT+mydOFg== -cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3976,6 +4048,13 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -4031,7 +4110,7 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -decamelize@^1.2.0: +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= @@ -4128,6 +4207,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -4437,6 +4521,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -4530,7 +4619,7 @@ escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -5110,6 +5199,14 @@ find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -5285,6 +5382,27 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -5314,6 +5432,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -5355,7 +5478,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -5437,6 +5560,15 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globule@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + gpx-parser-builder@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/gpx-parser-builder/-/gpx-parser-builder-1.0.2.tgz#80c54d06acfa334291490c27ed5edbea7cff1e64" @@ -5444,7 +5576,7 @@ gpx-parser-builder@^1.0.2: dependencies: isomorphic-xml2js "~0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -5485,6 +5617,13 @@ harmony-reflect@^1.4.6: resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" @@ -5505,6 +5644,11 @@ has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -5867,6 +6011,13 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -6116,6 +6267,18 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -6268,6 +6431,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -6801,6 +6969,11 @@ jest@26.6.0: import-local "^3.0.2" jest-cli "^26.6.0" +js-base64@^2.1.8: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7072,6 +7245,17 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -7187,7 +7371,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7204,6 +7388,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -7259,6 +7451,11 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -7306,6 +7503,22 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -7413,14 +7626,14 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -7542,7 +7755,7 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -nan@^2.12.1: +nan@^2.12.1, nan@^2.13.2: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== @@ -7614,6 +7827,22 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -7670,7 +7899,36 @@ node-releases@^1.1.61, node-releases@^1.1.70: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +node-sass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-5.0.0.tgz#4e8f39fbef3bac8d2dc72ebe3b539711883a78d2" + integrity sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^7.0.3" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + lodash "^4.17.15" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.13.2" + node-gyp "^7.1.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -7726,6 +7984,16 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npmlog@^4.0.0, npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -7738,6 +8006,11 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= +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" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -8117,6 +8390,13 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -8164,6 +8444,15 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -9485,6 +9774,14 @@ reactrangeslider@^3.0.6: resolved "https://registry.yarnpkg.com/reactrangeslider/-/reactrangeslider-3.0.6.tgz#5f3e1cef24fd3065322d4c01a0010199910f3737" integrity sha1-Xz4c7yT9MGUyLUwBoAEBmZEPNzc= +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -9502,6 +9799,15 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -9521,7 +9827,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -9566,6 +9872,14 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + redux-persist@^5.10.0: version "5.10.0" resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-5.10.0.tgz#5d8d802c5571e55924efc1c3a9b23575283be62b" @@ -9696,6 +10010,13 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + request-promise-core@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" @@ -9712,7 +10033,7 @@ request-promise-native@^1.0.9: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.2: +request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -9998,6 +10319,16 @@ sanitize.css@^10.0.0: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^13.3.2" + sass-loader@^10.0.5: version "10.1.1" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" @@ -10056,6 +10387,14 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -10151,7 +10490,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -10360,6 +10699,13 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -10495,6 +10841,13 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -10550,6 +10903,23 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -10634,6 +11004,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -10641,6 +11018,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -10669,6 +11053,13 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -10691,6 +11082,11 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -11005,6 +11401,18 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -11707,6 +12115,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" From 82cd56fee1b5f3b6716eda4956d7502d6e25dc46 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 11:25:41 +0700 Subject: [PATCH 285/320] added configs --- .gitignore | 8 -------- src/config/frontend.ts | 29 +++++++++++++++++++++++++++++ src/config/pwa.js | 22 ++++++++++++++++++++++ src/react-app-env.d.ts | 1 + 4 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 src/config/frontend.ts create mode 100644 src/config/pwa.js create mode 100644 src/react-app-env.d.ts diff --git a/.gitignore b/.gitignore index ecb633c..cf8a05b 100644 --- a/.gitignore +++ b/.gitignore @@ -14,14 +14,6 @@ yarn-error.log /osrm/pbf /osrm/pbf/* -/config/frontend.js -/config/backend.js -/config/pwa.js - -/src/config/frontend.ts -/src/config/backend.js -/src/config/pwa.js - # Bundle *.js.map stats.json diff --git a/src/config/frontend.ts b/src/config/frontend.ts new file mode 100644 index 0000000..c498a40 --- /dev/null +++ b/src/config/frontend.ts @@ -0,0 +1,29 @@ +import { DEFAULT_PROVIDER, PROVIDERS } from '~/constants/providers'; +import { LatLngLiteral } from 'leaflet'; + +const PUBLIC_PATH = process.env.REACT_APP_PUBLIC_PATH || ''; +const API_ADDR = process.env.REACT_APP_API_ADDR || ''; +const OSRM_URL = process.env.REACT_APP_OSRM_URL || ''; +const OSRM_PROFILE = process.env.REACT_APP_OSRM_PROFILE || 'bike'; +const OSRM_TEST_URL = ([south_west, north_east]: LatLngLiteral[]) => ( + `${OSRM_URL}/${OSRM_PROFILE}/${Object.values(south_west).join(',')};${Object.values(north_east).join(',')}` +); + +export const CLIENT = { + OSRM_URL, + API_ADDR, + OSRM_TEST_URL, + OSRM_PROFILE, + STROKE_WIDTH: 5, + PUBLIC_PATH, + NOMINATIM_TEST_URL: '', + NOMINATIM_URL: '', +}; + +export const COLORS = { + PATH_COLOR: ['#ff7700', '#ff3344'], +}; + +export const PROVIDER = PROVIDERS[DEFAULT_PROVIDER]; + +export const MOBILE_BREAKPOINT = 768; diff --git a/src/config/pwa.js b/src/config/pwa.js new file mode 100644 index 0000000..5319c26 --- /dev/null +++ b/src/config/pwa.js @@ -0,0 +1,22 @@ +const path = require('path'); + +module.exports = { + MANIFEST: (src) => ({ + name: 'Редактор маршрутов', + short_name: 'Маршруты', + description: 'Велосипедные маршруты в новосибирске', + background_color: '#333333', + theme_color: '#01579b', + display: 'fullscreen', + 'theme-color': '#01579b', + start_url: '/', + icons: [ + { + src, // : path.resolve('./src/sprites/app.png') + sizes: [96, 128, 192, 256, 384, 512], + destination: path.join('assets', 'icons') + } + ] + }), + PUBLIC_PATH: process.env.REACT_APP_PUBLIC_PATH, +}; diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// From 1d1eedd91120a7e68b8affa782edd8607528c4cd Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 11:30:44 +0700 Subject: [PATCH 286/320] added eslint-loader --- package.json | 1 + yarn.lock | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 023f22f..2aff043 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "classnames": "^2.2.6", "craco-fast-refresh": "^1.0.5", "croppr": "^2.3.1", + "eslint-loader": "^4.0.2", "file-saver": "^2.0.0", "gpx-parser-builder": "^1.0.2", "leaflet": "^1.6.0", diff --git a/yarn.lock b/yarn.lock index 2fe8ccd..5a3cde3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4651,6 +4651,17 @@ eslint-import-resolver-node@^0.3.4: debug "^2.6.9" resolve "^1.13.1" +eslint-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec" + integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw== + dependencies: + find-cache-dir "^3.3.1" + fs-extra "^8.1.0" + loader-utils "^2.0.0" + object-hash "^2.0.3" + schema-utils "^2.6.5" + eslint-module-utils@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" @@ -8035,6 +8046,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-hash@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" + integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== + object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -9769,11 +9785,6 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -reactrangeslider@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/reactrangeslider/-/reactrangeslider-3.0.6.tgz#5f3e1cef24fd3065322d4c01a0010199910f3737" - integrity sha1-Xz4c7yT9MGUyLUwBoAEBmZEPNzc= - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" From fd6565358419c359ec196fa89f7cc67989a04b7e Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 11:32:09 +0700 Subject: [PATCH 287/320] fixed dicker output folder --- docker/www/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/www/Dockerfile b/docker/www/Dockerfile index 30177f6..8a925b0 100644 --- a/docker/www/Dockerfile +++ b/docker/www/Dockerfile @@ -8,6 +8,6 @@ RUN yarn build FROM nginx:alpine COPY docker/www/nginx.conf /etc/nginx/nginx.conf RUN rm -rf /usr/share/nginx/html/* -COPY --from=builder /build /usr/share/nginx/html +COPY --from=builder /dist /usr/share/nginx/html EXPOSE ${EXPOSE} 80 ENTRYPOINT ["nginx", "-g", "daemon off;"] From 7735d1101989e38917b545092ddb984d0a7eb6c2 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 11:39:39 +0700 Subject: [PATCH 288/320] set workdir to / at dockerfile --- .babelrc | 13 ------------- docker/www/Dockerfile | 1 + 2 files changed, 1 insertion(+), 13 deletions(-) delete mode 100755 .babelrc diff --git a/.babelrc b/.babelrc deleted file mode 100755 index 77531b4..0000000 --- a/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": ["env", "react","stage-2"], - "plugins": [ - "ramda", - "lodash", - "react-hot-loader/babel", - "lodash", - ["transform-runtime", { - "polyfill": false, - "regenerator": true - }] - ] -} diff --git a/docker/www/Dockerfile b/docker/www/Dockerfile index 8a925b0..6041bf8 100644 --- a/docker/www/Dockerfile +++ b/docker/www/Dockerfile @@ -1,4 +1,5 @@ # stage1 as builder +WORKDIR / FROM node:erbium-alpine as builder COPY package.json yarn.lock ./ RUN yarn From faed11bb794bf4591605e43f68f5b2ad5bdddb3c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 11:40:08 +0700 Subject: [PATCH 289/320] copying build, not dist --- docker/www/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/www/Dockerfile b/docker/www/Dockerfile index 6041bf8..30177f6 100644 --- a/docker/www/Dockerfile +++ b/docker/www/Dockerfile @@ -1,5 +1,4 @@ # stage1 as builder -WORKDIR / FROM node:erbium-alpine as builder COPY package.json yarn.lock ./ RUN yarn @@ -9,6 +8,6 @@ RUN yarn build FROM nginx:alpine COPY docker/www/nginx.conf /etc/nginx/nginx.conf RUN rm -rf /usr/share/nginx/html/* -COPY --from=builder /dist /usr/share/nginx/html +COPY --from=builder /build /usr/share/nginx/html EXPOSE ${EXPOSE} 80 ENTRYPOINT ["nginx", "-g", "daemon off;"] From 1eefa0ebbc47c67b216829c87772792618242616 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 14:07:41 +0700 Subject: [PATCH 290/320] fixed slider styles --- src/styles/slider.scss | 540 ++++++++++++++++++++--------------------- 1 file changed, 269 insertions(+), 271 deletions(-) diff --git a/src/styles/slider.scss b/src/styles/slider.scss index c974fcb..e74c902 100644 --- a/src/styles/slider.scss +++ b/src/styles/slider.scss @@ -19,285 +19,283 @@ $ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); } } -:global { - .rc-slider { - position: relative; - height: 40px; - padding: 15px 0; - // width: 100%; - margin: 8px; - border-radius: $border-radius-base; - touch-action: none; +.rc-slider { + position: relative; + height: 40px; + padding: 15px 0; + // width: 100%; + margin: 8px; + border-radius: $border-radius-base; + touch-action: none; - @include borderBox(); + @include borderBox(); - &-rail { - position: absolute; - width: 100%; - background-color: rgba(0, 0, 0, 0.3); - height: 4px; - border-radius: $border-radius-base; - pointer-events: none; - } - - &-track { - position: absolute; - left: 0; - height: 4px; - border-radius: $border-radius-base; - background: linear-gradient(270deg, $red_secondary, $blue_secondary); - // background-size: 320px 100px; - } - - &-handle { - position: absolute; - margin-left: -7px; - margin-top: -5px; - width: 14px; - height: 14px; - cursor: grab; - border-radius: 50%; - border: solid 2px darken($primary-color, 50%); - background-color: #fff; - touch-action: pan-x; - - &::after { - content: ''; - display: block; - width: 40px; - height: 50px; - position: absolute; - left: -15px; - top: -16px; - border-radius: 4px; - background: black; - opacity: 0.2; - } - - &:focus { - // border-color: darken($primary-color, 20%); - box-shadow: 0 0 0 4px darken($primary-color, 50%); - outline: none; - } - - &-click-focused:focus { - // border-color: darken($primary-color, 50%); - box-shadow: unset; - } - - &:hover { - border-color: darken($primary-color, 20%); - } - - &:active { - border-color: darken($primary-color, 20%); - box-shadow: 0 0 5px darken($primary-color, 20%); - cursor: grabbing; - } - } - - &-mark { - position: absolute; - top: 18px; - left: 0; - width: 100%; - font-size: 12px; - pointer-events: none; - } - - &-mark-text { - position: absolute; - display: inline-block; - vertical-align: middle; - text-align: center; - cursor: pointer; - color: rgba(255, 255, 255, 0.3); - padding-top: 10px; - } - - &-step { - position: absolute; - width: 100%; - height: 4px; - background: transparent; - } - - &-dot { - position: absolute; - bottom: -2; - margin-left: -0.5px; - width: 1px; - height: 12px; - // border: 2px solid #e9e9e9; - background-color: black; - opacity: 0.2; - cursor: pointer; - border-radius: 50%; - vertical-align: middle; - - &-active { - // border-color: darken($primary-color, 50%); - background-color: white; - opacity: 0.2; - } - } - - &-disabled { - .rc-slider-track { - background-color: $disabledColor; - } - - .rc-slider-handle, .rc-slider-dot { - border-color: $disabledColor; - box-shadow: none; - background-color: #fff; - cursor: not-allowed; - opacity: 0; - } - - .rc-slider-mark-text, .rc-slider-dot, .rc-slider-track { - cursor: not-allowed !important; - opacity: 0; - } - } - } - - .rc-slider-vertical { - width: 14px; - height: 100%; - padding: 0 5px; - - .rc-slider { - &-rail { - height: 100%; - width: 4px; - } - - &-track { - left: 5px; - bottom: 0; - width: 4px; - } - - &-handle { - margin-left: -5px; - margin-bottom: -7px; - touch-action: pan-y; - - position: relative; - } - - &-mark { - top: 0; - left: 18px; - height: 100%; - } - - &-step { - height: 100%; - width: 4px; - } - - &-dot { - left: 2px; - margin-bottom: -4px; - - &:first-child { - margin-bottom: -4px; - } - - &:last-child { - margin-bottom: -4px; - } - } - } - } - - @keyframes rcSliderTooltipZoomDownIn { - 0% { - opacity: 0; - transform-origin: 50% 100%; - transform: scale(0, 0); - } - 100% { - transform-origin: 50% 100%; - transform: scale(1, 1); - } - } - - @keyframes rcSliderTooltipZoomDownOut { - 0% { - transform-origin: 50% 100%; - transform: scale(1, 1); - } - 100% { - opacity: 0; - transform-origin: 50% 100%; - transform: scale(0, 0); - } - } - - .rc-slider-tooltip { + &-rail { position: absolute; - left: -9999px; - top: -9999px; - visibility: visible; - - @include borderBox(); - - &-hidden { - display: none; - } - - &-placement-top { - padding: $tooltip-arrow-width 0 $tooltip-distance 0; - } - - &-inner { - padding: 6px 2px; - min-width: 24px; - height: 24px; - font-size: 12px; - line-height: 1; - color: $tooltip-color; - text-align: center; - text-decoration: none; - background-color: $tooltip-bg; - border-radius: $border-radius-base; - box-shadow: 0 0 4px #d9d9d9; - } - - &-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - } - - &-placement-top &-arrow { - bottom: $tooltip-distance - $tooltip-arrow-width; - left: 50%; - margin-left: -$tooltip-arrow-width; - border-width: $tooltip-arrow-width $tooltip-arrow-width 0; - border-top-color: $tooltip-arrow-color; - } + width: 100%; + background-color: rgba(0, 0, 0, 0.3); + height: 4px; + border-radius: $border-radius-base; + pointer-events: none; } - .range-placeholder { - height: 40px; - padding: 15px 0; - box-sizing: border-box; - margin: 8px; + &-track { + position: absolute; + left: 0; + height: 4px; + border-radius: $border-radius-base; + background: linear-gradient(270deg, $red_secondary, $blue_secondary); + // background-size: 320px 100px; + } + + &-handle { + position: absolute; + margin-left: -7px; + margin-top: -5px; + width: 14px; + height: 14px; + cursor: grab; + border-radius: 50%; + border: solid 2px darken($primary-color, 50%); + background-color: #fff; + touch-action: pan-x; &::after { - content: ' '; + content: ''; display: block; - width: 100%; - background-color: rgba(0, 0, 0, 0.3); - height: 4px; - border-radius: 6px; - pointer-events: none; + width: 40px; + height: 50px; + position: absolute; + left: -15px; + top: -16px; + border-radius: 4px; + background: black; + opacity: 0.2; + } + + &:focus { + // border-color: darken($primary-color, 20%); + box-shadow: 0 0 0 4px darken($primary-color, 50%); + outline: none; + } + + &-click-focused:focus { + // border-color: darken($primary-color, 50%); + box-shadow: unset; + } + + &:hover { + border-color: darken($primary-color, 20%); + } + + &:active { + border-color: darken($primary-color, 20%); + box-shadow: 0 0 5px darken($primary-color, 20%); + cursor: grabbing; + } + } + + &-mark { + position: absolute; + top: 18px; + left: 0; + width: 100%; + font-size: 12px; + pointer-events: none; + } + + &-mark-text { + position: absolute; + display: inline-block; + vertical-align: middle; + text-align: center; + cursor: pointer; + color: rgba(255, 255, 255, 0.3); + padding-top: 10px; + } + + &-step { + position: absolute; + width: 100%; + height: 4px; + background: transparent; + } + + &-dot { + position: absolute; + bottom: -2; + margin-left: -0.5px; + width: 1px; + height: 12px; + // border: 2px solid #e9e9e9; + background-color: black; + opacity: 0.2; + cursor: pointer; + border-radius: 50%; + vertical-align: middle; + + &-active { + // border-color: darken($primary-color, 50%); + background-color: white; + opacity: 0.2; + } + } + + &-disabled { + .rc-slider-track { + background-color: $disabledColor; + } + + .rc-slider-handle, .rc-slider-dot { + border-color: $disabledColor; + box-shadow: none; + background-color: #fff; + cursor: not-allowed; + opacity: 0; + } + + .rc-slider-mark-text, .rc-slider-dot, .rc-slider-track { + cursor: not-allowed !important; + opacity: 0; } } } + +.rc-slider-vertical { + width: 14px; + height: 100%; + padding: 0 5px; + + .rc-slider { + &-rail { + height: 100%; + width: 4px; + } + + &-track { + left: 5px; + bottom: 0; + width: 4px; + } + + &-handle { + margin-left: -5px; + margin-bottom: -7px; + touch-action: pan-y; + + position: relative; + } + + &-mark { + top: 0; + left: 18px; + height: 100%; + } + + &-step { + height: 100%; + width: 4px; + } + + &-dot { + left: 2px; + margin-bottom: -4px; + + &:first-child { + margin-bottom: -4px; + } + + &:last-child { + margin-bottom: -4px; + } + } + } +} + +@keyframes rcSliderTooltipZoomDownIn { + 0% { + opacity: 0; + transform-origin: 50% 100%; + transform: scale(0, 0); + } + 100% { + transform-origin: 50% 100%; + transform: scale(1, 1); + } +} + +@keyframes rcSliderTooltipZoomDownOut { + 0% { + transform-origin: 50% 100%; + transform: scale(1, 1); + } + 100% { + opacity: 0; + transform-origin: 50% 100%; + transform: scale(0, 0); + } +} + +.rc-slider-tooltip { + position: absolute; + left: -9999px; + top: -9999px; + visibility: visible; + + @include borderBox(); + + &-hidden { + display: none; + } + + &-placement-top { + padding: $tooltip-arrow-width 0 $tooltip-distance 0; + } + + &-inner { + padding: 6px 2px; + min-width: 24px; + height: 24px; + font-size: 12px; + line-height: 1; + color: $tooltip-color; + text-align: center; + text-decoration: none; + background-color: $tooltip-bg; + border-radius: $border-radius-base; + box-shadow: 0 0 4px #d9d9d9; + } + + &-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + } + + &-placement-top &-arrow { + bottom: $tooltip-distance - $tooltip-arrow-width; + left: 50%; + margin-left: -$tooltip-arrow-width; + border-width: $tooltip-arrow-width $tooltip-arrow-width 0; + border-top-color: $tooltip-arrow-color; + } +} + +.range-placeholder { + height: 40px; + padding: 15px 0; + box-sizing: border-box; + margin: 8px; + + &::after { + content: ' '; + display: block; + width: 100%; + background-color: rgba(0, 0, 0, 0.3); + height: 4px; + border-radius: 6px; + pointer-events: none; + } +} From 3109f49cc414737ec940e0738b12a506c054ded8 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 14:15:09 +0700 Subject: [PATCH 291/320] fixed images --- public/images/arrow.svg | 5 +++++ public/images/logos/jw.png | Bin 0 -> 142888 bytes public/images/logos/lgo.png | Bin 0 -> 61099 bytes public/images/logos/pedals.png | Bin 0 -> 21968 bytes public/images/logos/pin-mix.png | Bin 0 -> 96334 bytes public/images/logos/privet.png | Bin 0 -> 24535 bytes public/images/logos/prokatimsya.png | Bin 0 -> 36140 bytes public/images/logos/rider.png | Bin 0 -> 30917 bytes public/images/logos/rider_evening.png | Bin 0 -> 75062 bytes src/constants/logos.ts | 14 +++++++------- src/constants/stickers.ts | 8 ++++---- src/utils/arrow.ts | 4 ++-- src/utils/marks.ts | 5 +++-- src/utils/renderer.ts | 2 +- 14 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 public/images/arrow.svg create mode 100644 public/images/logos/jw.png create mode 100644 public/images/logos/lgo.png create mode 100644 public/images/logos/pedals.png create mode 100644 public/images/logos/pin-mix.png create mode 100644 public/images/logos/privet.png create mode 100644 public/images/logos/prokatimsya.png create mode 100644 public/images/logos/rider.png create mode 100644 public/images/logos/rider_evening.png diff --git a/public/images/arrow.svg b/public/images/arrow.svg new file mode 100644 index 0000000..ea28122 --- /dev/null +++ b/public/images/arrow.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/images/logos/jw.png b/public/images/logos/jw.png new file mode 100644 index 0000000000000000000000000000000000000000..08f0628825e2a1c25ea7cd30a9cc9fe36a511b31 GIT binary patch literal 142888 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

      Lslm?!5^plnw1_4J( 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
      { } } -export { StickerDesc }; \ No newline at end of file +export { StickerDesc }; diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index 3545819..28bc4c3 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useCallback, useRef, useState } from 'react'; -import { marker, Marker } from 'leaflet'; +import { DivIcon, marker, Marker } from 'leaflet'; import { IStickerDump } from '~/redux/map/types'; import { STICKERS } from '~/constants/stickers'; import { StickerDesc } from '~/components/StickerDesc'; @@ -110,7 +110,7 @@ const Sticker: React.FC = ({ MainMap.enableClicks(); }, - [onChange, sticker, MainMap] + [onChange, sticker] ); const onDrag = React.useCallback( @@ -183,7 +183,7 @@ const Sticker: React.FC = ({ document.removeEventListener('mousemove', onDrag); document.removeEventListener('mouseup', onDragStop); }; - }, [dragging, onDrag]); + }, [dragging, onDrag, onDragStop]); // Initial leaflet marker creation, when element (dom element div) is ready React.useEffect(() => { @@ -199,7 +199,7 @@ const Sticker: React.FC = ({ return () => { item.remove(); }; - }, [element]); + }, [sticker.latlng, element]); useEffect(() => { if (!layer) return; diff --git a/src/utils/map/ArrowsLayer.ts b/src/utils/map/ArrowsLayer.ts index c62fb94..ef46715 100644 --- a/src/utils/map/ArrowsLayer.ts +++ b/src/utils/map/ArrowsLayer.ts @@ -5,41 +5,12 @@ */ -import { LatLngLiteral, LayerGroup, Map, LatLng, Marker, marker } from 'leaflet'; -import { arrowClusterIcon, createArrow, createArrowIcon } from '~/utils/arrow'; +import { LatLng, LatLngLiteral, LayerGroup, Map, Marker } from 'leaflet'; +import { arrowClusterIcon, createArrow } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; import { angleBetweenPoints, dist2, middleCoord } from '~/utils/geom'; -interface MidPoint { - latlng: LatLngLiteral; - angle: number; -} - -// interface IPrevState { -// route: LatLngLiteral[]; -// markers: Marker[]; -// midpoints: MidPoint[]; -// } - class ArrowsLayer extends LayerGroup { - /* - without remove optimization - - first: - recalc: 5.469970703125ms - remove: 0.203857421875ms - add: 53.658935546875ms - total: 60.986083984375ms - - last: - recalc: 0.010986328125ms - remove: 0.220947265625ms - add: 0.580078125ms - total: 2.721923828125ms - - with remove optimization - */ - constructor(props) { super(props); } @@ -54,7 +25,7 @@ class ArrowsLayer extends LayerGroup { // Reacreating all the markers - setLatLngs = (route: LatLngLiteral[]): void => { + setLatLngs = (route: LatLng[]): void => { if (!this.map) return; this.arrowLayer.clearLayers(); diff --git a/src/utils/map/DomMarker.js b/src/utils/map/DomMarker.js deleted file mode 100644 index ef67b5f..0000000 --- a/src/utils/map/DomMarker.js +++ /dev/null @@ -1,21 +0,0 @@ -import { DivIcon } from 'leaflet'; - -export const DomMarker = DivIcon.extend({ - initialize: function (options: any) { - this.options = options; - }, - - options: { - element: null // a initialized DOM element - // same options as divIcon except for html - }, - - createIcon: function() { - const { html, element, className } = this.options; - - this._setIconStyles(element, 'icon'); - - return element; - } -}); - diff --git a/src/utils/map/DomMarker.ts b/src/utils/map/DomMarker.ts new file mode 100644 index 0000000..4f6c42c --- /dev/null +++ b/src/utils/map/DomMarker.ts @@ -0,0 +1,38 @@ +import { DivIcon, DivIconOptions } from 'leaflet'; +// +// export const DomMarker = DivIcon.extend({ +// initialize: function (options) { +// this.options = options; +// }, +// +// options: { +// element: null // a initialized DOM element +// // same options as divIcon except for html +// }, +// +// createIcon: function() { +// const { element } = this.options; +// +// this._setIconStyles(element, 'icon'); +// +// return element; +// } +// }); + +export interface DomMarkerProps extends DivIconOptions { + element: HTMLElement +} + +export class DomMarker extends DivIcon { + element: HTMLElement + + constructor({ element, ...props }: DomMarkerProps) { + super(props); + this.element = element; + } + + createIcon(oldicon?: HTMLElement) { + this.element.classList.add('icon') + return this.element; + } +} diff --git a/src/utils/map/OsrmRouter.ts b/src/utils/map/OsrmRouter.ts index 3e30da2..1b3a461 100644 --- a/src/utils/map/OsrmRouter.ts +++ b/src/utils/map/OsrmRouter.ts @@ -4,7 +4,7 @@ import { CLIENT } from '~/config/frontend'; import { DomMarker } from '~/utils/map/DomMarker'; import { MainMap } from '~/constants/map'; -const createWaypointMarker = (): DomMarker => { +const createWaypointMarker = () => { const element = document.createElement('div'); return new DomMarker({ diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 506b4b6..4c6ffb0 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -448,8 +448,6 @@ const composeStickerImage = async ( sticker: string, scale: number ): Promise => { - console.log({ scale }); - const rad = 56; const tX = (Math.cos(angle + Math.PI) * rad - 30 - 6) * scale + x; const tY = (Math.sin(angle + Math.PI) * rad - 30 - 6) * scale + y; From a4b8d70cc80c25573b8c5ff167c5b29919e30661 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 14:44:31 +0700 Subject: [PATCH 293/320] removed unused deps --- src/map/Sticker/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index 28bc4c3..85638a5 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -1,12 +1,12 @@ -import React, { useEffect, useCallback, useRef, useState } from 'react'; -import { DivIcon, marker, Marker } from 'leaflet'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { marker, Marker } from 'leaflet'; import { IStickerDump } from '~/redux/map/types'; import { STICKERS } from '~/constants/stickers'; import { StickerDesc } from '~/components/StickerDesc'; import classNames from 'classnames'; import { DomMarker } from '~/utils/map/DomMarker'; import { createPortal } from 'react-dom'; -import { MapContainer, MainMap } from '~/constants/map'; +import { MainMap } from '~/constants/map'; import { getAdaptiveScale } from '~/utils/dom'; interface IProps { From 5e3c41682474199f4184e5f4997d112a248129fe Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 14:46:10 +0700 Subject: [PATCH 294/320] replaced tile provider from cacheable to osm --- src/constants/providers.ts | 6 +++--- yarn.lock | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 2140744..09aab02 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -5,7 +5,7 @@ export interface IProvider { } export type ITileMaps = Record -// { +// { // WATERCOLOR: IProvider, // DGIS: IProvider, // DEFAULT: IProvider, @@ -36,8 +36,8 @@ const TILEMAPS: ITileMaps = { }, DEFAULT: { name: 'OpenStreetMap', - // url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - url: 'https://{s}.osm.tile.vault48.org/{z}/{x}/{y}.png', + url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + // url: 'https://{s}.osm.tile.vault48.org/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, // DARQ: { diff --git a/yarn.lock b/yarn.lock index 5a3cde3..c754c94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7218,7 +7218,12 @@ leaflet.markercluster@^1.4.1: resolved "https://registry.yarnpkg.com/leaflet.markercluster/-/leaflet.markercluster-1.5.0.tgz#54db42485da32fc3d92c7ae22d0d7982879e0b67" integrity sha512-Fvf/cq4o806mJL50n+fZW9+QALDDLPvt7vuAjlD2vfnxx3srMDs2vWINJze4nKYJYRY45OC6tM/669C3pLwMCA== -leaflet@>=0.7.0, leaflet@^1.6.0: +leaflet@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.6.0.tgz#aecbb044b949ec29469eeb31c77a88e2f448f308" + integrity sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ== + +leaflet@>=0.7.0: version "1.7.1" resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19" integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw== From c1c99b4562a112dc28e3b57aeca55f3d1d3d2b8f Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 14:49:28 +0700 Subject: [PATCH 295/320] cleaned providers list --- .gitignore | 1 + src/constants/providers.ts | 36 ++---------------------------------- 2 files changed, 3 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index cf8a05b..779594e 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ yarn-error.log stats.json .env +build diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 09aab02..17ad1cf 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -23,62 +23,30 @@ export type ITileMaps = Record // Стили карт const TILEMAPS: ITileMaps = { - // WATERCOLOR: { - // name: 'Watercolor', - // url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg', - // range: [1, 2, 3, 4], - // }, DGIS: { name: '2gis', url: 'https://tile1.maps.2gis.com/tiles?x={x}&y={y}&z={z}&v=1', - // url: 'https://{s}.dgis.tile.vault48.org/tiles?x={x}&y={y}&z={z}&v=1', range: ['a','b','c'], }, DEFAULT: { name: 'OpenStreetMap', url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - // url: 'https://{s}.osm.tile.vault48.org/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, - // DARQ: { - // name: 'Darq', - // url: 'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', - // range: [1, 2, 3, 4], - // }, BLANK: { name: 'Blanque', - // url: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', url: 'https://{s}.carto.tile.vault48.org/light_all/{z}/{x}/{y}.png', - // range: [1, 2, 3, 4], - range: ['a','b','c'], + range: [1, 2, 3, 4], }, HOT: { name: 'Hot', - // url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', - url: 'https://{s}.hot.tile.vault48.org/hot/{z}/{x}/{y}.png', + url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', range: ['a', 'b', 'c'], }, - // SAT: { - // name: 'Google Sattelite', - // url: 'https://mt{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}', - // range: [0, 1, 2, 3], - // }, - // YMAP: { - // name: 'Yandex', - // url: 'https://vec0{s}.maps.yandex.net/tiles?l=map&v=17.04.16-0&x={x}&y={y}&z={z}&scale=1&lang=ru_RU', - // range: [1, 2, 3, 4], - // }, - // YSAT: { - // name: 'YandexSat', - // url: 'https://sat0{s}.maps.yandex.net/tiles?l=sat&v=3.330.0&x={x}&y={y}&z={z}&lang=ru_RU', - // range: [1, 2, 3, 4], - // }, ESAT: { name: 'Sattelite', url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', - // url: 'https://{s}.esat.tile.vault48.org/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', range: [1,2,3,4], - // range: ['a','b','c'], } }; From dc01dfe3c0a2c4eccfebfcdd1d89a82cbddd3338 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 15:00:35 +0700 Subject: [PATCH 296/320] disabled telegram notifications --- .drone.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.drone.yml b/.drone.yml index 5de196b..381f7d0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -64,21 +64,21 @@ steps: - cp -a $${ENV_PATH}/${DRONE_BRANCH}/. $${BUILD_PATH}/${DRONE_BRANCH} - docker-compose build - docker-compose up -d - - name: telgram_notify - image: appleboy/drone-telegram - when: - status: - - success - - failure - settings: - token: - from_secret: telegram_token - to: - from_secret: telegram_chat_id - format: markdown - message: > - {{#success build.status}}🤓{{else}}😨{{/success}} - [{{repo.name}} / {{commit.branch}}]({{ build.link }}) - ``` - {{ commit.message }} - ``` +# - name: telgram_notify +# image: appleboy/drone-telegram +# when: +# status: +# - success +# - failure +# settings: +# token: +# from_secret: telegram_token +# to: +# from_secret: telegram_chat_id +# format: markdown +# message: > +# {{#success build.status}}🤓{{else}}😨{{/success}} +# [{{repo.name}} / {{commit.branch}}]({{ build.link }}) +# ``` +# {{ commit.message }} +# ``` From 9a7a0380322a052ddccfc8db50cf5dca4612e4d0 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 15:13:04 +0700 Subject: [PATCH 297/320] added favicon --- public/favicon.png | Bin 0 -> 707 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/favicon.png diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..22b09fe8401f92ff22557c403ba187a11913cfe4 GIT binary patch literal 707 zcmV;!0zCbRP)!h@m)rBnR#>_onyn0)NL9*46Dn7!o}?O1$qT#>2Wto7WVap|)Y8f({!7x&5 z3t}S=aabPoA2DXeAN+zBQ(`z!bOTiv2ugr_p%cMiaEc=T;di{Q1}fdVNu&pfXWlQb prbIX#Zk1AY|4Xt)rlgczKLOn0+XuVIaNPg^002ovPDHLkV1ng|HP-+D literal 0 HcmV?d00001 From fe311e7839763e711fb91084aed4c8cc43f39b54 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 16:25:25 +0700 Subject: [PATCH 298/320] fixed typescript errors --- src/components/StickerDesc.tsx | 7 +- src/components/dialogs/MapListDialog.tsx | 13 +- src/components/dialogs/ProviderDialog.tsx | 4 +- src/components/dialogs/TitleDialog.tsx | 2 +- src/components/maps/RouteRowView.tsx | 2 +- src/components/panels/EditorPanel.tsx | 12 +- src/components/renderer/Renderer.tsx | 14 +- src/components/search/MapListDialogHead.tsx | 2 +- src/constants/api.ts | 20 +- src/constants/auth.ts | 12 +- src/constants/providers.ts | 17 +- src/map/Arrows/index.tsx | 6 +- src/map/CurrentLocation/index.tsx | 6 +- src/map/GpxPolyline/index.tsx | 4 +- src/map/KmMarks/index.tsx | 6 +- src/map/Map/index.tsx | 2 +- src/map/Route/index.tsx | 6 +- src/map/Router/index.tsx | 12 +- src/map/Sticker/index.tsx | 39 +- src/map/Stickers/index.tsx | 2 +- src/map/TileLayer/index.tsx | 8 +- src/redux/editor/index.ts | 4 +- src/redux/editor/sagas.ts | 21 +- src/redux/map/index.ts | 4 +- src/redux/map/sagas.ts | 271 ++++++------- src/redux/store.ts | 29 +- src/redux/user/index.ts | 4 +- src/redux/user/sagas.ts | 428 +++++++++++--------- src/utils/api.ts | 258 ------------ src/utils/api/index.ts | 214 ++++++++++ src/utils/api/instance.ts | 6 + src/utils/context.ts | 4 +- src/utils/gpx.ts | 6 +- src/utils/history.ts | 10 +- src/utils/map/ArrowsLayer.ts | 9 +- src/utils/map/InteractivePoly.ts | 42 +- src/utils/marks.ts | 8 +- src/utils/middleware.ts | 27 +- src/utils/renderer.ts | 10 +- src/utils/window.ts | 10 +- tsconfig.json | 2 +- 41 files changed, 786 insertions(+), 777 deletions(-) delete mode 100644 src/utils/api.ts create mode 100644 src/utils/api/index.ts create mode 100644 src/utils/api/instance.ts diff --git a/src/components/StickerDesc.tsx b/src/components/StickerDesc.tsx index ab20af4..40477bb 100644 --- a/src/components/StickerDesc.tsx +++ b/src/components/StickerDesc.tsx @@ -23,10 +23,15 @@ class StickerDesc extends React.PureComponent { blockMouse = e => { e.preventDefault(); e.stopPropagation(); + + if (!this.input) { + return + } + this.input.focus(); }; - input: HTMLTextAreaElement; + input: HTMLTextAreaElement | null = null; render() { const { value: text } = this.props; diff --git a/src/components/dialogs/MapListDialog.tsx b/src/components/dialogs/MapListDialog.tsx index 557f10f..48935b7 100644 --- a/src/components/dialogs/MapListDialog.tsx +++ b/src/components/dialogs/MapListDialog.tsx @@ -64,9 +64,8 @@ export interface State { class MapListDialogUnconnected extends PureComponent { state = { - menu_target: null, - editor_target: null, - + menu_target: '', + editor_target: '', is_editing: false, is_dropping: false, }; @@ -74,7 +73,7 @@ class MapListDialogUnconnected extends PureComponent { startEditing = (editor_target: IRouteListItem['address']): void => this.setState({ editor_target, - menu_target: null, + menu_target: '', is_editing: true, is_dropping: false, }); @@ -86,19 +85,19 @@ class MapListDialogUnconnected extends PureComponent { hideMenu = (): void => this.setState({ - menu_target: null, + menu_target: '', }); showDropCard = (editor_target: IRouteListItem['address']): void => this.setState({ editor_target, - menu_target: null, + menu_target: '', is_editing: false, is_dropping: true, }); stopEditing = (): void => { - this.setState({ editor_target: null }); + this.setState({ editor_target: '' }); }; setTitle = ({ target: { value } }: { target: { value: string } }): void => { diff --git a/src/components/dialogs/ProviderDialog.tsx b/src/components/dialogs/ProviderDialog.tsx index 29ac463..e564458 100644 --- a/src/components/dialogs/ProviderDialog.tsx +++ b/src/components/dialogs/ProviderDialog.tsx @@ -27,7 +27,7 @@ const ProviderDialogUnconnected = ({ provider, mapSetProvider }: Props) => ( backgroundImage: `url(${replaceProviderUrl(item, { x: 5980, y: 2589, zoom: 13 })})`, }} onMouseDown={() => mapSetProvider(item)} - key={PROVIDERS[item].name} + key={PROVIDERS[item]?.name} > { provider === item && @@ -44,4 +44,4 @@ const ProviderDialogUnconnected = ({ provider, mapSetProvider }: Props) => ( const ProviderDialog = connect(mapStateToProps, mapDispatchToProps)(ProviderDialogUnconnected) -export { ProviderDialog } \ No newline at end of file +export { ProviderDialog } diff --git a/src/components/dialogs/TitleDialog.tsx b/src/components/dialogs/TitleDialog.tsx index 75fd328..d626b06 100644 --- a/src/components/dialogs/TitleDialog.tsx +++ b/src/components/dialogs/TitleDialog.tsx @@ -42,7 +42,7 @@ export class TitleDialogUnconnected extends React.PureComponent { this.setMaxHeight(); } - setMaxHeight = (): number => { + setMaxHeight = () => { if (!this.ref_sizer || !this.ref_title || !this.ref_text) return 0; const { height: sizer_height } = this.ref_sizer.getBoundingClientRect(); diff --git a/src/components/maps/RouteRowView.tsx b/src/components/maps/RouteRowView.tsx index 072c80a..181ec61 100644 --- a/src/components/maps/RouteRowView.tsx +++ b/src/components/maps/RouteRowView.tsx @@ -40,7 +40,7 @@ export const RouteRowView = ({ is_admin, is_published, toggleStarred -}: Props): ReactElement => ( +}: Props): ReactElement => (
      {(tab === TABS.PENDING || tab === TABS.STARRED) && is_admin && (
      diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 5b017ea..61bd25c 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -1,4 +1,4 @@ -import React, { PureComponent, useState, useCallback } from 'react'; +import React, { PureComponent } from 'react'; import { MODES } from '~/constants/modes'; import classnames from 'classnames'; @@ -7,12 +7,12 @@ import { EditorDialog } from '~/components/panels/EditorDialog'; import { connect } from 'react-redux'; import { editorChangeMode, + editorKeyPressed, + editorRedo, editorStartEditing, editorStopEditing, editorTakeAShot, - editorKeyPressed, editorUndo, - editorRedo, } from '~/redux/editor/actions'; import { Tooltip } from '~/components/panels/Tooltip'; import { IState } from '~/redux/store'; @@ -47,6 +47,10 @@ type Props = ReturnType & typeof mapDispatchToProps & {} class EditorPanelUnconnected extends PureComponent { componentDidMount() { + if (!this.panel) { + return; + } + window.addEventListener('keydown', this.onKeyPress as any); const obj = document.getElementById('control-dialog'); @@ -57,7 +61,7 @@ class EditorPanelUnconnected extends PureComponent { obj.style.width = String(width); } - panel: HTMLElement = null; + panel: HTMLDivElement | null = null; componentWillUnmount() { window.removeEventListener('keydown', this.onKeyPress as any); diff --git a/src/components/renderer/Renderer.tsx b/src/components/renderer/Renderer.tsx index a245da5..ea7acf3 100644 --- a/src/components/renderer/Renderer.tsx +++ b/src/components/renderer/Renderer.tsx @@ -31,6 +31,10 @@ class Component extends React.Component { }; onImageLoaded = () => { + if (!this.image) { + return + } + this.croppr = new Croppr(this.image, { onInitialize: this.onCropInit, }); @@ -57,12 +61,12 @@ class Component extends React.Component { regionEl.append(this.logo); }; - croppr: Croppr; - logo: HTMLDivElement; - image: HTMLImageElement; - logoImg: HTMLImageElement; + croppr?: Croppr; + logo: HTMLDivElement | null = null; + image: HTMLImageElement | null = null; + logoImg: HTMLImageElement | null = null; - getImage = () => this.props.editorCropAShot(this.croppr.getValue()); + getImage = () => this.props.editorCropAShot(this.croppr?.getValue()); render() { const { data } = this.props.editor.renderer; diff --git a/src/components/search/MapListDialogHead.tsx b/src/components/search/MapListDialogHead.tsx index cd8edf9..11ce7f2 100644 --- a/src/components/search/MapListDialogHead.tsx +++ b/src/components/search/MapListDialogHead.tsx @@ -7,7 +7,7 @@ interface Props { max: number; search: string; distance: [number, number]; - onDistanceChange: (val: [number, number]) => void; + onDistanceChange: (val: number[]) => void; onSearchChange: ChangeEventHandler; } diff --git a/src/constants/api.ts b/src/constants/api.ts index 5febdcf..dd1f73e 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -1,16 +1,14 @@ -import { CLIENT } from '~/config/frontend'; - export const API = { - GET_GUEST: `${CLIENT.API_ADDR}/api/auth/`, - CHECK_TOKEN: `${CLIENT.API_ADDR}/api/auth/`, - IFRAME_LOGIN_VK: `${CLIENT.API_ADDR}/api/auth/vk`, - GET_MAP: `${CLIENT.API_ADDR}/api/route/`, - POST_MAP: `${CLIENT.API_ADDR}/api/route/`, - GET_ROUTE_LIST: tab => `${CLIENT.API_ADDR}/api/route/list/${tab}`, + GET_GUEST: `/api/auth/`, + CHECK_TOKEN: `/api/auth/`, + IFRAME_LOGIN_VK: `/api/auth/vk`, + GET_MAP: `/api/route/`, + POST_MAP: `/api/route/`, + GET_ROUTE_LIST: tab => `/api/route/list/${tab}`, - DROP_ROUTE: `${CLIENT.API_ADDR}/api/route/`, - MODIFY_ROUTE: `${CLIENT.API_ADDR}/api/route/`, - SET_STARRED: `${CLIENT.API_ADDR}/api/route/publish`, + DROP_ROUTE: `/api/route/`, + MODIFY_ROUTE: `/api/route/`, + SET_STARRED: `/api/route/publish`, }; export const API_RETRY_INTERVAL = 10; diff --git a/src/constants/auth.ts b/src/constants/auth.ts index 8e011b8..8b70e58 100644 --- a/src/constants/auth.ts +++ b/src/constants/auth.ts @@ -11,7 +11,7 @@ export interface IUser { role: IRoles[keyof IRoles]; routes: {}; success: boolean; - id?: string; + id: string; uid: string; token?: string; photo: string; @@ -31,9 +31,9 @@ export const DEFAULT_USER: IUser = { role: ROLES.guest, routes: {}, success: false, - id: null, - token: null, - photo: null, - name: null, - uid: null, + id: '', + token: undefined, + photo: '', + name: '', + uid: '', }; diff --git a/src/constants/providers.ts b/src/constants/providers.ts index 17ad1cf..a075539 100644 --- a/src/constants/providers.ts +++ b/src/constants/providers.ts @@ -5,21 +5,6 @@ export interface IProvider { } export type ITileMaps = Record -// { - // WATERCOLOR: IProvider, - // DGIS: IProvider, - // DEFAULT: IProvider, - // DARQ: IProvider, - // BLANK: IProvider, - // HOT: IProvider, - // YSAT: IProvider, - // YMAP: IProvider, - // SAT: IProvider, - // ESAT: IProvider, - // CACHE_OSM: IProvider, - // CACHE_CARTO: IProvider, -// } - // Стили карт const TILEMAPS: ITileMaps = { @@ -53,7 +38,7 @@ const TILEMAPS: ITileMaps = { const ENABLED: Array = ['BLANK', 'DEFAULT', 'DGIS', 'HOT', 'ESAT']; export const DEFAULT_PROVIDER: keyof ITileMaps = ENABLED[1]; -export const PROVIDERS: Partial = ENABLED.reduce((obj, provider) => ({ +export const PROVIDERS: ITileMaps = ENABLED.reduce((obj, provider) => ({ ...obj, [provider]: TILEMAPS[provider], }), {}); diff --git a/src/map/Arrows/index.tsx b/src/map/Arrows/index.tsx index fa4dbb0..1a10263 100644 --- a/src/map/Arrows/index.tsx +++ b/src/map/Arrows/index.tsx @@ -14,17 +14,17 @@ const mapDispatchToProps = {}; type Props = ReturnType & typeof mapDispatchToProps & {}; const ArrowsUnconnected: FC = memo(({ route }) => { - const [layer, setLayer] = useState(null); + const [layer, setLayer] = useState(null); useEffect(() => { const item = new ArrowsLayer({}).addTo(MainMap); - setLayer(item); + setLayer(item); return () => MainMap.removeLayer(item); }, [MainMap]); useEffect(() => { if (!layer) return - + layer.setLatLngs(route); }, [layer, route]) return null; diff --git a/src/map/CurrentLocation/index.tsx b/src/map/CurrentLocation/index.tsx index 745a8aa..61aac29 100644 --- a/src/map/CurrentLocation/index.tsx +++ b/src/map/CurrentLocation/index.tsx @@ -1,9 +1,9 @@ -import React, { FC, useState, useEffect, useCallback } from 'react'; -import { LatLngLiteral, marker, Marker, DivIcon } from 'leaflet'; +import React, { FC, useCallback, useEffect } from 'react'; +import { DivIcon, LatLngLiteral, Marker } from 'leaflet'; import { MainMap } from '~/constants/map'; interface IProps { - location: LatLngLiteral; + location?: LatLngLiteral; } const CurrentLocation: FC = ({ location }) => { diff --git a/src/map/GpxPolyline/index.tsx b/src/map/GpxPolyline/index.tsx index b78bdf3..f59f008 100644 --- a/src/map/GpxPolyline/index.tsx +++ b/src/map/GpxPolyline/index.tsx @@ -8,14 +8,14 @@ interface IProps { } const GpxPolyline: FC = ({ latlngs, color }) => { - const [layer, setLayer] = useState(null); + const [layer, setLayer] = useState(null); useEffect(() => { const item = new Polyline([], { color, stroke: true, opacity: 1, - weight: 7, + weight: 7, // dashArray: [12,12], }).addTo(MainMap); setLayer(item); diff --git a/src/map/KmMarks/index.tsx b/src/map/KmMarks/index.tsx index 2440e96..667d811 100644 --- a/src/map/KmMarks/index.tsx +++ b/src/map/KmMarks/index.tsx @@ -1,4 +1,4 @@ -import React, { FC, useEffect, useState, memo } from 'react'; +import React, { FC, memo, useEffect, useState } from 'react'; import { KmMarksLayer } from '~/utils/marks'; import { MainMap } from '~/constants/map'; import { selectMap } from '~/redux/map/selectors'; @@ -14,14 +14,14 @@ const mapDispatchToProps = {}; type Props = ReturnType & typeof mapDispatchToProps & {}; const KmMarksUnconnected: FC = memo(({ map: { route } }) => { - const [layer, setLayer] = useState(null); + const [layer, setLayer] = useState(null); useEffect(() => { const layer = new KmMarksLayer([]); layer.addTo(MainMap); setLayer(layer); return () => MainMap.removeLayer(layer); - }, [MainMap]); + }, []); useEffect(() => { if (!layer) return; diff --git a/src/map/Map/index.tsx b/src/map/Map/index.tsx index 44cf90b..0836afd 100644 --- a/src/map/Map/index.tsx +++ b/src/map/Map/index.tsx @@ -93,7 +93,7 @@ const MapUnconnected: React.FC = memo( enabled && )}
      , - document.getElementById('canvas') + document.getElementById('canvas')! ); } ); diff --git a/src/map/Route/index.tsx b/src/map/Route/index.tsx index 9d769b2..9c7b890 100644 --- a/src/map/Route/index.tsx +++ b/src/map/Route/index.tsx @@ -1,8 +1,8 @@ -import React, { FC, useEffect, memo, useState, useCallback } from 'react'; +import React, { FC, memo, useCallback, useEffect, useState } from 'react'; import { InteractivePoly } from '~/utils/map/InteractivePoly'; import { isMobile } from '~/utils/window'; import { LatLng } from 'leaflet'; -import { selectEditorMode, selectEditorEditing, selectEditorDirection } from '~/redux/editor/selectors'; +import { selectEditorDirection, selectEditorEditing, selectEditorMode } from '~/redux/editor/selectors'; import * as MAP_ACTIONS from '~/redux/map/actions'; import { connect } from 'react-redux'; import { selectMapRoute } from '~/redux/map/selectors'; @@ -28,7 +28,7 @@ type Props = ReturnType & typeof mapDispatchToProps & {} const RouteUnconnected: FC = memo( ({ route, editing, mode, drawing_direction, mapSetRoute, editorSetDistance, editorSetMarkersShown }) => { - const [layer, setLayer] = useState(null); + const [layer, setLayer] = useState(null); const onDistanceChange = useCallback(({ distance }) => editorSetDistance(distance), [ editorSetDistance, diff --git a/src/map/Router/index.tsx b/src/map/Router/index.tsx index de3b693..7e58edb 100644 --- a/src/map/Router/index.tsx +++ b/src/map/Router/index.tsx @@ -1,16 +1,12 @@ -import { FC, useEffect, useCallback, memo, useState } from 'react'; +import { FC, memo, useCallback, useEffect, useState } from 'react'; import { OsrmRouter } from '~/utils/map/OsrmRouter'; import { connect } from 'react-redux'; import { selectMapRoute } from '~/redux/map/selectors'; -import { - selectEditorRouter, - selectEditorMode, - selectEditorDistance, -} from '~/redux/editor/selectors'; +import { selectEditorDistance, selectEditorMode, selectEditorRouter } from '~/redux/editor/selectors'; import { MainMap } from '~/constants/map'; import * as EDITOR_ACTIONS from '~/redux/editor/actions'; import { MODES } from '~/constants/modes'; -import { LatLngLiteral, marker, divIcon } from 'leaflet'; +import { divIcon, LatLngLiteral, marker } from 'leaflet'; import classNames from 'classnames'; import { angleBetweenPoints } from '~/utils/geom'; @@ -30,7 +26,7 @@ type Props = ReturnType & typeof mapDispatchToProps & {} const RouterUnconnected: FC = memo( ({ route, mode, router: { waypoints }, editorSetRouter, distance }) => { const [dist, setDist] = useState(0); - const [end, setEnd] = useState(null); + const [end, setEnd] = useState(null); const [direction, setDirection] = useState(false); const updateWaypoints = useCallback( diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index 85638a5..a611388 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -20,8 +20,8 @@ interface IProps { mapDropSticker: (index: number) => void; } -export const getLabelDirection = (angle: number): 'left' | 'right' => - angle % Math.PI >= -(Math.PI / 2) && angle % Math.PI <= Math.PI / 2 ? 'left' : 'right'; +export const getLabelDirection = (angle?: number): 'left' | 'right' => + !!angle && angle % Math.PI >= -(Math.PI / 2) && angle % Math.PI <= Math.PI / 2 ? 'left' : 'right'; const getX = e => e.touches && e.touches.length > 0 @@ -36,50 +36,58 @@ const Sticker: React.FC = ({ mapSetSticker, mapDropSticker, }) => { - const [text, setText] = useState(sticker.text); - const [layer, setLayer] = React.useState(null); + const [text, setText] = useState(sticker.text || ''); + const [layer, setLayer] = React.useState(null); const [dragging, setDragging] = React.useState(false); - const wrapper = useRef(null); + const wrapper = useRef(null); let angle = useRef(sticker.angle); const element = React.useMemo(() => document.createElement('div'), []); - const stickerArrow = React.useRef(null); - const stickerImage = React.useRef(null); + const stickerArrow = React.useRef(null); + const stickerImage = React.useRef(null); const onChange = React.useCallback(state => mapSetSticker(index, state), [mapSetSticker, index]); const onDelete = React.useCallback(state => mapDropSticker(index), [mapSetSticker, index]); const updateAngle = useCallback( ang => { - if (!stickerImage.current || !stickerArrow.current) return; - const x = Math.cos(ang + Math.PI) * 56 - 30; const y = Math.sin(ang + Math.PI) * 56 - 30; + if (!stickerImage.current || !stickerArrow.current) { + return; + } + stickerImage.current.style.left = String(6 + x); stickerImage.current.style.top = String(6 + y); stickerArrow.current.style.transform = `rotate(${ang + Math.PI}rad)`; }, - [stickerArrow, stickerImage, angle] + [stickerArrow, stickerImage] ); const onDragStart = React.useCallback(() => { + if (!layer?.dragging) { + return + } + layer.dragging.disable(); MainMap.dragging.disable(); MainMap.disableClicks(); setDragging(true); - }, [setDragging, layer, MainMap]); + }, [setDragging, layer]); const onDragStop = React.useCallback( event => { event.stopPropagation(); event.preventDefault(); - if (!layer) return; + if (!layer?.dragging) { + return; + } setDragging(false); onChange({ @@ -134,7 +142,9 @@ const Sticker: React.FC = ({ }); }, [text, onChange, sticker]); - const direction = React.useMemo(() => getLabelDirection(sticker.angle), [sticker.angle]); + const direction = React.useMemo(() => { + getLabelDirection(sticker?.angle) + }, [sticker.angle]); useEffect(() => { updateAngle(sticker.angle); @@ -148,7 +158,8 @@ const Sticker: React.FC = ({ useEffect(() => { if (!layer) return; - setText(sticker.text); + + setText(sticker.text || ''); }, [layer, sticker.text]); useEffect(() => { diff --git a/src/map/Stickers/index.tsx b/src/map/Stickers/index.tsx index 3cee214..fbd4442 100644 --- a/src/map/Stickers/index.tsx +++ b/src/map/Stickers/index.tsx @@ -14,7 +14,7 @@ interface IProps { } const Stickers: FC = memo(({ stickers, is_editing, mapSetSticker, mapDropSticker }) => { - const [layer, setLayer] = useState(null); + const [layer, setLayer] = useState(null); const [zoom, setZoom] = useState(MainMap.getZoom()); const onZoomChange = useCallback( diff --git a/src/map/TileLayer/index.tsx b/src/map/TileLayer/index.tsx index f01b676..18c9382 100644 --- a/src/map/TileLayer/index.tsx +++ b/src/map/TileLayer/index.tsx @@ -10,7 +10,7 @@ type IProps = React.HTMLAttributes & { }; const TileLayer: React.FC = React.memo(({ children, provider, map }) => { - const [layer, setLayer] = React.useState(null); + const [layer, setLayer] = React.useState(undefined); React.useEffect(() => { if (!map) return; @@ -34,7 +34,11 @@ const TileLayer: React.FC = React.memo(({ children, provider, map }) => layer.setUrl(url); }, [layer, provider]); - return {children}; + return ( + + {children} + + ); }); export { TileLayer }; diff --git a/src/redux/editor/index.ts b/src/redux/editor/index.ts index 383d4ac..5417ecf 100644 --- a/src/redux/editor/index.ts +++ b/src/redux/editor/index.ts @@ -41,7 +41,7 @@ export interface IEditorState { distance: number; estimated: number; speed: number; - activeSticker: { set?: string; sticker?: string }; + activeSticker: { set: string; sticker: string }; is_empty: boolean; is_published: boolean; is_routing: boolean; @@ -134,7 +134,7 @@ export const EDITOR_INITIAL_STATE = { }, save: { - error: null, + error: '', finished: false, overwriting: false, processing: false, diff --git a/src/redux/editor/sagas.ts b/src/redux/editor/sagas.ts index 39275bc..8521125 100644 --- a/src/redux/editor/sagas.ts +++ b/src/redux/editor/sagas.ts @@ -69,8 +69,14 @@ import uuid from 'uuid'; import { getRandomColor, getAdaptiveScale } from '~/utils/dom'; const hideLoader = () => { - document.getElementById('loader').style.opacity = String(0); - document.getElementById('loader').style.pointerEvents = 'none'; + const el = document.getElementById('loader'); + + if (!el) { + return true; + } + + el.style.opacity = String(0); + el.style.pointerEvents = 'none'; return true; }; @@ -125,6 +131,10 @@ function* getRenderData() { canvas.height = window.innerHeight; const ctx = canvas.getContext('2d'); + if (!ctx) { + return + } + const geometry = getTilePlacement(); const points = getPolyPlacement(route); const sticker_points = getStickersPlacement(stickers); @@ -184,6 +194,11 @@ function* getCropData({ x, y, width, height }) { canvas.width = width; canvas.height = height; const ctx = canvas.getContext('2d'); + + if (!ctx) { + return + } + const image = yield imageFetcher(data); ctx.drawImage(image, -x, -y); @@ -281,7 +296,7 @@ function* mapClick({ latlng }: ReturnType) { function* routerSubmit() { const route: ReturnType = yield select(selectMapRoute); - const latlngs: LatLng[] = path(['_routes', 0, 'coordinates'], OsrmRouter); + const latlngs: LatLng[] = path(['_routes', 0, 'coordinates'], OsrmRouter) || []; const coordinates = simplify(latlngs); diff --git a/src/redux/map/index.ts b/src/redux/map/index.ts index 1084456..ffd2ecb 100644 --- a/src/redux/map/index.ts +++ b/src/redux/map/index.ts @@ -28,9 +28,9 @@ export const MAP_INITIAL_STATE: IMapReducer = { address: '', address_origin: '', description: '', - owner: { id: null }, + owner: { id: '' }, is_public: false, zoom: 13, } -export const map = createReducer(MAP_INITIAL_STATE, MAP_HANDLERS) \ No newline at end of file +export const map = createReducer(MAP_INITIAL_STATE, MAP_HANDLERS) diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 718a242..1572bf6 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -1,40 +1,30 @@ -import { - takeEvery, - select, - put, - call, - TakeEffect, - race, - take, - takeLatest, - delay, -} from 'redux-saga/effects'; +import { call, delay, put, race, select, take, TakeEffect, takeEvery, takeLatest } from 'redux-saga/effects'; import { MAP_ACTIONS } from './constants'; import { - mapClicked, mapAddSticker, - mapSetProvider, + mapClicked, mapSet, - mapSetTitle, mapSetAddressOrigin, + mapSetProvider, mapSetRoute, mapSetStickers, + mapSetTitle, } from './actions'; -import { selectUser, selectUserUser } from '~/redux/user/selectors'; +import { selectUser } from '~/redux/user/selectors'; import { MODES } from '~/constants/modes'; import { + editorCaptureHistory, editorChangeMode, + editorClearAll, + editorSendSaveRequest, + editorSetActiveSticker, editorSetChanged, editorSetEditing, - editorSetReady, - editorSetActiveSticker, - editorSendSaveRequest, - editorSetSave, - editorClearAll, editorSetHistory, - editorCaptureHistory, + editorSetReady, + editorSetSave, } from '~/redux/editor/actions'; -import { pushLoaderState, getUrlData, pushPath } from '~/utils/history'; +import { getUrlData, pushLoaderState, pushPath } from '~/utils/history'; import { getStoredMap, postMap } from '~/utils/api'; import { Unwrap } from '~/utils/middleware'; import { selectMap, selectMapProvider, selectMapRoute, selectMapStickers } from './selectors'; @@ -70,29 +60,36 @@ export function* replaceAddressIfItsBusy(destination, original) { } export function* loadMapSaga(path) { - const { - data: { route, error, random_url }, - }: Unwrap = yield call(getStoredMap, { name: path }); + try { + const { + data: { + route, error, random_url, + }, + }: Unwrap = yield call(getStoredMap, { name: path }); - if (route && !error) { - yield put( - mapSet({ - provider: route.provider, - route: route.route, - stickers: route.stickers, - title: route.title, - address: route.address, - description: route.description, - is_public: route.is_public, - logo: route.logo, - }) - ); + if (route && !error) { + yield put( + mapSet({ + provider: route.provider, + route: route.route, + stickers: route.stickers, + title: route.title, + address: route.address, + description: route.description, + is_public: route.is_public, + logo: route.logo, + }), + ); - yield put(editorSetHistory({ records: [{ route: route.route, stickers: route.stickers }] })); - return { route, random_url }; + yield put(editorSetHistory({ records: [{ route: route.route, stickers: route.stickers }] })); + return { route, random_url }; + } + + return null; + } catch (e) { + console.log(e); + yield call(startEmptyEditorSaga); } - - return null; } export function* startEmptyEditorSaga() { @@ -142,10 +139,10 @@ export function* mapInitSaga() { yield put(mapSetProvider(provider)); if (hash && /^#map/.test(hash)) { - const [, newUrl] = hash.match(/^#map[:/?!](.*)$/); + const matches = hash.match(/^#map[:/?!](.*)$/); - if (newUrl) { - yield pushPath(`/${newUrl}`); + if (matches && matches[1]) { + yield pushPath(`/${matches[1]}`); yield call(setReadySaga); return; } @@ -161,7 +158,7 @@ function* setActiveStickerSaga() { yield put(editorChangeMode(MODES.STICKERS)); } -function* setTitleSaga({ title }: ReturnType) { +function setTitleSaga({ title }: ReturnType) { if (title) { document.title = `${title} | Редактор маршрутов`; } @@ -216,7 +213,7 @@ function* clearSaga({ type }) { const { mode, activeSticker }: ReturnType = yield select(selectEditor); if (activeSticker && activeSticker.set && activeSticker.sticker) { - yield put(editorSetActiveSticker(null)); + yield put(editorSetActiveSticker({ set: '', sticker: '' })); } if (mode !== MODES.NONE) { @@ -231,94 +228,96 @@ function* sendSaveRequestSaga({ is_public, description, }: ReturnType) { - const { route, stickers, provider }: ReturnType = yield select(selectMap); + try { + const { route, stickers, provider }: ReturnType = yield select(selectMap); - if (!route.length && !stickers.length) { - return yield put( - editorSetSave({ error: TIPS.SAVE_EMPTY, loading: false, overwriting: false, finished: false }) + if (!route.length && !stickers.length) { + return yield put( + editorSetSave({ error: TIPS.SAVE_EMPTY, loading: false, overwriting: false, finished: false }), + ); + } + + const { logo }: ReturnType = yield select(selectMap); + const { distance }: ReturnType = yield select(selectEditor); + + yield put(editorSetSave({ loading: true, overwriting: false, finished: false, error: '' })); + + const { + result, + timeout, + cancel, + }: { + result: Unwrap; + timeout: boolean; + cancel: TakeEffect; + } = yield race({ + result: postMap({ + route, + stickers, + title, + force, + address, + logo, + distance, + provider, + is_public, + description, + }), + timeout: delay(10000), + cancel: take(EDITOR_ACTIONS.RESET_SAVE_DIALOG), + }); + + yield put(editorSetSave({ loading: false })); + + if (cancel) return yield put(editorChangeMode(MODES.NONE)); + + if (result && result.data.code === 'already_exist') + return yield put(editorSetSave({ overwriting: true })); + + if (result && result.data.code === 'conflict') + return yield put( + editorSetSave({ + error: TIPS.SAVE_EXISTS, + loading: false, + overwriting: false, + finished: false, + }), + ); + + if (timeout || !result || !result.data.route || !result.data.route.address) + return yield put( + editorSetSave({ + error: TIPS.SAVE_TIMED_OUT, + loading: false, + overwriting: false, + finished: false, + }), + ); + + yield put( + mapSet({ + address: result.data.route.address, + title: result.data.route.title, + is_public: result.data.route.is_public, + description: result.data.route.description, + }), ); + + yield put(editorSetReady(false)); + pushPath(`/${address}/edit`); + yield put(editorSetReady(true)); + + yield put( + editorSetSave({ + error: TIPS.SAVE_SUCCESS, + loading: false, + overwriting: false, + finished: true, + }), + ); + } catch (e) { + console.log(e); } - - const { logo }: ReturnType = yield select(selectMap); - const { distance }: ReturnType = yield select(selectEditor); - const { token }: ReturnType = yield select(selectUserUser); - - yield put(editorSetSave({ loading: true, overwriting: false, finished: false, error: null })); - - const { - result, - timeout, - cancel, - }: { - result: Unwrap; - timeout: boolean; - cancel: TakeEffect; - } = yield race({ - result: postMap({ - token, - route, - stickers, - title, - force, - address, - logo, - distance, - provider, - is_public, - description, - }), - timeout: delay(10000), - cancel: take(EDITOR_ACTIONS.RESET_SAVE_DIALOG), - }); - - yield put(editorSetSave({ loading: false })); - - if (cancel) return yield put(editorChangeMode(MODES.NONE)); - - if (result && result.data.code === 'already_exist') - return yield put(editorSetSave({ overwriting: true })); - - if (result && result.data.code === 'conflict') - return yield put( - editorSetSave({ - error: TIPS.SAVE_EXISTS, - loading: false, - overwriting: false, - finished: false, - }) - ); - - if (timeout || !result || !result.data.route || !result.data.route.address) - return yield put( - editorSetSave({ - error: TIPS.SAVE_TIMED_OUT, - loading: false, - overwriting: false, - finished: false, - }) - ); - - yield put( - mapSet({ - address: result.data.route.address, - title: result.data.route.title, - is_public: result.data.route.is_public, - description: result.data.route.description, - }) - ); - - yield put(editorSetReady(false)); - pushPath(`/${address}/edit`); - yield put(editorSetReady(true)); - - yield put( - editorSetSave({ - error: TIPS.SAVE_SUCCESS, - loading: false, - overwriting: false, - finished: true, - }) - ); } function* setChanged() { @@ -328,14 +327,10 @@ function* setChanged() { yield put(editorSetChanged(true)); } -function* onZoomChange() { - -} - export function* mapSaga() { yield takeEvery( [MAP_ACTIONS.SET_ROUTE, MAP_ACTIONS.SET_STICKER, MAP_ACTIONS.SET_STICKERS], - setChanged + setChanged, ); yield takeEvery(EDITOR_ACTIONS.START_EDITING, startEditingSaga); @@ -351,6 +346,6 @@ export function* mapSaga() { EDITOR_ACTIONS.CLEAR_ALL, EDITOR_ACTIONS.CLEAR_CANCEL, ], - clearSaga + clearSaga, ); } diff --git a/src/redux/store.ts b/src/redux/store.ts index ccdee48..e8212ab 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -18,9 +18,12 @@ import { map, IMapReducer } from '~/redux/map'; import { mapSaga } from '~/redux/map/sagas'; import { watchLocation, getLocation } from '~/utils/window'; import { LatLngLiteral } from 'leaflet'; -import { setUserLocation } from './user/actions'; +import { setUserLocation, userLogout } from './user/actions'; import { MainMap } from '~/constants/map'; import { mapZoomChange } from './map/actions'; +import { assocPath } from 'ramda'; +import { AxiosError } from 'axios'; +import { api } from '~/utils/api/instance'; const userPersistConfig: PersistConfig = { key: 'user', @@ -64,6 +67,28 @@ export function configureStore(): { store: Store; persistor: Persistor } { const persistor = persistStore(store); + // Pass token to axios + api.interceptors.request.use(options => { + const token = store.getState().user.token; + + if (!token) { + return options; + } + + return assocPath(['headers', 'authorization'], `Bearer ${token}`, options); + }); + + // Logout on 401 + api.interceptors.response.use(undefined, (error: AxiosError<{ error: string }>) => { + if (error.response?.status === 401) { + store.dispatch(userLogout()); + } + + error.message = error?.response?.data?.error || error?.response?.statusText || error.message; + + throw error; + }); + return { store, persistor }; } @@ -74,5 +99,5 @@ history.listen((location, action) => { store.dispatch(editorLocationChanged(location.pathname)); }); -watchLocation((location: LatLngLiteral) => store.dispatch(setUserLocation(location))); +watchLocation((location: LatLngLiteral | undefined) => store.dispatch(setUserLocation(location))); MainMap.on('zoomend', event => store.dispatch(mapZoomChange(event.target._zoom))) diff --git a/src/redux/user/index.ts b/src/redux/user/index.ts index 162d8d0..51ef671 100644 --- a/src/redux/user/index.ts +++ b/src/redux/user/index.ts @@ -15,7 +15,7 @@ export interface IRouteListItem { export interface IRootReducer { // ready: boolean, user: IUser; - location: LatLngLiteral; + location?: LatLngLiteral; routes: { limit: 0; loading: boolean; @@ -38,7 +38,7 @@ export type IRootState = Readonly; export const INITIAL_STATE: IRootReducer = { user: { ...DEFAULT_USER }, - location: null, + location: undefined, routes: { limit: 0, loading: false, // <-- maybe delete this diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index e366860..f9ee41a 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -1,5 +1,5 @@ import { REHYDRATE, RehydrateAction } from 'redux-persist'; -import { takeLatest, select, call, put, takeEvery, delay } from 'redux-saga/effects'; +import { call, delay, put, select, takeEvery, takeLatest } from 'redux-saga/effects'; import { checkIframeToken, checkUserToken, @@ -9,15 +9,16 @@ import { modifyRoute, sendRouteStarred, } from '~/utils/api'; +import * as ActionCreators from '~/redux/user/actions'; import { - searchSetTab, - setUser, mapsSetShift, searchChangeDistance, searchPutRoutes, searchSetLoading, + searchSetTab, searchSetTitle, setRouteStarred, + setUser, userLogin, } from '~/redux/user/actions'; @@ -26,8 +27,6 @@ import { USER_ACTIONS } from '~/redux/user/constants'; import { DEFAULT_USER } from '~/constants/auth'; import { DIALOGS, TABS } from '~/constants/dialogs'; - -import * as ActionCreators from '~/redux/user/actions'; import { Unwrap } from '~/utils/middleware'; import { selectUser, selectUserUser } from './selectors'; import { mapInitSaga } from '~/redux/map/sagas'; @@ -35,64 +34,71 @@ import { editorSetDialog, editorSetDialogActive } from '../editor/actions'; import { selectEditor } from '../editor/selectors'; function* generateGuestSaga() { - const { - data: { user, random_url }, - }: Unwrap = yield call(getGuestToken); + try { + const { + data: { user, random_url }, + }: Unwrap = yield call(getGuestToken); - yield put(setUser({ ...user, random_url })); + yield put(setUser({ ...user, random_url })); - return { ...user, random_url }; + return { ...user, random_url }; + } catch(e) { + console.log(e) + } } function* authCheckSaga({ key }: RehydrateAction) { - if (key !== 'user') return; + try { + if (key !== 'user') return; - pushLoaderState(70); + pushLoaderState(70); - const { id, token }: ReturnType = yield select(selectUserUser); - const { ready }: ReturnType = yield select(selectEditor); + const { id, token }: ReturnType = yield select(selectUserUser); + const { ready }: ReturnType = yield select(selectEditor); - if (window.location.search || true) { - const { viewer_id, auth_key } = yield parseQuery(window.location.search); + if (window.location.search || true) { + const { viewer_id, auth_key } = yield parseQuery(window.location.search); - if (viewer_id && auth_key && id !== `vk:${viewer_id}`) { - const user = yield call(checkIframeToken, { viewer_id, auth_key }); + if (viewer_id && auth_key && id !== `vk:${viewer_id}`) { + const user = yield call(checkIframeToken, { viewer_id, auth_key }); + + if (user) { + yield put(setUser(user)); + + pushLoaderState(99); + + return yield call(mapInitSaga); + } + } + } + + if (id && token) { + const { + data: { user, random_url }, + }: Unwrap = yield call(checkUserToken, { + id, + }); if (user) { - yield put(setUser(user)); + yield put(setUser({ ...user, random_url })); pushLoaderState(99); return yield call(mapInitSaga); + } else if (!ready) { + pushNetworkInitError(); + return; } } + + yield call(generateGuestSaga); + + pushLoaderState(80); + + return yield call(mapInitSaga); + } catch (e) { + console.log(e); } - - if (id && token) { - const { - data: { user, random_url }, - }: Unwrap = yield call(checkUserToken, { - id, - token, - }); - - if (user) { - yield put(setUser({ ...user, random_url })); - - pushLoaderState(99); - - return yield call(mapInitSaga); - } else if (!ready) { - pushNetworkInitError(); - return; - } - } - - yield call(generateGuestSaga); - - pushLoaderState(80); - - return yield call(mapInitSaga); } function* gotVkUserSaga({ user: u }: ReturnType) { @@ -105,58 +111,63 @@ function* gotVkUserSaga({ user: u }: ReturnType } function* searchGetRoutes() { - const { token }: ReturnType = yield select(selectUserUser); + try { + const { + routes: { + step, + shift, + filter: { title, distance, tab }, + }, + }: ReturnType = yield select(selectUser); - const { - routes: { + const result: Unwrap = yield getRouteList({ + search: title, + min: distance[0], + max: distance[1], step, shift, - filter: { title, distance, tab }, - }, - }: ReturnType = yield select(selectUser); + tab, + }); - const result: Unwrap = yield getRouteList({ - token, - search: title, - min: distance[0], - max: distance[1], - step, - shift, - tab, - }); - - return result; + return result; + } catch (e) { + console.log(e); + } } export function* searchSetSagaWorker() { - const { - routes: { filter }, - }: ReturnType = yield select(selectUser); + try { + const { + routes: { filter }, + }: ReturnType = yield select(selectUser); - const { - data: { - routes, - limits: { min, max, count: limit }, - filter: { shift, step }, - }, - }: Unwrap = yield call(searchGetRoutes); + const { + data: { + routes, + limits: { min, max, count: limit }, + filter: { shift, step }, + }, + }: Unwrap = yield call(searchGetRoutes); - yield put(searchPutRoutes({ list: routes, min, max, limit, shift, step })); + yield put(searchPutRoutes({ list: routes, min, max, limit, shift, step })); - // change distange range if needed and load additional data - if ( - (filter.min > min && filter.distance[0] <= filter.min) || - (filter.max < max && filter.distance[1] >= filter.max) - ) { - yield put( - searchChangeDistance([ - filter.min > min && filter.distance[0] <= filter.min ? min : filter.distance[0], - filter.max < max && filter.distance[1] >= filter.max ? max : filter.distance[1], - ]) - ); + // change distange range if needed and load additional data + if ( + (filter.min > min && filter.distance[0] <= filter.min) || + (filter.max < max && filter.distance[1] >= filter.max) + ) { + yield put( + searchChangeDistance([ + filter.min > min && filter.distance[0] <= filter.min ? min : filter.distance[0], + filter.max < max && filter.distance[1] >= filter.max ? max : filter.distance[1], + ]), + ); + } + + return yield put(searchSetLoading(false)); + } catch (e) { + console.log(e); } - - return yield put(searchSetLoading(false)); } function* searchSetSaga() { @@ -167,26 +178,30 @@ function* searchSetSaga() { } function* openMapDialogSaga({ tab }: ReturnType) { - const { - routes: { - filter: { tab: current }, - }, - }: ReturnType = yield select(selectUser); + try { + const { + routes: { + filter: { tab: current }, + }, + }: ReturnType = yield select(selectUser); - const { dialog_active }: ReturnType = yield select(selectEditor); + const { dialog_active }: ReturnType = yield select(selectEditor); - if (dialog_active && tab === current) { - return yield put(editorSetDialogActive(false)); + if (dialog_active && tab === current) { + return yield put(editorSetDialogActive(false)); + } + + if (tab !== current) { + yield put(searchSetTab(tab)); + } + + yield put(editorSetDialog(DIALOGS.MAP_LIST)); + yield put(editorSetDialogActive(true)); + + return tab; + } catch (e) { + console.log(e); } - - if (tab !== current) { - yield put(searchSetTab(tab)); - } - - yield put(editorSetDialog(DIALOGS.MAP_LIST)); - yield put(editorSetDialogActive(true)); - - return tab; } function* searchSetTabSaga() { @@ -210,78 +225,85 @@ function* setUserSaga() { } function* mapsLoadMoreSaga() { - const { - routes: { limit, list, shift, step, loading, filter }, - }: ReturnType = yield select(selectUser); + try { + const { + routes: { limit, list, shift, step, loading, filter }, + }: ReturnType = yield select(selectUser); - if (loading || list.length >= limit || limit === 0) return; + if (loading || list.length >= limit || limit === 0) return; - yield delay(50); + yield delay(50); - yield put(searchSetLoading(true)); - yield put(mapsSetShift(shift + step)); + yield put(searchSetLoading(true)); + yield put(mapsSetShift(shift + step)); - const { - data: { - limits: { min, max, count }, - filter: { shift: resp_shift, step: resp_step }, - routes, - }, - }: Unwrap = yield call(searchGetRoutes); + const { + data: { + limits: { min, max, count }, + filter: { shift: resp_shift, step: resp_step }, + routes, + }, + }: Unwrap = yield call(searchGetRoutes); + + if ( + (filter.min > min && filter.distance[0] <= filter.min) || + (filter.max < max && filter.distance[1] >= filter.max) + ) { + yield put( + searchChangeDistance([ + filter.min > min && filter.distance[0] <= filter.min ? min : filter.distance[0], + filter.max < max && filter.distance[1] >= filter.max ? max : filter.distance[1], + ]), + ); + } - if ( - (filter.min > min && filter.distance[0] <= filter.min) || - (filter.max < max && filter.distance[1] >= filter.max) - ) { yield put( - searchChangeDistance([ - filter.min > min && filter.distance[0] <= filter.min ? min : filter.distance[0], - filter.max < max && filter.distance[1] >= filter.max ? max : filter.distance[1], - ]) + searchPutRoutes({ + min, + max, + limit: count, + shift: resp_shift, + step: resp_step, + list: [...list, ...routes], + }), ); + yield put(searchSetLoading(false)); + } catch (e) { + console.log(e); } - - yield put( - searchPutRoutes({ - min, - max, - limit: count, - shift: resp_shift, - step: resp_step, - list: [...list, ...routes], - }) - ); - yield put(searchSetLoading(false)); } function* dropRouteSaga({ address }: ReturnType) { - const { token }: ReturnType = yield select(selectUserUser); - const { - routes: { - list, - step, - shift, - limit, - filter: { min, max }, - }, - }: ReturnType = yield select(selectUser); - - const index = list.findIndex(el => el.address === address); - - if (index >= 0) { - yield put( - searchPutRoutes({ - list: list.filter(el => el.address !== address), - min, - max, + try { + const { + routes: { + list, step, - shift: shift > 0 ? shift - 1 : 0, - limit: limit > 0 ? limit - 1 : limit, - }) - ); - } + shift, + limit, + filter: { min, max }, + }, + }: ReturnType = yield select(selectUser); - return yield call(dropRoute, { address, token }); + const index = list.findIndex(el => el.address === address); + + if (index >= 0) { + yield put( + searchPutRoutes({ + list: list.filter(el => el.address !== address), + min, + max, + step, + shift: shift > 0 ? shift - 1 : 0, + limit: limit > 0 ? limit - 1 : limit, + }), + ); + } + + return yield call(dropRoute, { address }); + } catch (e) { + console.log(e); + } } function* modifyRouteSaga({ @@ -289,53 +311,59 @@ function* modifyRouteSaga({ title, is_public, }: ReturnType) { - const { token }: ReturnType = yield select(selectUserUser); - const { - routes: { - list, - step, - shift, - limit, - filter: { min, max }, - }, - }: ReturnType = yield select(selectUser); - - const index = list.findIndex(el => el.address === address); - - if (index >= 0) { - yield put( - searchPutRoutes({ - list: list.map(el => (el.address !== address ? el : { ...el, title, is_public })), - min, - max, + try { + const { + routes: { + list, step, - shift: shift > 0 ? shift - 1 : 0, - limit: limit > 0 ? limit - 1 : limit, - }) - ); - } + shift, + limit, + filter: { min, max }, + }, + }: ReturnType = yield select(selectUser); - return yield call(modifyRoute, { address, token, title, is_public }); + const index = list.findIndex(el => el.address === address); + + if (index >= 0) { + yield put( + searchPutRoutes({ + list: list.map(el => (el.address !== address ? el : { ...el, title, is_public })), + min, + max, + step, + shift: shift > 0 ? shift - 1 : 0, + limit: limit > 0 ? limit - 1 : limit, + }), + ); + } + + return yield call(modifyRoute, { address, title, is_public }); + } catch (e) { + console.log(e); + } } function* toggleRouteStarredSaga({ address, }: ReturnType) { - const { token }: ReturnType = yield select(selectUserUser); - const { - routes: { list }, - }: ReturnType = yield select(selectUser); + try { + const { + routes: { list }, + }: ReturnType = yield select(selectUser); - const route = list.find(el => el.address === address); + const route = list.find(el => el.address === address); - yield put(setRouteStarred(address, !route.is_published)); - const result = yield sendRouteStarred({ - token, - address, - is_published: !route.is_published, - }); + yield put(setRouteStarred(address, !route?.is_published)); - if (!result) return yield put(setRouteStarred(address, route.is_published)); + const result = yield sendRouteStarred({ + address, + is_published: !route?.is_published, + }); + + if (!result) return yield put(setRouteStarred(address, !!route?.is_published)); + } catch (e) { + console.log(e); + } } export function* updateUserRoutes() { @@ -350,7 +378,7 @@ export function* userSaga() { yield takeLatest( [USER_ACTIONS.SEARCH_SET_TITLE, USER_ACTIONS.SEARCH_SET_DISTANCE], - searchSetSaga + searchSetSaga, ); yield takeLatest(USER_ACTIONS.OPEN_MAP_DIALOG, openMapDialogSaga); diff --git a/src/utils/api.ts b/src/utils/api.ts deleted file mode 100644 index b6d8c45..0000000 --- a/src/utils/api.ts +++ /dev/null @@ -1,258 +0,0 @@ -import axios from 'axios/index'; -import { API } from '~/constants/api'; -import { IRootState, IRouteListItem } from '~/redux/user'; -import { IUser } from '~/constants/auth'; -import { CLIENT } from '~/config/frontend'; -import { LatLngLiteral } from 'leaflet'; -import { - resultMiddleware, - errorMiddleware, - IResultWithStatus, - configWithToken, -} from './middleware'; -import { IRoute } from '~/redux/map/types'; -import { INominatimResult } from '~/redux/types'; -import { MainMap } from '~/constants/map'; - -const arrayToObject = (array: any[], key: string): {} => - array.reduce((obj, el) => ({ ...obj, [el[key]]: el }), {}); - -interface IGetRouteList { - min: number; - max: number; - tab: string; - search: string; - step: IRootState['routes']['step']; - shift: IRootState['routes']['step']; - token: IRootState['user']['token']; -} - -interface IGetRouteListResult { - min: IRootState['routes']['filter']['min']; - max: IRootState['routes']['filter']['max']; - limit: IRootState['routes']['limit']; - step: IRootState['routes']['step']; - shift: IRootState['routes']['shift']; - list: IRootState['routes']['list']; -} - -export const checkUserToken = ({ - id, - token, -}: { - id: IRootState['user']['id']; - token: IRootState['user']['token']; -}): Promise> => - axios - .get(API.CHECK_TOKEN, { - params: { id, token }, - }) - .then(resultMiddleware) - .catch(errorMiddleware); - -export const getGuestToken = (): Promise> => - axios - .get(API.GET_GUEST) - .then(resultMiddleware) - .catch(errorMiddleware); - -export const getStoredMap = ({ - name, -}: { - name: IRoute['address']; -}): Promise> => - axios - .get(API.GET_MAP, { - params: { name }, - }) - .then(resultMiddleware) - .catch(errorMiddleware); - -export const postMap = ({ - title, - address, - route, - stickers, - force, - logo, - distance, - provider, - is_public, - description, - token, -}: Partial & { - force: boolean; - token: string; -}): Promise> => - axios - .post( - API.POST_MAP, - { - route: { - title, - address, - route, - stickers, - logo, - distance, - provider, - is_public, - description, - }, - force, - }, - configWithToken(token) - ) - .then(resultMiddleware) - .catch(errorMiddleware); - -export const checkIframeToken = ({ - viewer_id, - auth_key, -}: { - viewer_id: string; - auth_key: string; -}) => - axios - .get(API.IFRAME_LOGIN_VK, { - params: { viewer_id, auth_key }, - }) - .then(result => result && result.data && result.data.success && result.data.user) - .catch(() => false); - -export const getRouteList = ({ - search, - min, - max, - tab, - token, - step, - shift, -}: IGetRouteList): Promise> => - axios - .get( - API.GET_ROUTE_LIST(tab), - configWithToken(token, { - params: { - search, - min, - max, - token, - step, - shift, - }, - }) - ) - .then(resultMiddleware) - .catch(errorMiddleware); - -export const checkOSRMService = (bounds: LatLngLiteral[]): Promise => - CLIENT && - CLIENT.OSRM_URL && - axios - .get(CLIENT.OSRM_TEST_URL(bounds)) - .then(() => true) - .catch(() => false); - -export const checkNominatimService = (): Promise => - CLIENT && - CLIENT.NOMINATIM_TEST_URL && - axios - .get(CLIENT.NOMINATIM_TEST_URL) - .then(() => true) - .catch(() => false); - -export const searchNominatim = (query: string) => - CLIENT && - CLIENT.NOMINATIM_URL && - axios - .get(`${CLIENT.NOMINATIM_URL} ${query}`, { - params: { - format: 'json', - country_code: 'ru', - 'accept-language': 'ru_RU', - dedupe: 1, - }, - }) - .then( - data => - data && - data.data && - data.data.map( - (item): INominatimResult => ({ - id: item.place_id, - latlng: { - lat: item.lat, - lng: item.lon, - }, - title: item.display_name, - }) - ) - ) - .catch(() => []); - -export const dropRoute = ({ address, token }: { address: string; token: string }): Promise => - axios - .delete(API.DROP_ROUTE, configWithToken(token, { data: { address } })) - .then(resultMiddleware) - .catch(errorMiddleware); - -export const modifyRoute = ({ - address, - token, - title, - is_public, -}: { - address: string; - token: string; - title: string; - is_public: boolean; -}): Promise> => - axios - .patch(API.MODIFY_ROUTE, { address, token, is_public, title }, configWithToken(token)) - .then(resultMiddleware) - .catch(errorMiddleware); - -export const sendRouteStarred = ({ - token, - address, - is_published, -}: { - token: string; - address: string; - is_published: boolean; -}): Promise> => - axios - .post(API.SET_STARRED, { address, is_published }, configWithToken(token)) - .then(resultMiddleware) - .catch(errorMiddleware); diff --git a/src/utils/api/index.ts b/src/utils/api/index.ts new file mode 100644 index 0000000..fae0f68 --- /dev/null +++ b/src/utils/api/index.ts @@ -0,0 +1,214 @@ +import { API } from '~/constants/api'; +import { IRootState, IRouteListItem } from '~/redux/user'; +import { IUser } from '~/constants/auth'; +import { CLIENT } from '~/config/frontend'; +import { LatLngLiteral } from 'leaflet'; +import { IRoute } from '~/redux/map/types'; +import { INominatimResult } from '~/redux/types'; +import { api } from './instance'; + +interface IGetRouteList { + min: number; + max: number; + tab: string; + search: string; + step: IRootState['routes']['step']; + shift: IRootState['routes']['step']; +} + +export const checkUserToken = ({ + id, +}: { + id: IRootState['user']['id']; +}) => + api + .get<{ + user: IUser; + random_url: string; + routes: IRouteListItem[]; + }>(API.CHECK_TOKEN, { + params: { id }, + }); + +export const getGuestToken = () => + api + .get<{ + user: IUser; + random_url: string; + }>(API.GET_GUEST); + +export const getStoredMap = ({ + name, +}: { + name: IRoute['address']; +}) => + api + .get<{ + route: IRoute; + error?: string; + random_url: string; + }>(API.GET_MAP, { + params: { name }, + }); + +export const postMap = ({ + title, + address, + route, + stickers, + force, + logo, + distance, + provider, + is_public, + description, +}: Partial & { + force: boolean; +}) => + api + .post<{ + route: IRoute; + error?: string; + code?: string; + }>( + API.POST_MAP, + { + route: { + title, + address, + route, + stickers, + logo, + distance, + provider, + is_public, + description, + }, + force, + }, + ); + +export const checkIframeToken = ({ + viewer_id, + auth_key, +}: { + viewer_id: string; + auth_key: string; +}) => + api + .get<{ + success: boolean, + user: IUser, + }>(API.IFRAME_LOGIN_VK, { + params: { viewer_id, auth_key }, + }) + .then(result => !!result.data.success && !!result.data.user) + .catch(() => false); + +export const getRouteList = ({ + search, + min, + max, + tab, + step, + shift, +}: IGetRouteList) => + api + .get<{ + routes: IRoute[]; + limits: { + min: number; + max: number; + count: number; + }; + filter: { + min: number; + max: number; + shift: number; + step: number; + }; + }>( + API.GET_ROUTE_LIST(tab), + { + params: { + search, + min, + max, + step, + shift, + }, + }, + ); + +export const checkOSRMService = (bounds: LatLngLiteral[]) => + !!CLIENT && + !!CLIENT.OSRM_URL && + api + .get(CLIENT.OSRM_TEST_URL(bounds)) + .then(() => true) + .catch(() => false); + +export const checkNominatimService = () => + !!CLIENT && + !!CLIENT.NOMINATIM_TEST_URL && + api + .get(CLIENT.NOMINATIM_TEST_URL) + .then(() => true) + .catch(() => false); + +export const searchNominatim = (query: string) => + CLIENT && + CLIENT.NOMINATIM_URL && + api + .get(`${CLIENT.NOMINATIM_URL} ${query}`, { + params: { + format: 'json', + country_code: 'ru', + 'accept-language': 'ru_RU', + dedupe: 1, + }, + }) + .then( + data => + data && + data.data && + data.data.map( + (item): INominatimResult => ({ + id: item.place_id, + latlng: { + lat: item.lat, + lng: item.lon, + }, + title: item.display_name, + }), + ), + ) + .catch(() => []); + +export const dropRoute = ({ address }: { address: string }) => + api + .delete(API.DROP_ROUTE, { data: { address } }); + +export const modifyRoute = ({ + address, + title, + is_public, +}: { + address: string; + title: string; + is_public: boolean; +}) => + api + .patch<{ + route: IRoute; + }>(API.MODIFY_ROUTE, { address, is_public, title }); + +export const sendRouteStarred = ({ + address, + is_published, +}: { + address: string; + is_published: boolean; +}) => + api + .post<{ route: IRoute }>(API.SET_STARRED, { address, is_published }); diff --git a/src/utils/api/instance.ts b/src/utils/api/instance.ts new file mode 100644 index 0000000..ee2bb46 --- /dev/null +++ b/src/utils/api/instance.ts @@ -0,0 +1,6 @@ +import axios from 'axios'; +import { CLIENT } from '~/config/frontend'; + +export const api = axios.create({ + baseURL: CLIENT.API_ADDR, +}) diff --git a/src/utils/context.ts b/src/utils/context.ts index 6631da9..2310b3a 100644 --- a/src/utils/context.ts +++ b/src/utils/context.ts @@ -1,5 +1,5 @@ import React from 'react'; import { Map, TileLayer } from 'leaflet'; -export const MapContext = React.createContext(null); -export const TileContext = React.createContext(null) \ No newline at end of file +export const MapContext = React.createContext(undefined); +export const TileContext = React.createContext(undefined) diff --git a/src/utils/gpx.ts b/src/utils/gpx.ts index 67e3560..240b806 100644 --- a/src/utils/gpx.ts +++ b/src/utils/gpx.ts @@ -39,7 +39,7 @@ export const getGPXString = ({ ${title || 'GPX Track'} - ${stickers.reduce( + ${(stickers || []).reduce( (cat, { latlng: { lat, lng }, text }) => `${cat} @@ -93,12 +93,12 @@ export const importGpxTrack = async (file: File) => { return trkseg.trkpt ? [ ...trkseg_res, - ...trkseg.trkpt.map(pnt => ({ lat: pnt['$'].lat, lng: pnt['$'].lon })), + ...trkseg.trkpt.map(pnt => new LatLng(pnt['$'].lat, pnt['$'].lon)), ] : trkseg_res; }, trk_res) : trk_res; - }, []); + }, [] as LatLng[]); return [ { diff --git a/src/utils/history.ts b/src/utils/history.ts index c23be92..c2435c9 100644 --- a/src/utils/history.ts +++ b/src/utils/history.ts @@ -36,20 +36,20 @@ export const parseQuery = (queryString: string) => { }; export const pushLoaderState = (state: number) => { - document.getElementById('loader-bar').style.width = `${state}%`; + document.getElementById('loader-bar')!.style.width = `${state}%`; }; export const countDownToRefresh = (left: number = API_RETRY_INTERVAL): void => { if (left <= 0) return document.location.reload(); - document.getElementById('loader-bar').style.width = `${(left / API_RETRY_INTERVAL) * 100}%`; + document.getElementById('loader-bar')!.style.width = `${(left / API_RETRY_INTERVAL) * 100}%`; setTimeout(() => countDownToRefresh(left - 0.25), 1000); }; export const pushNetworkInitError = () => { - document.getElementById('loader-bar').classList.add('is_failed'); - document.getElementById('loader-bar').style.width = '100%'; - document.getElementById('loader-error').style.opacity = String(1); + document.getElementById('loader-bar')!.classList.add('is_failed'); + document.getElementById('loader-bar')!.style.width = '100%'; + document.getElementById('loader-error')!.style.opacity = String(1); countDownToRefresh(); }; diff --git a/src/utils/map/ArrowsLayer.ts b/src/utils/map/ArrowsLayer.ts index ef46715..435e8c2 100644 --- a/src/utils/map/ArrowsLayer.ts +++ b/src/utils/map/ArrowsLayer.ts @@ -9,6 +9,7 @@ import { LatLng, LatLngLiteral, LayerGroup, Map, Marker } from 'leaflet'; import { arrowClusterIcon, createArrow } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; import { angleBetweenPoints, dist2, middleCoord } from '~/utils/geom'; +import { MainMap } from '~/constants/map'; class ArrowsLayer extends LayerGroup { constructor(props) { @@ -46,13 +47,13 @@ class ArrowsLayer extends LayerGroup { ), ] : res, - [] + [] as Marker[] ); this.arrowLayer.addLayers(midpoints); }; - map: Map; + map: Map = MainMap; arrowLayer = new MarkerClusterGroup({ spiderfyOnMaxZoom: false, showCoverageOnHover: false, @@ -62,10 +63,10 @@ class ArrowsLayer extends LayerGroup { iconCreateFunction: arrowClusterIcon, }); - layers: Marker[] = []; + layers: Marker[] = []; } -ArrowsLayer.addInitHook(function() { +ArrowsLayer.addInitHook(function(this: ArrowsLayer) { this.once('add', event => { if (event.target instanceof ArrowsLayer) { this.map = event.target._map; diff --git a/src/utils/map/InteractivePoly.ts b/src/utils/map/InteractivePoly.ts index de5b064..fa445bc 100644 --- a/src/utils/map/InteractivePoly.ts +++ b/src/utils/map/InteractivePoly.ts @@ -36,9 +36,9 @@ class InteractivePoly extends Polyline { this.constraintsStyle = { ...this.constraintsStyle, - ...options.constraintsStyle, + ...(options?.constraintsStyle || {}), }; - this.maxMarkers = options.maxMarkers || this.maxMarkers; + this.maxMarkers = options?.maxMarkers || this.maxMarkers; this.constrLine = new Polyline([], this.constraintsStyle); @@ -162,10 +162,12 @@ class InteractivePoly extends Polyline { ? { ...obj, hidden: [...obj.hidden, marker] } : { ...obj, visible: [...obj.visible, marker] }; }, - { visible: [], hidden: [] } + { visible: [], hidden: [] } as Record<'visible' | 'hidden', Marker[]> ); - if (visible.length > this.maxMarkers) return this.hideAllMarkers(); + if (visible.length > (this.maxMarkers || 2)) { + return this.hideAllMarkers(); + } this.showAllMarkers(); @@ -337,11 +339,11 @@ class InteractivePoly extends Polyline { onMarkerDrag = ({ target }: { target: Marker }) => { const coords = new Array(0) - .concat((this.vertex_index > 0 && this.markers[this.vertex_index - 1].getLatLng()) || []) + .concat((this.vertex_index! > 0 && this.markers[this.vertex_index! - 1].getLatLng()) || []) .concat(target.getLatLng()) .concat( - (this.vertex_index < this.markers.length - 1 && - this.markers[this.vertex_index + 1].getLatLng()) || + (this.vertex_index! < this.markers.length - 1 && + this.markers[this.vertex_index! + 1].getLatLng()) || [] ); @@ -369,17 +371,17 @@ class InteractivePoly extends Polyline { onMarkerDragEnd = ({ target }: { target: Marker }): void => { const latlngs = this.getLatLngs() as LatLngLiteral[]; this.markerDragChangeDistance( - this.vertex_index, - latlngs[this.vertex_index], + this.vertex_index!, + latlngs[this.vertex_index!], target.getLatLng() ); - this.replaceLatlng(target.getLatLng(), this.vertex_index); + this.replaceLatlng(target.getLatLng(), this.vertex_index!); this.is_dragging = false; this.constrLine.removeFrom(this._map); - this.vertex_index = null; + this.vertex_index = 0; if (this.is_drawing) this.startDrawing(); @@ -496,7 +498,7 @@ class InteractivePoly extends Polyline { this.constrLine.setLatLngs(coords); }; - setDirection = (direction: 'forward' | 'backward') => { + setDirection = (direction: 'forward' | 'backward') => { this.drawing_direction = direction; this.updateConstraintsToLatLngs(this.getLatLngs() as LatLngExpression[]); } @@ -568,27 +570,27 @@ class InteractivePoly extends Polyline { is_drawing: boolean = false; drawing_direction: 'forward' | 'backward' = 'forward'; - vertex_index?: number = null; + vertex_index: number = 0; - hint_prev_marker: number = null; + hint_prev_marker: number = 0; distance: number = 0; } -InteractivePoly.addInitHook(function() { +InteractivePoly.addInitHook(function(this: InteractivePoly) { this.once('add', event => { if (event.target instanceof InteractivePoly) { - this.map = event.target._map; + this._map = event.target._map; - this.map.on('touch', console.log); + this._map.on('touch', console.log); this.markerLayer.addTo(event.target._map); this.hintMarker.addTo(event.target._map); this.constrLine.addTo(event.target._map); this.touchHinter.addTo(event.target._map); - this.map.on('moveend', this.updateMarkers); + this._map.on('moveend', this.updateMarkers); - this.on('latlngschange', this.updateTouchHinter); + this.on('latlngschange' as any, this.updateTouchHinter as any); if (this.touchHinter && window.innerWidth < 768) { try { @@ -605,7 +607,7 @@ InteractivePoly.addInitHook(function() { this.constrLine.removeFrom(this._map); this.touchHinter.removeFrom(this._map); - this.map.off('moveend', this.updateMarkers); + this._map.off('moveend', this.updateMarkers); } }); }); diff --git a/src/utils/marks.ts b/src/utils/marks.ts index f3df6cf..961e7fe 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -3,6 +3,7 @@ import { arrowClusterIcon } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from '~/utils/geom'; import classNames from 'classnames'; +import { MainMap } from '~/constants/map'; const arrow_image = '/images/arrow.svg'; @@ -43,8 +44,7 @@ class KmMarksLayer extends LayerGroup { }; drawMiddleMarkers = (latlngs: LatLngLiteral[]) => { - const marks = []; - const arrows = []; + const marks: Marker[] = []; let last_km_mark = 0; this.distance = latlngs.reduce((dist, current, index) => { @@ -160,7 +160,7 @@ class KmMarksLayer extends LayerGroup { }; options: KmMarksOptions; - map: Map; + map: Map = MainMap; marksLayer: MarkerClusterGroup = new MarkerClusterGroup({ spiderfyOnMaxZoom: false, showCoverageOnHover: false, @@ -173,7 +173,7 @@ class KmMarksLayer extends LayerGroup { distance: number = 0; } -KmMarksLayer.addInitHook(function() { +KmMarksLayer.addInitHook(function(this: KmMarksLayer) { this.once('add', event => { if (event.target instanceof KmMarksLayer) { this.map = event.target._map; diff --git a/src/utils/middleware.ts b/src/utils/middleware.ts index 1a2fa1f..7504f3e 100644 --- a/src/utils/middleware.ts +++ b/src/utils/middleware.ts @@ -1,4 +1,4 @@ -import { AxiosRequestConfig } from "axios"; +import { AxiosRequestConfig, AxiosResponse } from 'axios'; export type Unwrap = T extends (...args: any[]) => Promise ? U : T; @@ -23,28 +23,3 @@ export const HTTP_RESPONSES = { NOT_FOUND: 404, TOO_MANY_REQUESTS: 429, }; - -export const resultMiddleware = (({ - status, - data, -}: { - status: number; - data: T; -}): { status: number; data: T } => ({ status, data })); - -export const errorMiddleware = (debug): IResultWithStatus => (debug && debug.response - ? debug.response - : { - status: HTTP_RESPONSES.CONNECTION_REFUSED, - data: {}, - debug, - error: 'Ошибка сети', - }); - -export const configWithToken = ( - token: string, - config: AxiosRequestConfig = {}, -): AxiosRequestConfig => ({ - ...config, - headers: { ...(config.headers || {}), Authorization: `${token}` }, -}); \ No newline at end of file diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 4c6ffb0..f76f0bc 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -133,7 +133,7 @@ export const fetchImages = ( ): Promise<{ x: number; y: number; image: HTMLImageElement }[]> => { const { minX, maxX, minY, maxY, zoom } = geometry; - const images = []; + const images: { x: number; y: number; source: string }[] = []; for (let x = minX; x <= maxX; x += 1) { for (let y = minY; y <= maxY; y += 1) { images.push({ x, y, source: getImageSource({ x, y, zoom }, provider) }); @@ -173,7 +173,7 @@ export const composePoly = ({ ctx, color = 'gradient', weight = CLIENT.STROKE_WIDTH, - dash = null, + dash = [], }: { points: Point[]; ctx: CanvasRenderingContext2D; @@ -472,14 +472,14 @@ export const composeStickers = async ({ if (!stickers || stickers.length < 0) return; stickers.map(({ x, y, angle, text }) => { - composeStickerArrow(ctx, x, y, angle, zoom); + composeStickerArrow(ctx, x, y, angle || 0, zoom); - if (text) composeStickerText(ctx, x, y, angle, text, zoom); + if (text) composeStickerText(ctx, x, y, angle || 0, text, zoom); }); await Promise.all( stickers.map(({ x, y, angle, set, sticker }) => - composeStickerImage(ctx, x, y, angle, set, sticker, zoom) + composeStickerImage(ctx, x, y, angle || 0, set, sticker, zoom) ) ); }; diff --git a/src/utils/window.ts b/src/utils/window.ts index aef72df..96aa295 100644 --- a/src/utils/window.ts +++ b/src/utils/window.ts @@ -3,10 +3,10 @@ import { LatLngLiteral } from 'leaflet'; export const isMobile = (): boolean => window.innerWidth <= MOBILE_BREAKPOINT; -export const getLocation = (callback: (pos: LatLngLiteral) => void) => { +export const getLocation = (callback: (pos: LatLngLiteral | undefined) => void) => { window.navigator.geolocation.getCurrentPosition(position => { if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) - return callback(null); + return callback(undefined); const { latitude: lat, longitude: lng } = position.coords; @@ -15,18 +15,18 @@ export const getLocation = (callback: (pos: LatLngLiteral) => void) => { }); }; -export const watchLocation = (callback: (pos: LatLngLiteral) => void): number => { +export const watchLocation = (callback: (pos: LatLngLiteral | undefined) => void): number => { return window.navigator.geolocation.watchPosition( position => { if (!position || !position.coords || !position.coords.latitude || !position.coords.longitude) - return callback(null); + return callback(undefined); const { latitude: lat, longitude: lng } = position.coords; callback({ lat, lng }); return; }, - () => callback(null), + () => callback(undefined), { timeout: 30, } diff --git a/tsconfig.json b/tsconfig.json index 5e8c822..9660a61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,7 @@ "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, - "strict": false, + "strict": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext", From 5f4d2f9cd29314d30f5f5c78a45c952eb5ad5777 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 13 Apr 2021 17:33:36 +0700 Subject: [PATCH 299/320] fixed router stickers --- src/styles/button.scss | 126 ++++++++++++++++++------------------ src/styles/dialogs.scss | 2 + src/styles/gpx.scss | 2 + src/styles/logo.scss | 2 + src/styles/map.scss | 4 +- src/styles/panel.scss | 2 + src/styles/progress.scss | 2 + src/styles/renderer.scss | 2 + src/styles/router.scss | 2 + src/styles/save.scss | 2 + src/styles/slider.scss | 2 + src/styles/stickers.scss | 2 + src/styles/switch.scss | 2 + src/styles/user-button.scss | 2 + src/utils/map/DomMarker.ts | 4 ++ 15 files changed, 95 insertions(+), 63 deletions(-) diff --git a/src/styles/button.scss b/src/styles/button.scss index b17de87..46e2293 100644 --- a/src/styles/button.scss +++ b/src/styles/button.scss @@ -1,70 +1,72 @@ - .button { - background: #444444; - padding: 4px 16px; - height: 18px; - line-height: 1em; - border-radius: $button_radius; - font-family: inherit; - font-size: 1em; - display: inline-flex; - align-items: center; - cursor: pointer; - user-select: none; - box-shadow: inset rgba(100, 100, 100, 0.3) 1px 0, inset rgba(0,0,0, 0.1) -1px 0; +@import "colors"; + +.button { + background: #444444; + padding: 4px 16px; + height: 18px; + line-height: 1em; + border-radius: $button_radius; + font-family: inherit; + font-size: 1em; + display: inline-flex; + align-items: center; + cursor: pointer; + user-select: none; + box-shadow: inset rgba(100, 100, 100, 0.3) 1px 0, inset rgba(0,0,0, 0.1) -1px 0; + color: white; + font-weight: 400; + border: none; + position: relative; + + &.outline { + box-shadow: inset #444444 0 0 0 1px; + background: transparent; + } + + &.primary { + background: #3c78db; color: white; - font-weight: 400; - border: none; - position: relative; - - &.outline { - box-shadow: inset #444444 0 0 0 1px; - background: transparent; - } - - &.primary { - background: #3c78db; - color: white; - } - - &.danger { - background: #ed2f3b; - color: white; - } - - &.success { - background: #17bf6d; - color: white; - } - - &.disabled { - opacity: 0.5; - touch-action: none; - pointer-events: none; - } - - input[type="file"] { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: 0; - } } - .button-group { - display: flex; + &.danger { + background: #ed2f3b; + color: white; + } - .button { - border-radius: 0; - margin: 0; + &.success { + background: #17bf6d; + color: white; + } - &:first-child { - border-radius: $button_radius 0 0 $button_radius; - } + &.disabled { + opacity: 0.5; + touch-action: none; + pointer-events: none; + } - &:last-child { - border-radius: 0 $button_radius $button_radius 0; - } + input[type="file"] { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + } +} + +.button-group { + display: flex; + + .button { + border-radius: 0; + margin: 0; + + &:first-child { + border-radius: $button_radius 0 0 $button_radius; + } + + &:last-child { + border-radius: 0 $button_radius $button_radius 0; } } +} diff --git a/src/styles/dialogs.scss b/src/styles/dialogs.scss index ed7d7f5..caff976 100644 --- a/src/styles/dialogs.scss +++ b/src/styles/dialogs.scss @@ -1,3 +1,5 @@ +@import "colors"; + .dialog { position: fixed; left: 0; diff --git a/src/styles/gpx.scss b/src/styles/gpx.scss index 05d5310..7e591d8 100644 --- a/src/styles/gpx.scss +++ b/src/styles/gpx.scss @@ -1,3 +1,5 @@ +@import "colors"; + .gpx-title { display: flex; flex-direction: row; diff --git a/src/styles/logo.scss b/src/styles/logo.scss index b036d68..dd8acf4 100644 --- a/src/styles/logo.scss +++ b/src/styles/logo.scss @@ -1,3 +1,5 @@ +@import "colors"; + .logo-preview { position: fixed; right: 0; diff --git a/src/styles/map.scss b/src/styles/map.scss index 433979a..a1b7981 100644 --- a/src/styles/map.scss +++ b/src/styles/map.scss @@ -1,3 +1,5 @@ +@import "colors"; + #map { width: 50% !important; height: 100%; @@ -28,7 +30,7 @@ .leaflet-vertex-drag-helper { pointer-events: none !important; - background: fade(red, 50%); + background: darken(red, 50%); border-radius: 12px; &::after { diff --git a/src/styles/panel.scss b/src/styles/panel.scss index 775f956..6bd3a1d 100644 --- a/src/styles/panel.scss +++ b/src/styles/panel.scss @@ -1,3 +1,5 @@ +@import "colors"; + .control-bar { background: $bar_background; border-radius: $panel_radius; diff --git a/src/styles/progress.scss b/src/styles/progress.scss index dd59173..17f7463 100644 --- a/src/styles/progress.scss +++ b/src/styles/progress.scss @@ -1,3 +1,5 @@ +@import "colors"; + .progress { width: 100%; position: relative; diff --git a/src/styles/renderer.scss b/src/styles/renderer.scss index bbe84d5..6d29ac4 100644 --- a/src/styles/renderer.scss +++ b/src/styles/renderer.scss @@ -1,3 +1,5 @@ +@import "colors"; + .renderer-shade { position: fixed; top: 0; diff --git a/src/styles/router.scss b/src/styles/router.scss index db28f70..0229fc4 100644 --- a/src/styles/router.scss +++ b/src/styles/router.scss @@ -1,3 +1,5 @@ +@import "colors"; + .router-waypoint { width: 40px; height: 40px; diff --git a/src/styles/save.scss b/src/styles/save.scss index 862b130..8edf45e 100644 --- a/src/styles/save.scss +++ b/src/styles/save.scss @@ -1,3 +1,5 @@ +@import "colors"; + .save-helper { padding: 0; flex-direction: column; diff --git a/src/styles/slider.scss b/src/styles/slider.scss index e74c902..e86dcc0 100644 --- a/src/styles/slider.scss +++ b/src/styles/slider.scss @@ -1,3 +1,5 @@ +@import "colors"; + $disabledColor: #ccc; $border-radius-base: 6px; $primary-color: transparent; diff --git a/src/styles/stickers.scss b/src/styles/stickers.scss index 7cc207f..94670eb 100644 --- a/src/styles/stickers.scss +++ b/src/styles/stickers.scss @@ -1,3 +1,5 @@ +@import "colors"; + .leaflet-dragging .sticker-container { transition: none !important; } diff --git a/src/styles/switch.scss b/src/styles/switch.scss index 8895b4c..21b2079 100644 --- a/src/styles/switch.scss +++ b/src/styles/switch.scss @@ -1,3 +1,5 @@ +@import "colors"; + .switch { height: 1em; width: 2em; diff --git a/src/styles/user-button.scss b/src/styles/user-button.scss index eec7fbc..1433c14 100644 --- a/src/styles/user-button.scss +++ b/src/styles/user-button.scss @@ -1,3 +1,5 @@ +@import "colors"; + .user-bar { // width: 160px; diff --git a/src/utils/map/DomMarker.ts b/src/utils/map/DomMarker.ts index 4f6c42c..3d4ec30 100644 --- a/src/utils/map/DomMarker.ts +++ b/src/utils/map/DomMarker.ts @@ -33,6 +33,10 @@ export class DomMarker extends DivIcon { createIcon(oldicon?: HTMLElement) { this.element.classList.add('icon') + + if (this.options.className) { + this.element.classList.add(this.options.className); + } return this.element; } } From b563b5112120d40755c015b993881cee02ec7faa Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 13 Apr 2021 17:59:05 +0700 Subject: [PATCH 300/320] fixed router points position --- src/styles/router.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/styles/router.scss b/src/styles/router.scss index 0229fc4..a254252 100644 --- a/src/styles/router.scss +++ b/src/styles/router.scss @@ -7,6 +7,7 @@ margin-top: -20px; outline: none; z-index: 10001; + position: absolute; &:after { content: ' '; From 9c436d348cf2374907452ae686a67bf8c6c54375 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 16:39:51 +0700 Subject: [PATCH 301/320] added post map interceptor --- .drone.yml | 19 +------------------ src/redux/store.ts | 4 ++-- src/utils/api/index.ts | 14 +++++--------- src/utils/api/interceptors.ts | 14 ++++++++++++++ src/utils/api/types.ts | 11 +++++++++++ 5 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 src/utils/api/interceptors.ts create mode 100644 src/utils/api/types.ts diff --git a/.drone.yml b/.drone.yml index 381f7d0..5fde9cb 100644 --- a/.drone.yml +++ b/.drone.yml @@ -64,21 +64,4 @@ steps: - cp -a $${ENV_PATH}/${DRONE_BRANCH}/. $${BUILD_PATH}/${DRONE_BRANCH} - docker-compose build - docker-compose up -d -# - name: telgram_notify -# image: appleboy/drone-telegram -# when: -# status: -# - success -# - failure -# settings: -# token: -# from_secret: telegram_token -# to: -# from_secret: telegram_chat_id -# format: markdown -# message: > -# {{#success build.status}}🤓{{else}}😨{{/success}} -# [{{repo.name}} / {{commit.branch}}]({{ build.link }}) -# ``` -# {{ commit.message }} -# ``` + diff --git a/src/redux/store.ts b/src/redux/store.ts index e8212ab..48328a5 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -69,13 +69,13 @@ export function configureStore(): { store: Store; persistor: Persistor } { // Pass token to axios api.interceptors.request.use(options => { - const token = store.getState().user.token; + const token = store.getState().user.user.token; if (!token) { return options; } - return assocPath(['headers', 'authorization'], `Bearer ${token}`, options); + return assocPath(['headers', 'authorization'], token, options); }); // Logout on 401 diff --git a/src/utils/api/index.ts b/src/utils/api/index.ts index fae0f68..38d0a38 100644 --- a/src/utils/api/index.ts +++ b/src/utils/api/index.ts @@ -6,6 +6,8 @@ import { LatLngLiteral } from 'leaflet'; import { IRoute } from '~/redux/map/types'; import { INominatimResult } from '~/redux/types'; import { api } from './instance'; +import { postMapInterceptor } from '~/utils/api/interceptors'; +import { PostMapRequest, PostMapResponse } from '~/utils/api/types'; interface IGetRouteList { min: number; @@ -62,15 +64,9 @@ export const postMap = ({ provider, is_public, description, -}: Partial & { - force: boolean; -}) => +}: PostMapRequest) => api - .post<{ - route: IRoute; - error?: string; - code?: string; - }>( + .post( API.POST_MAP, { route: { @@ -86,7 +82,7 @@ export const postMap = ({ }, force, }, - ); + ).catch(postMapInterceptor); export const checkIframeToken = ({ viewer_id, diff --git a/src/utils/api/interceptors.ts b/src/utils/api/interceptors.ts new file mode 100644 index 0000000..a4b52d8 --- /dev/null +++ b/src/utils/api/interceptors.ts @@ -0,0 +1,14 @@ +import { AxiosError } from 'axios'; +import { PostMapResponse } from '~/utils/api/types'; + +export const postMapInterceptor = (res: AxiosError) => { + if (res.response?.data.code) { + return res.response; + } + + if (res.response?.data.error) { + throw new Error(res.response?.data.error); + } + + throw res; +}; diff --git a/src/utils/api/types.ts b/src/utils/api/types.ts new file mode 100644 index 0000000..2fdf3a1 --- /dev/null +++ b/src/utils/api/types.ts @@ -0,0 +1,11 @@ +import { IRoute } from '~/redux/map/types'; + +export interface PostMapResponse { + route: IRoute; + error?: string; + code?: string; +} + +export type PostMapRequest = Partial & { + force: boolean; +} From 48cf0b93eea43833a47dee9fc7642ba26d355851 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 17:21:05 +0700 Subject: [PATCH 302/320] fixed token checking --- src/redux/store.ts | 10 +++++----- src/redux/user/sagas.ts | 1 + src/utils/api/index.ts | 17 ++++++----------- src/utils/api/types.ts | 13 +++++++++++++ 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/redux/store.ts b/src/redux/store.ts index 48328a5..f3919fb 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -1,6 +1,6 @@ -import { createStore, applyMiddleware, combineReducers, compose, Store } from 'redux'; +import { applyMiddleware, combineReducers, compose, createStore, Store } from 'redux'; -import { persistStore, persistReducer } from 'redux-persist'; +import { persistReducer, persistStore } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import createSagaMiddleware from 'redux-saga'; @@ -8,15 +8,15 @@ import { createBrowserHistory } from 'history'; import { editorLocationChanged } from '~/redux/editor/actions'; import { PersistConfig, Persistor } from 'redux-persist/es/types'; -import { userReducer, IRootReducer } from '~/redux/user'; +import { IRootReducer, userReducer } from '~/redux/user'; import { userSaga } from '~/redux/user/sagas'; import { editor, IEditorState } from '~/redux/editor'; import { editorSaga } from '~/redux/editor/sagas'; -import { map, IMapReducer } from '~/redux/map'; +import { IMapReducer, map } from '~/redux/map'; import { mapSaga } from '~/redux/map/sagas'; -import { watchLocation, getLocation } from '~/utils/window'; +import { watchLocation } from '~/utils/window'; import { LatLngLiteral } from 'leaflet'; import { setUserLocation, userLogout } from './user/actions'; import { MainMap } from '~/constants/map'; diff --git a/src/redux/user/sagas.ts b/src/redux/user/sagas.ts index f9ee41a..a1c9faa 100644 --- a/src/redux/user/sagas.ts +++ b/src/redux/user/sagas.ts @@ -77,6 +77,7 @@ function* authCheckSaga({ key }: RehydrateAction) { data: { user, random_url }, }: Unwrap = yield call(checkUserToken, { id, + token, }); if (user) { diff --git a/src/utils/api/index.ts b/src/utils/api/index.ts index 38d0a38..d89e12d 100644 --- a/src/utils/api/index.ts +++ b/src/utils/api/index.ts @@ -1,5 +1,5 @@ import { API } from '~/constants/api'; -import { IRootState, IRouteListItem } from '~/redux/user'; +import { IRootState } from '~/redux/user'; import { IUser } from '~/constants/auth'; import { CLIENT } from '~/config/frontend'; import { LatLngLiteral } from 'leaflet'; @@ -7,7 +7,7 @@ import { IRoute } from '~/redux/map/types'; import { INominatimResult } from '~/redux/types'; import { api } from './instance'; import { postMapInterceptor } from '~/utils/api/interceptors'; -import { PostMapRequest, PostMapResponse } from '~/utils/api/types'; +import { CheckTokenRequest, CheckTokenResult, PostMapRequest, PostMapResponse } from '~/utils/api/types'; interface IGetRouteList { min: number; @@ -20,16 +20,11 @@ interface IGetRouteList { export const checkUserToken = ({ id, -}: { - id: IRootState['user']['id']; -}) => + token, +}: CheckTokenRequest) => api - .get<{ - user: IUser; - random_url: string; - routes: IRouteListItem[]; - }>(API.CHECK_TOKEN, { - params: { id }, + .get(API.CHECK_TOKEN, { + params: { id, token }, }); export const getGuestToken = () => diff --git a/src/utils/api/types.ts b/src/utils/api/types.ts index 2fdf3a1..b0ded9a 100644 --- a/src/utils/api/types.ts +++ b/src/utils/api/types.ts @@ -1,4 +1,6 @@ import { IRoute } from '~/redux/map/types'; +import { IUser } from '~/constants/auth'; +import { IRootState, IRouteListItem } from '~/redux/user'; export interface PostMapResponse { route: IRoute; @@ -9,3 +11,14 @@ export interface PostMapResponse { export type PostMapRequest = Partial & { force: boolean; } + +export interface CheckTokenResult { + user: IUser; + random_url: string; + routes: IRouteListItem[]; +} + +export interface CheckTokenRequest { + id: IRootState['user']['id']; + token: string, +} From 0018465f1585381b7e99f5c6e8f584366de76cf4 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 17:26:36 +0700 Subject: [PATCH 303/320] fixed token checking and some types --- src/utils/api/index.ts | 49 ++++++++------------------------ src/utils/api/types.ts | 39 +++++++++++++++++++++++++ src/utils/geom.ts | 15 ++++------ src/utils/history.ts | 10 +------ src/utils/map/InteractivePoly.ts | 2 +- src/utils/map/OsrmRouter.ts | 6 ++-- src/utils/reducer.ts | 7 ----- src/utils/renderer.ts | 16 +++-------- src/utils/simplify.ts | 2 +- 9 files changed, 65 insertions(+), 81 deletions(-) diff --git a/src/utils/api/index.ts b/src/utils/api/index.ts index d89e12d..1c6776d 100644 --- a/src/utils/api/index.ts +++ b/src/utils/api/index.ts @@ -7,16 +7,13 @@ import { IRoute } from '~/redux/map/types'; import { INominatimResult } from '~/redux/types'; import { api } from './instance'; import { postMapInterceptor } from '~/utils/api/interceptors'; -import { CheckTokenRequest, CheckTokenResult, PostMapRequest, PostMapResponse } from '~/utils/api/types'; - -interface IGetRouteList { - min: number; - max: number; - tab: string; - search: string; - step: IRootState['routes']['step']; - shift: IRootState['routes']['step']; -} +import { + CheckTokenRequest, + CheckTokenResult, + GetGuestTokenResult, GetRouteListRequest, GetRouteListResponse, GetStoredMapRequest, GetStoredMapResult, + PostMapRequest, + PostMapResponse, +} from '~/utils/api/types'; export const checkUserToken = ({ id, @@ -29,22 +26,13 @@ export const checkUserToken = ({ export const getGuestToken = () => api - .get<{ - user: IUser; - random_url: string; - }>(API.GET_GUEST); + .get(API.GET_GUEST); export const getStoredMap = ({ name, -}: { - name: IRoute['address']; -}) => +}: GetStoredMapRequest) => api - .get<{ - route: IRoute; - error?: string; - random_url: string; - }>(API.GET_MAP, { + .get(API.GET_MAP, { params: { name }, }); @@ -103,22 +91,9 @@ export const getRouteList = ({ tab, step, shift, -}: IGetRouteList) => +}: GetRouteListRequest) => api - .get<{ - routes: IRoute[]; - limits: { - min: number; - max: number; - count: number; - }; - filter: { - min: number; - max: number; - shift: number; - step: number; - }; - }>( + .get( API.GET_ROUTE_LIST(tab), { params: { diff --git a/src/utils/api/types.ts b/src/utils/api/types.ts index b0ded9a..48dbf1e 100644 --- a/src/utils/api/types.ts +++ b/src/utils/api/types.ts @@ -22,3 +22,42 @@ export interface CheckTokenRequest { id: IRootState['user']['id']; token: string, } + +export interface GetGuestTokenResult { + user: IUser; + random_url: string; +} + +export interface GetStoredMapResult { + route: IRoute; + error?: string; + random_url: string; +} + +export interface GetStoredMapRequest { + name: IRoute['address']; +} + +export interface GetRouteListRequest { + min: number; + max: number; + tab: string; + search: string; + step: IRootState['routes']['step']; + shift: IRootState['routes']['step']; +} + +export interface GetRouteListResponse { + routes: IRoute[]; + limits: { + min: number; + max: number; + count: number; + }; + filter: { + min: number; + max: number; + shift: number; + step: number; + }; +} diff --git a/src/utils/geom.ts b/src/utils/geom.ts index bfc3341..02afe02 100644 --- a/src/utils/geom.ts +++ b/src/utils/geom.ts @@ -1,9 +1,4 @@ -import { LatLng, LatLngLiteral, point, Point, PointExpression, latLng } from 'leaflet'; - -// interface LatLng { -// lat: number; -// lng: number; -// } +import { LatLng, latLng, LatLngLiteral, Point, point } from 'leaflet'; export const middleCoord = (l1: LatLng, l2: LatLng): LatLng => latLng({ lat: l2.lat + (l1.lat - l2.lat) / 2, @@ -46,14 +41,14 @@ export const findDistance = (t1: number, n1: number, t2: number, n2: number): nu export const findDistanceHaversine = (t1: number, n1: number, t2: number, n2: number): number => { const R = 6371; // km const dLat = ((t2 - t1) * Math.PI) / 180; - var dLon = ((n2 - n1) * Math.PI) / 180; - var a = + const dLon = ((n2 - n1) * Math.PI) / 180; + const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos((t1 * Math.PI) / 180) * Math.cos((t2 * Math.PI) / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2); - var c = 2 * Math.asin(Math.sqrt(a)); + const c = 2 * Math.asin(Math.sqrt(a)); return R * c; }; @@ -88,7 +83,7 @@ export const dist2 = (A: LatLngLiteral, B: LatLngLiteral): number => const distToSegmentSquared = (A: LatLng, B: LatLng, C: LatLng): number => { const l2 = dist2(A, B); - if (l2 == 0) return dist2(C, A); + if (l2 === 0) return dist2(C, A); const t = Math.max( 0, diff --git a/src/utils/history.ts b/src/utils/history.ts index c2435c9..e203911 100644 --- a/src/utils/history.ts +++ b/src/utils/history.ts @@ -1,13 +1,5 @@ import { history } from '~/redux/store'; -import {API_RETRY_INTERVAL} from "~/constants/api"; - -interface IUrlData { - path: string, - mode: 'edit' | '', - host: string, - hash: string, - protocol: 'http' | 'https', -} +import { API_RETRY_INTERVAL } from '~/constants/api'; export const getPath = (): string => (window.location && window.location.pathname); export const pushPath = (url: string): string => history.push(url); diff --git a/src/utils/map/InteractivePoly.ts b/src/utils/map/InteractivePoly.ts index fa445bc..70aac65 100644 --- a/src/utils/map/InteractivePoly.ts +++ b/src/utils/map/InteractivePoly.ts @@ -507,7 +507,7 @@ class InteractivePoly extends Polyline { const index = this.markers.indexOf(target); const latlngs = this.getLatLngs(); - if (typeof index === 'undefined' || latlngs.length == 0) return; + if (typeof index === 'undefined' || latlngs.length === 0) return; this.dropMarkerDistanceChange(index); this._map.removeLayer(this.markers[index]); diff --git a/src/utils/map/OsrmRouter.ts b/src/utils/map/OsrmRouter.ts index 1b3a461..6da8fd8 100644 --- a/src/utils/map/OsrmRouter.ts +++ b/src/utils/map/OsrmRouter.ts @@ -35,7 +35,7 @@ export const OsrmRouter = Routing.control({ show: false, plan: Routing.plan([], { createMarker: (_, wp) => { - const marker = new Marker(wp.latLng, { + return new Marker(wp.latLng, { draggable: true, icon: createWaypointMarker(), }) @@ -45,12 +45,10 @@ export const OsrmRouter = Routing.control({ OsrmRouter.setWaypoints( OsrmRouter.getWaypoints().filter( point => - !point.latLng || (point.latLng.lat != latlng.lat && point.latLng.lng != latlng.lng) + !point.latLng || (point.latLng.lat !== latlng.lat && point.latLng.lng !== latlng.lng) ) ); }); - - return marker; }, routeWhileDragging: false, }), diff --git a/src/utils/reducer.ts b/src/utils/reducer.ts index 1121914..46e5a2d 100644 --- a/src/utils/reducer.ts +++ b/src/utils/reducer.ts @@ -1,10 +1,3 @@ -// create-reducer.ts -import { Action } from 'redux'; - -type Handlers> = { - readonly [Type in Types]: (state: State, action: Actions) => State -} - export const createReducer = ( initialState, handlers, diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index f76f0bc..1620790 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -1,18 +1,10 @@ -// import { editor } from '~/modules/Editor'; -import { COLORS, CLIENT } from '~/config/frontend'; +import { CLIENT, COLORS } from '~/config/frontend'; import saveAs from 'file-saver'; import { replaceProviderUrl } from '~/constants/providers'; import { STICKERS } from '~/constants/stickers'; -import { IRoute } from '~/redux/map/types'; -import { IStickerDump } from '~/redux/map/types'; -import { IRootState } from '~/redux/user'; -import { - angleBetweenPoints, - angleBetweenPointsRad, - findDistancePx, - middleCoordPx, -} from '~/utils/geom'; -import { Point, LatLng, latLng } from 'leaflet'; +import { IRoute, IStickerDump } from '~/redux/map/types'; +import { angleBetweenPoints, angleBetweenPointsRad, findDistancePx, middleCoordPx } from '~/utils/geom'; +import { LatLng, latLng, Point } from 'leaflet'; import { MainMap } from '~/constants/map'; export interface ITilePlacement { diff --git a/src/utils/simplify.ts b/src/utils/simplify.ts index 4c20705..1ed303d 100644 --- a/src/utils/simplify.ts +++ b/src/utils/simplify.ts @@ -1,4 +1,4 @@ -import { Map, LineUtil, LatLng } from 'leaflet'; +import { LatLng, LineUtil } from 'leaflet'; import { MainMap } from '~/constants/map'; export const simplify = (latlngs: LatLng[]): LatLng[] => { From 8346c2533f7c042c29f7552ecccfad484ec25245 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 17:34:53 +0700 Subject: [PATCH 304/320] fixed sticker deletion bug --- package.json | 1 - src/map/Sticker/index.tsx | 20 ++++++++++---------- yarn.lock | 12 ------------ 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index f29bbf5..31dfab0 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,6 @@ "gpx-parser-builder": "^1.0.2", "leaflet": "1.6.0", "leaflet-editable": "^1.1.0", - "leaflet-geometryutil": "^0.9.0", "leaflet-routing-machine": "^3.2.12", "leaflet.markercluster": "^1.4.1", "node-sass": "^5.0.0", diff --git a/src/map/Sticker/index.tsx b/src/map/Sticker/index.tsx index a611388..900df90 100644 --- a/src/map/Sticker/index.tsx +++ b/src/map/Sticker/index.tsx @@ -49,7 +49,7 @@ const Sticker: React.FC = ({ const stickerImage = React.useRef(null); const onChange = React.useCallback(state => mapSetSticker(index, state), [mapSetSticker, index]); - const onDelete = React.useCallback(state => mapDropSticker(index), [mapSetSticker, index]); + const onDelete = React.useCallback(() => setTimeout(() => mapDropSticker(index), 0), [mapDropSticker, index]); const updateAngle = useCallback( ang => { @@ -65,12 +65,12 @@ const Sticker: React.FC = ({ stickerArrow.current.style.transform = `rotate(${ang + Math.PI}rad)`; }, - [stickerArrow, stickerImage] + [stickerArrow, stickerImage], ); const onDragStart = React.useCallback(() => { if (!layer?.dragging) { - return + return; } layer.dragging.disable(); @@ -100,7 +100,7 @@ const Sticker: React.FC = ({ setTimeout(MainMap.enableClicks, 100); }, - [setDragging, layer, MainMap, sticker, angle] + [setDragging, layer, MainMap, sticker, angle], ); const onMoveStarted = React.useCallback(() => { @@ -118,7 +118,7 @@ const Sticker: React.FC = ({ MainMap.enableClicks(); }, - [onChange, sticker] + [onChange, sticker], ); const onDrag = React.useCallback( @@ -130,7 +130,7 @@ const Sticker: React.FC = ({ angle.current = parseFloat(Math.atan2(y - pageY, x - pageX).toFixed(2)); updateAngle(angle.current); }, - [element, updateAngle, angle] + [element, updateAngle, angle], ); const onTextChange = React.useCallback(text => setText(text), [sticker, onChange]); @@ -143,7 +143,7 @@ const Sticker: React.FC = ({ }, [text, onChange, sticker]); const direction = React.useMemo(() => { - getLabelDirection(sticker?.angle) + getLabelDirection(sticker?.angle); }, [sticker.angle]); useEffect(() => { @@ -165,9 +165,9 @@ const Sticker: React.FC = ({ useEffect(() => { if (!wrapper || !wrapper.current) return; - const scale = getAdaptiveScale(zoom) // adaptive zoom :-) + const scale = getAdaptiveScale(zoom); // adaptive zoom :-) - wrapper.current.style.transform = `scale(${scale}) perspective(1px)` + wrapper.current.style.transform = `scale(${scale}) perspective(1px)`; }, [zoom, wrapper]); // Attaches onMoveFinished event to item @@ -246,7 +246,7 @@ const Sticker: React.FC = ({
      , - element + element, ); }; diff --git a/yarn.lock b/yarn.lock index c754c94..f0cac18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7197,13 +7197,6 @@ leaflet-editable@^1.1.0: resolved "https://registry.yarnpkg.com/leaflet-editable/-/leaflet-editable-1.2.0.tgz#a3a01001764ba58ea923381ee6a1c814708a0b84" integrity sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ== -leaflet-geometryutil@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/leaflet-geometryutil/-/leaflet-geometryutil-0.9.3.tgz#e10fa302d99d4b1d3c6365a1f39298635a2704cd" - integrity sha512-Wi6YvfNx/Xu9q35AEfXpsUXmIFLen/MO+C2qimxHRnjyeyOxBhdcZa6kSiReaOX0cGK7yQInqrzz0dkIqZ8Dpg== - dependencies: - leaflet ">=0.7.0" - leaflet-routing-machine@^3.2.12: version "3.2.12" resolved "https://registry.yarnpkg.com/leaflet-routing-machine/-/leaflet-routing-machine-3.2.12.tgz#9e4aef008321b0227cf894d829c3b4c1f13e4e13" @@ -7223,11 +7216,6 @@ leaflet@1.6.0: resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.6.0.tgz#aecbb044b949ec29469eeb31c77a88e2f448f308" integrity sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ== -leaflet@>=0.7.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19" - integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw== - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" From 7b24499f49fe9ea3d6fcbf4c3171a6bcfe172369 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 17:36:49 +0700 Subject: [PATCH 305/320] fixed svg colors --- src/styles/colors.scss | 2 +- src/styles/dialogs.scss | 24 ++++++++++++------------ src/styles/map.scss | 4 ++-- src/styles/panel.scss | 4 ++-- src/styles/save.scss | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/styles/colors.scss b/src/styles/colors.scss index c6b9fea..8bb6fdd 100644 --- a/src/styles/colors.scss +++ b/src/styles/colors.scss @@ -32,4 +32,4 @@ $tooltip_background: #123740; $loading_shade: darken($blue_secondary, 20%); $cluster_small: #0069a7; -$title_dialog_color: fade(#111111, 85%); +$title_dialog_color: darken(#111111, 85%); diff --git a/src/styles/dialogs.scss b/src/styles/dialogs.scss index caff976..b0cf936 100644 --- a/src/styles/dialogs.scss +++ b/src/styles/dialogs.scss @@ -178,7 +178,7 @@ left: 0; width: 100%; z-index: 10; - background: linear-gradient(fade($loading_shade, 0%), $loading_shade 70%); + background: linear-gradient(darken($loading_shade, 0%), $loading_shade 70%); height: 100px; pointer-events: none; transition: opacity 100ms; @@ -240,7 +240,7 @@ &.has_edit { //transform: translateY(-2px); .route-row { - background: fade($green_secondary, 30%); + background: darken($green_secondary, 30%); } } @@ -280,11 +280,11 @@ } .route-row-edit { - background: fade($green_secondary, 30%); + background: darken($green_secondary, 30%); } .route-row-drop { - background: fade($red_secondary, 20%); + background: darken($red_secondary, 20%); .route-row { align-items: center; @@ -341,13 +341,13 @@ display: flex; align-items: center; justify-content: center; - fill: fade(white, 30%); - background: fade(white, 8%); + fill: darken(white, 30%); + background: darken(white, 8%); cursor: pointer; transition: background 250ms, transform 500ms; &:hover { - background: fade(white, 10%); + background: darken(white, 10%); } } @@ -361,7 +361,7 @@ overflow: hidden; transition: all 500ms; display: flex; - fill: fade(white, 30%); + fill: darken(white, 30%); div { width: 60px; @@ -371,16 +371,16 @@ align-items: center; &:first-child { - box-shadow: fade(black, 30%) 1px 0; + box-shadow: darken(black, 30%) 1px 0; } &:hover { - background: fade($red_secondary, 30%); + background: darken($red_secondary, 30%); } &.modify-button { &:hover { - background: fade($green_secondary, 30%); + background: darken($green_secondary, 30%); } } } @@ -399,7 +399,7 @@ .route-row-corner { svg { - fill: fade(white, 50%); + fill: darken(white, 50%); margin-right: 2px; flex-shrink: 0; } diff --git a/src/styles/map.scss b/src/styles/map.scss index a1b7981..38d93f8 100644 --- a/src/styles/map.scss +++ b/src/styles/map.scss @@ -308,7 +308,7 @@ align-items: center; justify-content: center; color: white; - box-shadow: fade($cluster_small, 70%) 0 0 0 5px; + box-shadow: darken($cluster_small, 70%) 0 0 0 5px; font-weight: bold; font-size: 13px; transform: translate(-12px, -12px); @@ -317,7 +317,7 @@ outline: none; &:hover { - box-shadow: fade($cluster_small, 70%) 0 0 0 7px; + box-shadow: darken($cluster_small, 70%) 0 0 0 7px; } span { diff --git a/src/styles/panel.scss b/src/styles/panel.scss index 6bd3a1d..4854214 100644 --- a/src/styles/panel.scss +++ b/src/styles/panel.scss @@ -729,7 +729,7 @@ margin-bottom: 10px; padding: 10px; background: $title_dialog_color; - color: fade(white, 50%); + color: darken(white, 50%); font-size: 13px; box-sizing: border-box; border-radius: $panel_radius; @@ -761,7 +761,7 @@ content: ' '; width: 100%; height: 40px; - background: linear-gradient(fade($title_dialog_color, 0), $title_dialog_color); + background: linear-gradient(darken($title_dialog_color, 0), $title_dialog_color); position: absolute; bottom: 0; left: 0; diff --git a/src/styles/save.scss b/src/styles/save.scss index 8edf45e..f85ab5d 100644 --- a/src/styles/save.scss +++ b/src/styles/save.scss @@ -41,7 +41,7 @@ pointer-events: none; text-transform: uppercase; font-size: 1.2em; - color: fade(white, 70%); + color: darken(white, 70%); svg { fill: white; From 10d5fa1b9843517b060be20ee009f72f8b25ffec Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 17:49:35 +0700 Subject: [PATCH 306/320] fixed dash on renderer --- src/utils/renderer.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 1620790..357c58e 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -29,8 +29,7 @@ const latLngToTile = (latlng: { lat: number; lng: number; }): { x: number; y: number; z: number } => { - const map = MainMap; - const zoom = map.getZoom(); + const zoom = MainMap.getZoom(); const xtile = Number(Math.floor(((latlng.lng + 180) / 360) * (1 << zoom))); const ytile = Number( Math.floor( @@ -48,8 +47,7 @@ const latLngToTile = (latlng: { }; const tileToLatLng = (point: { x: number; y: number }): LatLng => { - const map = MainMap; - const z = map.getZoom(); + const z = MainMap.getZoom(); const lng = (point.x / Math.pow(2, z)) * 360 - 180; const n = Math.PI - (2 * Math.PI * point.y) / Math.pow(2, z); const lat = (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))); @@ -209,7 +207,7 @@ export const composePoly = ({ } if (dash) { - ctx.setLineDash([12, 12]); + ctx.setLineDash(dash); } ctx.stroke(); From b421005b7d518c9db832e1fd04086e28d1ea9e8a Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 17:54:18 +0700 Subject: [PATCH 307/320] fixed change detection by stickers --- src/redux/map/sagas.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/redux/map/sagas.ts b/src/redux/map/sagas.ts index 1572bf6..0441d31 100644 --- a/src/redux/map/sagas.ts +++ b/src/redux/map/sagas.ts @@ -329,7 +329,7 @@ function* setChanged() { export function* mapSaga() { yield takeEvery( - [MAP_ACTIONS.SET_ROUTE, MAP_ACTIONS.SET_STICKER, MAP_ACTIONS.SET_STICKERS], + [MAP_ACTIONS.SET_ROUTE, MAP_ACTIONS.SET_STICKER, MAP_ACTIONS.SET_STICKERS, MAP_ACTIONS.ADD_STICKER], setChanged, ); From a3982eddae18ae09e4666bf7fac0597215eaa81b Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Tue, 20 Apr 2021 18:01:28 +0700 Subject: [PATCH 308/320] fixed provider and logo persistence --- src/redux/store.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/redux/store.ts b/src/redux/store.ts index f3919fb..19369b5 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -25,6 +25,12 @@ import { assocPath } from 'ramda'; import { AxiosError } from 'axios'; import { api } from '~/utils/api/instance'; +const mapPersistConfig: PersistConfig = { + key: 'map', + whitelist: ['logo', 'provider'], + storage, +}; + const userPersistConfig: PersistConfig = { key: 'user', whitelist: ['user', 'logo', 'provider', 'speed'], @@ -55,7 +61,7 @@ export const store = createStore( combineReducers({ user: persistReducer(userPersistConfig, userReducer), editor: persistReducer(editorPersistConfig, editor), - map, + map: persistReducer(mapPersistConfig, map), }), composeEnhancers(applyMiddleware(sagaMiddleware)) ); From a03a906648e0181d93a8cb5e7fd4538a7629db7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Apr 2021 22:57:36 +0000 Subject: [PATCH 309/320] Bump sockjs from 0.3.19 to 0.3.21 Bumps [sockjs](https://github.com/sockjs/sockjs-node) from 0.3.19 to 0.3.21. - [Release notes](https://github.com/sockjs/sockjs-node/releases) - [Changelog](https://github.com/sockjs/sockjs-node/blob/v0.3.21/Changelog) - [Commits](https://github.com/sockjs/sockjs-node/compare/v0.3.19...v0.3.21) Signed-off-by: dependabot[bot] --- package-lock.json | 29635 +++++++++++++++++++++++++++----------------- 1 file changed, 18426 insertions(+), 11209 deletions(-) diff --git a/package-lock.json b/package-lock.json index b968d7f..3ce06ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,52 +4,233 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/cli": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.2.3.tgz", - "integrity": "sha512-bfna97nmJV6nDJhXNPeEfxyMjWnt6+IjUAaDPiYRTBlm8L41n8nvw6UAqUCbvpFfU246gHPxW7sfWwqtF4FcYA==", - "dev": true, - "requires": { - "chokidar": "2.1.1", - "commander": "2.8.1", - "convert-source-map": "1.6.0", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.3", - "lodash": "4.17.15", - "mkdirp": "0.5.1", - "output-file-sync": "2.0.1", - "slash": "2.0.0", - "source-map": "0.5.7" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, "@babel/code-frame": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, "requires": { "@babel/highlight": "7.0.0" } }, + "@babel/compat-data": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", + "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==" + }, + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, "@babel/generator": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz", "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", - "dev": true, "requires": { "@babel/types": "7.3.2", "jsesc": "2.5.2", @@ -61,81 +242,448 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "requires": { - "@babel/types": "7.3.2" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "7.1.0", - "@babel/types": "7.3.2" - } - }, - "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "7.0.0", - "@babel/traverse": "7.2.3", - "@babel/types": "7.3.2" - } - }, - "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/types": "7.3.2", - "lodash": "4.17.15" + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "browserslist": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", + "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", + "requires": { + "caniuse-lite": "^1.0.30001208", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.712", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "caniuse-lite": { + "version": "1.0.30001214", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", + "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==" + }, + "electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==" + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, + "@babel/helper-create-class-features-plugin": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", + "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", "requires": { - "@babel/traverse": "7.2.3", - "@babel/types": "7.3.2" + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "requires": { + "jsesc": "~0.5.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } } }, "@babel/helper-function-name": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, "requires": { "@babel/helper-get-function-arity": "7.0.0", "@babel/template": "7.2.2", @@ -146,25 +694,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "7.3.2" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", - "dev": true, - "requires": { - "@babel/types": "7.3.2" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, "requires": { "@babel/types": "7.3.2" } @@ -173,38 +702,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "7.3.2" - } - }, - "@babel/helper-module-transforms": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", - "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-simple-access": "7.1.0", - "@babel/helper-split-export-declaration": "7.0.0", - "@babel/template": "7.2.2", - "@babel/types": "7.3.2", - "lodash": "4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, "requires": { "@babel/types": "7.3.2" } @@ -212,87 +709,177 @@ "@babel/helper-plugin-utils": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" }, - "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", - "dev": true, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "requires": { - "lodash": "4.17.15" + "@babel/types": "^7.12.1" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" } } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-wrap-function": "7.2.0", - "@babel/template": "7.2.2", - "@babel/traverse": "7.2.3", - "@babel/types": "7.3.2" - } - }, - "@babel/helper-replace-supers": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", - "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "7.0.0", - "@babel/helper-optimise-call-expression": "7.0.0", - "@babel/traverse": "7.2.3", - "@babel/types": "7.3.2" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "7.2.2", - "@babel/types": "7.3.2" - } - }, "@babel/helper-split-export-declaration": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, "requires": { "@babel/types": "7.3.2" } }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "dev": true, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + }, + "@babel/helpers": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.16.tgz", + "integrity": "sha512-x5otxUaLpdWHl02P4L94wBU+2BJXBkvO+6d6uzQ+xD9/h2hTSAwA5O8QV8GqKx/l8i+VYmKKQg9e2QGTa2Wu3Q==", "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/template": "7.2.2", - "@babel/traverse": "7.2.3", - "@babel/types": "7.3.2" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } } }, "@babel/highlight": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, "requires": { "chalk": "2.4.2", "esutils": "2.0.2", @@ -302,432 +889,763 @@ "@babel/parser": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz", - "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==", - "dev": true + "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==" }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "dev": true, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-remap-async-to-generator": "7.1.0", - "@babel/plugin-syntax-async-generators": "7.2.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-json-strings": "7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz", - "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-object-rest-spread": "7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", - "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0", - "regexpu-core": "4.4.0" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", - "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-remap-async-to-generator": "7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", - "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "lodash": "4.17.15" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" } } }, - "@babel/plugin-transform-classes": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", - "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", - "dev": true, + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-define-map": "7.1.0", - "@babel/helper-function-name": "7.1.0", - "@babel/helper-optimise-call-expression": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-replace-supers": "7.2.3", - "@babel/helper-split-export-declaration": "7.0.0", - "globals": "11.11.0" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "dev": true, + "@babel/plugin-proposal-decorators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz", + "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-decorators": "^7.12.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-destructuring": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", - "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", - "dev": true, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", - "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", - "dev": true, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0", - "regexpu-core": "4.4.0" + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "dev": true, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "dev": true, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-for-of": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", - "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", - "dev": true, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-function-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", - "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", - "dev": true, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "dev": true, + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "dev": true, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "requires": { - "@babel/helper-module-transforms": "7.2.2", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", - "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", - "dev": true, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "requires": { - "@babel/helper-module-transforms": "7.2.2", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-simple-access": "7.1.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", - "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", - "dev": true, + "@babel/plugin-syntax-decorators": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz", + "integrity": "sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA==", "requires": { - "@babel/helper-hoist-variables": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "dev": true, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { - "@babel/helper-module-transforms": "7.2.2", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", - "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", - "dev": true, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "requires": { - "regexp-tree": "0.1.1" + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-new-target": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", - "dev": true, + "@babel/plugin-syntax-flow": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", + "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "dev": true, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-replace-supers": "7.2.3" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-parameters": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", - "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", - "dev": true, + "@babel/plugin-syntax-jsx": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", + "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", "requires": { - "@babel/helper-call-delegate": "7.1.0", - "@babel/helper-get-function-arity": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", - "dev": true, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "requires": { - "regenerator-transform": "0.13.3" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "dev": true, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", - "dev": true, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "dev": true, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-template-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", - "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", - "dev": true, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "dev": true, + "@babel/plugin-syntax-typescript": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", - "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", - "dev": true, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz", + "integrity": "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0", - "regexpu-core": "4.4.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-flow": "^7.12.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, - "@babel/preset-env": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", - "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", - "dev": true, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-proposal-async-generator-functions": "7.2.0", - "@babel/plugin-proposal-json-strings": "7.2.0", - "@babel/plugin-proposal-object-rest-spread": "7.3.2", - "@babel/plugin-proposal-optional-catch-binding": "7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "7.2.0", - "@babel/plugin-syntax-async-generators": "7.2.0", - "@babel/plugin-syntax-json-strings": "7.2.0", - "@babel/plugin-syntax-object-rest-spread": "7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "7.2.0", - "@babel/plugin-transform-arrow-functions": "7.2.0", - "@babel/plugin-transform-async-to-generator": "7.2.0", - "@babel/plugin-transform-block-scoped-functions": "7.2.0", - "@babel/plugin-transform-block-scoping": "7.2.0", - "@babel/plugin-transform-classes": "7.2.2", - "@babel/plugin-transform-computed-properties": "7.2.0", - "@babel/plugin-transform-destructuring": "7.3.2", - "@babel/plugin-transform-dotall-regex": "7.2.0", - "@babel/plugin-transform-duplicate-keys": "7.2.0", - "@babel/plugin-transform-exponentiation-operator": "7.2.0", - "@babel/plugin-transform-for-of": "7.2.0", - "@babel/plugin-transform-function-name": "7.2.0", - "@babel/plugin-transform-literals": "7.2.0", - "@babel/plugin-transform-modules-amd": "7.2.0", - "@babel/plugin-transform-modules-commonjs": "7.2.0", - "@babel/plugin-transform-modules-systemjs": "7.2.0", - "@babel/plugin-transform-modules-umd": "7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "7.3.0", - "@babel/plugin-transform-new-target": "7.0.0", - "@babel/plugin-transform-object-super": "7.2.0", - "@babel/plugin-transform-parameters": "7.2.0", - "@babel/plugin-transform-regenerator": "7.0.0", - "@babel/plugin-transform-shorthand-properties": "7.2.0", - "@babel/plugin-transform-spread": "7.2.2", - "@babel/plugin-transform-sticky-regex": "7.2.0", - "@babel/plugin-transform-template-literals": "7.2.0", - "@babel/plugin-transform-typeof-symbol": "7.2.0", - "@babel/plugin-transform-unicode-regex": "7.2.0", - "browserslist": "4.4.1", - "invariant": "2.2.4", - "js-levenshtein": "1.1.6", - "semver": "5.6.0" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.13.tgz", + "integrity": "sha512-SNJU53VM/SjQL0bZhyU+f4kJQz7bQQajnrZRSaU21hruG/NWY41AEM9AWXeXX90pYr/C2yAmTgI6yW3LlLrAUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", + "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", + "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/types": "^7.13.12" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", + "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.12.17" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz", + "integrity": "sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz", + "integrity": "sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", + "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-typescript": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "dependencies": { + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@babel/preset-react": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", + "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-transform-react-display-name": "^7.12.13", + "@babel/plugin-transform-react-jsx": "^7.13.12", + "@babel/plugin-transform-react-jsx-development": "^7.12.17", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } + } + }, + "@babel/preset-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.12.1" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + } } }, "@babel/runtime": { @@ -745,11 +1663,19 @@ } } }, + "@babel/runtime-corejs3": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.16.tgz", + "integrity": "sha512-HJq7yXmBSAGLl/4BSO25vjWnrhzKHYcB6doNbO+FjYQz6C5lgYsmJF1U8ziDP8/RBqIhNAyU7SjRip+flbjV3g==", + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, "@babel/template": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", - "dev": true, "requires": { "@babel/code-frame": "7.0.0", "@babel/parser": "7.3.2", @@ -760,7 +1686,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", - "dev": true, "requires": { "@babel/code-frame": "7.0.0", "@babel/generator": "7.3.2", @@ -777,7 +1702,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, "requires": { "ms": "2.1.1" } @@ -785,14 +1709,12 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, @@ -800,7 +1722,6 @@ "version": "7.3.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz", "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", - "dev": true, "requires": { "esutils": "2.0.2", "lodash": "4.17.15", @@ -810,14 +1731,1090 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@craco/craco": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-5.9.0.tgz", + "integrity": "sha512-2Q8gIB4W0/nPiUxr9iAKUhGsFlXYN0/wngUdK1VWtfV2NtBv+yllNn2AjieaLbttgpQinuOYmDU65vocC0NMDg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "lodash": "^4.17.15", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@csstools/normalize.css": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", + "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" + }, + "@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + } + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + } + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + } + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -831,6 +2828,96 @@ "resolved": "https://registry.npmjs.org/@mapbox/polyline/-/polyline-0.2.0.tgz", "integrity": "sha1-biWYB0SqIjMflLZFpULALT/P7pc=" }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", + "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", + "requires": { + "ansi-html": "^0.0.7", + "error-stack-parser": "^2.0.6", + "html-entities": "^1.2.1", + "native-url": "^0.2.6", + "schema-utils": "^2.6.5", + "source-map": "^0.7.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, "@redux-saga/core": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.3.tgz", @@ -902,18 +2989,1173 @@ "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.1.0.tgz", "integrity": "sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==" }, + "@rollup/plugin-node-resolve": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", + "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "requires": { + "@rollup/pluginutils": "^3.0.8", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.14.2" + }, + "dependencies": { + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + } + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", + "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "requires": { + "ejs": "^2.6.1", + "magic-string": "^0.25.0" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" + }, + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + } + }, + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "requires": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + } + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "requires": { + "@babel/types": "^7.12.6" + }, + "dependencies": { + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "requires": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + } + }, + "@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "requires": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "dependencies": { + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + } + } + }, + "@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", + "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz", + "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==", + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.13.0", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.13.14", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + } + }, + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + } + } + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==" + }, + "@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "requires": { + "@babel/types": "^7.3.0" + } + }, "@types/classnames": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.7.tgz", "integrity": "sha512-rzOhiQ55WzAiFgXRtitP/ZUT8iVNyllEpylJ5zHzR4vArUvMB39GTk+Zon/uAM0JxEFAWnwsxC2gH8s+tZ3Myg==", "dev": true }, + "@types/eslint": { + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", + "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==" + }, "@types/geojson": { "version": "7946.0.6", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.6.tgz", "integrity": "sha512-f6qai3iR62QuMPPdgyH+LyiXTL2n9Rf62UniJjV7KHrbiwzLTZUKsdq0mFSTxAHbO7JvwxwC4tH0m1UnweuLrA==", "dev": true }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "requires": { + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" + }, "@types/leaflet": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.4.3.tgz", @@ -923,11 +4165,31 @@ "@types/geojson": "7946.0.6" } }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" + }, "@types/node": { "version": "11.9.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.0.tgz", "integrity": "sha512-ry4DOrC+xenhQbzk1iIPzCZGhhPGEFv7ia7Iu6XXSLVluiJIe9FfG7Iu3mObH9mpxEXCWLCMU4JWbCCR9Oy1Zg==" }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/prettier": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==" + }, "@types/prop-types": { "version": "15.5.8", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz", @@ -958,6 +4220,76 @@ "csstype": "2.6.2" } }, + "@types/react-dom": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.3.tgz", + "integrity": "sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" + }, + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==" + }, + "@types/tapable": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz", + "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==" + }, + "@types/uglify-js": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz", + "integrity": "sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==", + "requires": { + "source-map": "^0.6.1" + } + }, + "@types/webpack": { + "version": "4.41.27", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz", + "integrity": "sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA==", + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + }, + "@types/webpack-sources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", + "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, "@types/xml2js": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.5.tgz", @@ -966,234 +4298,321 @@ "@types/node": "11.9.0" } }, - "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", - "dev": true, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" + "@types/yargs-parser": "*" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", - "dev": true + "@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", - "dev": true, + "@typescript-eslint/eslint-plugin": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz", + "integrity": "sha512-U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA==", "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@typescript-eslint/experimental-utils": "4.22.0", + "@typescript-eslint/scope-manager": "4.22.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", - "dev": true, + "@typescript-eslint/experimental-utils": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz", + "integrity": "sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.22.0", + "@typescript-eslint/types": "4.22.0", + "@typescript-eslint/typescript-estree": "4.22.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + } } }, - "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", - "dev": true, + "@typescript-eslint/parser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.0.tgz", + "integrity": "sha512-z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q==", "requires": { - "@xtuc/ieee754": "1.2.0" + "@typescript-eslint/scope-manager": "4.22.0", + "@typescript-eslint/types": "4.22.0", + "@typescript-eslint/typescript-estree": "4.22.0", + "debug": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + } } }, - "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", - "dev": true, + "@typescript-eslint/scope-manager": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz", + "integrity": "sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q==", "requires": { - "@xtuc/long": "4.2.1" + "@typescript-eslint/types": "4.22.0", + "@typescript-eslint/visitor-keys": "4.22.0" } }, - "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", - "dev": true + "@typescript-eslint/types": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.0.tgz", + "integrity": "sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA==" }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", - "dev": true, + "@typescript-eslint/typescript-estree": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz", + "integrity": "sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "@typescript-eslint/types": "4.22.0", + "@typescript-eslint/visitor-keys": "4.22.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, - "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", - "dev": true, + "@typescript-eslint/visitor-keys": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz", + "integrity": "sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw==", "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@typescript-eslint/types": "4.22.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + } } }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, "requires": { "mime-types": "2.1.21", "negotiator": "0.6.1" } }, - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "requires": { - "acorn": "3.3.0" + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } } }, - "add-dom-event-listener": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", - "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", - "requires": { - "object-assign": "4.1.1" - } + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, "add-px-to-style": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-px-to-style/-/add-px-to-style-1.0.0.tgz", "integrity": "sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo=" }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + } + } + }, "ajv": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", @@ -1208,52 +4627,32 @@ "ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "2.1.1" - } + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "3.2.1", @@ -1267,7 +4666,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "requires": { "micromatch": "3.1.10", "normalize-path": "2.1.1" @@ -1277,7 +4675,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, "requires": { "remove-trailing-separator": "1.1.0" } @@ -1287,14 +4684,16 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, - "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } }, "argparse": { "version": "1.0.10", @@ -1304,75 +4703,40 @@ "sprintf-js": "1.0.3" } }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "2.19.0" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } - } + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "dev": true + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0" - } + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, "requires": { "array-uniq": "1.0.3" } @@ -1380,20 +4744,183 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "optional": true + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { "version": "0.2.4", @@ -1407,18 +4934,23 @@ "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", "minimalistic-assert": "1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, "requires": { "util": "0.10.3" }, @@ -1426,14 +4958,12 @@ "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, "requires": { "inherits": "2.0.1" } @@ -1448,81 +4978,55 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000936", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000936", - "electron-to-chromium": "1.3.113" - } - } - } - }, - "awesome-typescript-loader": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz", - "integrity": "sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "enhanced-resolve": "4.1.0", - "loader-utils": "1.2.3", - "lodash": "4.17.15", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "source-map-support": "0.5.10", - "webpack-log": "1.2.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "aws-sign2": { "version": "0.7.0", @@ -1534,1260 +5038,1102 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "axe-core": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.4.tgz", + "integrity": "sha512-Pdgfv6iP0gNx9ejRGa3zE7Xgkj/iclXqLfe7BnatdZz0QnLZ3jrRHUVH8wNSdN68w05Sk3ShGTb3ydktMTooig==" + }, "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "2.0.3" + "follow-redirects": "^1.10.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "3.1.0" - } - }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" } } }, - "axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, + "babel-extract-comments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", + "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", "requires": { - "ast-types-flow": "0.0.7" + "babylon": "^6.18.0" } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "ansi-regex": "2.1.1" + "color-name": "~1.1.4" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.6.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, - "babel-eslint": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", - "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", - "dev": true, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/traverse": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0" + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" }, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", - "dev": true, + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "requires": { - "@babel/highlight": "7.0.0-beta.44" - } - }, - "@babel/generator": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", - "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44", - "jsesc": "2.5.2", - "lodash": "4.17.15", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", - "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.44", - "@babel/template": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", - "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", - "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.44" + "@babel/highlight": "^7.12.13" } }, "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", - "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", - "dev": true, + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", "requires": { - "chalk": "2.4.2", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, "@babel/template": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", - "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", - "dev": true, + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "lodash": "4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", - "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "@babel/generator": "7.0.0-beta.44", - "@babel/helper-function-name": "7.0.0-beta.44", - "@babel/helper-split-export-declaration": "7.0.0-beta.44", - "@babel/types": "7.0.0-beta.44", - "babylon": "7.0.0-beta.44", - "debug": "3.2.6", - "globals": "11.11.0", - "invariant": "2.2.4", - "lodash": "4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, "@babel/types": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", - "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", - "dev": true, + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", "requires": { - "esutils": "2.0.2", - "lodash": "4.17.15", - "to-fast-properties": "2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" } }, - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" } } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.15", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" }, "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } } } }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "babel-plugin-named-asset-import": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", + "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==" }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.15" + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", + "semver": "^6.1.1" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" } }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "@babel/helper-define-polyfill-provider": "^0.2.0" } }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-loader": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz", - "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==", - "dev": true, - "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.2.3", - "mkdirp": "0.5.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-lodash": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz", - "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/types": "7.3.2", - "glob": "7.1.3", - "lodash": "4.17.15", - "require-package-name": "2.0.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "babel-plugin-ramda": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-ramda/-/babel-plugin-ramda-2.0.0.tgz", - "integrity": "sha512-PZ/6fmNGshCU7Vt33JRWDDSQqZxOsav1DztZ+VBJFOamE3spyoKuIL9Ve0FQd/oXGlH5jHf/WrpCSGn0MR+YVw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0", - "ramda": "0.26.1" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - } - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" - } + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" }, "babel-plugin-transform-object-rest-spread": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, "requires": { "babel-plugin-syntax-object-rest-spread": "6.13.0", "babel-runtime": "6.26.0" } }, - "babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + } + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-preset-react-app": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.0.tgz", + "integrity": "sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg==", + "requires": { + "@babel/core": "7.12.3", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-proposal-decorators": "7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", + "@babel/plugin-proposal-numeric-separator": "7.12.1", + "@babel/plugin-proposal-optional-chaining": "7.12.1", + "@babel/plugin-transform-flow-strip-types": "7.12.1", + "@babel/plugin-transform-react-display-name": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/preset-react": "7.12.1", + "@babel/preset-typescript": "7.12.1", + "@babel/runtime": "7.12.1", + "babel-plugin-macros": "2.8.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", + "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "requires": { + "@babel/compat-data": "^7.12.1", + "@babel/helper-compilation-targets": "^7.12.1", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.1", + "core-js-compat": "^3.6.2", + "semver": "^5.5.0" + } + }, + "@babel/preset-react": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", + "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.12.1", + "@babel/plugin-transform-react-jsx": "^7.12.1", + "@babel/plugin-transform-react-jsx-development": "^7.12.1", + "@babel/plugin-transform-react-jsx-self": "^7.12.1", + "@babel/plugin-transform-react-jsx-source": "^7.12.1", + "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + } + }, + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "@babel/runtime": "^7.8.4" } - } - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.8", - "invariant": "2.2.4", - "semver": "5.6.0" - }, - "dependencies": { - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000936", - "electron-to-chromium": "1.3.113" - } - } - } - }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" - } - }, - "babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.6.4", - "home-or-tmp": "2.0.0", - "lodash": "4.17.15", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" } } }, @@ -2796,98 +6142,36 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.6.4", - "regenerator-runtime": "0.11.1" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.15" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.15" - }, - "dependencies": { - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.15", - "to-fast-properties": "1.0.3" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" } } }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, "requires": { "cache-base": "1.0.1", "class-utils": "0.3.6", @@ -2902,7 +6186,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "1.0.2" } @@ -2911,7 +6194,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -2920,7 +6202,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -2929,7 +6210,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "1.0.0", "is-data-descriptor": "1.0.0", @@ -2939,22 +6219,19 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -2964,6 +6241,24 @@ "tweetnacl": "0.14.5" } }, + "bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "requires": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + } + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -2973,48 +6268,26 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", - "dev": true + "optional": true }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "bmp-js": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz", - "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=", - "dev": true + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - } + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "bonjour": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, "requires": { "array-flatten": "2.1.2", "deep-equal": "1.0.1", @@ -3027,8 +6300,7 @@ "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" } } }, @@ -3037,44 +6309,12 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.2", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.1" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3082,7 +6322,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "requires": { "arr-flatten": "1.1.0", "array-unique": "0.3.2", @@ -3100,7 +6339,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "0.1.1" } @@ -3110,14 +6348,17 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", @@ -3125,13 +6366,19 @@ "evp_bytestokey": "1.0.3", "inherits": "2.0.3", "safe-buffer": "5.1.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, "requires": { "browserify-aes": "1.2.0", "browserify-des": "1.0.2", @@ -3142,19 +6389,24 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, "requires": { "cipher-base": "1.0.4", "des.js": "1.0.0", "inherits": "2.0.3", "safe-buffer": "5.1.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, "requires": { "bn.js": "4.11.8", "randombytes": "2.0.6" @@ -3164,7 +6416,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", @@ -3173,13 +6424,19 @@ "elliptic": "6.4.1", "inherits": "2.0.3", "parse-asn1": "5.1.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, "requires": { "pako": "1.0.8" } @@ -3194,67 +6451,58 @@ "node-releases": "1.1.7" } }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "dev": true + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "4.1.5", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - } - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, "requires": { "collection-visit": "1.0.0", "component-emitter": "1.2.1", @@ -3267,6 +6515,15 @@ "unset-value": "1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -3282,36 +6539,15 @@ } } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, "requires": { "camelcase": "2.1.1", "map-obj": "1.0.1" @@ -3320,51 +6556,27 @@ "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" } } }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000936", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000936", - "electron-to-chromium": "1.3.113" - } - } - } - }, - "caniuse-db": { - "version": "1.0.30000936", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000936.tgz", - "integrity": "sha512-gOrcU8d+h5AdrO/Mhnj35vttNvAed2taqzrYDfhJE/qVnLxAaGb1doWlRF7iDex+EQPhkwAHc07RBwixnxpFDQ==", - "dev": true - }, "caniuse-lite": { "version": "1.0.30000936", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz", "integrity": "sha512-orX4IdpbFhdNO7bTBhSbahp1EBpqzBc+qrvTRVUFfZgA4zta7TdM6PN5ZxkEUgDnz36m+PfWGcdX7AVfFWItJw==" }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" }, "caseless": { "version": "0.12.0", @@ -3396,31 +6608,15 @@ } } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, - "chokidar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.1.tgz", - "integrity": "sha512-gfw3p2oQV2wEt+8VuMlNsPjCxDxvvgnm/kz+uATu805mWVF8IJN7uz9DN7iBz+RMJISmiVbCOBFs9qBGMjtPfQ==", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.7", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" - } + "check-types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", + "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" }, "chownr": { "version": "1.1.1", @@ -3428,93 +6624,31 @@ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true }, - "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", - "dev": true, - "requires": { - "tslib": "1.9.3" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.2" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "1.1.3" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==" + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, "requires": { "arr-union": "3.1.0", "define-property": "0.2.5", @@ -3526,7 +6660,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "0.1.6" } @@ -3538,100 +6671,88 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, - "clean-webpack-plugin": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", - "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "requires": { - "rimraf": "2.6.3" + "source-map": "~0.6.0" } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "requires": { - "colors": "1.3.3", - "object-assign": "4.1.1", - "string-width": "2.1.1" - } - }, - "cli-width": { + "clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "1.5.1" - } - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, "requires": { "map-visit": "1.0.0", "object-visit": "1.0.1" } }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "1.0.4", - "color-convert": "1.9.3", - "color-string": "0.3.0" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -3645,31 +6766,10 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "0.11.4", - "css-color-names": "0.0.4", - "has": "1.0.3" - } - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, "combined-stream": { "version": "1.0.7", @@ -3679,62 +6779,27 @@ "delayed-stream": "1.0.0" } }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-classes": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", - "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", - "requires": { - "component-indexof": "0.0.3" - } + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, - "component-indexof": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", - "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" - }, - "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", - "dev": true, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "requires": { - "mime-db": "1.37.0" - } - }, - "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", - "dev": true, - "requires": { - "accepts": "1.3.5", - "bytes": "3.0.0", - "compressible": "2.0.15", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.2", - "vary": "1.1.2" + "arity-n": "^1.0.4" } }, "computed-style": { @@ -3751,12 +6816,18 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, "requires": { "buffer-from": "1.1.1", "inherits": "2.0.3", "readable-stream": "2.3.6", "typedarray": "0.0.6" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "config": { @@ -3767,52 +6838,38 @@ "json5": "1.0.1" } }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.15", - "make-dir": "1.3.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.4.3", - "xdg-basedir": "3.0.0" - } + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==" }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, "requires": { "date-now": "0.1.4" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" }, "content-type": { "version": "1.0.4", @@ -3823,25 +6880,10 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, "requires": { "safe-buffer": "5.1.2" } }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", - "requires": { - "cookie": "0.3.1", - "cookie-signature": "1.0.6" - } - }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -3851,7 +6893,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, "requires": { "aproba": "1.2.0", "fs-write-stream-atomic": "1.0.10", @@ -3859,18 +6900,88 @@ "mkdirp": "0.5.1", "rimraf": "2.6.3", "run-queue": "1.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } } }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", - "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==" + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.10.2.tgz", + "integrity": "sha512-W+2oVYeNghuBr3yTzZFQ5rfmjZtYB/Ubg87R5YOmlGrIb+Uw9f7qjUbhsj+/EkXhcV7eOD3jiM4+sgraX3FZUw==" + }, + "core-js-compat": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.2.tgz", + "integrity": "sha512-IGHnpuaM1N++gLSPI1F1wu3WXICPxSyj/Q++clcwsIOnUVp5uKUIPl/+6h0TQ112KU3fMiSxqJuM+OrCyKj5+A==", + "requires": { + "browserslist": "^4.16.4", + "semver": "7.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", + "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", + "requires": { + "caniuse-lite": "^1.0.30001208", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.712", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "caniuse-lite": { + "version": "1.0.30001214", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", + "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==" + }, + "electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==" + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-js-pure": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.10.2.tgz", + "integrity": "sha512-uu18pVHQ21n4mzfuSlCXpucu5VKsck3j2m5fjrBOBqqdgWAxwdCgUuGWj6cDDPN1zLj/qtiqKvBMxWgDeeu49Q==" }, "core-util-is": { "version": "1.0.2", @@ -3914,43 +7025,766 @@ } } }, + "craco": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/craco/-/craco-0.0.3.tgz", + "integrity": "sha512-eeibbwJm1CTf/j3xvNgNmsRS7abegp4Cfm5qtn5nE9/0JjZRas+FHj8IlT8FMFWR0XOyZFGcWZgzaTU19DNGoQ==", + "dev": true, + "requires": { + "@babel/core": "^7.6.0", + "@craco/craco": "^5.5.0", + "@types/babel__core": "^7.1.3", + "@types/webpack": "^4.39.2", + "webpack": "^4.41.0" + }, + "dependencies": { + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "optional": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "craco-alias": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/craco-alias/-/craco-alias-2.2.0.tgz", + "integrity": "sha512-FLSRaCWI/CKLUO+Cb/GH9ljSYWdrlzkYf3N373Kuof0hckJ1tj+wPN0XyToR8KPUggoIB5+IDkGs1uKUBuGUiA==", + "dev": true + }, + "craco-fast-refresh": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/craco-fast-refresh/-/craco-fast-refresh-1.0.5.tgz", + "integrity": "sha512-886u7dAWAdbHW2a2UK1D+oxc1Hf1MPRYatv9JGnGooDfo0AoPV6V/7f8XGwRFNJ06WQhA8dRc699V38PkMMpaA==", + "requires": { + "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", + "react-refresh": "^0.9.0" + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, "requires": { "bn.js": "4.11.8", "elliptic": "6.4.1" } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "1.0.1" - } - }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, "requires": { "cipher-base": "1.0.4", "inherits": "2.0.3", "md5.js": "1.3.5", "ripemd160": "2.0.2", "sha.js": "2.4.11" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, "requires": { "cipher-base": "1.0.4", "create-hash": "1.2.0", @@ -3958,6 +7792,13 @@ "ripemd160": "2.0.2", "safe-buffer": "5.1.2", "sha.js": "2.4.11" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "croppr": { @@ -3969,7 +7810,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "1.0.5", "path-key": "2.0.1", @@ -3978,20 +7818,10 @@ "which": "1.3.1" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, "requires": { "browserify-cipher": "1.0.1", "browserify-sign": "4.0.4", @@ -4004,21 +7834,62 @@ "public-encrypt": "4.0.3", "randombytes": "2.0.6", "randomfill": "1.0.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" }, - "css-animation": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.5.0.tgz", - "integrity": "sha512-hWYoWiOZ7Vr20etzLh3kpWgtC454tW5vn4I6rLANDgpzNSkO7UfOqyCEeaoBSG9CYWQpRkFWTWbWW8o3uZrNLw==", + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "requires": { - "babel-runtime": "6.26.0", - "component-classes": "1.2.6" + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "css-color-names": { @@ -4060,33 +7931,92 @@ } } }, - "css-loader": { - "version": "0.28.11", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", - "dev": true, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.1", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.2.3", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.1", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.1", - "source-list-map": "2.0.1" + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, "requires": { "boolbase": "1.0.0", "css-what": "2.1.2", @@ -4099,563 +8029,15 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", - "dev": true, - "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.2", - "regexpu-core": "1.0.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - } - } - }, - "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", - "requires": { - "mdn-data": "1.1.4", - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" - }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=" - }, "css-what": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==" }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.3", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.3", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.1", - "postcss-zindex": "2.2.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "requires": { - "css-declaration-sorter": "4.0.1", - "cssnano-util-raw-cache": "4.0.1", - "postcss": "7.0.14", - "postcss-calc": "7.0.1", - "postcss-colormin": "4.0.3", - "postcss-convert-values": "4.0.1", - "postcss-discard-comments": "4.0.2", - "postcss-discard-duplicates": "4.0.2", - "postcss-discard-empty": "4.0.1", - "postcss-discard-overridden": "4.0.1", - "postcss-merge-longhand": "4.0.11", - "postcss-merge-rules": "4.0.3", - "postcss-minify-font-values": "4.0.2", - "postcss-minify-gradients": "4.0.2", - "postcss-minify-params": "4.0.2", - "postcss-minify-selectors": "4.0.2", - "postcss-normalize-charset": "4.0.1", - "postcss-normalize-display-values": "4.0.2", - "postcss-normalize-positions": "4.0.2", - "postcss-normalize-repeat-style": "4.0.2", - "postcss-normalize-string": "4.0.2", - "postcss-normalize-timing-functions": "4.0.2", - "postcss-normalize-unicode": "4.0.1", - "postcss-normalize-url": "4.0.1", - "postcss-normalize-whitespace": "4.0.2", - "postcss-ordered-values": "4.1.2", - "postcss-reduce-initial": "4.0.3", - "postcss-reduce-transforms": "4.0.2", - "postcss-svgo": "4.0.2", - "postcss-unique-selectors": "4.0.1" - }, - "dependencies": { - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "4.4.1", - "caniuse-lite": "1.0.30000936", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - } - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "1.5.1", - "chalk": "2.4.2", - "q": "1.5.1" - } - }, - "color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", - "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", - "requires": { - "color-convert": "1.9.3", - "color-string": "1.5.3" - } - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" - } - }, - "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.2", - "domutils": "1.7.0", - "nth-check": "1.0.2" - } - }, - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", - "requires": { - "css-tree": "1.0.0-alpha.29" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", - "requires": { - "mdn-data": "1.1.4", - "source-map": "0.5.7" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "requires": { - "html-comment-regex": "1.1.2" - } - }, - "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "6.1.0" - } - }, - "postcss-calc": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", - "requires": { - "css-unit-converter": "1.1.1", - "postcss": "7.0.14", - "postcss-selector-parser": "5.0.0", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "requires": { - "browserslist": "4.4.1", - "color": "3.1.0", - "has": "1.0.3", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "requires": { - "postcss": "7.0.14" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "requires": { - "postcss": "7.0.14" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "requires": { - "postcss": "7.0.14" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "requires": { - "postcss": "7.0.14" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "requires": { - "css-color-names": "0.0.4", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1", - "stylehacks": "4.0.3" - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "requires": { - "browserslist": "4.4.1", - "caniuse-api": "3.0.0", - "cssnano-util-same-parent": "4.0.1", - "postcss": "7.0.14", - "postcss-selector-parser": "3.1.1", - "vendors": "1.0.2" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "requires": { - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "requires": { - "cssnano-util-get-arguments": "4.0.0", - "is-color-stop": "1.1.0", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "requires": { - "alphanum-sort": "1.0.2", - "browserslist": "4.4.1", - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "7.0.14", - "postcss-selector-parser": "3.1.1" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "requires": { - "postcss": "7.0.14" - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "3.3.0", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "requires": { - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "requires": { - "browserslist": "4.4.1", - "caniuse-api": "3.0.0", - "has": "1.0.3", - "postcss": "7.0.14" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "requires": { - "cssnano-util-get-match": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "requires": { - "is-svg": "3.0.0", - "postcss": "7.0.14", - "postcss-value-parser": "3.3.1", - "svgo": "1.2.0" - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "7.0.14", - "uniqs": "2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "3.0.0" - } - }, - "svgo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.0.tgz", - "integrity": "sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==", - "requires": { - "chalk": "2.4.2", - "coa": "2.0.2", - "css-select": "2.0.2", - "css-select-base-adapter": "0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "1.1.0", - "csso": "3.5.1", - "js-yaml": "3.12.2", - "mkdirp": "0.5.1", - "object.values": "1.1.0", - "sax": "1.2.4", - "stable": "0.1.8", - "unquote": "1.1.1", - "util.promisify": "1.0.0" - } - } - } + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" }, "cssnano-util-get-arguments": { "version": "4.0.0", @@ -4705,21 +8087,23 @@ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "cssom": "~0.3.6" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" } } }, @@ -4733,7 +8117,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, "requires": { "array-find-index": "1.0.2" } @@ -4741,24 +8124,16 @@ "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, "requires": { "es5-ext": "0.10.47" } }, - "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", - "dev": true - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -4767,11 +8142,20 @@ "assert-plus": "1.0.0" } }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, "debug": { "version": "2.6.9", @@ -4779,70 +8163,49 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==" }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, - "default-gateway": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", - "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", - "dev": true, - "requires": { - "execa": "0.10.0", - "ip-regex": "2.1.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "define-properties": { "version": "1.1.3", @@ -4856,7 +8219,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, "requires": { "is-descriptor": "1.0.2", "isobject": "3.0.1" @@ -4866,7 +8228,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -4875,7 +8236,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -4884,7 +8244,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "1.0.0", "is-data-descriptor": "1.0.0", @@ -4894,36 +8253,20 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.3" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -4933,67 +8276,81 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, "requires": { "inherits": "2.0.3", "minimalistic-assert": "1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" }, "detect-node": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + } + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", "randombytes": "2.0.6" } }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + } + } + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" }, "dns-packet": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, "requires": { "ip": "1.1.5", "safe-buffer": "5.1.2" @@ -5003,30 +8360,19 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, "requires": { "buffer-indexof": "1.1.1" } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, "dom-align": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.8.0.tgz", - "integrity": "sha512-B85D4ef2Gj5lw0rK0KM2+D5/pH7yqNxg2mB+E8uzFaolpm7RQmsxEfjyEuNiF8UBBkffumYDeKRzTzc3LePP+w==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz", + "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA==" }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, "requires": { "utila": "0.4.0" } @@ -5057,36 +8403,35 @@ } } }, - "dom-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz", - "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=", - "dev": true, - "requires": { - "urijs": "1.19.1" - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, "domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, "domhandler": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, "requires": { "domelementtype": "1.3.1" } @@ -5095,12 +8440,44 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, "requires": { "dom-serializer": "0.1.0", "domelementtype": "1.3.1" } }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", @@ -5109,22 +8486,37 @@ "is-obj": "1.0.1" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, "requires": { "end-of-stream": "1.4.1", "inherits": "2.0.3", "readable-stream": "2.3.6", "stream-shift": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "ecc-jsbn": { @@ -5141,6 +8533,11 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, "electron-to-chromium": { "version": "1.3.113", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", @@ -5150,7 +8547,6 @@ "version": "6.4.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, "requires": { "bn.js": "4.11.8", "brorand": "1.1.0", @@ -5159,43 +8555,56 @@ "inherits": "2.0.3", "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==" + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "1.4.0" } }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "requires": { - "graceful-fs": "4.1.15", - "memory-fs": "0.4.1", - "tapable": "1.1.1" + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + } } }, "entities": { @@ -5203,6 +8612,11 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -5219,6 +8633,14 @@ "is-arrayish": "0.2.1" } }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, "es-abstract": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", @@ -5246,7 +8668,6 @@ "version": "0.10.47", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", - "dev": true, "requires": { "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", @@ -5257,402 +8678,439 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.47", "es6-symbol": "3.1.1" } }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, "requires": { "d": "1.0.0", "es5-ext": "0.10.47" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.4.2", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.2.6", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.3", - "globals": "11.11.0", - "ignore": "3.3.10", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.13.1", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.3", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.6.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.5", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" } } }, - "eslint-config-airbnb": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz", - "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==", - "dev": true, + "eslint-config-react-app": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz", + "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==", "requires": { - "eslint-config-airbnb-base": "12.1.0" - } - }, - "eslint-config-airbnb-base": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", - "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", - "dev": true, - "requires": { - "eslint-restricted-globals": "0.1.1" - } - }, - "eslint-import-resolver-babel-module": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-4.0.0.tgz", - "integrity": "sha512-aPj0+pG0H3HCaMD9eRDYEzPdMyKrLE2oNhAzTXd2w86ZBe3s7drSrrPwVTfzO1CBp13FGk8S84oRmZHZvSo0mA==", - "dev": true, - "requires": { - "pkg-up": "2.0.0", - "resolve": "1.10.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "2.6.9", - "resolve": "1.10.0" - } - }, - "eslint-import-resolver-webpack": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.9.0.tgz", - "integrity": "sha1-IxzhV4rVEk2leZ8Cm9M9KBN2I+M=", - "dev": true, - "requires": { - "array-find": "1.0.0", - "debug": "2.6.9", - "enhanced-resolve": "0.9.1", - "find-root": "1.1.0", - "has": "1.0.3", - "interpret": "1.2.0", - "is-absolute": "0.2.6", - "lodash.get": "4.4.2", - "node-libs-browser": "2.2.0", - "resolve": "1.10.0", - "semver": "5.6.0" - }, - "dependencies": { - "enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "memory-fs": "0.2.0", - "tapable": "0.1.10" - } - }, - "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", - "dev": true - }, - "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", - "dev": true - } + "confusing-browser-globals": "^1.0.10" } }, "eslint-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", - "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", - "dev": true, + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz", + "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==", "requires": { - "loader-fs-cache": "1.0.1", - "loader-utils": "1.2.3", - "object-assign": "4.1.1", - "object-hash": "1.3.1", - "rimraf": "2.6.3" - } - }, - "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", - "dev": true, - "requires": { - "debug": "2.6.9", - "pkg-dir": "2.0.0" - } - }, - "eslint-plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz", - "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==", - "dev": true, - "requires": { - "eslint-rule-composer": "0.3.0" - } - }, - "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", - "dev": true, - "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.3.0", - "has": "1.0.3", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.10.0" + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "loader-utils": "^2.0.0", + "object-hash": "^2.0.3", + "schema-utils": "^2.6.5" }, "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "eslint-plugin-jsx-a11y": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz", - "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==", - "dev": true, + "eslint-plugin-flowtype": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.7.1.tgz", + "integrity": "sha512-RsurlNszyKLIHJvw6J4C98ubTTsLlgzL5xYqQ6ZTV5d2E2iHIR744SxoU3o7yQf0HjIe0GwnAIxpD+g0IV+emg==", "requires": { - "aria-query": "3.0.0", - "array-includes": "3.0.3", - "ast-types-flow": "0.0.7", - "axobject-query": "2.0.2", - "damerau-levenshtein": "1.0.4", - "emoji-regex": "7.0.3", - "has": "1.0.3", - "jsx-ast-utils": "2.0.1" + "lodash": "^4.17.15", + "string-natural-compare": "^3.0.1" } }, - "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", - "dev": true, + "eslint-plugin-jest": { + "version": "24.3.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.5.tgz", + "integrity": "sha512-XG4rtxYDuJykuqhsOqokYIR84/C8pRihRtEpVskYLbIIKGwPNW2ySxdctuVzETZE+MbF/e7wmsnbNVpzM0rDug==", "requires": { - "array-includes": "3.0.3", - "doctrine": "2.1.0", - "has": "1.0.3", - "jsx-ast-utils": "2.0.1", - "object.fromentries": "2.0.0", - "prop-types": "15.7.1", - "resolve": "1.10.0" + "@typescript-eslint/experimental-utils": "^4.0.1" } }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true + "eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==" }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, + "eslint-plugin-testing-library": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz", + "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==", "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "@typescript-eslint/experimental-utils": "^3.10.1" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==" + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } } }, "eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, + "eslint-webpack-plugin": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz", + "integrity": "sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw==", "requires": { - "acorn": "5.7.3", - "acorn-jsx": "3.0.1" + "@types/eslint": "^7.2.6", + "arrify": "^2.0.1", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" }, "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } } } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -5665,38 +9123,37 @@ "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" }, "events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" }, "eventsource": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, "requires": { "original": "1.0.2" } @@ -5705,17 +9162,20 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, "requires": { "md5.js": "1.3.5", "safe-buffer": "5.1.2" } }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, "requires": { "cross-spawn": "6.0.5", "get-stream": "4.1.0", @@ -5726,17 +9186,15 @@ "strip-eof": "1.0.0" } }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", - "dev": true + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "requires": { "debug": "2.6.9", "define-property": "0.2.5", @@ -5751,7 +9209,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "0.1.6" } @@ -5760,65 +9217,45 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "0.1.1" } } } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "requires": { - "homedir-polyfill": "1.0.1" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "dev": true, - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" }, "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, @@ -5831,7 +9268,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "requires": { "assign-symbols": "1.0.0", "is-extendable": "1.0.1" @@ -5841,29 +9277,16 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "2.0.4" } } } }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.23", - "tmp": "0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "requires": { "array-unique": "0.3.2", "define-property": "1.0.0", @@ -5879,7 +9302,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "1.0.2" } @@ -5888,7 +9310,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "0.1.1" } @@ -5897,7 +9318,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -5906,7 +9326,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -5915,7 +9334,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "1.0.0", "is-data-descriptor": "1.0.0", @@ -5925,8 +9343,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -5940,6 +9357,75 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -5950,72 +9436,47 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "requires": { - "websocket-driver": "0.7.0" + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" } }, "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.4", - "object-assign": "4.1.1" - } - }, - "file-loader": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", - "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", - "dev": true, - "requires": { - "loader-utils": "1.2.3", - "schema-utils": "0.4.7" - } + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" }, "file-saver": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.0.tgz", "integrity": "sha512-cYM1ic5DAkg25pHKgi5f10ziAM7RJU37gaH1XQlyNDrtUnzhC/dfoV9zf2OmF0RMKi42jG5B0JWBnPQqyj/G6g==" }, - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "requires": { "extend-shallow": "2.0.1", "is-number": "3.0.0", @@ -6027,118 +9488,50 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "0.1.1" } } } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, "requires": { "locate-path": "3.0.0" } }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "graceful-fs": "4.1.15", - "rimraf": "2.6.3", - "write": "0.2.1" - } + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" }, "flatten": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.6" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "follow-redirects": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", - "dev": true, "requires": { "debug": "3.1.0" }, @@ -6147,33 +9540,63 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } } } }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "1.1.4" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + } + } + }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -6187,14 +9610,12 @@ "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, "requires": { "map-cache": "0.2.2" } @@ -6202,41 +9623,36 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.6" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "minipass": "^3.0.0" } }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, "requires": { "graceful-fs": "4.1.15", "iferr": "0.1.5", @@ -6253,7 +9669,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, "optional": true, "requires": { "nan": "2.12.1", @@ -6263,25 +9678,21 @@ "abbrev": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, "optional": true }, "aproba": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", "bundled": true, - "dev": true, "optional": true, "requires": { "delegates": "1.0.0", @@ -6291,13 +9702,11 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, - "dev": true, "optional": true, "requires": { "balanced-match": "1.0.0", @@ -6307,37 +9716,31 @@ "chownr": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "debug": { "version": "2.6.9", "bundled": true, - "dev": true, "optional": true, "requires": { "ms": "2.0.0" @@ -6346,25 +9749,21 @@ "deep-extend": { "version": "0.6.0", "bundled": true, - "dev": true, "optional": true }, "delegates": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", "bundled": true, - "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", "bundled": true, - "dev": true, "optional": true, "requires": { "minipass": "2.3.5" @@ -6373,13 +9772,11 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "gauge": { "version": "2.7.4", "bundled": true, - "dev": true, "optional": true, "requires": { "aproba": "1.2.0", @@ -6395,7 +9792,6 @@ "glob": { "version": "7.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "fs.realpath": "1.0.0", @@ -6409,13 +9805,11 @@ "has-unicode": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", "bundled": true, - "dev": true, "optional": true, "requires": { "safer-buffer": "2.1.2" @@ -6424,7 +9818,6 @@ "ignore-walk": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minimatch": "3.0.4" @@ -6433,7 +9826,6 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true, "optional": true, "requires": { "once": "1.4.0", @@ -6443,19 +9835,16 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, "optional": true }, "ini": { "version": "1.3.5", "bundled": true, - "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true, "requires": { "number-is-nan": "1.0.1" @@ -6464,13 +9853,11 @@ "isarray": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true, "optional": true, "requires": { "brace-expansion": "1.1.11" @@ -6479,13 +9866,11 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "5.1.2", @@ -6495,7 +9880,6 @@ "minizlib": { "version": "1.2.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minipass": "2.3.5" @@ -6504,7 +9888,6 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minimist": "0.0.8" @@ -6513,13 +9896,11 @@ "ms": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "needle": { "version": "2.2.4", "bundled": true, - "dev": true, "optional": true, "requires": { "debug": "2.6.9", @@ -6530,7 +9911,6 @@ "node-pre-gyp": { "version": "0.10.3", "bundled": true, - "dev": true, "optional": true, "requires": { "detect-libc": "1.0.3", @@ -6548,7 +9928,6 @@ "nopt": { "version": "4.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "abbrev": "1.1.1", @@ -6558,13 +9937,11 @@ "npm-bundled": { "version": "1.0.5", "bundled": true, - "dev": true, "optional": true }, "npm-packlist": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true, "requires": { "ignore-walk": "3.0.1", @@ -6574,7 +9951,6 @@ "npmlog": { "version": "4.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "are-we-there-yet": "1.1.5", @@ -6586,19 +9962,16 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", "bundled": true, - "dev": true, "optional": true }, "once": { "version": "1.4.0", "bundled": true, - "dev": true, "optional": true, "requires": { "wrappy": "1.0.2" @@ -6607,19 +9980,16 @@ "os-homedir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "osenv": { "version": "0.1.5", "bundled": true, - "dev": true, "optional": true, "requires": { "os-homedir": "1.0.2", @@ -6629,19 +9999,16 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "rc": { "version": "1.2.8", "bundled": true, - "dev": true, "optional": true, "requires": { "deep-extend": "0.6.0", @@ -6653,7 +10020,6 @@ "minimist": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true } } @@ -6661,7 +10027,6 @@ "readable-stream": { "version": "2.3.6", "bundled": true, - "dev": true, "optional": true, "requires": { "core-util-is": "1.0.2", @@ -6676,7 +10041,6 @@ "rimraf": { "version": "2.6.3", "bundled": true, - "dev": true, "optional": true, "requires": { "glob": "7.1.3" @@ -6685,43 +10049,36 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", "bundled": true, - "dev": true, "optional": true }, "sax": { "version": "1.2.4", "bundled": true, - "dev": true, "optional": true }, "semver": { "version": "5.6.0", "bundled": true, - "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, - "dev": true, "optional": true }, "string-width": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true, "requires": { "code-point-at": "1.1.0", @@ -6732,7 +10089,6 @@ "string_decoder": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "5.1.2" @@ -6741,7 +10097,6 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "ansi-regex": "2.1.1" @@ -6750,13 +10105,11 @@ "strip-json-comments": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "tar": { "version": "4.4.8", "bundled": true, - "dev": true, "optional": true, "requires": { "chownr": "1.1.1", @@ -6771,13 +10124,11 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "string-width": "1.0.2" @@ -6786,13 +10137,11 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, "optional": true } } @@ -6805,26 +10154,105 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + } + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, "requires": { "pump": "3.0.0" } @@ -6832,8 +10260,7 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "getpass": { "version": "0.1.7", @@ -6844,23 +10271,23 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, + "optional": true, "requires": { "is-glob": "3.1.0", "path-dirname": "1.0.2" @@ -6870,66 +10297,22 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, + "optional": true, "requires": { "is-extglob": "2.1.1" } } } }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "1.3.5" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.1" - } - }, "globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, "requires": { "array-union": "1.0.2", "glob": "7.1.3", @@ -6938,39 +10321,34 @@ "pinkie-promise": "2.0.1" }, "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, + "globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.2.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, "gpx-parser-builder": { @@ -6986,17 +10364,32 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "optional": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } }, "handle-thing": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", - "dev": true + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" }, "har-schema": { "version": "2.0.0", @@ -7015,8 +10408,7 @@ "harmony-reflect": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", - "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==", - "dev": true + "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" }, "has": { "version": "1.0.3", @@ -7030,7 +10422,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, "requires": { "ansi-regex": "2.1.1" }, @@ -7038,27 +10429,29 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "2.0.6", "has-values": "1.0.0", @@ -7069,7 +10462,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "requires": { "is-number": "3.0.0", "kind-of": "4.0.0" @@ -7079,7 +10471,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "1.1.6" } @@ -7090,39 +10481,38 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "requires": { "inherits": "2.0.3", "minimalistic-assert": "1.0.1" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "hex-color-regex": { "version": "1.1.0", @@ -7145,59 +10535,43 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, "requires": { "hash.js": "1.1.7", "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "optional": true - }, "hoist-non-react-statics": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, "requires": { "inherits": "2.0.3", "obuf": "1.1.2", "readable-stream": "2.3.6", "wbuf": "1.7.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "hsl-regex": { @@ -7210,103 +10584,91 @@ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } }, "html-entities": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" }, "dependencies": { - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "requires": { - "source-map": "0.6.1" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - } - } - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "3.5.21", - "loader-utils": "0.2.17", - "lodash": "4.17.15", - "pretty-error": "2.1.1", - "tapable": "1.1.1", - "toposort": "1.0.7", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" } } }, @@ -7314,7 +10676,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, "requires": { "domelementtype": "1.3.1", "domhandler": "2.1.0", @@ -7326,7 +10687,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, "requires": { "domelementtype": "1.3.1" } @@ -7334,34 +10694,37 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "0.0.1", "string_decoder": "0.10.31" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" }, "http-errors": { "version": "1.6.3", @@ -7372,45 +10735,30 @@ "inherits": "2.0.3", "setprototypeof": "1.1.0", "statuses": "1.5.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "http-parser-js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==" }, "http-proxy": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, "requires": { "eventemitter3": "3.1.0", "follow-redirects": "1.6.1", "requires-port": "1.0.0" } }, - "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", - "dev": true, - "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.15", - "micromatch": "3.1.10" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -7424,65 +10772,17 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "6.0.23" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" }, "identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "dev": true, "requires": { "harmony-reflect": "1.6.1" } @@ -7490,26 +10790,25 @@ "ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" }, "iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true + "immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "optional": true + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "^2.1.0" + } }, "import-fresh": { "version": "2.0.0", @@ -7535,17 +10834,25 @@ } } }, - "import-lazy": { + "import-from": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, "requires": { "pkg-dir": "3.0.0", "resolve-cwd": "2.0.0" @@ -7555,7 +10862,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, "requires": { "find-up": "3.0.0" } @@ -7565,14 +10871,12 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, "requires": { "repeating": "2.0.1" } @@ -7582,78 +10886,40 @@ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.15", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, - "internal-ip": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", - "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", - "dev": true, - "requires": { - "default-gateway": "2.7.2", - "ipaddr.js": "1.8.0" - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -7662,52 +10928,15 @@ "loose-envify": "1.4.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ip-regex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", - "dev": true - }, - "is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==" - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - } - } + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" }, "is-absolute-url": { "version": "2.1.0", @@ -7718,7 +10947,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "3.2.2" } @@ -7728,35 +10956,38 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, + "optional": true, "requires": { "binary-extensions": "1.13.0" } }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "requires": { + "call-bind": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "1.6.0" - } - }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -7770,11 +11001,18 @@ "rgba-regex": "1.0.0" } }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "3.2.2" } @@ -7788,7 +11026,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", "is-data-descriptor": "0.1.4", @@ -7798,8 +11035,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -7808,23 +11044,25 @@ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -7832,104 +11070,66 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", - "dev": true + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, "requires": { "is-extglob": "2.1.1" } }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" - } - }, - "is-npm": { + "is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "3.2.2" } }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, "is-regex": { "version": "1.0.4", @@ -7939,40 +11139,30 @@ "has": "1.0.3" } }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "0.1.2" - } + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "1.1.2" - } + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" }, "is-symbol": { "version": "1.0.2", @@ -7987,50 +11177,35 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "0.1.2" - } - }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isomorphic-xml2js": { "version": "0.1.3", @@ -8046,92 +11221,2573 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "jimp": { - "version": "0.2.28", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", - "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", - "dev": true, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "requires": { - "bignumber.js": "2.4.0", - "bmp-js": "0.0.3", - "es6-promise": "3.3.1", - "exif-parser": "0.1.12", - "file-type": "3.9.0", - "jpeg-js": "0.2.0", - "load-bmfont": "1.4.0", - "mime": "1.4.1", - "mkdirp": "0.5.1", - "pixelmatch": "4.0.2", - "pngjs": "3.4.0", - "read-chunk": "1.0.1", - "request": "2.88.0", - "stream-to-buffer": "0.1.0", - "tinycolor2": "1.4.1", - "url-regex": "3.2.0" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { - "bignumber.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", - "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=", - "dev": true + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, - "jpeg-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz", - "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=", - "dev": true + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz", + "integrity": "sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA==", + "requires": { + "@jest/core": "^26.6.0", + "import-local": "^3.0.2", + "jest-cli": "^26.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "requires": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "jest-circus": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.0.tgz", + "integrity": "sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng==", + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.0", + "@jest/test-result": "^26.6.0", + "@jest/types": "^26.6.0", + "@types/babel__traverse": "^7.0.4", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^26.6.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.0", + "jest-matcher-utils": "^26.6.0", + "jest-message-util": "^26.6.0", + "jest-runner": "^26.6.0", + "jest-runtime": "^26.6.0", + "jest-snapshot": "^26.6.0", + "jest-util": "^26.6.0", + "pretty-format": "^26.6.0", + "stack-utils": "^2.0.2", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + }, + "jest-resolve": { + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.0.tgz", + "integrity": "sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ==", + "requires": { + "@jest/types": "^26.6.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.0", + "read-pkg-up": "^7.0.1", + "resolve": "^1.17.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + } + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watch-typeahead": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz", + "integrity": "sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg==", + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^26.0.0", + "jest-watcher": "^26.3.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } }, "js-base64": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-md5": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", - "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==" }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" - } - }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "jsdom": { + "version": "16.5.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.5.3.tgz", + "integrity": "sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.1.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.9", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.4", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz", + "integrity": "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "dependencies": { + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + } + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -8142,32 +13798,16 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -8187,17 +13827,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "4.1.15" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "optional": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -8209,30 +13842,42 @@ "verror": "1.10.0" } }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "3.0.3" - } - }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "1.1.6" } }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==" + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -8249,24 +13894,6 @@ } } }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "4.0.1" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "2.0.0" - } - }, "leaflet": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz", @@ -8277,10 +13904,6 @@ "resolved": "https://registry.npmjs.org/leaflet-editable/-/leaflet-editable-1.2.0.tgz", "integrity": "sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ==" }, - "leaflet-editable-polyline": { - "version": "github:muerwre/leaflet-editable-polyline#a8e481464d9c286c3a0a1392f1f96f7e2af40489", - "from": "github:muerwre/leaflet-editable-polyline#a8e481464d9c286c3a0a1392f1f96f7e2af40489" - }, "leaflet-geometryutil": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/leaflet-geometryutil/-/leaflet-geometryutil-0.9.1.tgz", @@ -8303,202 +13926,15 @@ "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.4.1.tgz", "integrity": "sha512-ZSEpE/EFApR0bJ1w/dUGwTSUvWlpalKqIzkaYdYB7jaftQA/Y2Jav+eT4CMtEYFj+ZK4mswP13Q2acnPBnhGOw==" }, - "less": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", - "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", - "requires": { - "clone": "2.1.2", - "errno": "0.1.7", - "graceful-fs": "4.1.15", - "image-size": "0.5.5", - "mime": "1.4.1", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.88.0", - "source-map": "0.6.1" - } - }, - "less-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", - "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", - "dev": true, - "requires": { - "clone": "2.1.2", - "loader-utils": "1.2.3", - "pify": "3.0.0" - } - }, - "less-middleware": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/less-middleware/-/less-middleware-2.2.1.tgz", - "integrity": "sha512-1fDsyifwRGObMmqaZhkTDAmVnvgpZmdf6ZTSCbVv9vt+xhlzOz5TDNlLCbITsusEB3d0OKOEadwN9ic3PyOWCg==", - "requires": { - "less": "2.7.3", - "mkdirp": "0.5.1", - "node.extend": "2.0.2" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.21" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.16.1" - } - }, - "less": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", - "requires": { - "errno": "0.1.7", - "graceful-fs": "4.1.15", - "image-size": "0.5.5", - "mime": "1.4.1", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.81.0", - "source-map": "0.5.7" - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "optional": true - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "optional": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "optional": true - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.21", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "optional": true - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "optional": true, - "requires": { - "punycode": "1.4.1" - } - } - } + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "1.1.2", "type-check": "0.3.2" @@ -8512,27 +13948,15 @@ "computed-style": "0.1.4" } }, - "load-bmfont": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", - "integrity": "sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "mime": "1.4.1", - "parse-bmfont-ascii": "1.0.6", - "parse-bmfont-binary": "1.0.6", - "parse-bmfont-xml": "1.1.4", - "phin": "2.9.3", - "xhr": "2.5.0", - "xtend": "4.0.1" - } + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, "requires": { "graceful-fs": "4.1.15", "parse-json": "2.2.0", @@ -8543,83 +13967,39 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "loader-fs-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", - "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", - "dev": true, - "requires": { - "find-cache-dir": "0.1.1", - "mkdirp": "0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "1.1.2" - } + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { - "big.js": "5.2.2", - "emojis-list": "2.1.0", - "json5": "1.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + } } }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, "requires": { "p-locate": "3.0.0", "path-exists": "3.0.0" @@ -8630,69 +14010,40 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, "requires": { "lodash._reinterpolate": "3.0.0", "lodash.templatesettings": "4.2.0" @@ -8702,41 +14053,20 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, "requires": { "lodash._reinterpolate": "3.0.0" } }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "2.4.2" - } - }, - "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", - "dev": true - }, - "loglevelnext": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", - "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", - "dev": true, - "requires": { - "es6-symbol": "3.1.1", - "object.assign": "4.1.0" - } - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8749,122 +14079,71 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, "requires": { "currently-unhandled": "0.4.1", "signal-exit": "3.0.2" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "sourcemap-codec": "^1.4.4" } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "requires": { - "pify": "3.0.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "1.0.0" + "tmpl": "1.0.x" } }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "requires": { "object-visit": "1.0.1" } }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, "requires": { "hash-base": "3.0.4", "inherits": "2.0.3", "safe-buffer": "5.1.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, - "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", - "dev": true, - "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "1.2.0", - "p-is-promise": "2.0.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, "requires": { "errno": "0.1.7", "readable-stream": "2.3.6" @@ -8874,7 +14153,6 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, "requires": { "camelcase-keys": "2.1.0", "decamelize": "1.2.0", @@ -8892,62 +14170,95 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, "requires": { "path-exists": "2.1.0", "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + } } }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, "requires": { "graceful-fs": "4.1.15", "parse-json": "2.2.0", "pify": "2.3.0", "pinkie-promise": "2.0.1", "strip-bom": "2.0.0" + }, + "dependencies": { + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + } } }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, "requires": { "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + } } }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, "requires": { "graceful-fs": "4.1.15", "pify": "2.3.0", "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + } } }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, "requires": { "load-json-file": "1.1.0", "normalize-package-data": "2.5.0", @@ -8958,7 +14269,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, "requires": { "find-up": "1.1.2", "read-pkg": "1.1.0" @@ -8968,7 +14278,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, "requires": { "is-utf8": "0.2.1" } @@ -8978,20 +14287,32 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", @@ -9011,8 +14332,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -9020,17 +14340,11 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, "requires": { "bn.js": "4.11.8", "brorand": "1.1.0" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, "mime-db": { "version": "1.37.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", @@ -9044,102 +14358,81 @@ "mime-db": "1.37.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "0.1.1" - } - }, - "mini-css-extract-plugin": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", - "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", - "dev": true, - "requires": { - "loader-utils": "1.2.3", - "schema-utils": "1.0.0", - "webpack-sources": "1.3.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "6.9.1", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" - } - } - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "yallist": "^4.0.0" }, "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -9147,7 +14440,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, "requires": { "for-in": "1.0.2", "is-extendable": "1.0.1" @@ -9157,7 +14449,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "2.0.4" } @@ -9165,18 +14456,17 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, "requires": { "aproba": "1.2.0", "copy-concurrently": "1.0.5", @@ -9184,18 +14474,40 @@ "mkdirp": "0.5.1", "rimraf": "2.6.3", "run-queue": "1.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, "requires": { "dns-packet": "1.3.1", "thunky": "1.0.3" @@ -9204,25 +14516,23 @@ "multicast-dns-service-types": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" }, "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "optional": true + }, + "nanoid": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", + "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", @@ -9240,109 +14550,198 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, + "native-url": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", + "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", + "requires": { + "querystring": "^0.2.0" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", - "dev": true + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "requires": { - "lower-case": "1.1.4" - } - }, - "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "3.0.0", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.2", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.11.1", - "vm-browserify": "0.0.4" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" }, "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "yallist": "^4.0.0" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true } } }, @@ -9354,20 +14753,119 @@ "semver": "5.6.0" } }, - "node.extend": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz", - "integrity": "sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==", + "node-sass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz", + "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==", "requires": { - "has": "1.0.3", - "is": "3.3.0" + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^7.1.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" } }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "requires": { "hosted-git-info": "2.7.1", "resolve": "1.10.0", @@ -9378,20 +14876,17 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, "normalize-url": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, "requires": { "object-assign": "4.1.1", "prepend-http": "1.0.4", @@ -9399,3121 +14894,25 @@ "sort-keys": "1.1.2" } }, - "npm": { - "version": "6.14.6", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.6.tgz", - "integrity": "sha512-axnz6iHFK6WPE0js/+mRp+4IOwpHn5tJEw5KB6FiCU764zmffrhsYHbSHi2kKqNkRBt53XasXjngZfBD3FQzrQ==", - "requires": { - "JSONStream": "^1.3.5", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "aproba": "^2.0.0", - "archy": "~1.0.0", - "bin-links": "^1.1.7", - "bluebird": "^3.5.5", - "byte-size": "^5.0.1", - "cacache": "^12.0.3", - "call-limit": "^1.1.1", - "chownr": "^1.1.4", - "ci-info": "^2.0.0", - "cli-columns": "^3.1.2", - "cli-table3": "^0.5.1", - "cmd-shim": "^3.0.3", - "columnify": "~1.5.4", - "config-chain": "^1.1.12", - "debuglog": "*", - "detect-indent": "~5.0.0", - "detect-newline": "^2.1.0", - "dezalgo": "~1.0.3", - "editor": "~1.0.0", - "figgy-pudding": "^3.5.1", - "find-npm-prefix": "^1.0.2", - "fs-vacuum": "~1.2.10", - "fs-write-stream-atomic": "~1.0.10", - "gentle-fs": "^2.3.0", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", - "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.8", - "iferr": "^1.0.2", - "imurmurhash": "*", - "infer-owner": "^1.0.4", - "inflight": "~1.0.6", - "inherits": "^2.0.4", - "ini": "^1.3.5", - "init-package-json": "^1.10.3", - "is-cidr": "^3.0.0", - "json-parse-better-errors": "^1.0.2", - "lazy-property": "~1.0.0", - "libcipm": "^4.0.7", - "libnpm": "^3.0.1", - "libnpmaccess": "^3.0.2", - "libnpmhook": "^5.0.3", - "libnpmorg": "^1.0.1", - "libnpmsearch": "^2.0.2", - "libnpmteam": "^1.0.2", - "libnpx": "^10.2.2", - "lock-verify": "^2.1.0", - "lockfile": "^1.0.4", - "lodash._baseindexof": "*", - "lodash._baseuniq": "~4.6.0", - "lodash._bindcallback": "*", - "lodash._cacheindexof": "*", - "lodash._createcache": "*", - "lodash._getnative": "*", - "lodash.clonedeep": "~4.5.0", - "lodash.restparam": "*", - "lodash.union": "~4.6.0", - "lodash.uniq": "~4.5.0", - "lodash.without": "~4.4.0", - "lru-cache": "^5.1.1", - "meant": "~1.0.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.5", - "move-concurrently": "^1.0.1", - "node-gyp": "^5.1.0", - "nopt": "^4.0.3", - "normalize-package-data": "^2.5.0", - "npm-audit-report": "^1.3.2", - "npm-cache-filename": "~1.0.2", - "npm-install-checks": "^3.0.2", - "npm-lifecycle": "^3.1.4", - "npm-package-arg": "^6.1.1", - "npm-packlist": "^1.4.8", - "npm-pick-manifest": "^3.0.2", - "npm-profile": "^4.0.4", - "npm-registry-fetch": "^4.0.5", - "npm-user-validate": "~1.0.0", - "npmlog": "~4.1.2", - "once": "~1.4.0", - "opener": "^1.5.1", - "osenv": "^0.1.5", - "pacote": "^9.5.12", - "path-is-inside": "~1.0.2", - "promise-inflight": "~1.0.1", - "qrcode-terminal": "^0.12.0", - "query-string": "^6.8.2", - "qw": "~1.0.1", - "read": "~1.0.7", - "read-cmd-shim": "^1.0.5", - "read-installed": "~4.0.3", - "read-package-json": "^2.1.1", - "read-package-tree": "^5.3.1", - "readable-stream": "^3.6.0", - "readdir-scoped-modules": "^1.1.0", - "request": "^2.88.0", - "retry": "^0.12.0", - "rimraf": "^2.7.1", - "safe-buffer": "^5.1.2", - "semver": "^5.7.1", - "sha": "^3.0.0", - "slide": "~1.1.6", - "sorted-object": "~2.0.1", - "sorted-union-stream": "~2.1.3", - "ssri": "^6.0.1", - "stringify-package": "^1.0.1", - "tar": "^4.4.13", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "uid-number": "0.0.6", - "umask": "~1.1.0", - "unique-filename": "^1.1.1", - "unpipe": "~1.0.0", - "update-notifier": "^2.5.0", - "uuid": "^3.3.3", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "~3.0.0", - "which": "^1.3.1", - "worker-farm": "^1.7.0", - "write-file-atomic": "^2.4.3" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.5", - "bundled": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "agent-base": { - "version": "4.3.0", - "bundled": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "agentkeepalive": { - "version": "3.5.2", - "bundled": true, - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "ajv": { - "version": "5.5.2", - "bundled": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-align": { - "version": "2.0.0", - "bundled": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true - }, - "ansistyles": { - "version": "0.1.3", - "bundled": true - }, - "aproba": { - "version": "2.0.0", - "bundled": true - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "asap": { - "version": "2.0.6", - "bundled": true - }, - "asn1": { - "version": "0.2.4", - "bundled": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "bundled": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true - }, - "aws-sign2": { - "version": "0.7.0", - "bundled": true - }, - "aws4": { - "version": "1.8.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-links": { - "version": "1.1.7", - "bundled": true, - "requires": { - "bluebird": "^3.5.3", - "cmd-shim": "^3.0.0", - "gentle-fs": "^2.3.0", - "graceful-fs": "^4.1.15", - "npm-normalize-package-bin": "^1.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "bluebird": { - "version": "3.5.5", - "bundled": true - }, - "boxen": { - "version": "1.3.0", - "bundled": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.0.0", - "bundled": true - }, - "builtins": { - "version": "1.0.3", - "bundled": true - }, - "byline": { - "version": "5.0.0", - "bundled": true - }, - "byte-size": { - "version": "5.0.1", - "bundled": true - }, - "cacache": { - "version": "12.0.3", - "bundled": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "call-limit": { - "version": "1.1.1", - "bundled": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true - }, - "capture-stack-trace": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true - }, - "chalk": { - "version": "2.4.1", - "bundled": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true - }, - "ci-info": { - "version": "2.0.0", - "bundled": true - }, - "cidr-regex": { - "version": "2.0.10", - "bundled": true, - "requires": { - "ip-regex": "^2.1.0" - } - }, - "cli-boxes": { - "version": "1.0.0", - "bundled": true - }, - "cli-columns": { - "version": "3.1.2", - "bundled": true, - "requires": { - "string-width": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "cli-table3": { - "version": "0.5.1", - "bundled": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "bundled": true - }, - "cmd-shim": { - "version": "3.0.3", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "~0.5.0" - } - }, - "co": { - "version": "4.6.0", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "color-convert": { - "version": "1.9.1", - "bundled": true, - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true - }, - "colors": { - "version": "1.3.3", - "bundled": true, - "optional": true - }, - "columnify": { - "version": "1.5.4", - "bundled": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.6", - "bundled": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "concat-stream": { - "version": "1.6.2", - "bundled": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.12", - "bundled": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "3.1.2", - "bundled": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "copy-concurrently": { - "version": "1.0.5", - "bundled": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "create-error-class": { - "version": "3.0.2", - "bundled": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "bundled": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "bundled": true - } - } - }, - "crypto-random-string": { - "version": "1.0.0", - "bundled": true - }, - "cyclist": { - "version": "0.2.2", - "bundled": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.1.0", - "bundled": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "bundled": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true - }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "bundled": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "detect-indent": { - "version": "5.0.0", - "bundled": true - }, - "detect-newline": { - "version": "2.1.0", - "bundled": true - }, - "dezalgo": { - "version": "1.0.3", - "bundled": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "bundled": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "5.0.1", - "bundled": true - }, - "duplexer3": { - "version": "0.1.4", - "bundled": true - }, - "duplexify": { - "version": "3.6.0", - "bundled": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "editor": { - "version": "1.0.0", - "bundled": true - }, - "encoding": { - "version": "0.1.12", - "bundled": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "bundled": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "2.2.0", - "bundled": true - }, - "err-code": { - "version": "1.1.2", - "bundled": true - }, - "errno": { - "version": "0.1.7", - "bundled": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "bundled": true, - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "bundled": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "bundled": true - }, - "es6-promisify": { - "version": "5.0.0", - "bundled": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true - } - } - }, - "extend": { - "version": "3.0.2", - "bundled": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "bundled": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "bundled": true - }, - "figgy-pudding": { - "version": "3.5.1", - "bundled": true - }, - "find-npm-prefix": { - "version": "1.0.2", - "bundled": true - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true - }, - "form-data": { - "version": "2.3.2", - "bundled": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "from2": { - "version": "2.3.0", - "bundled": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "requires": { - "minipass": "^2.6.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "fs-vacuum": { - "version": "1.2.10", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "path-is-inside": "^1.0.1", - "rimraf": "^2.5.2" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "iferr": { - "version": "0.1.5", - "bundled": true - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "genfun": { - "version": "5.0.0", - "bundled": true - }, - "gentle-fs": { - "version": "2.3.0", - "bundled": true, - "requires": { - "aproba": "^1.1.2", - "chownr": "^1.1.2", - "cmd-shim": "^3.0.3", - "fs-vacuum": "^1.2.10", - "graceful-fs": "^4.1.11", - "iferr": "^0.1.5", - "infer-owner": "^1.0.4", - "mkdirp": "^0.5.1", - "path-is-inside": "^1.0.2", - "read-cmd-shim": "^1.0.1", - "slide": "^1.1.6" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "iferr": { - "version": "0.1.5", - "bundled": true - } - } - }, - "get-caller-file": { - "version": "1.0.3", - "bundled": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "bundled": true, - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "bundled": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "bundled": true - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "bundled": true - }, - "har-schema": { - "version": "2.0.0", - "bundled": true - }, - "har-validator": { - "version": "5.1.0", - "bundled": true, - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "bundled": true - }, - "has-symbols": { - "version": "1.0.0", - "bundled": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "hosted-git-info": { - "version": "2.8.8", - "bundled": true - }, - "http-cache-semantics": { - "version": "3.8.1", - "bundled": true - }, - "http-proxy-agent": { - "version": "2.1.0", - "bundled": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "http-signature": { - "version": "1.2.0", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "bundled": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "bundled": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "iferr": { - "version": "1.0.2", - "bundled": true - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-lazy": { - "version": "2.1.0", - "bundled": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true - }, - "init-package-json": { - "version": "1.10.3", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true - }, - "ip": { - "version": "1.1.5", - "bundled": true - }, - "ip-regex": { - "version": "2.1.0", - "bundled": true - }, - "is-callable": { - "version": "1.1.4", - "bundled": true - }, - "is-ci": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ci-info": "^1.5.0" - }, - "dependencies": { - "ci-info": { - "version": "1.6.0", - "bundled": true - } - } - }, - "is-cidr": { - "version": "3.0.0", - "bundled": true, - "requires": { - "cidr-regex": "^2.0.10" - } - }, - "is-date-object": { - "version": "1.0.1", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "bundled": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "bundled": true - }, - "is-obj": { - "version": "1.0.1", - "bundled": true - }, - "is-path-inside": { - "version": "1.0.1", - "bundled": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "bundled": true - }, - "is-regex": { - "version": "1.0.4", - "bundled": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "bundled": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true - }, - "is-symbol": { - "version": "1.0.2", - "bundled": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "bundled": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "bundled": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true - }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "latest-version": { - "version": "3.1.0", - "bundled": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazy-property": { - "version": "1.0.0", - "bundled": true - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "libcipm": { - "version": "4.0.7", - "bundled": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.5.1", - "find-npm-prefix": "^1.0.2", - "graceful-fs": "^4.1.11", - "ini": "^1.3.5", - "lock-verify": "^2.0.2", - "mkdirp": "^0.5.1", - "npm-lifecycle": "^3.0.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "pacote": "^9.1.0", - "read-package-json": "^2.0.13", - "rimraf": "^2.6.2", - "worker-farm": "^1.6.0" - } - }, - "libnpm": { - "version": "3.0.1", - "bundled": true, - "requires": { - "bin-links": "^1.1.2", - "bluebird": "^3.5.3", - "find-npm-prefix": "^1.0.2", - "libnpmaccess": "^3.0.2", - "libnpmconfig": "^1.2.1", - "libnpmhook": "^5.0.3", - "libnpmorg": "^1.0.1", - "libnpmpublish": "^1.1.2", - "libnpmsearch": "^2.0.2", - "libnpmteam": "^1.0.2", - "lock-verify": "^2.0.2", - "npm-lifecycle": "^3.0.0", - "npm-logical-tree": "^1.2.1", - "npm-package-arg": "^6.1.0", - "npm-profile": "^4.0.2", - "npm-registry-fetch": "^4.0.0", - "npmlog": "^4.1.2", - "pacote": "^9.5.3", - "read-package-json": "^2.0.13", - "stringify-package": "^1.0.0" - } - }, - "libnpmaccess": { - "version": "3.0.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmconfig": { - "version": "1.2.1", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "bundled": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "bundled": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "bundled": true - } - } - }, - "libnpmhook": { - "version": "5.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmorg": { - "version": "1.0.1", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmpublish": { - "version": "1.1.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "lodash.clonedeep": "^4.5.0", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^4.0.0", - "semver": "^5.5.1", - "ssri": "^6.0.1" - } - }, - "libnpmsearch": { - "version": "2.0.2", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpmteam": { - "version": "1.0.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.4.1", - "get-stream": "^4.0.0", - "npm-registry-fetch": "^4.0.0" - } - }, - "libnpx": { - "version": "10.2.2", - "bundled": true, - "requires": { - "dotenv": "^5.0.1", - "npm-package-arg": "^6.0.0", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.0", - "update-notifier": "^2.3.0", - "which": "^1.3.0", - "y18n": "^4.0.0", - "yargs": "^11.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lock-verify": { - "version": "2.1.0", - "bundled": true, - "requires": { - "npm-package-arg": "^6.1.0", - "semver": "^5.4.1" - } - }, - "lockfile": { - "version": "1.0.4", - "bundled": true, - "requires": { - "signal-exit": "^3.0.2" - } - }, - "lodash._baseindexof": { - "version": "3.1.0", - "bundled": true - }, - "lodash._baseuniq": { - "version": "4.6.0", - "bundled": true, - "requires": { - "lodash._createset": "~4.0.0", - "lodash._root": "~3.0.0" - } - }, - "lodash._bindcallback": { - "version": "3.0.1", - "bundled": true - }, - "lodash._cacheindexof": { - "version": "3.0.2", - "bundled": true - }, - "lodash._createcache": { - "version": "3.1.2", - "bundled": true, - "requires": { - "lodash._getnative": "^3.0.0" - } - }, - "lodash._createset": { - "version": "4.0.3", - "bundled": true - }, - "lodash._getnative": { - "version": "3.9.1", - "bundled": true - }, - "lodash._root": { - "version": "3.0.1", - "bundled": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "bundled": true - }, - "lodash.restparam": { - "version": "3.6.1", - "bundled": true - }, - "lodash.union": { - "version": "4.6.0", - "bundled": true - }, - "lodash.uniq": { - "version": "4.5.0", - "bundled": true - }, - "lodash.without": { - "version": "4.4.0", - "bundled": true - }, - "lowercase-keys": { - "version": "1.0.1", - "bundled": true - }, - "lru-cache": { - "version": "5.1.1", - "bundled": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "1.3.0", - "bundled": true, - "requires": { - "pify": "^3.0.0" - } - }, - "make-fetch-happen": { - "version": "5.0.2", - "bundled": true, - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "meant": { - "version": "1.0.1", - "bundled": true - }, - "mem": { - "version": "4.3.0", - "bundled": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "bundled": true - } - } - }, - "mime-db": { - "version": "1.35.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.19", - "bundled": true, - "requires": { - "mime-db": "~1.35.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "mississippi": { - "version": "3.0.0", - "bundled": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "bundled": true, - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "bundled": true - } - } - }, - "move-concurrently": { - "version": "1.0.1", - "bundled": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - } - } - }, - "ms": { - "version": "2.1.1", - "bundled": true - }, - "mute-stream": { - "version": "0.0.7", - "bundled": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true - }, - "node-fetch-npm": { - "version": "2.0.2", - "bundled": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-gyp": { - "version": "5.1.0", - "bundled": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "bundled": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "bundled": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "npm-audit-report": { - "version": "1.3.2", - "bundled": true, - "requires": { - "cli-table3": "^0.5.0", - "console-control-strings": "^1.1.0" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-cache-filename": { - "version": "1.0.2", - "bundled": true - }, - "npm-install-checks": { - "version": "3.0.2", - "bundled": true, - "requires": { - "semver": "^2.3.0 || 3.x || 4 || 5" - } - }, - "npm-lifecycle": { - "version": "3.1.4", - "bundled": true, - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "npm-logical-tree": { - "version": "1.2.1", - "bundled": true - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true - }, - "npm-package-arg": { - "version": "6.1.1", - "bundled": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "npm-profile": { - "version": "4.0.4", - "bundled": true, - "requires": { - "aproba": "^1.1.2 || 2", - "figgy-pudding": "^3.4.1", - "npm-registry-fetch": "^4.0.0" - } - }, - "npm-registry-fetch": { - "version": "4.0.5", - "bundled": true, - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "bundled": true - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.0", - "bundled": true - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.9.0", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "object-keys": { - "version": "1.0.12", - "bundled": true - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "bundled": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.1", - "bundled": true - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true - }, - "p-is-promise": { - "version": "2.1.0", - "bundled": true - }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true - }, - "package-json": { - "version": "4.0.1", - "bundled": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "pacote": { - "version": "9.5.12", - "bundled": true, - "requires": { - "bluebird": "^3.5.3", - "cacache": "^12.0.2", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-normalize-package-bin": "^1.0.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^3.0.0", - "npm-registry-fetch": "^4.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "parallel-transform": { - "version": "1.1.0", - "bundled": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "path-exists": { - "version": "3.0.0", - "bundled": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "path-is-inside": { - "version": "1.0.2", - "bundled": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true - }, - "path-parse": { - "version": "1.0.6", - "bundled": true - }, - "performance-now": { - "version": "2.1.0", - "bundled": true - }, - "pify": { - "version": "3.0.0", - "bundled": true - }, - "prepend-http": { - "version": "1.0.4", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true - }, - "promise-retry": { - "version": "1.1.1", - "bundled": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - }, - "dependencies": { - "retry": { - "version": "0.10.1", - "bundled": true - } - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "bundled": true - }, - "protoduck": { - "version": "5.0.1", - "bundled": true, - "requires": { - "genfun": "^5.0.0" - } - }, - "prr": { - "version": "1.0.1", - "bundled": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true - }, - "psl": { - "version": "1.1.29", - "bundled": true - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "bundled": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "bundled": true - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "query-string": { - "version": "6.8.2", - "bundled": true, - "requires": { - "decode-uri-component": "^0.2.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "qw": { - "version": "1.0.1", - "bundled": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "bundled": true - } - } - }, - "read": { - "version": "1.0.7", - "bundled": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "1.0.5", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-installed": { - "version": "4.0.3", - "bundled": true, - "requires": { - "debuglog": "^1.0.1", - "graceful-fs": "^4.1.2", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "slide": "~1.1.3", - "util-extend": "^1.0.1" - } - }, - "read-package-json": { - "version": "2.1.1", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.3.1", - "bundled": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "bundled": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "bundled": true, - "requires": { - "rc": "^1.0.1" - } - }, - "request": { - "version": "2.88.0", - "bundled": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true - }, - "resolve-from": { - "version": "4.0.0", - "bundled": true - }, - "retry": { - "version": "0.12.0", - "bundled": true - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-queue": { - "version": "1.0.3", - "bundled": true, - "requires": { - "aproba": "^1.1.1" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "semver": { - "version": "5.7.1", - "bundled": true - }, - "semver-diff": { - "version": "2.1.0", - "bundled": true, - "requires": { - "semver": "^5.0.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "sha": { - "version": "3.0.0", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "slide": { - "version": "1.1.6", - "bundled": true - }, - "smart-buffer": { - "version": "4.1.0", - "bundled": true - }, - "socks": { - "version": "2.3.3", - "bundled": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "bundled": true, - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "bundled": true, - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "sorted-object": { - "version": "2.0.1", - "bundled": true - }, - "sorted-union-stream": { - "version": "2.1.3", - "bundled": true, - "requires": { - "from2": "^1.3.0", - "stream-iterate": "^1.1.0" - }, - "dependencies": { - "from2": { - "version": "1.3.0", - "bundled": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~1.1.10" - } - }, - "isarray": { - "version": "0.0.1", - "bundled": true - }, - "readable-stream": { - "version": "1.1.14", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "bundled": true - } - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "bundled": true - }, - "split-on-first": { - "version": "1.1.0", - "bundled": true - }, - "sshpk": { - "version": "1.14.2", - "bundled": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "bundled": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stream-each": { - "version": "1.2.2", - "bundled": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-iterate": { - "version": "1.2.0", - "bundled": true, - "requires": { - "readable-stream": "^2.1.5", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-shift": { - "version": "1.0.0", - "bundled": true - }, - "strict-uri-encode": { - "version": "2.0.0", - "bundled": true - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "bundled": true - } - } - }, - "stringify-package": { - "version": "1.0.1", - "bundled": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "supports-color": { - "version": "5.4.0", - "bundled": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "term-size": { - "version": "1.2.0", - "bundled": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true - }, - "through": { - "version": "2.3.8", - "bundled": true - }, - "through2": { - "version": "2.0.3", - "bundled": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "timed-out": { - "version": "4.0.1", - "bundled": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true - }, - "tough-cookie": { - "version": "2.4.3", - "bundled": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "typedarray": { - "version": "0.0.6", - "bundled": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true - }, - "umask": { - "version": "1.1.0", - "bundled": true - }, - "unique-filename": { - "version": "1.1.1", - "bundled": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "bundled": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "bundled": true - }, - "unzip-response": { - "version": "2.0.1", - "bundled": true - }, - "update-notifier": { - "version": "2.5.0", - "bundled": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "bundled": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "util-extend": { - "version": "1.0.3", - "bundled": true - }, - "util-promisify": { - "version": "2.1.0", - "bundled": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "bundled": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "bundled": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "requires": { - "string-width": "^1.0.2" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "2.0.1", - "bundled": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "bundled": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "write-file-atomic": { - "version": "2.4.3", - "bundled": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "bundled": true - }, - "xtend": { - "version": "4.0.1", - "bundled": true - }, - "y18n": { - "version": "4.0.0", - "bundled": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true - }, - "yargs": { - "version": "11.1.1", - "bundled": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.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": "^9.0.2" - }, - "dependencies": { - "y18n": { - "version": "3.2.1", - "bundled": true - } - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, "requires": { "path-key": "2.0.1" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -12525,14 +14924,17 @@ "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" }, "oauth-sign": { "version": "0.9.0", @@ -12548,7 +14950,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "requires": { "copy-descriptor": "0.1.1", "define-property": "0.2.5", @@ -12559,7 +14960,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "0.1.6" } @@ -12567,10 +14967,14 @@ } }, "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz", + "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==" + }, + "object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==" }, "object-keys": { "version": "1.1.0", @@ -12581,7 +14985,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "requires": { "isobject": "3.0.1" } @@ -12590,7 +14993,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, "requires": { "define-properties": "1.1.3", "function-bind": "1.1.1", @@ -12598,16 +15000,85 @@ "object-keys": "1.1.0" } }, - "object.fromentries": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", - "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", - "dev": true, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1", - "has": "1.0.3" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "object.getownpropertydescriptors": { @@ -12623,7 +15094,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "requires": { "isobject": "3.0.1" } @@ -12642,8 +15112,7 @@ "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "on-finished": { "version": "2.3.0", @@ -12653,79 +15122,29 @@ "ee-first": "1.1.1" } }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "requires": { - "mimic-fn": "1.2.0" - } - }, - "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", - "dev": true, - "requires": { - "is-wsl": "1.1.0" - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", - "requires": { - "cssnano": "4.1.10", - "last-call-webpack-plugin": "3.0.0" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" }, "dependencies": { - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { - "cosmiconfig": "5.1.0", - "cssnano-preset-default": "4.0.7", - "is-resolvable": "1.1.0", - "postcss": "7.0.14" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "3.0.0" + "is-docker": "^2.0.0" } } } @@ -12734,7 +15153,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "0.1.3", "fast-levenshtein": "2.0.6", @@ -12747,8 +15165,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" } } }, @@ -12756,7 +15173,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, "requires": { "url-parse": "1.4.4" } @@ -12764,71 +15180,27 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "1.0.0", - "lcid": "2.0.0", - "mem": "4.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, "osrm-text-instructions": { "version": "0.11.5", "resolved": "https://registry.npmjs.org/osrm-text-instructions/-/osrm-text-instructions-0.11.5.tgz", "integrity": "sha512-EKCfIXhJHsYQLcuctymvSVH7ulRXx5sGb2MdZL3NzD6XhRVZRkqwRicd9/QI27A5oXW4ojOEJ81RGay7bO6dbA==" }, - "output-file-sync": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "is-plain-obj": "1.1.0", - "mkdirp": "0.5.1" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==" }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, "requires": { "p-try": "2.0.0" } @@ -12837,66 +15209,64 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, "requires": { "p-limit": "2.1.0" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "requires": { + "retry": "^0.12.0" + } }, "p-try": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "6.7.1", - "registry-auth-token": "3.4.0", - "registry-url": "3.1.0", - "semver": "5.6.0" - } + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" }, "pako": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", - "dev": true + "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" }, "parallel-transform": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, "requires": { "cyclist": "0.2.2", "inherits": "2.0.3", "readable-stream": "2.3.6" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { - "no-case": "2.3.2" + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + } } }, "parse-asn1": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", - "dev": true, "requires": { "asn1.js": "4.10.1", "browserify-aes": "1.2.0", @@ -12906,82 +15276,71 @@ "safe-buffer": "5.1.2" } }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", - "dev": true - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", - "dev": true - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dev": true, - "requires": { - "xml-parse-from-string": "1.0.1", - "xml2js": "0.4.22" - } - }, - "parse-headers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", - "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", - "dev": true, - "requires": { - "for-each": "0.3.3", - "string.prototype.trim": "1.2.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "1.3.2" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", @@ -12991,32 +15350,27 @@ "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, "requires": { "pify": "2.3.0" }, @@ -13024,8 +15378,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, @@ -13033,7 +15386,6 @@ "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, "requires": { "create-hash": "1.2.0", "create-hmac": "1.1.7", @@ -13047,592 +15399,1031 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "dev": true, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "requires": { - "pngjs": "3.4.0" + "node-modules-regexp": "^1.0.0" } }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", "requires": { - "find-up": "2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.3.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.3.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - }, - "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } + "ts-pnp": "^1.1.6" } }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, + "postcss-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", "requires": { - "chalk": "1.1.3", - "js-base64": "2.5.1", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "postcss": "^7.0.2", + "postcss-selector-parser": "^6.0.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "postcss-selector-parser": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", "requires": { - "ansi-regex": "2.1.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" } } } }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true, + "postcss-browser-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", + "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^7" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", "requires": { - "postcss": "5.2.18" + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", "requires": { - "postcss": "5.2.18" + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", "requires": { - "postcss": "5.2.18" + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", "requires": { - "postcss": "5.2.18" + "postcss": "^7.0.14" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true, + "postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", - "dev": true, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", "requires": { - "postcss": "5.2.18" + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-merge-longhand": { + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "requires": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-env-function": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true, + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", "requires": { - "postcss": "5.2.18" + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dev": true, + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.2" + "postcss": "^7.0.26" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-font-variant": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", + "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-initial": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", + "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", + "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", + "requires": { + "@csstools/normalize.css": "^10.1.0", + "browserslist": "^4.6.2", + "postcss": "^7.0.17", + "postcss-browser-comments": "^3.0.0", + "sanitize.css": "^10.0.0" }, "dependencies": { "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", + "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", "requires": { - "caniuse-db": "1.0.30000936", - "electron-to-chromium": "1.3.113" + "caniuse-lite": "^1.0.30001208", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.712", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", - "dev": true - }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - } - }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" - } - }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "dev": true, - "requires": { - "postcss": "6.0.23" - }, - "dependencies": { + }, + "caniuse-lite": { + "version": "1.0.30001214", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", + "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==" + }, + "electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.1", - "postcss": "6.0.23" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.1", - "postcss": "6.0.23" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true, - "requires": { - "postcss": "5.2.18" - } - }, "postcss-normalize-display-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", @@ -13845,18 +16636,6 @@ } } }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true, - "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" - } - }, "postcss-normalize-whitespace": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", @@ -13891,78 +16670,389 @@ } } }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", "requires": { - "postcss": "5.2.18" + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true, + "postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1" + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + }, + "dependencies": { + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "browserslist": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", + "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", + "requires": { + "caniuse-lite": "^1.0.30001208", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.712", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "caniuse-lite": { + "version": "1.0.30001214", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", + "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==" + }, + "electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.1", - "svgo": "0.7.2" + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true, + "postcss-safe-parser": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", + "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^8.1.0" + }, + "dependencies": { + "postcss": { + "version": "8.2.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", + "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.22", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-selector-not": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", + "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-value-parser": { @@ -13970,15 +17060,14 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true, + "postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "requires": { - "has": "1.0.3", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "prefix-style": { @@ -13989,68 +17078,89 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", - "dev": true + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, "pretty-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, "requires": { "renderkid": "2.0.2", "utila": "0.4.0" } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "optional": true, - "requires": { - "asap": "2.0.6" - } + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prompts": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } }, "prop-types": { "version": "15.7.1", @@ -14061,27 +17171,11 @@ "react-is": "16.8.1" } }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" - } - }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", @@ -14096,7 +17190,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", @@ -14110,7 +17203,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "1.4.1", "once": "1.4.0" @@ -14120,18 +17212,21 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, "requires": { "duplexify": "3.7.1", "inherits": "2.0.3", "pump": "2.0.1" }, "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, "requires": { "end-of-stream": "1.4.1", "once": "1.4.0" @@ -14158,7 +17253,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, "requires": { "object-assign": "4.1.1", "strict-uri-encode": "1.1.0" @@ -14167,20 +17261,22 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "querystringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", - "dev": true + "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "raf": { "version": "3.4.1", @@ -14200,26 +17296,10 @@ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" }, - "ramdasauce": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ramdasauce/-/ramdasauce-2.1.3.tgz", - "integrity": "sha512-Ml3CPim4SKwmg5g9UI77lnRSeKr/kQw7YhQ6rfdMcBYy6DMlwmkEwQqjygJ3OhxPR+NfFfpjKl3Tf8GXckaqqg==", - "requires": { - "ramda": "0.24.1" - }, - "dependencies": { - "ramda": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", - "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=" - } - } - }, "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, "requires": { "safe-buffer": "5.1.2" } @@ -14228,182 +17308,457 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, "requires": { "randombytes": "2.0.6", "safe-buffer": "5.1.2" } }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "rc-align": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.3.tgz", - "integrity": "sha512-h5KgyB5IXYR7iKpYFcMr54cuQ2eozPCZ11kbXPG5+6CWvmyJ+c0R/yjndVndiNk2G3MKcTMbJNdDv5DIckLAxQ==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.9.tgz", + "integrity": "sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw==", "requires": { - "babel-runtime": "6.26.0", - "dom-align": "1.8.0", - "prop-types": "15.7.1", - "rc-util": "4.6.0" - } - }, - "rc-animate": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.6.0.tgz", - "integrity": "sha512-JXDycchgbOI+7T/VKmFWnAIn042LLScK1fNkmNunb0jz5q5aPGCAybx2bTo7X5t31Jkj9OsxKNb/vZPDPWufCg==", - "requires": { - "babel-runtime": "6.26.0", - "classnames": "2.2.6", - "css-animation": "1.5.0", - "prop-types": "15.7.1", - "raf": "3.4.1", - "react-lifecycles-compat": "3.0.4" - } - }, - "rc-slider": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.5.0.tgz", - "integrity": "sha512-dw1kA7Dr6GOmPZFsy+yMxVyqmckeUtYVdfNOdQcI9O8mXkoCwlxXolMK9bW/TTlXCc8ztaXkJkyTVXl/Gkg5Tw==", - "requires": { - "babel-runtime": "6.26.0", - "classnames": "2.2.6", - "prop-types": "15.7.1", - "rc-tooltip": "3.7.3", - "rc-util": "4.6.0", - "shallowequal": "1.1.0", - "warning": "3.0.0" - } - }, - "rc-tooltip": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-3.7.3.tgz", - "integrity": "sha512-dE2ibukxxkrde7wH9W8ozHKUO4aQnPZ6qBHtrTH9LoO836PjDdiaWO73fgPB05VfJs9FbZdmGPVEbXCeOP99Ww==", - "requires": { - "babel-runtime": "6.26.0", - "prop-types": "15.7.1", - "rc-trigger": "2.6.2" - } - }, - "rc-trigger": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.6.2.tgz", - "integrity": "sha512-op4xCu95/gdHVaysyxxiYxbY+Z+UcIBSUY9nQfLqm1FlitdtnAN+owD5iMPfnnsRXntgcQ5+RdYKNUFQT5DjzA==", - "requires": { - "babel-runtime": "6.26.0", - "classnames": "2.2.6", - "prop-types": "15.7.1", - "rc-align": "2.4.3", - "rc-animate": "2.6.0", - "rc-util": "4.6.0" - } - }, - "rc-util": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.6.0.tgz", - "integrity": "sha512-rbgrzm1/i8mgfwOI4t1CwWK7wGe+OwX+dNa7PVMgxZYPBADGh86eD4OcJO1UKGeajIMDUUKMluaZxvgraQIOmw==", - "requires": { - "add-dom-event-listener": "1.1.0", - "babel-runtime": "6.26.0", - "prop-types": "15.7.1", - "shallowequal": "0.2.2" + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.3.0", + "resize-observer-polyfill": "^1.5.1" }, "dependencies": { - "shallowequal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz", - "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=", + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", "requires": { - "lodash.keys": "3.1.2" + "regenerator-runtime": "^0.13.4" } } } }, - "react": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.1.tgz", - "integrity": "sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ==", + "rc-motion": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.4.1.tgz", + "integrity": "sha512-TWLvymfMu8SngPx5MDH8dQ0D2RYbluNTfam4hY/dNNx9RQ3WtGuZ/GXHi2ymLMzH+UNd6EEFYkOuR5JTTtm8Xg==", "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.7.1", - "scheduler": "0.13.1" + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.2.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "rc-slider": { + "version": "9.7.2", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.7.2.tgz", + "integrity": "sha512-mVaLRpDo6otasBs6yVnG02ykI3K6hIrLTNfT5eyaqduFv95UODI9PDS6fWuVVehVpdS4ENgOSwsTjrPVun+k9g==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-tooltip": "^5.0.1", + "rc-util": "^5.0.0", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "rc-tooltip": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.1.0.tgz", + "integrity": "sha512-pFqD1JZwNIpbdcefB7k5xREoHAWM/k3yQwYF0iminbmDXERgq4rvBfUwIvlCqqZSM7HDr9hYeYr6ZsVNaKtvCQ==", + "requires": { + "@babel/runtime": "^7.11.2", + "rc-trigger": "^5.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "rc-trigger": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.2.5.tgz", + "integrity": "sha512-RlF5RpWqK+JeiFeQVOzwjLFzpNe2FowoXc/42azz+20wr/bYF1Q/MwprUK+3+vs/oFhLC0ht3/NlrslAo/OoWA==", + "requires": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.5.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "rc-util": { + "version": "5.9.8", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.9.8.tgz", + "integrity": "sha512-typLSHYGf5irvGLYQshs0Ra3aze086h0FhzsAkyirMunYZ7b3Te8gKa5PVaanoHaZa9sS6qx98BxgysoRP+6Tw==", + "requires": { + "@babel/runtime": "^7.12.5", + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-app-polyfill": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz", + "integrity": "sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA==", + "requires": { + "core-js": "^3.6.5", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "whatwg-fetch": "^3.4.1" + }, + "dependencies": { + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + } + } + }, + "react-dev-utils": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", + "requires": { + "@babel/code-frame": "7.10.4", + "address": "1.1.2", + "browserslist": "4.14.2", + "chalk": "2.4.2", + "cross-spawn": "7.0.3", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.1.0", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "4.1.6", + "global-modules": "2.0.0", + "globby": "11.0.1", + "gzip-size": "5.1.1", + "immer": "8.0.1", + "is-root": "2.1.0", + "loader-utils": "2.0.0", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "prompts": "2.4.0", + "react-error-overlay": "^6.0.9", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", + "requires": { + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + } + }, + "caniuse-lite": { + "version": "1.0.30001214", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", + "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } } }, "react-dom": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.1.tgz", - "integrity": "sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "prop-types": "15.7.1", - "scheduler": "0.13.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" } }, - "react-expandable-textarea": { - "version": "github:muerwre/react-expandable-textarea#0cbcbbd875439090a2d48e711da241f2a83dd6b2", - "from": "github:muerwre/react-expandable-textarea#0cbcbbd875439090a2d48e711da241f2a83dd6b2", - "requires": { - "classnames": "2.2.6" - } - }, - "react-hot-loader": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.6.5.tgz", - "integrity": "sha512-ZPAJEWVd8KDdm6dcK0iWrnJiGHruLrcbkIpqn/wQmNjnROpsm2nzrWh23Yh3I/XAjB+35pMa/ZgariwGqwFD9A==", - "requires": { - "fast-levenshtein": "2.0.6", - "global": "4.3.2", - "hoist-non-react-statics": "2.5.5", - "loader-utils": "1.2.3", - "lodash.merge": "4.6.2", - "prop-types": "15.7.1", - "react-lifecycles-compat": "3.0.4", - "shallowequal": "1.1.0", - "source-map": "0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } + "react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" }, "react-infinite-scroller": { "version": "1.2.4", @@ -14440,15 +17795,6 @@ } } }, - "react-rangeslider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/react-rangeslider/-/react-rangeslider-2.2.0.tgz", - "integrity": "sha512-5K7Woa+cyqZ5wiW5+KhqGV+3+FiFxGKQ9rUxTMh52sObXVYEeBbfxFrp1eBvS8mRIxnUbHz9ppnFP0LhwOyNeg==", - "requires": { - "classnames": "2.2.6", - "resize-observer-polyfill": "1.5.1" - } - }, "react-redux": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.1.tgz", @@ -14473,6 +17819,11 @@ } } }, + "react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==" + }, "react-router": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", @@ -14510,6 +17861,3512 @@ } } }, + "react-scripts": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.3.tgz", + "integrity": "sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A==", + "requires": { + "@babel/core": "7.12.3", + "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", + "@svgr/webpack": "5.5.0", + "@typescript-eslint/eslint-plugin": "^4.5.0", + "@typescript-eslint/parser": "^4.5.0", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.6.0", + "babel-loader": "8.1.0", + "babel-plugin-named-asset-import": "^0.3.7", + "babel-preset-react-app": "^10.0.0", + "bfj": "^7.0.2", + "camelcase": "^6.1.0", + "case-sensitive-paths-webpack-plugin": "2.3.0", + "css-loader": "4.3.0", + "dotenv": "8.2.0", + "dotenv-expand": "5.1.0", + "eslint": "^7.11.0", + "eslint-config-react-app": "^6.0.0", + "eslint-plugin-flowtype": "^5.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-testing-library": "^3.9.2", + "eslint-webpack-plugin": "^2.5.2", + "file-loader": "6.1.1", + "fs-extra": "^9.0.1", + "fsevents": "^2.1.3", + "html-webpack-plugin": "4.5.0", + "identity-obj-proxy": "3.0.0", + "jest": "26.6.0", + "jest-circus": "26.6.0", + "jest-resolve": "26.6.0", + "jest-watch-typeahead": "0.6.1", + "mini-css-extract-plugin": "0.11.3", + "optimize-css-assets-webpack-plugin": "5.0.4", + "pnp-webpack-plugin": "1.6.4", + "postcss-flexbugs-fixes": "4.2.1", + "postcss-loader": "3.0.0", + "postcss-normalize": "8.0.1", + "postcss-preset-env": "6.7.0", + "postcss-safe-parser": "5.0.2", + "prompts": "2.4.0", + "react-app-polyfill": "^2.0.0", + "react-dev-utils": "^11.0.3", + "react-refresh": "^0.8.3", + "resolve": "1.18.1", + "resolve-url-loader": "^3.1.2", + "sass-loader": "^10.0.5", + "semver": "7.3.2", + "style-loader": "1.3.0", + "terser-webpack-plugin": "4.2.3", + "ts-pnp": "1.2.0", + "url-loader": "4.1.1", + "webpack": "4.44.2", + "webpack-dev-server": "3.11.1", + "webpack-manifest-plugin": "2.2.0", + "workbox-webpack-plugin": "5.1.4" + }, + "dependencies": { + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "optional": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "cacache": { + "version": "15.0.6", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.6.tgz", + "integrity": "sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w==", + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "optional": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", + "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", + "requires": { + "camelcase": "^6.0.0", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^2.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.3", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.1", + "semver": "^7.3.2" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + } + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "eslint": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + }, + "globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", + "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", + "requires": { + "@babel/runtime": "^7.11.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^3.1.0", + "language-tags": "^1.0.5" + }, + "dependencies": { + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + } + } + }, + "eslint-plugin-react": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz", + "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==", + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.3", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.3", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.4" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + }, + "dependencies": { + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + }, + "html-webpack-plugin": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "requires": { + "postcss": "^7.0.14" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "optional": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "requires": { + "mime-db": "1.47.0" + } + }, + "mini-css-extract-plugin": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz", + "integrity": "sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA==", + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-selector-parser": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + } + } + }, + "react-refresh": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", + "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "requires": { + "minipass": "^3.1.1" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "table": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.3.2.tgz", + "integrity": "sha512-I9/Ca6Huf2oxFag7crD0DhA+arIdfLtWunSn0NIXSzjtUlDgIBGVZY7SsMkNPNT3Psd/z4gza0nuEpmra9eRbg==", + "requires": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "terser": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + } + } + }, + "webpack-dev-server": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz", + "integrity": "sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ==", + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-manifest-plugin": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", + "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", + "requires": { + "fs-extra": "^7.0.0", + "lodash": ">=3.5 <5", + "object.entries": "^1.1.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "react-scrollbar": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/react-scrollbar/-/react-scrollbar-0.5.4.tgz", @@ -14520,22 +21377,10 @@ "react-motion": "0.5.2" } }, - "reactrangeslider": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/reactrangeslider/-/reactrangeslider-3.0.6.tgz", - "integrity": "sha1-Xz4c7yT9MGUyLUwBoAEBmZEPNzc=" - }, - "read-chunk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", - "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", - "dev": true - }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, "requires": { "load-json-file": "2.0.0", "normalize-package-data": "2.5.0", @@ -14546,7 +21391,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, "requires": { "find-up": "2.1.0", "read-pkg": "2.0.0" @@ -14556,7 +21400,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, "requires": { "locate-path": "2.0.0" } @@ -14565,7 +21408,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, "requires": { "p-locate": "2.0.0", "path-exists": "3.0.0" @@ -14575,7 +21417,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, "requires": { "p-try": "1.0.0" } @@ -14584,7 +21425,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, "requires": { "p-limit": "1.3.0" } @@ -14592,8 +21432,7 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" } } }, @@ -14601,7 +21440,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -14610,65 +21448,43 @@ "safe-buffer": "5.1.2", "string_decoder": "1.1.1", "util-deprecate": "1.0.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, + "optional": true, "requires": { "graceful-fs": "4.1.15", "micromatch": "3.1.10", "readable-stream": "2.3.6" } }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, "requires": { "indent-string": "2.1.0", "strip-indent": "1.0.1" } }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } - }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", - "dev": true, - "requires": { - "balanced-match": "0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } - }, "redux": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", @@ -14691,184 +21507,53 @@ "@redux-saga/core": "1.1.3" } }, - "reduxsauce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduxsauce/-/reduxsauce-1.0.1.tgz", - "integrity": "sha512-Vd9z0LAmOicVFTdmjEu82XhNfrg0Z8C6yVI0rKold5uS63kPyYiGVrYMsflbVO232zBy/Y3FWcC+FZVk9wBkwA==", - "requires": { - "ramda": "0.24.1", - "ramdasauce": "2.1.3" - }, - "dependencies": { - "ramda": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz", - "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=" - } - } - }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", - "dev": true, - "requires": { - "regenerate": "1.4.0" - } + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", - "dev": true, - "requires": { - "private": "0.1.8" - } + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "3.0.2", "safe-regex": "1.1.0" } }, - "regexp-tree": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.1.tgz", - "integrity": "sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw==", - "dev": true, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "requires": { - "cli-table3": "0.5.1", - "colors": "1.3.3", - "yargs": "12.0.5" - }, - "dependencies": { - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" - } - } - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regenerate-unicode-properties": "7.0.0", - "regjsgen": "0.5.0", - "regjsparser": "0.6.0", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.0.2" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "1.2.8", - "safe-buffer": "5.1.2" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "1.2.8" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "renderkid": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", - "dev": true, "requires": { "css-select": "1.2.0", "dom-converter": "0.2.0", @@ -14880,14 +21565,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "2.1.1" } @@ -14897,20 +21580,17 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, "requires": { "is-finite": "1.0.2" } @@ -14949,47 +21629,38 @@ } } }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-package-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", - "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resize-observer-polyfill": { "version": "1.5.1", @@ -15000,7 +21671,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, "requires": { "path-parse": "1.0.6" } @@ -15009,7 +21679,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, "requires": { "resolve-from": "3.0.0" }, @@ -15017,20 +21686,14 @@ "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" } } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" - } + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "resolve-pathname": { "version": "2.2.0", @@ -15040,24 +21703,108 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, + "resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" }, "rgb-regex": { "version": "1.0.1", @@ -15070,56 +21817,185 @@ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" } }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, "requires": { "hash-base": "3.0.4", "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, + "rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", "requires": { - "is-promise": "2.1.0" + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" } }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, "requires": { "aproba": "1.2.0" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -15129,7 +22005,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "requires": { "ret": "0.1.15" } @@ -15139,115 +22014,164 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sanitize.css": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", + "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" + }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + } + }, + "sass-loader": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.1.tgz", + "integrity": "sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==", + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "scheduler": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.1.tgz", - "integrity": "sha512-VJKOkiKIN2/6NOoexuypwSrybx13MY7NSy9RNt8wPvZDMRT1CW6qlpF5jXRToXNHz3uWzbm2elNpZfXfGPqP9A==", + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "requires": { - "loose-envify": "1.4.0", - "object-assign": "4.1.1" + "xmlchars": "^2.2.0" } }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "requires": { - "ajv": "6.9.1", - "ajv-keywords": "3.4.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" }, "dependencies": { - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } } } }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", - "requires": { - "nan": "2.12.1" - } - }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", - "dev": true, - "requires": { - "node-forge": "0.7.5" - } + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "5.6.0" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", - "dev": true - }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, "requires": { "accepts": "1.3.5", "batch": "0.6.1", @@ -15258,35 +22182,15 @@ "parseurl": "1.3.2" } }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "serviceworker-cache-polyfill": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz", - "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=", - "dev": true - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, "requires": { "extend-shallow": "2.0.1", "is-extendable": "0.1.1", @@ -15298,7 +22202,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "0.1.1" } @@ -15308,8 +22211,7 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { "version": "1.1.0", @@ -15320,10 +22222,16 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "shallowequal": { @@ -15335,7 +22243,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "1.0.0" } @@ -15343,14 +22250,33 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "optional": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-swizzle": { "version": "0.2.2", @@ -15367,26 +22293,15 @@ } } }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - } + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "requires": { "base": "0.11.2", "debug": "2.6.9", @@ -15402,7 +22317,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "0.1.6" } @@ -15411,7 +22325,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "0.1.1" } @@ -15419,8 +22332,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -15428,7 +22340,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "requires": { "define-property": "1.0.0", "isobject": "3.0.1", @@ -15439,7 +22350,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "1.0.2" } @@ -15448,7 +22358,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -15457,7 +22366,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "6.0.2" } @@ -15466,7 +22374,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "1.0.0", "is-data-descriptor": "1.0.0", @@ -15476,8 +22383,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -15485,75 +22391,42 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "requires": { "kind-of": "3.2.2" } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" }, "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", - "dev": true, - "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } } } }, @@ -15561,7 +22434,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, "requires": { "is-plain-obj": "1.1.0" } @@ -15580,7 +22452,6 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, "requires": { "atob": "2.1.2", "decode-uri-component": "0.2.0", @@ -15593,7 +22464,6 @@ "version": "0.5.10", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", - "dev": true, "requires": { "buffer-from": "1.1.1", "source-map": "0.6.1" @@ -15602,14 +22472,17 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, "requires": { "spdx-expression-parse": "3.0.0", "spdx-license-ids": "3.0.3" @@ -15618,14 +22491,12 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "2.2.0", "spdx-license-ids": "3.0.3" @@ -15634,44 +22505,12 @@ "spdx-license-ids": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", - "dev": true - }, - "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", - "dev": true, - "requires": { - "debug": "4.1.1", - "handle-thing": "2.0.0", - "http-deceiver": "1.2.7", - "select-hose": "2.0.0", - "spdy-transport": "3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" }, "spdy-transport": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, "requires": { "debug": "4.1.1", "detect-node": "2.0.4", @@ -15685,7 +22524,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, "requires": { "ms": "2.1.1" } @@ -15693,18 +22531,23 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "readable-stream": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, "requires": { "inherits": "2.0.3", "string_decoder": "1.1.1", "util-deprecate": "1.0.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } } } @@ -15713,7 +22556,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "requires": { "extend-shallow": "3.0.2" } @@ -15739,25 +22581,35 @@ "tweetnacl": "0.14.5" } }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } + } + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "requires": { "define-property": "0.2.5", "object-copy": "0.1.0" @@ -15767,7 +22619,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "0.1.6" } @@ -15779,21 +22630,39 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.6" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, "requires": { "end-of-stream": "1.4.1", "stream-shift": "1.0.0" @@ -15803,83 +22672,193 @@ "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", "readable-stream": "2.3.6", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "stream-to": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz", - "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=", - "dev": true - }, - "stream-to-buffer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz", - "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", - "dev": true, - "requires": { - "stream-to": "0.2.2" - } + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", "strip-ansi": "4.0.0" } }, - "string.prototype.trim": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz", - "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==", - "dev": true, + "string.prototype.matchall": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "5.1.2" } }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "optional": true + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "3.0.0" } @@ -15887,40 +22866,35 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-comments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", + "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", + "requires": { + "babel-extract-comments": "^1.0.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0" + } }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, "requires": { "get-stdin": "4.0.1" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "style-loader": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", - "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", - "dev": true, - "requires": { - "loader-utils": "1.2.3", - "schema-utils": "0.4.7" - } - }, "stylehacks": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", @@ -15966,380 +22940,150 @@ } } }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "requires": { - "has-flag": "1.0.0" - } - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true, - "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - } - } - }, - "sw-precache": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.1.tgz", - "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==", - "dev": true, - "requires": { - "dom-urls": "1.1.0", - "es6-promise": "4.2.8", - "glob": "7.1.3", - "lodash.defaults": "4.2.0", - "lodash.template": "4.5.0", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "pretty-bytes": "4.0.2", - "sw-toolbox": "3.6.0", - "update-notifier": "2.5.0" - }, - "dependencies": { - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - } - } - }, - "sw-precache-webpack-plugin": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.5.tgz", - "integrity": "sha512-K6E52DbYyzGNXGyv2LhI2Duomr3t/2FFMmnGdHZ1Ruk3ulFHDMASJtg3WpA3CXlWODZx189tTaOIO5mWkSKyVg==", - "dev": true, - "requires": { - "del": "3.0.0", - "sw-precache": "5.2.1", - "uglify-es": "3.3.9" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "has-flag": "^4.0.0" } } } }, - "sw-toolbox": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz", - "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=", - "dev": true, - "requires": { - "path-to-regexp": "1.7.0", - "serviceworker-cache-polyfill": "4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.4.2", - "lodash": "4.17.15", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "tapable": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", - "dev": true + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==" }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "requires": { - "execa": "0.7.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.5", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", - "dev": true, - "requires": { - "commander": "2.17.1", - "source-map": "0.6.1", - "source-map-support": "0.5.10" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", - "dev": true, - "requires": { - "cacache": "11.3.2", - "find-cache-dir": "2.0.0", - "schema-utils": "1.0.0", - "serialize-javascript": "1.6.1", - "source-map": "0.6.1", - "terser": "3.16.1", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, - "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "dev": true, - "requires": { - "bluebird": "3.5.3", - "chownr": "1.1.1", - "figgy-pudding": "3.5.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "5.1.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "6.0.1", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - } - }, - "find-cache-dir": { + "chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", - "dev": true, - "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "3.0.0" - } + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "3.0.3" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "3.0.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "6.9.1", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "3.5.1" - } + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=" + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "throttle-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.1.0.tgz", - "integrity": "sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "requires": { "readable-stream": "2.3.6", "xtend": "4.0.1" @@ -16348,20 +23092,12 @@ "thunky": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", - "dev": true, "requires": { "setimmediate": "1.0.5" } @@ -16371,26 +23107,15 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, "to-camel-case": { "version": "1.0.0", @@ -16400,12 +23125,6 @@ "to-space-case": "1.0.0" } }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, "to-no-case": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", @@ -16415,7 +23134,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "requires": { "kind-of": "3.2.2" } @@ -16424,7 +23142,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "requires": { "define-property": "2.0.2", "extend-shallow": "3.0.2", @@ -16436,7 +23153,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "requires": { "is-number": "3.0.0", "repeat-string": "1.6.1" @@ -16450,11 +23166,10 @@ "to-no-case": "1.0.2" } }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, "tough-cookie": { "version": "2.4.3", @@ -16472,42 +23187,71 @@ } } }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "requires": { + "punycode": "^2.1.1" + } + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, - "ts-node": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", - "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", - "dev": true, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "requires": { - "arg": "4.1.0", - "diff": "3.5.0", - "make-error": "1.3.5", - "source-map-support": "0.5.10", - "yn": "3.0.0" + "glob": "^7.1.2" } }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + }, "ts-toolbelt": { "version": "4.14.6", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.14.6.tgz", "integrity": "sha512-SONcnRd93+LuYGfn/CZg5A5qhCODohZslAVZKHHu5bnwUxoXLqd2k2VIdwRUXYfKnY+UCeNbI2pTPz+Dno6Mpg==", "dev": true }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "requires": { + "tslib": "^1.8.1" + } }, "tt-react-custom-scrollbars": { "version": "4.2.1-tt2", @@ -16522,8 +23266,7 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tunnel-agent": { "version": "0.6.0", @@ -16542,41 +23285,42 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "1.1.2" } }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.21" - } + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } }, "typeface-pt-sans": { "version": "0.0.54", "resolved": "https://registry.npmjs.org/typeface-pt-sans/-/typeface-pt-sans-0.0.54.tgz", "integrity": "sha512-uvf3OIiTRXBly8iXD09iNZcLndJ89iGCyzWh4YzxdL+OMXPZxROupW8OR4JYo1RRfhzCdvebE6W/KrKDnAbdmw==" }, - "typesafe-actions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typesafe-actions/-/typesafe-actions-3.0.0.tgz", - "integrity": "sha512-NLpRc/FY+jPfWL0aUXQzjxPyF0Xug2om6akaoRLQ18KGwP2yYNBJu9vkv2q1q+Cx/+edy2Qf6O8xXnYY/xwz1A==" - }, "typescript": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", - "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", - "dev": true + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==" }, "typescript-compare": { "version": "0.0.2", @@ -16599,79 +23343,47 @@ "typescript-compare": "0.0.2" } }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", - "dev": true, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.6.1", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" }, "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" - } + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" } } }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" }, "unicode-match-property-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "1.0.4", "unicode-property-aliases-ecmascript": "1.0.4" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", - "dev": true - }, "unicode-property-aliases-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", - "dev": true + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, "requires": { "arr-union": "3.1.0", "get-value": "2.0.6", @@ -16693,7 +23405,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, "requires": { "unique-slug": "2.0.1" } @@ -16702,7 +23413,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", - "dev": true, "requires": { "imurmurhash": "0.1.4" } @@ -16711,7 +23421,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, "requires": { "crypto-random-string": "1.0.0" } @@ -16719,8 +23428,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -16736,7 +23444,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "requires": { "has-value": "0.3.1", "isobject": "3.0.1" @@ -16746,7 +23453,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "requires": { "get-value": "2.0.6", "has-values": "0.1.4", @@ -16757,7 +23463,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -16767,47 +23472,10 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" } } }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "1.3.0", - "chalk": "2.4.2", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.2.1", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -16816,23 +23484,15 @@ "punycode": "2.1.1" } }, - "urijs": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", - "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==", - "dev": true - }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -16841,8 +23501,63 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "requires": { + "mime-db": "1.47.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, @@ -16850,58 +23565,35 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", - "dev": true, "requires": { "querystringify": "2.1.0", "requires-port": "1.0.0" } }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "requires": { - "ip-regex": "1.0.3" - }, - "dependencies": { - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true - } - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -16915,31 +23607,39 @@ "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, - "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", - "dev": true + "v8-to-istanbul": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz", + "integrity": "sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "3.1.0", "spdx-expression-parse": "3.0.0" @@ -16953,8 +23653,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vendors": { "version": "1.0.2", @@ -16971,13 +23670,28 @@ "extsprintf": "1.3.0" } }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "requires": { - "indexof": "0.0.1" + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" } }, "warning": { @@ -16988,451 +23702,63 @@ "loose-envify": "1.4.0" } }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "optional": true, "requires": { - "chokidar": "2.1.1", - "graceful-fs": "4.1.15", - "neo-async": "2.6.0" + "chokidar": "^2.1.8" + }, + "dependencies": { + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "optional": true + } } }, "wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, "requires": { "minimalistic-assert": "1.0.1" } }, - "webpack": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.3.tgz", - "integrity": "sha512-xPJvFeB+8tUflXFq+OgdpiSnsCD5EANyv56co5q8q8+YtEasn5Sj3kzY44mta+csCIEB0vneSxnuaHkOL2h94A==", + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "6.1.0", - "acorn-dynamic-import": "4.0.0", - "ajv": "6.9.1", - "ajv-keywords": "3.4.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.4.0", - "loader-utils": "1.2.3", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.2.0", - "schema-utils": "1.0.0", - "tapable": "1.1.1", - "terser-webpack-plugin": "1.2.2", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" - }, - "dependencies": { - "acorn": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", - "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", - "dev": true - }, - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "6.9.1", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" - } - } - } - }, - "webpack-cli": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", - "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "2.0.0", - "global-modules": "1.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.5" - }, - "dependencies": { - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "2.4.0", - "range-parser": "1.2.0", - "webpack-log": "2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "uuid": "3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - } - } - }, - "webpack-dev-server": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", - "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.1.1", - "compression": "1.7.3", - "connect-history-api-fallback": "1.6.0", - "debug": "3.2.6", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "2.0.0", - "internal-ip": "3.0.1", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.4.0", - "portfinder": "1.0.20", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "semver": "5.6.0", - "serve-index": "1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "4.0.0", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", - "url": "0.11.0", - "webpack-dev-middleware": "3.4.0", - "webpack-log": "2.0.0", - "yargs": "12.0.2" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "6.9.1", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "uuid": "3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", - "dev": true, - "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "4.1.0" - } - } - } - }, - "webpack-git-hash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/webpack-git-hash/-/webpack-git-hash-1.0.2.tgz", - "integrity": "sha1-A/BmP9/JO8+uVaMz2uJ93n60tto=" - }, - "webpack-log": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", - "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "log-symbols": "2.2.0", - "loglevelnext": "1.0.5", - "uuid": "3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "webpack-manifest-plugin": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", - "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", - "dev": true, - "requires": { - "fs-extra": "7.0.1", - "lodash": "4.17.15", - "tapable": "1.1.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "webpack-pwa-manifest": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/webpack-pwa-manifest/-/webpack-pwa-manifest-4.0.0.tgz", - "integrity": "sha512-655TpvoOLGHI2hgx7AmmdgHLc+xDtAi6J5fz7bTnuhxWtEVH/NI2qGlDY40HErlblOV74VtVz5S/C0u7ZpPlvQ==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "jimp": "0.2.28", - "mime": "1.6.0" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - } + "lodash": "^4.17.15" } }, "webpack-sources": { @@ -17448,7 +23774,6 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, "requires": { "http-parser-js": "0.5.0", "websocket-extensions": "0.1.3" @@ -17457,143 +23782,997 @@ "websocket-extensions": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + } + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "requires": { - "string-width": "2.1.1" + "string-width": "^1.0.2 || 2" } }, - "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "dev": true, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "workbox-background-sync": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", + "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", "requires": { - "errno": "0.1.7" + "workbox-core": "^5.1.4" } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, + "workbox-broadcast-update": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", + "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "workbox-core": "^5.1.4" + } + }, + "workbox-build": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", + "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", + "requires": { + "@babel/core": "^7.8.4", + "@babel/preset-env": "^7.8.4", + "@babel/runtime": "^7.8.4", + "@hapi/joi": "^15.1.0", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-replace": "^2.3.1", + "@surma/rollup-plugin-off-main-thread": "^1.1.1", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "lodash.template": "^4.5.0", + "pretty-bytes": "^5.3.0", + "rollup": "^1.31.1", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-terser": "^5.3.1", + "source-map": "^0.7.3", + "source-map-url": "^0.4.0", + "stringify-object": "^3.3.0", + "strip-comments": "^1.0.2", + "tempy": "^0.3.0", + "upath": "^1.2.0", + "workbox-background-sync": "^5.1.4", + "workbox-broadcast-update": "^5.1.4", + "workbox-cacheable-response": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-expiration": "^5.1.4", + "workbox-google-analytics": "^5.1.4", + "workbox-navigation-preload": "^5.1.4", + "workbox-precaching": "^5.1.4", + "workbox-range-requests": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4", + "workbox-streams": "^5.1.4", + "workbox-sw": "^5.1.4", + "workbox-window": "^5.1.4" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "requires": { - "number-is-nan": "1.0.1" + "@babel/highlight": "^7.12.13" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz", + "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "requires": { - "ansi-regex": "2.1.1" + "@babel/types": "^7.12.13" } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz", + "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", + "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz", + "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==", + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.13.15", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.13.0", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.13.14", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + } + }, + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.16.tgz", + "integrity": "sha512-7enM8Wxhrl1hB1+k6+xO6RmxpNkaveRWkdpyii8DkrLWRgr0l3x29/SEuhTIkP+ynHsU/Hpjn8Evd/axv/ll6Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" } } }, + "workbox-cacheable-response": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", + "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-core": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", + "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" + }, + "workbox-expiration": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", + "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-google-analytics": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", + "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", + "requires": { + "workbox-background-sync": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4" + } + }, + "workbox-navigation-preload": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", + "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-precaching": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", + "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-range-requests": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", + "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-routing": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", + "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "workbox-strategies": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", + "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", + "requires": { + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" + } + }, + "workbox-streams": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", + "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", + "requires": { + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" + } + }, + "workbox-sw": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", + "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" + }, + "workbox-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ==", + "requires": { + "@babel/runtime": "^7.5.5", + "fast-json-stable-stringify": "^2.0.0", + "source-map-url": "^0.4.0", + "upath": "^1.1.2", + "webpack-sources": "^1.3.0", + "workbox-build": "^5.1.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.16.tgz", + "integrity": "sha512-7VsWJsI5USRhBLE/3of+VU2DDNWtYHQlq2IHu2iL15+Yx4qVqP8KllR6JMHQlTKWRyDk9Tw6unkqSusaHXt//A==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + } + } + }, + "workbox-window": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", + "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", + "requires": { + "workbox-core": "^5.1.4" + } + }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "requires": { + "microevent.ts": "~0.1.1" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "xdg-basedir": { + "xml-name-validator": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "dev": true, - "requires": { - "global": "4.3.2", - "is-function": "1.0.1", - "parse-headers": "2.0.2", - "xtend": "4.0.1" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", - "dev": true + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, "xml2js": { "version": "0.4.22", @@ -17610,53 +24789,91 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { - "camelcase": "5.0.0", - "decamelize": "1.2.0" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" }, "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, - "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", - "dev": true + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } From 11a0556f990aeeeace2422b4844a212ac58dcbf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Jun 2021 19:57:28 +0000 Subject: [PATCH 310/320] Bump ws from 6.2.1 to 6.2.2 Bumps [ws](https://github.com/websockets/ws) from 6.2.1 to 6.2.2. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/commits) --- updated-dependencies: - dependency-name: ws dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c754c94..54068c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12344,9 +12344,9 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" From afc1b084e186470356608c2b6c8586b03c0aaa1c Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 6 Aug 2021 11:33:34 +0700 Subject: [PATCH 311/320] fixed styles --- .env | 2 +- src/styles/dialogs.scss | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index 3dd4857..d8d2c6b 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ REACT_APP_PUBLIC_PATH = https://localhost:3000/ -REACT_APP_API_ADDR = https://backend.alpha-map.vault48.org/ +REACT_APP_API_ADDR = https://backend.map.vault48.org REACT_APP_OSRM_URL = https://vault48.org:5001/route/v1 REACT_APP_OSRM_PROFILE = bike diff --git a/src/styles/dialogs.scss b/src/styles/dialogs.scss index b0cf936..20e86e7 100644 --- a/src/styles/dialogs.scss +++ b/src/styles/dialogs.scss @@ -342,12 +342,12 @@ align-items: center; justify-content: center; fill: darken(white, 30%); - background: darken(white, 8%); + background: transparentize(white, 0.9); cursor: pointer; transition: background 250ms, transform 500ms; &:hover { - background: darken(white, 10%); + background: transparentize(white, 0.95); } } From 91fc203b0a35bd4de45ce9f99751f7e8b0296bbc Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 6 Aug 2021 11:37:45 +0700 Subject: [PATCH 312/320] added zoom icons --- src/styles/map.scss | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/styles/map.scss b/src/styles/map.scss index 38d93f8..a541f8f 100644 --- a/src/styles/map.scss +++ b/src/styles/map.scss @@ -12,7 +12,28 @@ } .leaflet-control-zoom { - display: none; + width: 32px; + opacity: 0.5; + transition: opacity 0.1s; + + &:hover { + opacity: 1; + } +} + +a.leaflet-control-zoom-in, a.leaflet-control-zoom-out { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + width: 32px; + height: 32px; + display: flex; + opacity: 1; + } } .leaflet-touch .leaflet-bar a { From 738f69fff416d96e71d251573e0e87fc499e8210 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Sat, 14 Aug 2021 09:27:30 +0700 Subject: [PATCH 313/320] fixed stickers scroll --- src/components/panels/EditorPanel.tsx | 4 ++-- src/styles/panel.scss | 7 ++++++- src/styles/stickers.scss | 2 ++ src/styles/user-button.scss | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/components/panels/EditorPanel.tsx b/src/components/panels/EditorPanel.tsx index 61bd25c..a68cfcb 100644 --- a/src/components/panels/EditorPanel.tsx +++ b/src/components/panels/EditorPanel.tsx @@ -109,13 +109,13 @@ class EditorPanelUnconnected extends PureComponent { active: can_undo || can_redo || can_clear, })} > -

      RwCWs&|fJT8%wh%X415fVgK&0*wm#WjUsxYi-6 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�HfXS3yr$qEEb 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 NC}hV=b);(v{{u*X3z7f; literal 0 HcmV?d00001 diff --git a/public/images/logos/pin-mix.png b/public/images/logos/pin-mix.png new file mode 100644 index 0000000000000000000000000000000000000000..ea139d7407213d7f2d66e9f14feee39cf710c1e2 GIT binary patch literal 96334 zcmaI7b97|S6E>dB#&#y&*tRAcY;0>|bF6$?}^ z)-(bz+xFQ8daUzSD#>OfF7Z9SLM$vv?1wg1eu|W$5riWZ+#fNNbo17>lXa4L_BKR@ z8<>EPD}pmw1qF>GceUyb4>d+CEUdHS5-UU&hbvZgc{f@b8i1)-0qzl=X9e1mpWizG z{TS-yBpcC}nP%y88ATW}IcmG@vH;#r zs749m%2_*oEDGh#Z~X5C$aJ5pCa2Gn@RSEylhdU9`7EN(5(C*KN?+~?%#^D}pOp*V z4sM^|y%yNs=W`Vc;Pd^`aj=ng(Bw8>^#^R4LPx;UzuiW+%9UN$7=h1kwzytce>&T| zWzTC@zgY0?W6%v{!hT=m%z%2#TqEo+eh^4pnF7bG82)>Qi%WopBHnf7=Z?J`d#s7X!u6{Xc`A9Ed210%xYq>1q zxa_}rz4St=+~UNU=kec#Lem9EYSQ~=FVvtXJddHPJ4I}oUI0Tn!lgvb+dUXtJ9PG$%kGObH9 zev!(BGsEOO997<}zpKy<>3^Rc@j?3jI3*;}XvYg-i~GqtJr2Fa#^v?uW0#l>nq;ll zd-8^G_j&Y+Gr#zn^E}S20=!9taMF9X^jv&VoN|mV-fwrsoZ=(AkGdO>IBMC}F)7bR z+!uNwOjGa?9UiLg5^Frcg8G5Zd%qxkd(%^6V2ZIik_qER+B&&lzm)TvU zwkVlqoo1|?Jml|tPPbcNLyCxd6S|)9ifm_U4xK-DZWB=WV@Kg}?QXR@%`xrXZ^YBU z=2x=6IRHzv!LxCjUcCbfy-_m9l**nsdK}eJLlzUQ2`uEBoa!9!PWP6DE zfiqFP3?4`riWTRN#m(8E+q;bSG+M&U+AfT@&ptIiB#9g_q)0=TqdueSqe=YhR|~<* z_4=-B%)X?ihr5nG;%IZ`yyJq!xJrCY5+&e)TBLwQL-NEMcG21z&%r`6-Vdg=X-T9oacV?ElVX4*wheY?4fe@Gh7w*u=q4K zTeu4NcWZn-T>F~7;Xcjus?abCU{7E?JuE!eVw!V!Yj`{*1$7Sv6Rz`Y+}BM7zVPnI zQhDw1hY(rp+`H>OP9?{8ym3s|ixPC5cHG0p;5K;frS`*;1nP8UOqTa>G;mLj>3QS- z_9fAc>Rhd+@ZeRD3`nZm@Ke<$u+$)F_YUb!j^<03@_AsS2y3D%zC86)!gyM5oN1FQ zFA;RWZJ@rex{L6)Y}x8SHhlbfS|aE+6*KrHrt{8Z7e5U~X~Al$+Zh&q^x~UC>Zp?W zDpvA%4IdOcm>?+A;_28k?z;5oDjs*n2=NG$-xS9{PE4V#T`1;TDg&^fg2*|zn3R>9y z4)9v|cz=HCWcts`RpNT*I7}McJHMD;^vkFHXnb+wdRtv37&^`GyHM0~dO=gOtS{YE z-CPW`v?KYA^gDOtcGmS#fxv1tf_W{v{;YjfdWUU4e{yB_P1^GN7Pt3l-&2)yeb@G- zh2W>4PA0+B_}Dg4nrf`{n0h2gW^||>;kT`&ENjwH&JPGxlFn4Q%{Md%6(I-4>mCVZ zzP%$QIbd3>Ye3nP6>3qbt;Nq!v|@V;1!S%iWwsKF7{=6Pa3JpqZ=@vd{Kow?c`bXHg#MEI3O&Ni}D zLEjytouHxJW`qW2V~>58m0=vMUy=7>Ehe7zFNVZ3O-iMgugwJFbFD8yC9?Gw4^`&- zC>w<_%Ij{pYRkXtj;H&>3+;c(lWhkLSFtjBw1-o4j)N_*`HnJCZr_JhE(z;6nPV#5 zfQ0El*Ka?GQeA5JBhtEGvmzmk%al=zoR+Rr9!j4!GW>{iPy4FiDAO6eeP=F_;!p0BFj~!dR zrsF5XP*flS1i#^n%PmXF%yzLzRqoj^s9EmqPp#80*!GS|9^l@QulstC3@`EAH7b{? z1p8rpG!VJ*z;xXA-BHm(@E2hF<$%Ci$`bQKi|NxJSV(4fofT14u(QX zqRUUZ>x}%=kL5O(G6sLkgwy3s`^8p$;7J7${sTVw8;ZE=ED(EEfHb4kOvX1`0*v;J z@}D8>U%=kx(FMBmo|9zFZe=y^`Hq{z^QbL+mFM4bW5zqz%ziX@<5=Wb2HV|oC+<#K zTWIzfYEv1l^xYD#r5%pIAihOB*W6J-v{rp^OiOf0aM+@#2tB6@(hXIyw1%6{oD=wo zBU;)~11Tc#8>pLb%1(BhxDS*n54(c#^gUz1c=kwKsFmGh*?_y)(wI9Fd@Zjn;OU_GZV;Akz=k;xHmaYCAtwW9KP<_44q-D`Oz zcnBP=tu`AxyfmJX=wwIZX&^vq95lDq@2>Qy%~cZDS(rybD$MUGf%iNOye!Um?Y53y zmp`2U{1+0p`m?p_8L9kp2TJ{O0RC>{X5BVR1Nf%Ol4P@f^N*+L+s_A0}-H`3hMQ)Uui+LK+n1>Vpneww(3d+7*e-$Mz5`*}co3 z1iAziM0D?YL-F~Z|HO-Xw^co#T`h*6(!ED9+yw{T#(A$5saaH_Ho3`ttS_86J%{83 zg3&DOa-(_v(SP}Bpo!}yRlxPrWr|4lFfrTat?IHW`|R!#X4ivz)@{N(SoYfUaq#@0 z<*>Dyd*;0JVNAzs^XREA!RCGRiaYxTiEB%~d1n@kp^*Pv7Zr}$PvSiYUH`I2q)F>* zP*BwMjZR_5G(>uwb!W;ieX1$7&76Y{Dw-LUp&xH~_drQ~i13 za?%x5{eZIPh|57D_tNAc}8 z_mFO;E}+P+78ptlte~9u*puqC*=WlBaxFphYu{fVEg@_jqbr096XqM&;^79#VIl zV(cO@Q@s&PmlQ8yUspQ`&;3JMduO!kd)dV9wTihz6!C9*+|2-X2f~HA!d+p>K6!{r zVZBXG&7}ZuZHrs~InDc zgM5sDXY2FQwl5*5+G4K+LMTwk-@s%-6wH*)9*A0B#1S_;&^I?DEv@qFw@eD=uto*A zo2MH!HUx#G@=nChd{7r6l0yMu$Ualr6 zrh*HnmeX+YA%!vuJ71P6Jrafl3m=xwIXZTn!Qq#|VAsbN**V4hU`O&OsOh_wNEdyt zJy!|^<}cs8j*q|iX7hH{;$uRrlaQT94AevQB}S$iMW{WdHTRTY0I)d`wEW=(kOX!qh^i zWa|#=H_d37U}D7YH*fw=o$_=N*_e}Hy5;no|6Q|BuR7r*zX=7elnzX8XgR?IOvU5o zV$flhEA^&V1wv9oU_o(cXE_|E;#y%X^zt;%b8b0B8u4TuZBgs_Y8K3gd+@t#j=9Db zHDx;8I7b{&kr)>pAGvjv3j5^28w_b*)14g5jtr?MdLNyUi5MdbX}PyrGvJ4WDDNrrrh~8e+i*0 zF-GFQg6tFWuS9mwC3P%`>VF%?z>|~bFebhhHsmxtA88{P6B$EP7^s)S=VF8#lRs7R zANgAt*$yV|L~kERwi-s{qhRCq{6}^bwKpK)m)7B5D*hb8&N^{!Q5g+ZqEXr^fv?!{ z*c1m}9O*vD9lpp75)8*VD@zo{IVd8lcMZV5$ys?$OYpgb%s@XK5}c<5oGd@v^oZ7o z6H#s(?r72JOTxQKQ~rA!-sARzI%|)r&x1LlY;8rw8g6AUm0_0s7^ufbtCioVxg5hluW!`1blh|F7fGF^;0=^?I44)8Nv$ z%L{GbWANqv)a`m;zx`<^yh67nZr*yK#$i{S%XY0lD3YM>RW4mJ?n<+IBAwgb8QGfA z*4FT~uBeELkB=`!z>O^)+;F&Is1(T>zSLWer?Ln0I-(d(X7JWGHbzCTX|}uwv_t#6WRm1M2{VG zB_bjk&-9>?AaInJjlWGJ4n*;9+KnU92a!m>|>t-^4p0B%!n!VI}8zx;hAUjxE*$;u}|{EOBV`k zEb}SSKzZALS93ecEnNH6hr9;bm1AhR>_~^KbXMoXif#-GlhnpGpEq&@|0Gi&DapS^#|WCydx+=>P#oHWc>&6s^*;u z*=(R!dtIZDBHWv%Vx@Y^MeF9xxxG)Yj(wYLm+G`DEHnqn*6D7$#z2U{)fSO>U>y3S z;3?t8b@Am+w4M(<7hQXQn-u9){z$w6aD=<-nMC(p|MQ2r`C-jPI;}_?wF6n3og>jA$8mH-p8dQro*ln2%QPO#cDBxHWwi?SmyWWO#$-VpdYJ^tM{uLoRT*okm}VCIv%6JEI#bVEqlqbI-94*{}Uv zRZ?42P{kO*>fRgv8)04bjQ0uNQ@2-rsL`%253ERfSi?1CVkj#aH)VZPH&N_|Z1nP> zKWaD7pRvrbm4YEs88L~RnTQU%{2!qC8@}H9%7WKB>@iFK<3{7HPw0(&O5l|NP1o{X zvfj^jR}6ww88+bABVs0@P?x7G(Y51*#;lciMb|H^Ps&d+Y@Uba(@L?nL{k9gAXDVl zT4=bQT!C=Y@4N#Gva79xZt>@%&d2rVn?AAIUhMVcBrtT0zdvpYqUWm|&~!V1>f^#W zn7xUX)P+`E5GFVls~o;IT#+Fa&<;S0&MB#Nn(kq*9CG+KU~hU&KZU<|a~^nB-;GWk;dlpnJY1%pGAgb}b5=o2gf={6ma7{Q zgW+{YNvR#AYF+p-adheITYFk7UCrH(Bs4(445zW8KK*L9wch6sCpmdyEvpW*Ng zP)+D?#GzeCQ2Wla>lZ(%)4dbXw~SAx?Ya?IB_aqjKm*7ZyJL5irdLTLpRp3!e0o{r zc?j5jx^V5%sd(O$Lecc?`gkD#4eZ1}C;PlZHfUEmw6j=7K>39U-%hgkvK#*c};)@}bp>Xt-59N!h)0k)t;&xvBkmrAwO=8euqcdGy zm1SEs8v5 zOs@L{5!l*+yK*3r$4O~1&*dB9^J(D3g3!l^0;2yKfDMfw zHMLft;WyE{5+Xbdbr|jsXjPayUt4|It3l<&kOr?Twe;7KIitc0tS7Z{_3O07_9SMX z<1vuXn^`1ueh80ZumzNr)E_zd=8q3-oBH@;c2l%3Nb;jJIOQny#GqZ)6Be?PAkMqe zNX?DS{!3zgIeQz2#vok(iyZiJIxnwx&nthD9l=X460i4nW5q8X%&(c~1^ z+PbXJx0@9T!IG zmD*}gvqRYNt6SJTq&rf!<9rQoPm|Ow_CH38Ea*CBM1n}!gZj0VG4shZ)hYnWvts6R zJ!57tLM@k+c0Ojc(UwtVMK(D+Ux$^PeD{A#~=Dq6@s~rKPfIPd$8w*ON_D_WbA^ z6-y!DGM8IT-PwHYvse4V^X-TFqlbIGS=?|;o}sOmT}HLevum=@>lW~XuVVWiSap(5w39h~HOnHUVR0N(XL8d;D zti8La%-G9ET;b$bENNm$S?CBw#AGb0x)*1a9m`Vw+sE|)?ll-N(+>`c1Y0M0{(d69 ziJ}VjnLw|t&b{UqjSjnWWpynE=mrHVMPr7ig(x4?v;^uw zXM~nWEpbZpAF6Qr&$Hl{OF@i8x_bPf17kIY(C0I!Y?grAR23)iY!lMw^Bwi-MTW@~ z%x-ow6a9XQEH7A8+&f=Iej{9$=aKJIX3t~LZI1cue9#zAEpruAgoPQ}u@9fd%g^$Dv78k8^wa}w2P(CEY;*%DuejHKeNEQ=jVIXA z@!u%#3HxKojvvp5H~p9j5w7aufnMTU)om9|y4Oif%9ZLv{PfVTtYxDo^VTg#dEp=z zp@^PMYN(IKRl8lVek5uqTMUrkrai0|Dt4W#+dy66qpPRT-Xn3ZpxN}QoKJ{oUnT%K zN7GCBc41<9^HH9RW`or|=+LTvsT}%aJDB9)?-+A&aT6@-k2&3*BTSdg5#$iaDWOk+ zYPX3~%{G^Foc1r-0DQ^!#pSq@UmU4Y$v2SIcox`XE0++khUX%xBx?dz1`QOThR!_A)Ka5)+up zt~no`gXyt(dmZGfHpBbPKK&EPrKbkz8T2bsI+yKESW|oA$A=gFjpG`0r*`EHwY?WT z0Tn(rONLMZd1Q$H??Xq(3{zQ$RoEuup zmV?eHKIaXe6X_eCKWZbLdVq4)GKjA0&ak(KQzX?4XYY>x*O8i&yj+1O^%Yr+?jG)M zs$4t5Ipo0W&2OR$rKk3M1;)Z4WP-5i4ufooj=xUF%D~5#sYq9Km*Hl(x5cgxWN(l6 z`@kC9Gu#lkN#6fD9l=gB($%GLEM;mtnOVPQXMh^FZ2^3S%b;2F$K$dk9n6}OMlL!W zpHO}F^1*{fI{yV9(e}!K=c-flM7zd^jLh@m_Ve%J zMJTr!-FvI^>3{HPv!)5Pgmw1$AD0Ky?t1_`mGQ|&@r=)nN;X|U$JU?i4N95jo6!#D zZ|1V%Phdd*eLz3Or26dl6$agKG=Wy2{Z4pgbyb4DrNcVlb7=^u4(HMHC9v$T-8vue z^VtXQvI5C)4*H{5s3VB~vempk9=wY5&!ZY$jT-0nLS>Np>euKJ!Y*6I9|50_sZ$XuC!%{$4;FywW z^opn{V%F$t^W(w&qVx6QTFMhGpX{omqvLHgxswAwnTckJ(g{H1ed=vcL(Fm$0!P*> z^gjDZ(7@r6q=f!t|32hX<8t0Q-Fyd^_eX-221l5MN0l(fs6RF|PHTVwb|+?ATcO8} z)P^@(Jtkt&Y8K3SOPez=wFy|2GH6f zisqCi1=JHGFv#Fd^#@AMwp#AmBn0R77gp^KvpfbDjjBTDJE|)(5@RElE#nS@5q89^ebv$yWVLwG-a>WR|GwxlSHI1wLGij8UoIp>w7#}zmfr&fG`QCyDX;LLgsh=;!Ky7 zlAk^j5zXD7PeVe6^JQw}Udyo(BOVmda3T0coCzIY0_NIkCbbwR#Z1JnA#sT0&M*HM z${43Xl;M~o4VtTF^p#L^#-!u~(i+SeUOh+4c}G^-hvf7VBPFRNla+?c+dl`a6)g}iJm*VK0|lMvl5({+kk1qCxXosFEQQG;|E`%6FAEU&$Zq@vHs-N`~1Stot zpgww>ni|F;S{YVAd&(7$`7SAUo$WJQS$#9U`Bdh3IjU`b;Ywf%&V`pJQFMpy{w zNhT%KLt1NGRjTD}?|Ixx9)03h+!o~z|3Dn_p7j$kVQ9pVg6^gIZPPKmJ+O};h_8oX zCxg7~IDFkL$UB1@`DteuLUWI9Did~C@qi9}MC3`U|E!W<0WugyoJUa$=Qj@$X+K<0Kx z(N9b#Z|Mqe&+GN&(rco2{1nY-5fz{+4Ip8qbkud(@kFr?`s=#=5h}rv?R7ZoH_X5C zS8p;yD1H{jx^SSnC(SOSaz`$yZT)Y%9)sVH`9IqKLTcCU&%yA&ky5B;E+*|dE5}`D zG!PcsJQu=lQa}z^^P4BS%F(mnVriNiX#Y)8D^n6KQ2;+t6)xp;Q?`qeuSOVariqOI zRk8*nI^JBb3Dona8#M}@?dwD3ATM8u3P6WLf#0b+k2s$eTaL#;J#-eu*3hg)I)22D zrMw4YdXLaCAIPNB9z&JcZDK+tXV2+!Sk3Dh*SJtocHvSGkX&01j6Yourmwj z_AS2YkFx<`Y*B(_ZCV~sOc?)Ck#Mpgp&*%dLVDRFLW2x-K?WEIKeQ5Ym8OF8OEE$D z0eE?391t?h&nF#)b6i}wQ)}`EHogZ?cIzBRu}v-1VJ17fX6$=;dV1J;TD2M;;iQxQ zToOmWrFoyAYB^z5Z=x1~Dv}@-!A#Tg96!$*nY6#$k*4KqzkiW zi1h<|z7-fJC8uK-H(v9nNVWs|sSGu!Mc2)@m|_{xg_ zTGMPQ(%fsR5QA81ns_W+S)_9EMBoD%`VO@t!q6;XIvtc{ze@G%OT@%lp`rb^w_6YFl9!XmjT`a%F(<_RY@uujkiZESox&?MEf}-!b2pk z19WynCDHGB$kMWxfy#CA@%7YXSG`noJxQ-|$lRw?zJbGh{&o_Dk2H`Lh2O`sC19|MZpbMYcdaAEg_j3+$+*d5Qgkq;YPvo;!R0q(vLzmQLt})&Q z7FL5!&MBSfK>n<>J8WWO-{7qXLGY2fjvno-AchV82xM!B2oo`YbgH>g8cTk|ct$B^ zDrarx@%aSDK+*<k?EE zJ^Qmsvl8~mX9F+o>1L8uC0sFR>|nLRjCmfb*8MsEfQNp?BHVfW($MQNG4U&_(iMzY z2eHo4@dboK5+52)Y)=z#*~vQn!nKhrE;{L-GFn>FKitGun%M>%1CpU1b4H%@d6@6sIfY;-_H(TgSt1t8Tq@%NA?XF zamuDSzOSheZiHQB5}~za{U-gB=;nro;?SZMv^Yb5!t_w#;lFUPM#Gk7-k;iGO7*AJphhYSXqN^YmDO) zLh0l2M9p4O5*B#8wPDSPJU9@|xo5#dMN>3^QVf*AwM{{0$n~=!f?EG#e_=@dW~nUF z$vlhUGD149p90VTLJpT9$8ARsldyqlX^f$BvNS!-J0I`Bh#oLhlm;2;=ZlEfQG}S4 z@JY+lmd2D7Dj<0&7x8}GO;1^x8~stN(49h8mZZ&*>by9w*;LC6(B&LxPWX%2?>t5Phr=cOhNMao|qh{U$%GosdK0OIqOCa~wf zOssDqj$j9+|Bd0I=`uuXR>TfMqnB{p)jXTH^DyyS5prk=2+V&WgI3cG(d z6muk<5{Bk3D3c9iWJk3;#CDY5`!GFy8W4=GsVEmOY={h>(i-m#6)8vc`x-_$@S=Rg zK}pJq?qzlCgs$K6;Jsk7Y{$SkVoat=Kosskyjv!g2fF7;piz05uWh9+eBH-7J~RDo zO6Ii^$>{vMzh^>|an^KU*38}FHz(T{T5}89J`I1D0vbI5;_z9T=z_XGKMF58lvFu2 zrcS3nbPoAO>(O`7PB{A=dAT?RgkT@cR6x78#Dz%Q0d2p=dG18 zz9Y+oPaWk%OF3%uIK7m5ULHt*Y}BZmHoUoSCxxP(X9I9H{kIg!HP63Z_XG2-v`bPE zPOY#-^hAqN$+FGV8xGalji7CU1O?4?60GS&HME%ojLU! z6zPc^*f|s2W|2%66%t@Ip*2jg-mdyJ{ifA3e|XZuRUL>h;jOakmo?}7fQ$w7)29Lw zJim{eQ{;~J-8q<#=aTh;GoJ0Ph;MzULgOd%<)z#s*J7tpY-;`d(y6=u9^iF7dm*)T zadD!{dP;jjiVM6F8j|A*dLS!MDAtJMxku3Aw3{}A{>_Pfw-Lgp1jQe8>U`VOGWF#cm zEhocQamhkhr@(;CPp&MF|7ylrE?vM`q0V~8TJ45$*|G)rxP1u*>k?N({}Uo!-v>dW zaUkKR{*_|Pw>cVqWIs}PQ@IhFAhR~6tGG6CQouLS0Hdn+z0+-WRuigbq6`Gk)nKd` zUg{&qF1j4c;B(TO}3S2?|W-HK&Wu{KM+blRk~B+ig?V*b26 zK9=E)NL)qb8+(lQKnS&bnJQZ}d+yih%(#@0{-j|FtNIaNefw-3yOux>xzJru@~M-? zlC5vo^&o-2sbhN~(H}H^J5_X~!GNWszYCy~RP1_%3|V{o$cqa*z7+CckPilwEgcG`*d_xT~#^0`C4r$1eBgzYvfNe4XD>|g9+9bptNONV);53<2o$XM6}$bKPzTpMEeyN z3507S=bB#7ENP@WHA^}Bd)BL>vK>$!{+xzsCRh&AXEIOqe)lkk$l@}ZxQ4bEHjLhw z6D!d#0BUSiWemh5q+z?a zB^ZswO+qTjVxd(I3axsPQ3a)&EXd=2nLjEVT^yT@#8GCr9i;L<`mdWbL4Opb+mo*4 zdtR{91W6188{qE3a0>ihj5@f@u#G^m67@;HjLCuAC@3)rNxHFi7YiJg(S#x=rsypb zW|v`zqIqn2v_GSaD*oFdv)rDG>PgSOItI`|W~yFWpleA-@+%M19l(MrMo&RXA0RE0 z@w}j+3v5rt%D*pLo00mlF0bKA&C$CS0f!ePOP>Rii^>5rn%ih2qPD8p+MX;V(1f6( z{BacVOt?0qKzZ5^7%2Nnn40J*krks^Bih`)a666n8&~;PwN|oH(P+;^)|k9dO10i6 zp+be`6lS>@`*x0c+R?xhzDUSP-$R^~?1XGl1xDT$1)P+qe1dP|w;t&#Baw_&aTBT@ zK(vW)y7E0KD995%f*p{)Gq=T}S*d)(Ixmn(^A%mxjNAx0Q(S7s^CS~p$=2r2Hmg`w z#8XaG@u2Yzz*xF}K^P~(E|Rg1WAta<{VL9yRmc#zNuDMl5nQ#P9Zq-}yV0T2?r|~| z@zP$)DQTgCS4ohk1SK{p5&;*IB+Z~`K%We9VZcjDx?QXHCDs#%+<(brIJF(TDjg1* zxaGkNhWh&)rna>!Rzf<%0hK4U0427gag)S0w+ z`sT3KkU|c=XcT8IxNXGhl)To6rbsLd6K*9ZP0kz(Ar>ofa(GIv~0#Y`F( zSgRwN0s5K6{(S%m-}N*Io|My1@*jieMa*w9P@r4zr18dE#A}vzPozS{UX6dWVOSkU zEgrcaK*ovvh-0DOX9WOFv5o9`b|qnKt}UcL1#x4q)Y&bElz%vG#k zn`*APT#c;&0HZ~jfqRw7?{YyY5r4(EUxm*{lqOdd>~bgutge(nwLJNt$X_%4m5&i0 zeRM7|TO^)Gx#wbw``iHkc%JNPIq$=P3q&eZU!Ky01W8W_*-j52!?JitmO3_qBkUJ~Y2bLGn~7-e`)R91 zC|!obD6Qg2Q4u4+meMh-;p=Dvq<4DHj32k~z?AJQ^0f$^rtQvIe3a?&Ej{RDKeByI z$INIJ3qxhFoK&5Z6_1l(cNQlCAf|lsb1aD<3rdaa(W7JxdYT-FK$hhy?VPwMqv!+s zZWFC^-NTZi(8e}uQ#DZkLiN{s2+LCB^Z^$>X!Bf;`LnvSf5j@KTTw2gL97Cev%dV_ z#8BEnrm= zNQoLqkx5(iR*|_7aL>E@bHmsRq{7$gF3_J4Ss|S;ibHW&a`2!R+K};KX}7tjEX66$ z1T5VJ)@Kax{J`v4WZ02jYKA{DFV;>*dBanj_ZzD^V>2R28W(Z?cMtP?e~Zm<&+AQ` z@dMBBHpsiGW1n`V4o#_eVe2a44`4s5Aw2}jMyloZct}$kb-`Q=A6Yvj?yxdz5bbLo z*G2pQ$K0VWv`|ml&xWyM(md$gCjIAqBGg+@`ov{n;a)BduQID@yt5M}dSXR2>j~FI zCt8G_73{oUPsl`QKUkMgotOfE1Y1Z^Y1 zNG+uFi`w5b!(&m@zfTD&O{u|xrcF>E8y?9>o)&liw&j)#SV|;qfu`CCzxN_s7_#K> zua{2b?yT0(G8j2Ml!Uz!f=BVmoK@?^M?fz>!=wXc<={FJ0wnuv80X=#d5BvcrS!ZO zw!e9SR)dxLB1&gdcr2*~RfpUEk*&v6nHL9iC=Iu!(>Jk{lPa64hnw~YtI(L@m0DVb zEE@Q7<3H#&;ERp#FEZ@!OS*&0gL_%+dv!Sh-~2rs)W;|?98xakb9>5m^0irDky>FT zYu?gH8?-N@f~$_>Jqx&@k~7&6P;jQQzRQh%i$b0Uk{z;I(Rk!q5$PoiKh}aKp%Riv ztyJ zdV2x8f~ZEy(Lr`sWq#_Z zRB=c3zE+m%DWom3c5E(Qa4ePVxY+S{?giOpGUDYAM7Gs+?$g~9wAC6kr6w7%j^+pK zsw7dGemtKLXr=OC7zcBPEF4-5BG!(j;LzLiJYrF)3rtn5byxa;e3|Gdj2w1E`qQF? z8I&@9@5QRr6w%+ob_S|a*I32x?%!K$wt0VL#7x(6`o%6+88suH)I>_5tba~ff}oxV zJ-Y&WbQ@xsz9*g8O!45-v+CWj-U;=zAk(^7hkMOmMHA;|*;6916`-ZWCEXdZ@e5Oy zrq7*Tar(XsD3A{}NUyY34;*~Z&6Qd3>^z1w+KbE+zrq)H9ynMDpq>oSMheTP#dMbu ziE~}@Z$M)12`s`u%DN}R;~0;uQ&%65tGLwdP3xp6$VZ77@~{O!$T2-d-or;aBedmQ z9&Rs?ij((QgiXLw<>Txki=Q^A>0=6M^5cscSBiVRVEEa2?t0I22KYwlDULGbuP^d= zpO}1@T0Z7rWszUn#TuTV$dfH?DuItD?AJdu4yG(z_AiJ#Q=@u%q;(f}3 z3sA;&PP`1X5_eHkdwGY(4MiHWB-t09)q7vqEujJ+BHb!QI$3i?*<_a8_#$@qQqN`W ztA6j?i5|PTVLn!!k>4vdCq=W|<7w}u01E?$AB`%7=g{M)O&Az)sMP2gyNV2K(8g0!t@ z8Tw;df~4=zRaA92qQ@$19*NnZWSGHJJ$^eZ9>pkV_4^O@3I$rr4%SwdzntoL z@N`^fxWTz%BDw(ioiI8 zjKz~F0BXF!?7U=}nP5PdS5A>QQQ`y}^!rk^3^a=u!0d|Xak#39<8$pE;VKk}48U{d zw@XkGg2^S^ z7^zxDt^GRIc#KF6MnY*Q?Ip=1DMcMc?EtclYI=-&b~9U2aLnz9QN;HESWBjUb$?PD z9eOO$T6Qw~YbvVRu>9y*99i*ER<+dcJ~+f8I}nL9xEdrChxbIzlBD|fzT%*3gFZg5 zT_Z88o>^a`0dz}H7_v#oV2Cywrm;Z6{Po&NWP3doykU1KS*)?Lbs+SuS#NpApr8(kXz02AVyakQZHl?+UujwXK=q#sB@%JA=XyUR5hN;dj*TxGEsTuq3@ zDEXX!SRvG|d;!cUa$d{|%VL-yp@SqWN%NLuku`PU=hRxdmyQeJVP;pzc*m5}5WX*6 z4vRk&?4PeRe*R)sTPDa!3`&j3!LY7EEhKM3ciQi;cXb+FPOGSmt(E(Yj4A~bX;`$A z2}me^B++hFzpLezUHqC{=4a0*A$#O)3ImiG+{a<`Rkl8^37VOSd4kJfIu<228w7V| zQ8V{9eZZx0P<+>6)!)$a`3&MKcT$n>`J7p01Ydj9>?mllJ+?lbhMu~xb;ZEazB8ixJ`I~jEQTWQL5KV$RP3ZG<;Em<^J?H%MIpjAzmF&l9}fbaNlUi zXh{aTfs7Y&CQw%J$-Y=3DjjkNTcBU?c|-sX1RnB9u7@RrUeqz~Y$Mb4uY}%&-{ZU9 zzr=ErNgMb>lQf$S7H_zvS+@35;7SC`P#mDkp~$|9j0Ea^?SNTK#iYwEM3c^;^_BZs zL%>`+JwfV0$WO1){5Tf?_@=d+G|nbWmay}w_E`fl60lsde->3kiJ2D38c#)r-_zQ3 zJscD=Ri2wP^9zm3V#&}7b1pzWq2grWJBA#3j7W?~(sx`0ZAe@B0s|-IZn9E8b8WI| zjC?xzWb{_)iqJS~CuRmT_b-vs701n*Y(I1#q{pj;8I6^XRMk0GS@sgj8?Z@bG`;l4 zkI1obf7k{8uNDBab<0)YpKr$op;6F}JC0c%VI5r^Anep_cu*L$Q$#)WX#gepf#E^J zgM{wK;(fzjr1vjlV>kzqFRX>p$eW-$^N6TTX*#0#*(MDn6Q0=l6^}B%*a`$25nqeI z6Fb%FdUvu@+YnM6|O5J3}#eqTLzvCW-nc``UQ~bA|DzYgCeV z{`xJSD}TE1J(sGKKOjTDgz;MS=geqecjz6yTq!?6SeSdQC~X9TqoiO^3uLHer9O4l zT~EVZgy}IE&dmP-Ye1C0&{&VCAkvVE@A^$igj|@8XRC*AM=XJevN;tY zj{OiRa$_@UZ9#&$`&$qe5_sw2oPYo4k8>=}IXO;X@Ja`VOQlyqC9#8Wd~CG9rDfzo z$wX^78G1HauiL(~AJ{8K2|_3h+ilOW#;LFu7I38qqHua-Oe8TU@ao*W6N|WoI5rYC zt!F8LR~L{iFtN<>DFl`r`oH5g^op;aeir>7v-5f4{6M-%2*wZ zpM8nc7kJG(y3zJ;gB13Vk0>-OnDOM5*VvvkFyH6)TU>VB%ir9RXLTl}m9@o>IWa1U zaV``!#!XWLAup4bS{EQv@dk0;iB?vrtw=paCQ*V>n#9ryv4%tuV`7DO-gc6o{NP77 zFel&MxTytSO5v%W{DhDT8U!iXNd=W17fNBL5zcOp8Rttx$(Zyc8b*@YiON6vrE?tg z&JIfwScDPJ9VEW^y&rLfSgnvhv`K7;#bc`?39*Efz|=bKngp(7SR`RT8Br=+Hh6q) z90`_r^|b?@eDRQ%Ub)E5v2EUe?>0Nrw1$^&VmJrh`PaQhUbwpC(xXrE-aC%*@!$9; z6yXP7|4Y91gJ(FDNTBDTl*A}CeCmUD@{1pMCp{y+`v3kn{_2HGjHB=`f8%4^cXErD7VroE?vJ^&aH~Dj z#J~Lezs3V6XI$*zKmNfVbLpVx?BInW7z`X9c;;}>6}2(-E3w?6g`-u1rQIp}A6`H#NF_s*YZPbO@u zi-x${`zEqdZ^Oz9?u}%DKDY~>bi_g;BbgE9vU@)oUHeaba|OXlcI-fe#u9gKxBS*e zKgb5kqd$9|=YIM;<676h4nSDh1y2cDCEU0dBWje=v$MO&9qh0mKorJ(;MDj4wM0wd zzFT(r=Hrjw{0-mWxTyvI>MQ3-izN}k`piUy`%cbKF%Eio_2Ly88++P9f&+Oq{*l~q zJkI&V-J3{G1R!g}UfAHrR|8-BwsBP&L<^!zEcZ;?T|$mf3~PEc3!}2+eJ4l!ub=-Q zS7plApV;I7{>u03J`N1Fy#}o!usLbC?bJ5MwkEXGG1E~Y=v(5vuRHvH+^sVTeNHr0 z?r1|6AWBOn7iAg7eoc~@giADKij|&2^UAdxmW*|eM5a@?EP;h)HYBj5XDpYHxJ4(0 zLxrHw>LEL^DJ2 zjdWyzMS(tbjLHFRGp8?04#aE78-Wrs8@i9`RS0uB1S^W_oQ?J}r9jTYp;Uki1^hlu zjb-UrU?kQ&_H|0@Z%_!-+zfK+DlO|?I|`a+8)G+799{pkYemKfd_Ub zeB!nlA%k7r#9nNPX^D(nc+&<|qB@+EW5i;9PgNjOMOe&xE?-=-kcenuksFR}9a2t> zQ95ovvB?*|@$BE+bGUBY)PjHU`R7O)X)=V8ICo-~fAu@Rz*LRLUYhfN{D-d~#e9K^ zuJppx++~WTVpksuC?5A zfBZb?%^6EDZTL|H8QB|#MyDaXe1u|KO zO1Ykv2FXfSSx8egG%AuighbC6p=Wp8f@X3lOiJ{wB^t+9HPY1VHW9v zk)&g69vhO!h%`v?)KipPS%RKEGcs83CAXpX^bQTsSHMWoQjj8*FYhI#nS@x!fL@5; z=}+@xW-7tQ0*29v5p;=^=zx+Xkc63edQb~R3eox%xYraTH%rgk8+1X5Hm>BA-dSqq zRO40*V(+b-h^Wj7rQTyL+!6C4o}ovaf6Y)TM`Or>3{{u)ecX%^x^p`W?=|2aic%OM zY*>fn!m06u_uX-li%-75L79?736^P7VHOIXde7Z_=G2sP=?YylXLGw{E6h2zdzG0a zpan@_V+TW3QGu})#-(Q*3w;tSwX0{ny}8Y8w{3C|1(Gt!!tw1rhHA}eDBN@UI4?f` zJm>DZ>&9>R2FK00^v^!&z?npjk0ZZ$*AA01cl5SSxvCnrB4P}r5>IUmt$`f9cAzdn z$f#y4^`H$>T(5jO9apl0lOmkO=k`FYrzuM&1`Rz$grqK@AOpP@BbJVn8ymzsk8{hJ z4K~ITj*UAfLcHOf4rwcJq}Fr&8L3rOtf0aAk@{;D$u4+D6j`UU23qE|%^)0T7!**~ zWSKg_D=IDqlyzzG(Pk1}SvF)$)_|9)tgj`5hCy-ly0JEz^%z4s>?njrb&-ct4VjQ@ zpBTe^6#t*7|H6=1Q!7WF+mLem`Rlp%;^g{o-ryLJbVbb5nUlWf{bx_p%o>ylyLq2~ z@bKOI^tl&#qBDBS#G;&Q8Xh@4=6Bz7g1aV(SmrE?aQE$-%-T64g^>x8^U4Rwcon6V z#Hm*J{O2CwWMiD4NB-RxzKs^65Qxo$@hC$h-mK2&=JHBRYYZWT2xfg$NM|!Zi+wCc$pw2cLnPH_cqGy}T z=GcM3U_!1-E({j7k|U^<#*Q_6%oc|{s=0U3hD4N}ahr+ijJL=bFLrsoab%JsuD>Qm zu}lyc3Q(?HDjv$H;Vvt~g07)}4fIlc@fLCBn^{G6SuK26FZR{qE>=%BY#fyfZ>1u_ zu+q1w-1T6BW=Gh=(fe90!J~+{tiCH%ft4C&mG#!UnTli4^@u-^lgnQI9`P;Gk4!{3rP;0-%t*?f7#86031;hsiwrJ3qgj8sz|FXQweN~aOc@$>_j-GJ!dwJ#yZr5 z5}c*x%qy=r>SYAdGZv5E6(Jk6)x|C-olbc1GCc9(KF?pe!08iPy!WmRMx!|slQ)@4 zHF0M~P>5;-tqA>!Xi?KG_@=h1t}nv^tnq~(h@mEYIIH+aaXGEp=<>(}SJtH4mHDoh zwzBlYU(D9rb8$~ZR~B-(gu%)Wr87?DEoP{?TRsSELfwGOs@m((WM^^qA(fLjSaz#9 zejU#7Iz!g}(;IC+*TV9`>mTT?$3QnOI9k69%A-GfmUbf&%96WpoiNEuK6>wI9)I?b z7cO1ppZ@m4+-Y;RmlrAO1|ei4<|X&uvBRV-MCp+#k5x15PX%4?E(8K2Mq*fT z{rO;t8JS&GwlJFFO07zAAV`#8OHLo#V6?H#9k$6ROxca*t&QZ(%43DWnwH!Vf-;Vg zz8~0OM}Kcl$8w=ZWx0`VWwE1=!nOjf0^xDPtqLDx$o8yK{|GHkKg~$9sJ4H{*rrSk6T&NrX_vo ziQ+XAy(DhCZH&qx=mF%6Si552N!^?kPs5?C$XC84_%?rRYlHsw2?wo*-c-aVPbn z7b)yELW^=TU*y&<({hN(f>;EkYMri0qguA?o7+`W( zy2SynU0$-^1T1?sV_)3f?!GHvPDdRr{ew;ngO;J4DNOxi<6X@QuLq(`j5WvBcz zF0xQ+F;^TAC!nV1hAArQfKpM~R`}HW&vEambDU`Rn3Pvh<|G+Wq@lCGb1z;&d*#?W z#%LEoGa3)s;xhNoGMp$(W#5Y-Y)}n#oc8h+V zM)1l}tDGF|HV~_wZz)6@z$$mz2f4veDxN~1Q1Awe5wU>Mt-Jw$I}MP$64AoyJX&9+ zh_2#ve@;U#JFY72v?PLNwB8>Ep%lClp~^}PX;G^p-?i*`@KOdpWI(VDSB?$EuiaLF z@at^cf)^55GqB;^(rV|fvqF;K1wmHGc7;1nZ4vXFM%+Ee28uL@W#UL7SS|DtiaHnH zv?o}D(9x+gA8n8^$11(qdlT+27QFJ>1^N&v#Y?7lwZUZOV5bB`mTcJ@;Y!Q|97cgQwTl--!YZp>x!m!=-e zlQ8Q*MhxN|N3F4+)2=@Ns{)mki@Ywg6mwyWU^tR172K1-EnfGtxz@t3fixArz5x+m zVJSzh&t1(U&hk-XErX)%5D9oj#jqOJuWxPbRftda)pZR^v+CsyKcg0s4A*0*m+%dujf@3SyBWQaJ;$Hi)ixiL|Z|O!l^2Wl0b(4JzO%Qol`F zGVg!)Ew#GQ6^ya4st^^+Osp`iA?hS0LK;LE<@4&yMM9QB%O!nRM2VT?2(*H0y;nf!^~YeDT-lbqU{pGqnE3N= zKE^M9^bU*#qJ?OlpPe>StW``BMO+hJY+TcT9b1zCme2uFkYR=ihX)HT93(C-t}q*q zneL95jo*aI`FdBp5|5}rovs(%N)13t{oZx)J+@jb)B=`kUHEnH_Ej1V|BN%mSpCjg zMDz8AZ%(#aBz2+HXHmojD+f^Z+C@IVk3%)W&_?OV_g7KdI=MDDZGMlw>6jF9@KjYk zx=9?l=cCeCL#%&IpfQ9b_9oNlEk-PU?MZ}Q-QthLXz7s^omUCwBrTzhtn! z%N{|!GSh1LHR9?`(K=4(m`83q&bSedm&AmKmb`iuW?oPvapYd1faZiY)f21Ua9}~4 zzxp=s`YoQx4SzEAG*;+`^qax3s0E0YnE~&*{TS2e9Q(H%QpjW?9Wy#4?{n+P385r3 zfT_3&i$yM8SYlF`o`S~4ZehiHq4~rfa{o1cV{IUo3+2MgiRWLNbK+RTEn}gyZ+9jQ z?SzMEaV@Ym*tvBCUWOmlg|UvghuA$2n?$|eQj9E>csgV`R*Ss)61KMBN8o^KuI1YA zt#5YSqkZ^@|78e7q+aOYF8f}$R-uK#Ll|5JtJfn(LVFhtIdYoSRSd^pU7)PbBiDcU zh#zqDxNkM2h8WJ^G=e0?cF0{jf$22SjtdQk1WW!tYUtx2c<{HqUCVU)|{;?nAaaZ?fY_YQdR#mi(36e~2PFgd2k?K=#!BapEE%3I#! z+Zi|R(x(n7uKzV8i#*S5jL2-$@vf6&{@#b~VDDeQTO#p|@$Iq&R?}upS*onyaR^YTen8=s1-%1qZk8_G;;=)z#FhE1V<4dTJORPn%q%BgX&RUMq$(hHm5C#=y`ifY)l3jcdO6C z&~)&Y_xN_kO<4GDCG+INrI{6DWF6bN<2N5Z$1U-IHXpd|!W%58Aue(`ri7M`lbd5Y zImEOesUt{BpTSFLJMOscG?X6UB1oz!zGj%3KNkZIk+S6}dsl>)u3qAmgNtlVr`&sT zht0_h-ZU-u`onSN!XRX{T4=+9wE)VUsH0Su}+5wD*go?l^e+H%YB9a2qKYe{TQyVa(+ znlb5bu#o7;xCskixz*T?@+9G}vahN)deEzz5+m<$%k4UViWg$*{x#ReJ; zUNt5?$ty`*g#|;TBbL`N=@F8*3YLVFQ3VXUy7~AKJ>IOD0hyCi&*EUo;T5OUa(q$4 zfwGD(uYbqayOF~fEOw+Y78qAufCg_epk_2=Mi`Ug+J2)_Xwsnal9&jzKx>(pdm4l( zFe{Gaj*7Dmn^H((L^E1kbh9mmHVaKLM!3RIK>V1sfkmKr$9nNCF_elDQ<#w5qbQkC z<&H<7kwROYjfk`4B87&`nCy~QxN?n{1B_!cM&kW#MwW@i=qZe}FsZKZxL%is5QRqk zv!xhQ@wC~n0r-=4o2)WaoOvTlGtWRY=25l{?9IU)uO7|OH>i>@t1ZDKP-M*a9)F$_ zry_E2l~W(srR2lvZOUrV9(mbA0OOucb$L9@(rfmcfn!=E)!%hL2?_q*)O8fP!z=7v zIB;1pynD|w1@!E;|4zM+l5P%Ty3ujtpk3}s0->Uw)JXyE4n;ab=pEpZ2BAH? z#OV`}-BVk%r4JvUKg+ z)0@U-xk4;sK6>{i$9C@q{Qgdi6I=O!V8RE^2Ab&u(06>`RKv_(!?fiy51-+oc_bBM zs)>7#w`}B#jOqF8dvD>Pcb;HWI_{pqPCv&~`DY)wgA25j0^4-lyOo*tb54YYfAq*1 z<|%M0C@0E3)6{eCaphlp{0=p#~a-+a|)ME{V%Se(BscTU+;&%y|E)mRWy*jf~HI_$(hjFq#A!68E2KnWQ-} zWa+`Zj0DjhKkMI(YY_`K(qO*%&8A_O&TXNxwt<&QdY>s|5@O#`p6 zTtxu_L)Rb`mroy+j`!ZPLo=Q--tAF5Q)5J+ugyX{&Fa+bfl{WcR41@fw;k{m2lgBb zXsSdQk{Fdkj>VSW|M0!svOA*TGIty+93Qn6q4rta#l>{7 zQR3DvsXIrpxQmswkk!MBSe(Y_n~t{)>a`(BL#}SvSdAtx2qjTmZI7XnUho{a($f?d zt}GJihmI}gt&)c1Q?HR^fyNST=?K1)G3PoH`noWaf-lc;+anfrY{7tNPJqz^X1x+hLl+XACWOEw&nc2H@jiJXurwjlGA=za zFNnCnglO=Fni?5^f5F4VfO^vrAe4?`wRpAw1WW@(g*?2o>tlYMvqD`&p%~+mK^9mj z^aL+@v4~jXrQJ2FGSoH>fi>_06avmqR0pqh}W}$D`;GTM~0XlhNX8$Jq)Z zi;CV4lV9tZfaXTKCfwY(anLTdjzVQ`Jx=aV))fE8y#1 z&WesIaKyAz@O-~w9tY>_(pebE6qANRmAVd*l7-e%WvzMBLp33qtH~yfbS9J_MCoX< zVirgOsB7#Qu`;@9S6N||CR@scf)FgZ6(%FuPz|UZ&?z(o+8P0yIB=6Sv1l`9LeqOs zvLZbtF5SwM7D|hS$U=l74Y4?rD}@e3yvamXVsZKEK4g-X`fQXY2TTe{8+sd))i-I) z9SxbRnJhx0B8tViaZT=sWl7eCBFeaUC0LQxS$~xWfC$O(_baYcnWsA4@SHe_kYCa8?-X0}AA1!3q47kX5ktSdf$3nCD_{l^-gaZ>H($m#{>i3lbr15r!?5*3 zL00Hwrwz+?#(@S*TH4@BIZ2_9WzEDAR{2^#oQDF#pQUyoRSM&@WMg?qOotRz_S-3k zVUyBCUyvm*%ZF@qml<285b1*N+QABiOc#}99I*^z631Oai$EVTDm}A)NxUCSMF0RG z07*naRGa3srK2^cM;?lDINqWQW4!FsXe}Y#K89>Z)mY{DT+k0wlw7`8{K8!pb$1v?-m+i)Q>@1y3vF~@xFiz zExH?H83GtgJD8P3v?Z8wC{wPCwn;MbIb#bpa%Q^h2z4VgrHopDF-^CA5A=y zP;#ZV`l1&WOw)qR<$_q>jq}w<%txCX>WD&SWD7>QXS|%zmL-9XB&B+e-T`+Ww@5lB zH%d-{#+25s(BdIg>=v{*1-zG*PL#e8mIP85lXOG~BZ9c@eTpN%#V|U7RezA5go+ znU8;tc;+^8922tlR!<|XJN1A<$~u28kSamJgQ$wgmL9d9`BRT^;hSG2T4t%neCHPK z{^Z|>*)Amn=o9w*ZB(OK$;?7_D9qjm>&Z)LUzVHIie(k>^d#})#A?og@0?Pot!;e@t z6Sg1z2xsnlKPDTf7UJQ{JoT0T#N_;ouB>W;6|W}r2uQK2`R+?%2$GCWYyQ`gv+}5| zt8hANAI6N#YqXadNT+Y-_K*HO`sppzYB~QwrBHH*m7dElKEZ`={~0^of;J_z%vd(Q zAeT|OGMaGWkxz2s?7a{s1QjeNEJixZ1Y6QS`%_;2#+TXc_dsB8a*W$Q`5Uw+?s9K} z19;^nUjEvDqTRd5C@ZnJN3n>7u5Gw5InA9P{|xceIn0b`9Toy;OX+)Lagmq5{S_8Z zKgmW~5KCsinWDGe&D|gU9E{6wOc?)kB>+oWWzhw(Av854K zvHRe@4|&U#B!WOzVG$a_-48Ik{{zr$BC25GmK5(IB2K3}l1(Wj!KI(fkx?}uErB_y zz~bBAU>q8fWXkLWoA3Gvdh8UY5$zIJMcDuDmzk7(n(VHAn|qebcx`fycYNlbvi0C2 zq|vtLoQq#V)*dZA;llIe@BBITnqO2>WzlRfeaFKzw>=0lB2%yzAE*E3*U55`sF_$6 zm33tV=^?k6wq!FVXWz-r`+t?94Mlpw{1S`r{{`)Z=P2b6DW2G~D(Ha}Wayg*#4=>5 zy%1xyJ5~<;KoJ!St)_dm|0y&Hvg^dem-027_rEDFAOz1TbP)50+MaV>2%M>-TD1n|R%0i8KBb3;Z8CP_=C-+yYKu5r=am_i* zbAysAP}n%R<(jwPOgWQWNhO2o|F9i+rIt#jrzJ}u#4!>#LC2KP(u)wX60D_fMiiaW zoM<`y!H;p}&t65lp0O<7E@%j zO*fjNr6I@!8Et?}Jb@-Xrb-s*bVhsjA@2S7Z;;z#6q(X!!1@K!I(~w-SU9MB{Ej|& zbzsmXiJpRoi>8qfS~Ns2meCdpEFxTmVI+`HAoF*Z<|; zvblGjnRNu~y{}$qX?M?X^1(;Y*;&sLsSC7*5XshIL)D)|7ZV8%5@s4_QZ{3lZgTn& zxbWY9K))=A9ys5iV$!Snii!c~#_ro*)NeL!+;0$p**5H5t`_Favw32M=8Tj~37$@C zvJsX`C6I(CHSLNTeZ`LoQ$0V|)8#Eue7krO2>=>M3w`?gmz#-caA>(3ba~8?Iv+2c-6B24oPc7&gjy-GzeLx^O9* zTMG*9y!K2Ze~R2x!J3JFRg)NZXsTxR3y#u?u6>Ca=Q&#{aRngvNqF2DK&7hgSO``st- ziRugFXaU9QUaY#((ztU$%jIT9KiZ`!J#AiinurK8f!MNCrIRsMT&7t=fSf4Vkf8w^ zt_);2I5ZC}h%3||8owJpEt(4JWR?#8!e_)=If03w<-DIerG>7P)98X&rLuXFuebZ~r;{g%`2q(slmC z&;U#~7@fJ7dq47N^u#$-Mig}x-Nwl+7Ed42Z~$f4+^-!bf^HnUnWcHdzEXVHu0EaqqM7zw9gNyvtpZymec>gE8Otj{I zy=-&{laCUL2C_v%1oC)?(Y+5MhkIBl6q&nNM2-;p6^Jtq4Z3ryFFFJjcLi5SWfh7{ zD2MHg#m=oHZPAi_(bRM&wH(7#h{Y0-9w~(o14S1YduW(Y3J{FZiR0|N;{%kGx%>SezottdTZzJ%7SOMQy0OJGRa}#T{led z++-EWPy{JGBj!xf6~@_fq{v$M3V>3Wi$Pwp>O>;7V56Q7pje@p11mx$ik=3YmdklbO?l8d6YWck96dGZhcPx946O0In1Vys0s!88-?kXL{B9p>-8hmCuV zlY^o~8K1n9_MIPM{|8?sn{fO+k1#oXmSs>EiRkxu@q1sVx%@INK(c;q42-mu!c9%! zqb`Cewfsg}=8QOO0td(L;6uOiJJ`lakO(Y@-Bm6=_FbO)-dA|n$9}nL46I9QLXC3= zuricDvKEmMuGG_#rQyuGeu1-h-3QWQlU-6Xaq}S%OKqXi!Ek>nD*%|U!;@P>kUL# z=fG-+gOEyxrUSrDyTl zOT6@#-)3_Zz?S|@+%>xHy@N|QXNFDP$tMXbEeCOf`E-+ae)@N5kKaRLLeW5zuhO6Y zDUW~Y580kyWR&(0@pe#NvJ@x-_9264g|peHq826|%1JxM+Own*Fe|jyAtjMz%nLtz zfuH=@mpFU%B0D)#it{+8Wsg{dW#!0w!Dm6n5eo(ApcvNm*xdR5CJm(&+TzB>MPLMS z$NaVPfYd;s4OMsRiHco?|YVEZHZWt!0~_ zmQEH>b?GL|UDZG&(vu}suV>9W9yoi0WJJ<}7rhj>P7Ic!qQOTNfXWclh3ZQ;@| zYsTFFOTW(awtMNcaaUY2-Q_3v>o5Ny$M&vrbutDzP$O8N1SO!ga>`?D5$6L`i4(xc zA$vV}4w&{NOT<1|0dQn^x84L?JlPG ze3(%ww71^PVccR;5_0$|PyF|9!v1-}__zaP#p71r5B=gi(G=>OSQ0W64Hc|24#pt; zm^&Z*I4ACVm^|9>a;PpLi%UHH)jwi<`AMRH<|ReN`D~SIz+h;^H~dt+3aOQk#k`VF zEVBrKP+U7c0g(|%#RS8WYF4LaAPPnE>Z{x?XfdAvovpb+?<6!ewMXb z>LBb;NjLQ~D+^g?vBz+OhFfOf9S?1Xj=HLTB*(JdeXr^!t1Zxud>tU^p_EMs=Bc~A zW`jE(c#vBk{3z&zfRSZEIedxdzVwIa(?13~gzR}#S88#DU60X2 z9K84xmREsm2F+=Dmw!`F>`(W!tb!)2|Z|1SJMVIQ%J>$#gdEtxy56ieg z)E2U>!O0^;@$6)BLgz(Dy(U`eiC3>O>JF$ZPiL#G+-a+MV$X9lB*J3JQ(ylR-hKQ1 z=*BIKQ^evXyYKrDEj>1xVG^;N=`Os$^MCbqMtR|S9jVfRu8Dr!oAI0jm{wAe`1PAc zI%zn5?|ZrXlb?f)9WQIP4$XT!^Q}MO;-lYYr=K&A6G&9P{n7UhtBS1E9B`aqFa?3a z^3nymtIrcNG{;X;cFs_wL9JuDyUBxp|DW=crs2ZlUuSD^o>+{fZK60C#%j&2)^_A# zxt3rD2rZ!*fkMcA4L3Uk?@yOiIUuqaZ;>}|r3(gBG*k6}}=x&geQ99td!P(A(TAW(JXEv?pk54iO(U^Q=T_29Z~kU_~Wl~_`R=is=vaOCL^-t$T@ftw90M!VO`3~cXfBgokQ;w zi|*3PeCyx+Yr?^EL>A1lqtU%)niN?|rZkB~+2LKk^)EQ_3!g$(Alwm6I17jsMyaD* zd70O~{$E`w#sI=fC1-fpRyE@Uh(#$X^x{l`aq5|n2vy5X847y_=+C_(MF=G^>JK=0 z;!&uf3YRT=#B??;J5#0%Jw;sL{UXg-^;zf@y~g39J%o3M;yF2^lSJ@|3%{k4C9 zjavwU%?~*L#XsQSJ6~X$7S)5jHef3RN*vQ{pS*$9b@SuqT>9g;vXVKrb+6CWsIJ!0 zv1Sn2D(HVBg(3koi-!bI3kedK5G-S4FH|`CkKsuzGb9OD7RrO4{vGu6U34-=MF=)$ z`TP?+{pJ76@p6g4l4)+(%LPldHb4eY(7~Ct?%di!6|a>7?a;i>#{4xl_Ak(u1IEek zbQv>EYDfyHDeP$>c6&%ks0OfFEFn}pd&s~i#>I$T9?nV{fc)#9saZv>E5V~?7-A`8 zLVb3g_pjTTpG(ABP{oLr#MI`5g9|+UwJ-4C?eE4WCn-(K*6#nu-g^dFc3gRWzmu8w z-e<~nwMQGE8y+A)kOT=51ihURMUCCr(P(COXE$~g`)w7{2PyPH-xLZ(NQ%{ND5MCP ziE%MTn&oml$r(BfEkFPy3}L&`K-=mr``)`IGmk!G-d7EB4D4VSvk6ppb$8XP`|iz? zndh9pIh4{41Q%<%jmw;S_-pJ7+xTustEtzFfM$ra=1Je{+9gKgE+i-@Y&ObG_kEnv z@jGZ_fy#h}2EX|tPyNYnF(AJ~eSr!On#fJwByK^y zy-rY@gk7RRhYK9K`vW{%Z_{jEM0`YJmcTGV>q>O*QTD#`mkWEqjnS|*=gIxh(A@{}k~2Wu1?Bz~Rla;d*?L%0 za7PV@+H^vQI$u+ak=-^`W*p%xiwCY@?~(lkTV(2MgKl5snLqmX49-7~ni-wKz*}q; z+4V=sft7R8wD{)aA}hoQJ{`fNMNCH(TgIJFiZ(%VVcJv1q-fK6rMB5*(?o)%T7c<+ zDnhD46Y2F~P1YAsiP>HDhwoPkXeAh>M?OMga`k(;N?KfOOxXF5-D$N;)%A$S#F_;S zoPFv$tUvt#%XfW__r{Zo~LRW93$!&q3cnV47-E)+apZq0W9E{oc{I4Tzz)|4B zlo%ZnJ%0T>bRE$oj6~-O_Pym@9J=vVXr_d^CB{^+vlfiA=x~v4xI)xq5~*r%ZAaW( zrwVCVPFs!A8>d7PoSc2v{?!5U8pkVZ%ZX54a})8o2Y?FrwM1CZuZx65pLvoWUS!65qaS5Z_{qAxK0+myIsd&yS|(U285nLJ=ck1H=yX zE!fnG30<3d|E{>cJaL4@6KTG^lSA z@x=%j#d*(Cx54=bzrf1Pci@J5DNThB5$8N%YmM{Y`3ei&7NUs`T120oWk{HM)F=M8 z#JqHYWVD}<(hB1WmiHbam;w`9T&yv^<;tVq=E?(KVzr&7qd7jEU^J%Vd0y1}QiRNR zj8wmwPpe*zs$W#KqtF&ri&f8Rv(Cn2U*a*R-14cP$E+LyH=?CL21{J`{vYS81YZ2o zAF@zyU_t{3gV-`V^*z{LBf3SLwW%6kjG-EnY|0ZAHHHU>7|LsIe7O<%ipMKHHI|K#^so@^i?WRVn$ zi<)f7eT%dW_!$zK^dUa&_?e~YMKd0LM({I2I|W~3V@DC|+!+z7ZpL1Jh33((^5DPw z72@_~BzD=cwMD8Shd=mJocPGkusz;OU5rrUC}{8(pXSP=-ym+S*sR zh|8)hN%2Mz8XFn;RBLEmfeAC33(q3mi0ED7DXg8P?52QZT5!v7=Mopb@yD$0S;CY{ z#MsisDeDh>l|{dklz=3F4cK-@y!14!_juPJ!J`|OFgi`w7fZ_6;V+%087?3(X|o5H z*7B$UQ`f*mT5J;5)CND@rat=|AZfmJSJ37%YEoZbO)5kdvmLrK zPtlF{ruo=y6L;3r2}h=sG40k-EvxN}ohKgTso(iOxc2=YfyMo}SVC-2)3S2(8m@c$ zU0nH#ZQQIu?GB?5c=3;Zlg(!zXMEi)ESx-vEf*<+nc><*f{4y!N$J#XR270L zXvE>G5p}gdrv*-x#n3REUS=F-5NEWKV8G7Wl&g}JfsJM_wuEO;0gKP#5ZQo(RALY# zxe{)$p-HS`E3CT}wid3%N=qk}PAit$4aSr6iN_yWhRnbSlWK*@a32#hAZVnrirZdi zxoh$cA3+Cf7YkfjUZyc6K{`gUWO=&HLj63Y)&z#^*hRLhCF*jViibX8v0xOj9Yxq- zFxz0E-bu=}&f=w_(}F@fys=y!>}OVu5DmmwVNizt0*kXPDsK=M@U~=IModThnHED- zJyo1AY&Y3IJ5QktwzC+FeZgyY^oJ73@<4v8 z!P`wlA|q*7WX33Tgdjv?F?sSvDVdl>)^vcxB%NF}Ei1Z(i8GKAA1f>sZM3YLCE94& zQAe}6f%*iR!FZg3A%-O5NfRhgv2BO!sAJ+a$$!OOdrz>&q*_F%DPv1z2MoIzBfm`% zXS7C$W<+DhOw53tF3?3yx^pXO7{^Ae*oh^GrPKi{ z#X43y$|$V(ZQRyrOmJ)>c(cI7w}dzVmq2L0M8#6XhTsYY;#sI$LbuKpyGSh+P1~Vr znK7i0AsrEk2H!chwv$Eybhx&_L{H`9s#L3?ttT{f%TPP^(6Xcr6ES8F$-LX z1+^B*vrrwSDpfmURW>m7IU<2ASz*HuSr@~MMGS(EGinnF(h+Byu(Qp8fHN%xEnd=m zav~^>KuKqWRtvlzP;a!i-+|F>N?Hny2o_aCXU05z z#qods*~9Ea%Lvb>-+d$ZoES3HfY%XM{1RXO-Z`E;cZE}RM?DR6AytY^R2mVYRm8#2 z8disv>kcgO{+qAm_LW5{b~s%R`8R*`5bF_8CB}?DGrMnNo>LiEw1$&=7x>sauH)n) z4A{m-hc`=HY%9L_$XTAgxWoBL!<8oBRZ@FK6Xx5BP#P#I7>^51?A^ zjj(0+bN^#6@SRhaIk#OiYa@*pg4%R#>M4v;I>Yj~;P9RWK5*+X-m&ihHf}Iuz#lwt zhHsqOpozlrK=?0y{1}G|LBo(ixI$ML&W1z$%9kGHnaeYh*mgp4FA@2~+m7&ooA2t+NSaV?E;tZ$G%qfBOCtET|(=^6VD;Z(n(s zE1_V2*YUG=ALU)w4_N3X3>9jzY`Z;t;ql9S?vWSSF+vd|F$$%^4J#G@%8mX+Au0JLYx%Q?gNz%Hk3Vvpz|GX);3TVI{#B+_ksA zmU#Y~RW{{22E?yU9dLd@dpyY%1oF6jy^NL4`1dua7&iL>2z* z(X;&Km!D=6LoFsdxFj~6&%h$<9KI3Q_6#mw=E>*QxaOzt;o4D2X9v946g+YT8Zqo` zJ+oL6wIetKp<>6a@VgJ5<@3)?nMi>%o)|naTK3TK&NiDhm_Vz-3mYv@?+AuKV*^7B zCVCnJg(`)nmXh-h?>fq;99$UCnm`c(1f{Dho?8pN=tmq4p7n`Eq@*<4XbjZlULL)y z{MI*4bEZ)`=}~$~aMTn^XDmUXa}}EuJigg+!B%+VsiNRCq#~w}FA8Kgie4TxNo01;fE%%P)T9Mvm_Zbg{#T zvefO++KfHPm<1Kf@P@a&=Ai!T#;XeW^2FPie)HcY-11BMM*SZW8qXU^YOondqE=`q zQ%6OG&bV|$RzqjfLvM+A4QOmgzML(!SRQ=-BA1<^04l9n)QEEi<6sm84N8mBXk<%U zY9q{S*udBdHYT?hB{0Jo{g&u%e8_vxsMC6W70qk*UH~bj-3s&V{<>vGZ#jzHv;Djz$8FjRX`M0bQnL19des zv%ojbM85dQ=`0=*7*^mtOj`&^h87fpQ<{*QNUl2bZm%)48fn$xqvfK)x1YJdE%zLS(DBf77dY2iHr+5O z7Hh|%Q-;4Kw~OmXgIlN%rAZLZmwM{u_0g_)Zz(Z*{+4pJ@g!(fBZBPRb~-RUE1K* z10yW2j=_UAMfQuRr<_R$@}F)zl$~St2@0QntasO@~+bCqMQv zMzom{t89EQJk-_x%Xe&f+yB?_`NSa zz?O&LBj?UvA<9XDGdz1`LT3yX&!U;}5AVC3w;$h2WmBGSeaEbY@2++HzhC+en_Zy5 za{0;*CLTj#U}|B*8D>_|&a+i4aGu2ziO zEo>Mh~RVj20`hJ z;3ZOe<@7|^={ihoSS^Lsg%YpZL@_iqbWy;11_a)A@-VkAM^@rCRs%)sFu=r=99&pt zhg5dPk)iT4@4uVh`~25YmoN^3O{o$VMAOD#6srLnh5cj8b<3V% zmbpfSnJXAB9pH=KEZE+tF*w>b0l9*B)|*sCx3Oja&~o32WlmHZ3EzRCG!3D2tS+sx zb9o;d+cgA97SkaaK1P!YixMMh;44qR!1u3QVX`&l?Bz{bQ{g0V-QFSp{G)H>=GDl+ zU&2a*Gd++t`35R!vGz8xL5u6(k)_|>xbdn2UW~z6$<7m1-$i>8-jTeEZU%bGDGcO_@ksdzx8&O zM?*}QCHRa_xj6`hD*Hwy%Q|DZ+f2ZjnD7b4RETlxA6iNis7aDrv!K~A#Z!}7X;t*B zmW~BKW9)ZQ%Pt5(61Lk64ZrZg8xRYD5#w&cAgt56L`98R#WiX`E!1|I`=5G|FF$jU zsU0&2mJ=%_Kl%Q*vb{Y`!kJnTXi<|Swz3&@!d2u#(sP?rUi{);P<5VC1yw_Dl^sOs zoMqL(%?B6wryshDQK6{#bmZ4elO_$FfKa= zVS_RzU3?n@tvL2b+1IRG5hYH(yv*4_AW|# z1Df1P60|d-n)t&5v5Zui5%E?SbSW3=oZ@|QSW!(ZG0jCQjLAk59p)+*QAfZ?3)ti- zCt$G&K51wQSCsVL|yA*4kNDL~tVq9Z|(lg)B+igEZ1iFIg9f}pOb zl3u;0MVF9&p7cHXbPsBAJh9gCyI*^bOBjp^>@&j8-+L?9mVsw{m@CK3ExIJz6ienR z0El4KQK=-SR{+f12D`R~sVTS^J(IIjjy>=Uzx@7_5GQl;j%eaN#G>L#81Oq^e1K;r zfoU;hshx7)b*p^nro(95#%Lh=4kwN|e0Dy&`g6Lj zLmdi4EtS;l-#aFd+-iFZv4G;OrI7(G6=e@i#^4YJCYw-NL+evbM>JpSDX90N+Ts3!BNMAxwk;&EPa`&mvvU)t=Avnqj%kc zjZ;Q373`vkNPx%IYX0zR4>8q}@4mRj*B?K{PrP*xMgrx$$O9dQ^;+3x2)0EKtSV8J zwiqPM^=5`wleGENQi{c?;7D9}D-cxJY$6jgMvE1^uQAdk^8|G~-z@RvZ$3?@fLh*u zWXRjDT_Bx#5_-*LwcN{E^4YIG$l0l&#;~9*AGrM(?>JIXbTbAaIp|<&G-d&jIf zTNC{G=6z#+{JrmBlnotvB)31wtI6~XfW%f?T&lR{$X-mS7-cVZbrI)FW9|oj@`@Oh~hSMk+8W4JVK7XP|ZR z-ILv#O*vVntiDHVHj$WZ7&Xb7NtW`8C^LZzUF198{vJD~pdheUB0vAWw{U#iAU@DB z!fMa3OsR$D^upv1$z7o$bSztCiHNbx7gv|Zq5@4b~na)m`UDPvMG(tOQc4bd3Nx7^z^ zgWk~bn*3}=cYKiU!s)zc&gnDxaFpCkJCii&D<4_urVPzGm9$hoGE`4vQa^PujOXeu zl52p;$u+V#C>RxnSSzs@^7y4~{-@vmQ&z1c<3?)9`+G0&{L?SujHirBgW@gNV7S}`)|#4N9F|B`4j?)VurP2el){E6H3biy zxyns z>>ML;iCY~azU#OYN@mf4i7WuiD~rh>GDe)_!ew+!yzsThPBF0qL?;|8EkAePJJ@Hp z76_7UrtzpT3{^R_ zyv&G*jWG$Bkdz36bA0WwCz(V`t-}7&^5M4}<~&Y-veppj2VJxR7)Q>;yuQQZKbg5UlAK*lj95d_EE$R8$1UWEjRC7WaGk&Efc7X@S+%O0PVWG3#5v61iTbjtysoz zVo^A?iM?3iqC zk$nEHrd5E?Q;*cC4`FJ=Vq~G8aL@fZzscP6T0Om0OPQp>R`*Hemc>wh4$>20+B> z4hvyMMa@TUS)z+4`HlOZ;erg<#PAo-Uc~s8fBeClIPPE|Qy^sd^(o2%i?_b_wS?l! z9sA?c8x-1N?1X>(k+*X2 zp;J8a!Wvthr}GNAr6m}Qm4vtxp(upqvFGIK9zJ&GQC3}p4K;?yeYYN?36^i2xyYr> zDWMCrnm|NJaVvo`3fr<+Sq`j@x%cKn9A6fkpHW3PUcfB_VZtoSbSaf8w;$cdhwiwB zp7VV}(6NP`^Nk9Rsa6<|?#GcE*vcE^K=UXy#93KvgL%dlv@0 z@Al)|bz%|IO|hn6Svzi6a4g0w(xHNNu&0Dy_`q%K)paUA#cH69Emhp+#6W3=pmDG@8>kO}YsZHMIp%tk&GLcg#Qf=*@iP z`xiO4Rx@c^I(7JvG#eZSYr(o1t`znzj(E?BBfR&9y^Onal-{x!I!=sWSv})mIZ#9@ z+LS&@$1nsweA__^Q}8F>e2xhg7l&+}-{EUtd76XwoTMxrA|7vMC=Kq$dnw)^S?V7g zub3_OgX6_t{qKl>@f(y04n^mt1hIs$%2ph)VHXK%Sm-u6?52q}YXaV+9KDDEB24Ta z)^sI#zQvAZ*RZUYDdLo_7_lvj)C}2C!z2hz6Tk<8cA1`=yyBcQ3<_mfC_@(*`M}7p zHTY8Tk_hKcvo z-s8RGf@3N^Sz{=iWmH9mE;2BNQJ7N3ZG;Xl6>7#zWXzNiO{X+X%fz>|2;#vw#X6xZ z3PzVur1kR))~n* zr5ex(;&Zb#6$^WfJ#UidpF~5DA=|E^DHoVD!mRVmx=7n81e?^AZKN6~!^$vr1%s|* ztXmYiiTIMKJ;Y^WnWB_o#FE)yY%k$7X&|O*$Ph1k*qRk|rNg6CQCXy6ksT_jiQ*H$ zQ4GUh_#Zg%-k*FeVfeDya<4hyHy-;sm;dcAv(U8&N^55cQXj@d6>3`&RTxB1p&b!L zTyE82vK)0FNW!5qara)=%SfUP)d}#J2xt1C&a=M`;J>7tnmNG^pMmpQ!7+{)FY6%rB z7>neVCEDeRy5<&{#b|0Pwj{c!B~Zj9+L#<%3?UBatfR3Fr3y}a8Sq_uEJZT*918V_ zHYDHpGBvlvQmds40c*)%Crcqoh@iFL$2m07fIhBmpUtaUwy4V3RGmn#6iY20iIikUZQ&VkxTPNLqG+N3|qq zNpK<6IN|_nJi-*GjzGwBz$6=~=m^pfjU}kVXk=hIhz*!@KRUO-@&Ep-6bmb_B@Ev< zdh8F5<(u#3;^IDZ{cMtDv5D*JGRn@-WFdkKp|B}XT}+QBG1Cl2JOg$>3lN*-unj(2 z^143oqCsN{NR))?lYqnsYIC5b_E*wAODHqNVF;8mA!>Tya+M8pTJ`#E%tKHA%}l^3 zS$Cqz`9Z4=7s{;Hm#)`EPhlc1WKzl; zDv~}|gdl05aC7Azhblxml!gH?Fe!D@{QT3R(BBhF?|mz(I8!59CoL0Fo3z)sw-Jiq z5t>xc6Np(7tMA$GDkr6%6^!O)Y_=Xpa0<=~B^C|4*bL~>3^2LpKGzfMrNd0tte;}F zP18b>F{Wy&8z43td1@+zN<$eHjo>BCM;i=L21yaeG`QQ}_gaJf6^+*%@M0ZM865J&ssluF2E2*7nW1eV|?iRZ1!k1i)Bnf8{@FpU57uD7SX~;n) zN|w#q-2sjC90(!Uh)Ro#aULj$Qihmy_Oc33{x#+kgNs=qH!motNkP!-(5Zs-ZZWBU z-v?`dUJ~tn0Z7WQdC}D*lto&g(h1GvqkF`H>C)nlC5Xw_*?;s;VHXt`vs74m9)d`m z2er<19g>b9YO)`n(i^7qm;&ZD>2BWUMKmAgvo4|LM{i=3KpT^FmVE*!-Y*Oe+$92sBpgs)DRmVw?`7YVNw$*@Wmv-?vys{7IjwAw^lxlnP2DC_ZiL@;y zQc}h^NWL~3Axgko$#{H|kELmWLk&ItFZJ5ft{NoWzkWH2q6C|}6q2q>NL+_LIY~j9 zWWRdRhUC3waxU6y(I)_p$@ezS6QZPb*T-XzA4oydx8hv-J*QWa?pAvCxIC8}N`*w3 zpLBBRc0LbGevCqL)fEkh3F+C-%Mpg&c0|<9pPkh(KhY(mW0+rWe=i~hXpzdqxv&{c zQr59*GEKMFBD6%)%dDqVPE=3>ez1qVZ~N#gh_u%}UYCGhy#6jOAG@9I%)?aCq@3IM zIr=V*e0+H)0dibM0TOLChwS%kAcx7S!xpvMRY_>ntj1UBy>5g zNRkyQ%)RKN7`hBPNuZRxOPc=gbiRWHBSa}ur5sPvyf?&XacZbE1%b~n1*ZuE5&Bci zOYYI`dyOXS-mR+^kX`$c^lW>Se&yfCm`A=V#eI`)Hbwn%qb1)i?MDpZMQ6GsgS3(KW^`iwEN2Z^C+p^G@s~3 z&=8RwfSm{<_!GzvA=1>~;RS*ZiBV z`Q^Q*NHV^ZIeE*VYU#vr@ZO(#S+DVWj@K>V_uTU-Hb47665m zqe!Zc8=e2C*ysGfgz#o zm`pF=+RI#e@Jqx~PqN~ZQDU&5f8QR~>o}~2UDjyyq(-P=@xGsZQ?BQA3wVH)5B(As zzVUl>W{S&d9w~=T|K5Kte-Af|)W+HUbH5{-{7J+zGb5UP$GPLvKTmP!I>Mx(-MY;5 z;#t<7dy1`7PcYuOz}VDi47)|ozRm#IXHHW^o75?3jiaSxdvu87AO9Iv-}6zzXc379 zqeEg)2C_xmc#541&$9j8Q<%8>n*U+E`jHrhnQNjDjbS!g;rP4$qc`PxUe|yhAHNlQ z!+V)M^JNygRMfcoNdNbJr|5(J>M~f;oEN5L!TMmtb?^QNqm%CDE$#W6%V~QI$N+)j#&A?$Jlr8CuoNUvqe)& zG=kSici|G>`K{k!@r6fN=^DIvx+1^Mn|RND)JHE)lB)HVXiJ74{?BlOzujV8KVH{> z2Uz;(KjPA}-=Gzt)LaSAZ3y_mPU(-{FnV>k?iR>WwKwE;pPRSyQjNZU*ZF%zvn7;Z zV?aa*rXq~?vG>MzqQxGRDn*+SyoFe-FurBTjr&%3>a$Qk_B9rDh6_qCLNFoY6*M0q z(}g*p6@ddMIQE{869xg|zB=`QO(+RVS=h)jM|Gk)7saBILSl?!vpDFrd>PxDz zyZ5Fq9;QVu-wAoemD~CFp(_7Np1|MTkvepdNJ-EFFOGvB{FyiHdR})=+C6u?4|nhu zI&0Ylp6%9YP1GM~kNjwj9=6#_LdEPsr#Ofeq9rakT$Jn^?un+w+lFYm+!Ht0P+&rd zH;&F)8dD)FM=AE5pflCH9cS>An)3E&$CL+7a`L^OWLm9|pvk%SZ<0K=i@hmj%qT{s z5!iR!ih0L1{XzCg~2^PNxAaIc)!1#@%o!ki?HzF zUnIdWE$D7>ssH!ar`hx7j3|yEMgDNfB`*VUTr{|-fKLi6B6L#Wsph!*)|9liq_zc3 zQL^EdI9Kf9%E}Rr-}hm{XbD@6aAtt9CB_suV=1h|*a2!67#+Eu;?Pkh&Js+LnMk(K zsRuq+9}=Z2EOk|~=eis4QsN~!)D!}xC{7Y$t}K^0{+^H09lw*|b$2t9B^u-Ctl~|= z1tgQo#5AQ|@zTl0hK`s|9f}|^p$Wnd0eSxBktGO|)?WVBt9c54 zm(Po$3GE*>P`v$Pj1Ql9Q?KU@33xGnWBG5Q~!NTrww!2BgRfqR%ye zgt1qV%om7AJ0q-LLhETVFA&AerJ<5AB9MtZLK&4X+2QOr?&sM4BNU4VXk!XYA*LFE zCQ?wT6=tx2*}sptIE3}x+})5;`JSU-)L_IUoVY~PLaQCYSP+9q1=?anldyy_xfdN? z0T3sTAK__ZV!%1WL<)}o_`iI!FXxR3cz}KH`cJs>x&Mdm+*1h;J!duT0#bj}h9Wd3 z7vxOh2=pHjNvt_7nK7iTR`G|AGrZ|WZn)`ImJVKv9V~(yqqfSB+Kjc9l=_$u<_k(H z_T+%e_sr6A`OFhM{@Gt=boNQcp`({LP76a`j51Fky>4KnGcG=IKXn;7^sY}(9lZ@H zhk1#}#1CzmuAOD=`ww8&o<+7V<49_&X(P`#`vlx2h)wP^8Jq8|rM4x$7@&5DAQZE$ zqy!V2Y=hnVy1%j^q|U=jo`sOo!|XFK|JuI=UAR{=EYQVBdEY-|c=-A^`*Pm6fEQ!f z_hbKpi~rYuNeOdgd>`jO3I&&|M=E*?ez=D?SYSGxkobHlmkk*FaEao;arWGF7l&?m zD+>otV2Uxp7N{%mY7t}8q>LSgz#xJeLnjcNq4%Xrd3eHe_XlGe8VaUx=`_pDHjWO_ zf?oSA5>n`^A!6x_0n<`wP35m}`GGI;*wZia!C(HbSv+(EV^YAEQ6Y3pcP{bhm;RVN zYiBsnZ6=qLT&(L6V~Ocy2;!KOC9MkHmiTfJ77lR3-S1`j+8c;QxbV#{bNRuqupBq2 zm}10}YmxMooO~YnfxG?En*2*!yF$+b)YQZv1LyMz^35GTco>N)#A3+7PyF*Y>ylnF z-mriNSbfJQx%9dJn|S)cB-p1t@=jl}(Er^F{(h48bkVe<1xmuweop+<<&zRy6s&IuRqDs!E3Oi6>uXo7AQ8ervzs*)i#TD_7puqa9RIOV@zCq460e6 zQ3llBVnqn;CY9ZyBDta%Jc1Cl4|>hsWr8JAbbyrn|LnbYlwH?#=J`A4-0)Jp$`Mrn z3W3NV2{4FJlqk_OCCYMBV@pnQP>;iE_t&bTw5I6UdYv}t)B=N*ibO>u#5flq4PNtIY66iGV+gGAbM8Wd%XUnzF}x%) z^$rLRE!(FIFa)GRvJ^*b+cJoZLvLv$fNX?WsvJncj<>y=uHGI-4nD@n`QsFm6w(wU z1uj>Baw|b+FWYW>3r!nu!o_(^6k}unLQ>O~&?N{_$F_BH!;k(nt}@N(=O053oj{#D zK{`8u4kSWkJ_cx%OT9>h^SS|283JcXh4c(WQKVLAChS>9uDge(jvi!`C#fw{nHZxw ze4fSWVS;3qoT?GJgeYx{HGAEEN26tVWmg#Ce9GZv*)K8_Qz@wzx)^--)z946ydy{ZLKnct1Y6!eozJS%@HmNF(Qw& zQMQ6hXozBE0j`v~B-eDApoPnfp_7NGSC{DBypg!Qoixg0 z>7%LlMlPILpjfPs4-3?0Mv%7V<)fTII)foXp|MiqtVWV!A!uTuWgXqS?_%S=yU2I; zA!3P;l0-{XAdzW`SzKUo>KtdD`x3LqpP@WAfszJg9m;702AwJ2h!u^6ORxE>rF=JP z48n=bz1Mdv>N2GGu76I{)cWdP_%*<59`FDi5B(aWFFrzCpY?0eS_~2Kew#dx! z4mMu5gYND7ad9hM8+Os%yN>1Ivz&SA5%Q%xa&{QIFpbh)M=)|=NC^S!^2|rA)OxqE z`}-fFuyHTC)Ja_^R62*Wby5*x6@(%}wf0hM?dJNeJ6Jw_h%;aM4AUo{qsc5$&{bq+ zE8V!JFPHDX+SJnFyu@}U-Vq=$1h~%a^xb`RhGf1K)+FF_?Y$J<{!igE|Cv;1oZ!+~ z`D+ZTpZ+#efH9ehPI;-y(a(OC{#%;p-Fqi4PzaT|sb*1oNuk)S{B!Bw5I%QzNSx6q zDLgMetup??Q?$*WrA^OMG*u#<;G959g^?DO34b(FkJW`DCnU~g%0OBF+9}_53&SQ9 zF2Q( z&euNs3ARkmu;>2wkwh_Rp+wYl1G_eEW&ZpzMh|@*F)_s4`QsF8a};$IrxX}Lg(CBv zTiNm657M+@8!nCz$vm^e=cr7N61X};Bj@QK+{D=UEZcV9Law(8blVnt5#_t$W}Ye^27***dT)%CWtas*o=0YRkOv#m+~uZW=wIp zNU$fhq&Te+(vi-NGI{hVy7UxLlAwe|3tu=>&JpTH3vSh8WK~hyQ(VQWzv=7z0z;6_ zB9j^7NaAcJ_L-@*I@ch{W<@+41cF3345^pba+b(hLf4QdlUU~kKaq|?v5eI@T&an@ z5BvbrbAQUYsbO|IOQ;npi2X4}MVdG7p?Tw0?A#QS$DZTFlV2n^b(W$rL}AQap^eS= zJxF0-3nq-Ij-6ue@BuCyImE*365F?Jqju;SmM6v;86Rg|dyXd`ImK;vJwQ|6W<+x@ z8}I)BL8-)rFaJFOhA6FP!>K?fxz-4Jd-+c3yMUig^ivZSut5NO@1b?~Yi|zu-D1rG zUPU=te&k;>^WlF=-Zh9NtEG>8k?C5)>`=SOOt^ zdSV?Yo8{(S{|<*=Z5v9aPGYS^N{O`^C8U>?#vp7JvpB`cuYDdhd!ACdh;ap+%S0eE zE~x;NefgWRF{pA;{1X4SoyAq>IREv}Q5!l*-`;y@Zrg};1$;jMU)2VLx@agVfS43# zElwy>D{#hT%C44r&7#84n{G(|;80AUp~TDR@y>{tFj77ra}UZ-rh_kP-T@5h88%jZuq`{W~x9e9|YmJ+&Rk-7#X z#L_X)-ptsG2arQ!oUf$>8@ADR=Ua)&U97+Dov=8`!qZ1B_2LmWBey70 zp`g2q{_F3+#%*5vEqgHdM|>t{DJ;@?wOrTekGmSeg0L2$6jC}63gL2yBqbd`$(biU z$>Ix-)0I>ZI`T#~+3_@7RYkV@u&Zv`)h(qJ9X{uO%Sun!DJO>c=fB4E;pb_JiZs7v zJw`-;MhOc<*{jKwGvN0I-iOYmj=(u^nzXjSi4#Ydn_J}O+wMUGEh|Em!leiaX^^9L z_Z{>ILuxE8^a?ujlcOB^%wN;3=cqeHY26?jZoHMY!JX`U$NQMxb~AI+7wEb5UgqLn zqKWf7_doxP($W-d#fa+C428Hz93&8cQqb4l#xqBsXY0oG44*wh$yVqa>_u(58Pn27 z`N{e2?SWP7ivX%T& zw)l5SF<&kR6*xj`DJ3aZXlBoyWZ;$rwZf?R&9d3po)2g3UYkaO&wV(Ohn!HkS|-@0Z_r8b-kvMsQK zOd#6V>9cj$2^0=9H_Gfw-{8V?U!!{d6uHV0kx3bPTrk|;g)6nPJU2qIxw9sg+<~9rWM+f%r}JLK=NyM_@HZ)|eYPgIStH6gsmByKfcnWb}ZPryu?VQ>UIK z2tv9C_j2P~A0Xe^n~euI_C#47!wQ^~*f2m>D?IiO|G=hA8`*j5e!@~79Y+v?)HPyj ziBrk)M4dCA8{ypX3GV*DFL~;*UPQJuAqID_y|tCI&wq_VsfE#raW=H|po=5e_HND{ zJHgGnucv-th@@I!ZgG+AdvB&Tah_bcj15W@*KcDY`U-Kn3^Z)7SDm*80p~lM-NwDq zctDs;?%E=$7fY=Fv3~>N>MvT~3Rk6s*tYK-RBrtzBv1b>u}LywWCd3Kj|4k>}k5(mHVagxJdqPaFktF99p>Al#rz)qjVOrE49 z1rd(OrAWW$&zxx7s=II17;59#zRhv3NQz~j8^I`rB}a-`7-xBAm_o-Ojsk%c7g>Lo z->jL9mx`Jxwryh1{#)qVy$?}r$H^QZJ((ywK5ydT2`(;U6z21JCMPD5LK25D#e4}d zt58;Dq+v&NAr$#wRib9r1%BQd_SaQV6W&UZ!QE}*d@ zSRrsCpeiC-e(={RbPjySSGk(FYCVJAAO0uMrw8x`usn zW$ZN6rV+A?6OpH|T8kD2?R+6J5Z)b!v`$c+C$AU0cbkZ@-aMWtO~|=~RKz~D5tcM_ z!wsz=w1PyfR`tK^puWv%67FKvdG*7=NP#j5xnzO4bH^xb+J^}uWab?QKH#NXRYMU5 zRLCvwe26FvQTY-k2r()kT6pnZMXwM7a+m{Z+q7dkR~;dIfRnLISHBLszl>3 z2p3`ul*>6pprKyn`H%l4tzk2R`|qNC`!?coJG)gmt~Wv~=~dxID}DxXjnT z^bfQ*x6#uQFfw$OI4n{qDyT0L7FwaL6;&?7yuuo{lEthJ@|SDXee>Or)lncbMiHbc zhuM2SJ$GI`C7V}@t5zLTxdQ7x_#deUF*X~Iw!c3qt*+rxL? z^qp7s9zdW42%S>Y3A3k9LUn1yX=UYSFI(ZI3veQbY-vXq%cLp<5ut3u3Mxx&vTi^& zbPG7obtga+O33DRw96r)5=P~G#XobnkxnDgq=BQ*T=1O_8_*#PYWP`BfA0U`>wo?G zoPXg-;#|ze?Yn8}UXKk*6@>-W*Vem(O^jVKDRwHnjo6D-cpA%r5x6$qPK zGqO&!axO1DN8dfH5a^a(HvZ_p;##ObeJ5Pi=qhjAMe$v~L?w))u3kaM-nyd>SeZy6mp%4XHMo_$y3w<@jzBnaCShsl zB>ff{{*fbb~DhLsQ@Zy)wuBh62`>o8mS123}w_M?838VrMfC!LM zfr$uYnZV@{P9bebtV8c2EHpte@Bg$2Nn{A2B`|a7$ze_&K15neC>4qb3?|6*0CG9X zT|Lx;2$O4qVjH>UE?T>LaaQ=YWGGPCOn$nOHeP&u`t$a!PppGXyu*6do^!Y$AdL!i z{rG<%T0=v~e+;hra@u?U|BBu7eP|VW`eq|Xy2N+v+h2^=3M;`Pzz?Dra%n>A+$cvr z_m|YhPob#$ZM;*S!jdJj7J)04>Dzxhrh9-&5Mr6GJfpc=jkV)XhAsg0> z7q^iYcN(vB9l7+BIRfW7_R<;R+AJ3iJ&n*65C$m{ANVVQa4{VGG5LA_m3&=h6OY-0 zp|Oo`sN4B-CqPJ~lZ1c}7Q%pHdly;?jMQie;2DG#i?$$?gfO6Y`}K5hyMc9E_ON;H zP26e3ak<8GM~;(gU&q#)?;+~l%6!nwl9Q+~LP)SW!B#6Mn+bNT zoZ80ZW}{B>^7ol<%xcI+kCB3^5X2As5-rf@>hJVG$|6aNw0u>q7sT7j~S z@l=tCKS-|#b2SccRrS_4U?PgTh8lf|(~o_guvYO-wpfrBCmS|}3hNYMTQ8gMd^^i= z6OKGV>XiXf)d-|DdLMXJz40_6il)lsk!R5J)1d1JmmolC_+bt?|V-&iT&;B3;HV7%LUr#+$Sm|&=dxuqg3R7KJ!dig~^DL%t?Br=q zo<7au#4zW-{trC*v5#=!=phb0`2>3CB#WmGGko|Uy9U>B=E!qA{nam0ECg)cwUwZ$ z8R8;F2Iy*?+TtP&7ur{|en@B0G9U@^Br+h_^>+I2`^hVEebx$BKj48NU!wo#{s0{n zaUuj4&}d3|X=KlMyBcT&W#dCzNn~oY)W=vj_B48G1WbaJDHiQ_wnF-OtRN3fU3A@W zJEhILsggt4(9gt4pRQc)5BJ)=kBldf&4uT6g?Mg=3kM!URF_DsLjwkj&B!DdtL|jm z9M98l2v8VnNUbHY7M%|oPV@i(AOJ~3K~yB@q=vO-Wj?$CUqbMYOebTS`qq=iO&M9o zKMXKlcmXN7B8G@|pm2!wb9!*S*s4~ge(Pt61 zh85Q9x8b+3joOzMF*e`9x|{BzQfwg=As{gV*8E*%%bIi$J4?PY%k;C4QXf8+&ET7? zE$Y>F0%!bt5;kkqi)^IU;+)2yK?;Pf6PRU`t>FOegm-^l**a&zjzAC+H+NC!-iQ$e z8s71Nwd9;3xiCa!_zc1%bZ*#8$L8Ip9+n-wl~9ezcNy%Q)C5*v#Nat!?3eI1yxi=ME>7y<>D`O|U;a;l#FW+c>f9iIa(wiJeSr z+t$RkZQHi(|9S3Ocdhs1eLtRc_O9+-)m8PYuIlQF=G{&hbJbG~nn$dPSk01=)4)^G zX@ivF+9`ii({b9sXM_~_J*t^DQ^bG1V2ez9`3DDUy(#!fDXA_9qY4Da2WDSr zj=NO$-Uy~Dk+oP>Nb&)4_UhHDySN)(3fxjir=Y(L18+(7_g@*kVKnp~`m(Pa+ANdN zxNBZ1v^lPe^V3VqLsk79k~7QZ6DL^jK2T#B^6tpnnl^iSt}?>X!!vo^L#eWarxBDE z?wOpE-F^q|n&lWB2MbK$^N$TZ;-+S%3m-UKtauibys1;9d0$bdJEMmTuDj^VF00?8 zccFt5Sxe@pn}3FVXBb@<)A~d$fiA1|fWZm8zz#Hb;Fk2MC78M-u}rM>+x`ALp27YD z5}c}tJMqHQ2rIJnILN_bsxTJU=ib!`kKBr}=6YF-15TTC(@25EO*Z#>N5ledLtWw+ zC^CK5H~bZQ){2R=$enr1VQ8T(agM`Pk8&}kRUs$5{AW??Ohtt6Gwr)~KIcnDUhr9M z?$9D|o~`(iA;cL0|LA0+DWqXVT1_n5j)-oo80`T?Wf+0Q`weOcdkwOw?s3YMr9(BZ zv9o981?jK~goZ~V_D2N!MSNbHiTT;d@yIK6)26pz`}Qr7a2IqQYA}L;A3m>0?@}CK z=Ff$9>wI@QU;Ep)cn^Sq=q1lr?7hpg`XWe6DxHPbDE-|Ln z5a#=1-=9MX8+gp3d@+jp%FhW_q?I40=y}r6GzAlx0)b-2YU0(-OXZU$%}Gv>l;ciU z9Y1w1M0a(y@XC|Z*#B~tAf?NRrgfvT3*@I{o$6+DnA zYcO$;=S52%GwoAyJ)CwMos{PsEp6(o`X2McU9~RSz1!?nht}`F$*0OzgB4&n?iv9ee)+&)L`k zzILv{>H|`Php-7?7_=Oe62*ZUt~#^;7<8c1LO|1IQ;Ntq-E7CD-ir{-u(=LWg*rVf z?xV_g*+uhs;3G+>*XGY?0#;9agCv%dCSza;I6|U_988c%5PtE>3w(0rvnbeDL{s_y z4K#USoA&*%`y-Jp8iQwc@gS4vu~d6FL*5FX2T-GaCpOxU=f$3l`KzK zY@l4d9W73~4N}U;z{1KQ_1**NU;NuY+2s!3o9+22PILTaf-d9v!i-?BEsJv}y zijdc~GoeONTw8+Y4kbkJF(t8hI&OYk5-;y@zsE)Gy=c})jBSFev&!HfUYH_Q9O;Iq zV1VH5brm=E1zbV*J#Y8@aP`5@AkS9sWp;lPAOG9$bF)7Q#w)qfCbYC9ftd8AxOC67 zKNY@iF_g!&KvVK7`jPAKxS&XAIEvG+^Be35H=Db&?y7XDkcBi!8kv`*K%r&%7BeMPN!82AW zuy`K@zB12!5C9coGqy$|q9l;1Lrrzlhu}-=*6*Lxwp$Uw1D&7_MX|TXg9i|{#Wf-CqmLn~AEt$^=Pr6wEP=!@R z=ZkemmIMX{@Rm5@gByhd_*bBw#05$!21b7n=bD!vSW>tBQz8K|sz7eg7IUx;ZcSi} zUxp4(6djugBr$4j8+ln}wXWt>B_84d5ickdqdxcaT-pr;pzMi8=Nj|B_HNSQrI9k8 zXEzv=`$32Ts8Uh|T~kSY*`=l{?Mi&VD@T@WO}awIoAY%qwgXVG;8I~GqFL;Bn8gWw z1B;6cjdaNe*iL?78G0$*)`eIXBw%q#(9nmW7yt%_GO#}ex7(8gKHK})@o#>#Mmsxw z-AQ1*cjojl$P)*NX(c$H>f^pZ#*b>+U=-$47@hqKEfTsNddG6Rkw8AAAQDSMGiKw7 zgtEdc#S`oaE6FJ~z9(q2^`(@`3!?BUA*O1Y+h|1Kz0KF)(e1zdAO~REssRqrh9Jxj zXmlqiNo-Bmp)Ta93a-^EeTQ4?64-^4H|hEKGX zWm@g{wK4t(BNI0+U!f9n08hT-Zx7dw8pfy1OVS*m2%8AQMzNwxGZeAqu)Gg`_ip5s zSZukI+5{{kH$S4FX)6i;mH$^bZ#jhm)O zU7OP`&wJiy%o`U-)g`(ql7Rv-pUw6Kw6DdnydmX`U zy5M|5?w<%8UlD?)2i+fdwzi2$>7Dlr@Vf^^ebGH)6feyoW?|t;cvG}DZgCR(;Ekmt zMqOD^cHW%)u3I4!m`WD-nPh5;IY1LElVkQ8#7KH}&z3-q5H%o9 zKfu3CyxtVcpst0$Hnw1~sHW=O>v&N_%t8%eHA?9$iLXkWGP_9{T+}q zFcGyANK!}bH@icm<}+8p?6pVPjMLAF3CsG0Ym$$WT3~9RS7KByyC6}0)G9;?TIz>%5>-P(zM7~x{G54m zN^u#Ztnv~LrD-v5EeD8i7}1bv0DG5ii6RHlLbBxrRG@2lc^T-UvLNpElb*-+9fIgD zQA+1R6f(#Ah2O!NsTn0J%~?-dAP#e}Eul5er0v^ZNSgsVuS3f@ySJ1C$JrrEX8tLV zC7_9PMB$wm?k6P%hM>CDBy;X(j9y7;VEPm#>~ktnhL5}4U{ftgR~14g z2u#>Hgfr!Ccw5a|MoL)3LXceN)U&_m>8;<)d|%p3W;;dmf3}-tGyF%fs#t) zf{+y4r_%@%*a@-wC~WFXlxjQ^*WYbt52g+Tpc4HOqJgDLY1g#A&U-#ux7hYYq_BlB zo=wscj}h#jG1ey%bO_&af-%KpKJXs@8G#N$qLDkZ=9iGhW7FApAoCMy5>%e5f;Cj5 z3EDlXR{M!(|A5;sNij)`A_CvK^_rOHc{4zXyReFd-zRuBfl_fFbpp>LJRIr5{hKkL zmoqn#EM-CJ7lhhLf$_5VR@3VxSrWB_@@o&8&!@9wAj-j-c9}C9X*>i>gt4r5L3n-i z$Xj_~J>`NWa)V5_UeuyOeF}H$l8h^q8U(o{wV{8i`MChc$A_=5m|bS(r$fgTkR7&{ zMaLRnnWNty^(%2HGk#zN^)Ri|-MB$zL$RCExRz?WV}{Hu=k>f17~y20W#N2H#$YU=4~B!;?I!{mvguf6W8Mj&2WR}enXMNCO*=Ms_>xnq50@1+z>|V<+4ipZ-su*B zoE`6&!~I!3{`Y67cH7C_^)hcFUu!y(7;2 z6jpaER2E$IqwcG?oxq>=EUfr4+)Id*1#yg&-vW0V1_Srq}eEee2VW8{osY{{n`sEuTApo zUT=to4t0h64Al%<;DvlB22W^0A%PWAseHx=6RHeljRz)dJT^b==N57+NHF#L6ccpPJSS*6K}3EL!^*@3d#x=JEkU?Ud@<_&#h z=PsAR&UQVbmkkZpxnVpsbbBV;w8hwhV>T*G&PH$`i?ZtL%~g>%oew>&*3rM>sf2M3 zLo?cIl?_F+#?n;4F^8bUL{5}UeM~fbWv-9kar_fOqGLUFpxTz>tS@}W1$vrT!vKe;G7UG$!qIy7TD(Yh{&{@H7!jOKA?GD#k*B}RhN zlB)-jb*`U&uL|bQbo$6mT{i}Ds?N{C$gJZI3J#orY4zvzv$+${gX*- zHZQw==XN-$?$Fic<(~7^N{6CR{&Lx5IP9uEL7PcUo}j=JYr6x%AdNJ;+?^5jbJ`BD z{(6k@QGn#_=mjO{V1GQ)e`oD${vcWt&L=rzp-6H--|a(c;Te}eyt$ANoal}DMBd#4 zm$N^>*5)9eSa=9bXvq~S^F@{U7l@G^uu1e!mkwMzlL=fh5ej;2vPF|vE3pOyYMepC3VbSuVLXrsWv4#_|6sQ!tI^6(s?`L<<65?l0Y0J%8=EyS0)*leWtumL- znD3wIf;WcoHSFs&zr+7&5i>T-=;ahReId=J1vF$p+!f24pL6Mgq-c@BhN*BvK5hD& zp9{k_0wy~$BW!{=^($Iqi@%~2M@X&5K5h#}2JI^pk zE6~A(p-n>PqnSnw1C8umvR}jOhbSf7?`o@A_`Gn;tYT*kos0SwZY+vJVpMXl3kp&T z8j-3-Gwzc8yMKv*ZLyJ)lXz15Z zUk|$tKihqityUo|>2DxMcl8nct9S_ty*8uZzE8W!_}}T~cmR1FXllO~@rp2ngH(PJ zm@U7-rvk!i({MU7Ady*OShm3UsnAchTH=brNVgZx?xSmo0`n=rlKV-#GhFxl`4*B> zu>~Zi$Rv+tJP^{fv~+3N-xiJ15dy1~4B*wlv9Oh{bf^0kkmA7SOq(uOqHQjXNU}tV z>-C~pm?xqXh?A2g8Q@e1aeEo$kqU!NX;ZP%46k86i*YuIxks*Y>t%nd#iaCqUD!wRWBSHjTl!#P-~y0m>QH*S6cG(7i6dF*N&Cf zlb*g?|4+WZvEhE#?@}1m>(fEqFLD`npkN? zMU|3M3uTkho>mkLE;G1!G?_wBQfgvO*Bu0LR>C_r4bq#Ns?g9*qU?2K%1F2&b$jV6 zOXJqL10xjyc|t2Z5&LGuWd<^G4>p^Tcxz)py9KH#6es4|(_Q%O*a9x0XLlqa@_2^* zLpHJ#3U$8kKT2}EgSnzlaj` zDTDXtTY}&^rdmAaeoPZIdn!|4{Wzga!{-m5u<+nSFzRPX{&C3WS6=W7)MTm|A(Khb zI`2HVUC|JCN-Lgg`Y7X?bj$H4YAZ&L70ryW$VVUh%K0y{v=!MQ51XApa%km3)C0Ie z8Zpq*6KG47lCU`*;f0|a&7j}7wPlV!XiT}%Lt`)?ElAAnn`!a6ByK_V z4NA!q@CoJKbsTQF&dsg*B~Ukp*-tz)RF8p)Q~lW@D!3)i{Ek(BdjOnNY*GMon3)s* zo*^lT;n9x9+&+?d4*qQMW&nInwM`az_oW_OUPEoqGlS2{09q-T-k{m%KP?*M3fhd zg~%G;VEx@EJrDjI+v6+(?TEr$8iTrp#!tqLdoY{b7sU(@Vi#{o3veC_bf)+MlD@+{ zPL8acpEK{=U!&ay4;xB6>pIxnzR5P8uFCj1xr#bQUjv41eSG60DhJy4fwd-%*A(*f z3#%PINSG-|jo4HC_uvpJq<^xHcOJnu!)c;4xe5MG6!ry^jk(jeS^Hi$Ke{KY5ma@j zOkRJ(=PRFU=d>=PcO8Rv`2nWIo4&^+Qaz3gF}}ZCkyuqE^JV~~vPlSLWt7mcl!*2Y z9_c5^pNeUt8|s}@`(rPrLxP+nfPbN6a)07_k&L1M?R-^bF<;HyG0~OFtWPJHk_i0K z<cDw7K{+O&+xP8R6ODNWO3Qwx=z)&5Yd6lq21Dr8#C+kL=`V zh6kf4bN9GnZHQ(*kxWJ-%XB6hR^`eB9kdOvZ$#t=n?7!_!ws2<9JlBzC%+l;tt1BA zco5Ip*j5@dPAWlNDrF?dBz8o2VyW%NhmV=+Igib*Mqd4DW3OpQz8`=Y`+4t%%g&52 zMxVq(MlW!soc__!1&Dzq1EP-Z#sBvab8CC)4(2&H5wjP8XZeWJ!-E~pxYT&|jk$!+}uS?~0*h=hYUa1P-(lNdxnRnjb-`j0Igcj$^5Ea)+q zLgs;{;8dKWi+%my_q@DFMJ{i4T_IscargRPc%G1uT%R9~*7V0n;z00R-w~+F4eVDr zg?m+ev_#zQY7l_uVj1Wd;}xHLh6bS_q7AS7n-*9VSeFut@iHy087b{$KSfbdP;}FYe}iq3Sa9rzsMP-Wj{W{}t>S%!Y@{O5##1{V+7K*@Uz)BV zL7Y#_N}oCSk8fN!P1}?3Flw1tEwl!bykj>2o^5R@R8?{j+DRqta5AH83bB??K)AI_ zQi`%GCaVa_7GB3io~;zSB5rW568={JJzT-1}N6|*_$ZP;v zt9*PD3+n!UVkCt(HQpMKtShh%*v%F4hwy4z}gMdMQJ z!!P^Hamg7BD>(5$)qRdVPoGSB#1FRKXC}X+#l7_8vMy~+0^ae3V*$`CyNb9ooH(r>`7Fbi zIE7lL8>Kc&$H20|5iENA_`t@o1OD3~;?j4gzM~JfT1jSrGCD+Z`rC>7dcebmJ)!s! zbY>43I+oMgs>8HB64Y?vRovi)W_;*5UwRf;XovgV^p;Rn< zUsMfOUT25uQ+8JDYGl`dv=sYTfvpcB*!3H?1HG=5gPxv*+aSxL9pp!I@7#?2lqIDcd+L-lcR&WGB>jsObvYy@=?kwR>Od6shZLfBp`6N0_E zo0d78{9?^95IGWlQ??xsQ<;m<02)}JEG3VJMf9!M?##N4<0NtOf*zt<{DjT@3c}J# zBR0M~S01LGiF9~`j+788WRVt>!iL1SmDPl>!YUM02))BlW4vG-?~v$6;o{_hDMAe6 z{(U*~OeS-Z%tWjn=^zSlHKHwF!A`_4&{j^`>unf2INi7MsJR~Ji;tOW7T+%{%&r%+ z6HI{^M`xpw(g-w@zbxUo=|<=1`D=WBnfogR3NxHF33peO3zWm|x1(Sif0i#tn$#_2 z#v?O%rh!#-EB<{HI2C9U zjM;*+(@~uBO`pH}mTX0InBQi!Z$}26$Q6-j}fHCUD zO_?#Ez=JdNaL-69(>KJoUw*=MT!I~F^DJNd>X^Mfg8A0X72xe%De#rMtnDVRnj$SD z&N7k5K+15P&AeEW|KC~www44B=jd9qZsFDiznkr}cui1n} z?^Vyp9ld1v`XU{zMZWZTh7d9`CiK>*7jk^1~LJ925!tx0hnWjwU?k;+EiNle8Maj!4>J zkuI}1VTM+ye1z%H=#%PDX>rr2`*b2!7F2GKL z^V*fzYe#8fd1-HxY+@eIetB*VJPMfq}y#J8*h;AEkh?G6X{9*b? zvz38a!8C^&nD}^AIi;P6aw4RhVh|fTCG5a^RcNt{&t|t7;t|kNtyci#Yqb>D@LkaS z1fhHU+Gqe-Nw(M$MyxujxtsyJAJdBkcL=f)MV(>&;Y9Yam_dF zQCpWdN13fcIl;c1L5@r1;aPp}+>_-6LU0A5@%e>w&m}8Ts$DRsS?C1}V`o?q8_|`S1>$48&R)mz0!O_^zlspgz6;UKf`7=y7*IkdFhixg^S5>3)yC>cs$7t(W za|G@uyvFYN2#HS~C1U9o3Kc zMXaI)spTl8?z(n;%tk=Jze)8%&|PiNr~VbVot59LS=sB*yIEs&z&pQOK2m)WfT!Ryw=8E* zTYw1*<+1Md$K=kEma>P!u#c5uB?g->%!ZXl+EYFLcB-X5*;AeoA1;_Vk#|lqEZrECLtV7epM@CMB z^%%SP~ z6}_JfbJC{oe}AUr762*GixICBM(Vk8a%jl+&w6((I}c=8UJdghn7Whhj<^JEwq9;P zCdI2%A1|GUoFS!$50H-;-|szjP*&3!-xB#L6&^uJPMo*tlxfS^ZM{wLd6k?g`<>lc zxZN6ZPff#U$Natf`Idk}7&B`iRIrq*2(^+WFFiKC>TDp`s9uidvzN-st6J?pSAa)F zb)vWuO#=Ht_*d@~d!psUXyM<;I(v%(#^K_kCTw&p8s>D%F6o+Vd44ekV8^q#$Z<0W zGj9<*aAN;)j-ES6SW7EY;15y`gO303I$5m!k$G_>{<6{Ar{}{#CNk;kZ&Qx1@0aKo z*x4ivHwY9&JNhMLRvd2(2HZo&(Vujx7ab-OVP`Gb*tjkxbnoz!*x4g-1^l54hGWx` zhZ5_DY7dUt>65E-8xq|G=|oCqXG(Nj8Sq>=Xp+Lm8B>Mq-MJs(FMUr{8h80aS*SYqWKJj33j@iQ>u@p%(9RH~M0Nj-zjL5dx6;%R$BoKlbwK-}*4Svh(x}p=uBW>g zM{$A%G!RqRbIpWGZ-1wpfHToI{SG{NZbpS2D=%Mdv$Jd89fBk9*Ta1o`0B91MPFR} z@zG|?8{qLwOit{FTmrvyT&bgjrkArFGJn{2>QL*vt+!`n#AS8Dv_OL{^8N_>Zqy_m zF3=%>kNy&wh}K44@?&PF=Ki#foGYVq=Eq$`#Au1;oA=R-VSLXq-b&1*ZA>Vt6$`Re zG=iX6G{urhAIcoRT{PAl0q}BE(j}84px~9tRN*dtajcrG5!xAn-6-OF)-T}k+swXU z@8~|SGkwz1=5B*G+j+|(5t*0k#lvZMr2u`u*?450FB93_hdP;dt8~iU0JV`)9$4lu{ zN8R1h5*3>zQK=k%;cm-Tmdmx>;2~=JQ*#W0<#gW&K+~1orp2% z{wllG`gRcu=O%u6HlTV$-v(2)R0!Hylm`^&ksh(d^l&7p)FS!4N@9bMxj^nkem2TuclFh+xFFG4?cPdytV+R<@jwq>s7)(8AX$gJ0dHtl*>-;AoElG)^wc|VN)}d#O@RK3{ zBuhO)se0HYlJyau_||EyXQi{aN!=q)6oT+hF(07EqQ*|IpsaOv&ZVjuI*Syvd|fbR zWO(fNi7ew)8Mo0PbA95LvZbsq0g#3JaXZUAEVd)key?5Gq_!TIeR@g{<5jsh=I0M8 z3kfEW6Z20SwjBX4x47%dmtp-@2;*g&`*2Y$6>bycBxyD(GvH@5b=J&PD{U#@?9Q$9 zUt=s5u0$qxx_JTf#0fb)wGR4IOu9b}iw< z3_a}45n2YGVu!#vS`)z4GCpr11HX{A5z2lrVoG15Nua7-eceS$&iAoHCe?w~+cx*l zXuP=SVK{7m02fF7?2tWm;JNuRfdC!;^CfbX9A~Mk!3T9XN$czDaH5?KTTab=nBr;} z!>1q8WDoM^dkDO6G(-?lEcOBdnpj*EH}7hOtK{2yY`qFjvsrN=!F?y!|JWZhAkX6a z?LH;TTq_8r<^Jq{HnQXP0j|^Q`<}3B7-}uZMSCl*}6I1WhCtMz%Uc z=EzJ-v%32)lg}EQC84oA-@{YOXc=~r9J#YBU)A~2^ zw%7h6YIaMqGIH`-%g5;-IuOEKouu{$%pDWd`)(Gi zqfU6OL8kK1G$1G>6Gq=|^;^DdK-|ksUU(vkHhIv_YT3v#9L#6H109L)i9sqJO-4!z zRzDg^OaqfLKDztiRj2X0-gz8@xl=F;P|aH>!4JbTA}tyQ70vV zbT1Ss4NbTVLucY_!7vgks)(*Geg>zF(e0iXTOgN(dDuz|SFu8OmbTle_UqXKiI`BU zPJ}AbaV!b|I|KOj39t~>n)DLRkB)eI>%5Ek$*1)_J`Tcd1m7X+9f|F2Jlesea5 zF9=l4hf6@_B%I0I{QRr=6=muqNXFHF@sn@&8{^*o-sr__z{(2OP&9vpUDp?kFXg1` zwA>Bz%*KP*mIh-@(?92k9%LZuUOTtTT{6FU_3F60`@Zdczn-ToN0gG1Dl96RZMG9k zrq{tib{z}Cyc|H<nXXZEKV z4+jsblrQq#^aRXZ|3}HLTX$rw(JIaR+k1{_=U;hMu?A~U@lwm%nN?wpm{`!qqu;9a zc2^Xpo?CXK6_^WzctV)q_u*A&OY@cs@9pjFkN^HH$?=E>o_oD-?&k071q0y?OH4$w z?KnL`NGhry0rd?>5{sJ_{FZ&gM@Jv*0Rhv2*H=>N4M!g@+7=0cx8g(;MrygJ1OC!y zcmcejMC6a8=z9_CwmYq{p%HKD2K4qEP^%Pf%OtZ|l(+t>s!35ZC%`XyJwh$A!J7P! z0eK=J97%`mgLC#`Vi4u(mDY`PKy4wWr#Fz;`NO5zaiVjoZEMTW?(egME=`^y56fv~ z6Lm`LPWN$?QIpq$sXvhr&6w#x{Dwp;8l*hhU@R^b zjPar(Y0t{oFiJgY6I=~-OJc>;U`MzOT#?Fvj!D}MECJ3M3zhlnmKHZiL>#hD0@fp0 zsp^gE`=B73>?I2@NJ-s===ik@Sp6gO&s~A{Ovj@A@Nk&ByFS;3)s|X|xy#J@Y3TVP z!Q+kM7GBq@NUWy7rTvXqFKtq4>aZ_jJ?r%5(A6d7L)ZINBw}#d9TK?T1bnT008F3@PO*RcQdq%`w0)23@aP)#U1zxIgLZN` z@3){SkYWjgF3v(ApC}Bs&g&qFD4j+G_p@%Q!02 z;pLt8phT09|q0q)O40C^Ox(@`VqrPNlD1h1-Uy=Rk4`L=AAK^bv-!%p!Mi) zvk?obTz4EE8e}FOcpn2==h*0iNO7PwjEkF%dO+eF;}@CG9oJ^QgUT|ThD)=*Law_N zwFm_p7PscWbtd-M=jUxvf)I5%{v=Ut$dlMEFjHyO){duxf6GefGvf$Cq}PzKj|m=7 zD^oRbI*0tLSDmuPMp}@uUeoFL15KANPu zKL;?BQ3+hr^0IbH&Ls98sqx8B5wH!qcHQ!>~ZvB1;#=TUB?;zkLpVxEspoJWpp&CQ@UH z54^kVa`L@jWY&;pWa{#|Kk8Ti01>o~IuZG$>aMM|XCKs3f{=v?6?Jae8^r#X_n@N- z0#mCpZs`JcJ39q8tBU$ExvMmvYR{#;i2G+JF_K=TdPwV=OFQZEYDUR2*7HtYfN}=p z9^@KhLpFWU&mEV>jp8;W!pBPb*4AHg$Gr2!_+mg^8E9PAqolT3SWvxRHOq0K+8PK; zSn2fSgvIcp&KjSbgvTA`$XDjv)T^#Gjj0l_n}-G9?|BM1Sy}py$dIAgjSRt@A-q-o zl#EWTvGO#*PIoCcz4ajXTL%BUznKIzjl^d?)cf+}?z5GDgO>e{Jb<>d4 z0_Yp%nTw30sLI)NwVKG-vrldqHI^*lr2j6zM42l_@Ko_&FnhNbIp1}{^W6spijBpi zGuyZGEq!6}KNp(JV6jOWF@0PBjG-X(eR^RT`F?``9yAlYSym5fiJR#>X{dbhoCk`m zDa5T0+WSUF+0=%hne}aZ^6_MS-G)Nd9MJw8MU^ymqwC>sdi(BWsO#blYww(e<|ZMD zYtcyGEMu+{vIQnFqUXJa@dRR?{oDLyKZx#zGL16FD|}1%I5q?U-)JhcgcpzVy(Fh_ z|K-JPip$t3W0w~2`v?`_q76?@T`QHt%jR`rU+`O#3TO{fV^@q`niOGT7e*&3$7lg( zvjDC5g#Jg&F_CknSr`6zlD#IIR8{1?!KOwIczOl%uS0bFuyrRvKtCa)iJxHDhR3;$ zZ0CXU4;&mEH-o3otT&dWiD3(xMhsgo zy(g45GBR385oEK~A+r!mME+fCBN!ZVzs?}zQID@16SzbQyiHfeo)xgSX3arEOS?`d z-$CM@tt0FiA`MlGb=%WFR&b++m?p*l&cEeQbb^2Qbeo+2 z;RD7sWK2#cirK(B;HBJ27e?|~GhNpH*3?=G3kw4UM@zff*={l4Uu!%Zq$~LS0b98L zAAPp&r;An8;xXQ*iu%62Xu)r zI6*-m*=PGtf7D#tpXuz*mY2P~d_wEnS$UBa;dIve?+iTJ zJDv|{3J!+omX_kt{L^_xD`%<8qYS%&>wDJwxAP)LpzUs0V0$w$4RSWs_c$dlvnpFM zC(C#|3MUi%d>{p)n1hddMj{G|VE6lOlgaeOOxG*-xfjR(LZ>#ixoEGij_EW$cb0&k zhojkd{lb8Yv@{440XRHvL%&o`>pc$$QsK8kgkFQL^@ z@MtDaL^jJK4DIM~Sszv<$>!koID7xz{hm2v^1m3&-u_mTj(tu>22Jeib(-5S+jqgT zaiLf!73Kj5Kr~+_Ie+;KqMtbN2)sV9`n;V=0Ko__JtD;Jx?H6@k+W^Wy*v_MBtyo? z9Tpb$-{iVK>XKm@QvWiSO0@!E?8QY6$sPgX0prJYWJ?PdgbaeE)o{RVOUt_RhXkr9DC&FE?Z&n{Zf~Tja6PfP(z-Tcvf24Vv!Q|=lxv_L+ z&!P2YJm=cza7?I~i5!aWN}}|?iID&1#;+~ zR6O$Fth~C{fC&f`-M(IrQ{QJp=!f{dxN?BVTdb~*_c+rrmBWUICJ6?(E<_MN*(W&i zNcrw3RJ=ZJe|-oL{`YyQ%qrU6TD3;puHT1M7>%Hx0)+L~-7)0b-XT=sPS;ymX{^N^gtOlh(Y=i50iEp8LPS^WWi zi`vsbY&*j1MAg?W`~CIFeO}S?vT=MLv|!ZN@xQeI&bT5{va%)vBTAwflM6cMt6era zD_ouQbF3^_98Oq3!?&=oP~&`_?DE;vI6zb%Dn9$bL}-gtm1Q2$SP zxYDvRWGhQcd1r1D6BC{==^_$VR#cu^glb@v2JaZnNJ@JD&G`Q(+xGv>4SH6>E8kz~ z->lP-eK-sJaK6tONNUe6ELndhI9qAJdOsR;8^1%^l+Ukr2mLIKP;iPuB4_>{Mf`R)tdy#=^>q3zalq(> z9TXhN8#n4%*|qQ+|9`Hz{U$`w9U3kv%ypu!;+NPSD!1AZvcedD>8T# zf|@iTxSBz`{_qhwm9a`_*Aq1o$#%}yo3vNsVQIW4u{l@<_KOY1Y1^~|nwq6PH9u6B zwWYLD5%^x{6eM5KPo#Ol4v6=YvZgkj@&qLiITF3kXbq@j!ugof&~= zK?gBohzf4q_5YW^El5xtDv@~&)8pKl6A87YgbBb_b5Kxh=%5bHoz0JwBewj2Z}E9Y zpWfA_3Mu(ZwO2{^qZ(ID+D?%QxzqNe(UdCE9*T#ws}1JH14xOq4gckwRw)$)sUf&0 zLIm8@TDk_=%WWJnfGS`5lssuzLkDt;g0bFzE0Tl;a(2H@CpiRQCz>|%l934FQIGc_kZ5laD!`bX-&wjhCtNh729RErMp|YyWzVz z*LD7X=a<{fhJEMEnl)?YQ8sYF%+L3N_hc38B(AP#kpK^2l{3{AZVr<@^>wCXj%@Kz@VAJZMX1lZ17^^7^A`uo zjBGC|$FC6C6stkrcmEaZHp7DxwpvVDt8R+w(Vt3Ed-AeqO5JTrEzEyG3L#P-aNx5R zQc;fnsUhB>3+hrXX|t-uhq$enG)7lV?6@CgW4X;gNmHk@&Vsycanje8yR>KZf~E;g zvC>8-+;FS@?ttbzVH?eBJ4Zwtbv`=(;(iDfpAK%3>Is=Pg-H0@-I5U4=H)Z@z-|pl|UZT74*rP=Z#h~rtw2)cG zqQ*LhnOD*_|5^_#(qg7r*M|SL&*Ir)BNNcKXVp;z`V?!;Y_M+$yLJ zTZlbt&$`ROE}QeUh23VX{cYCoGRQc4R-Sb?Pakn)&uzfTlxixM82)d2h7iaLpr%A! z44+>cqPsjCAMOnV?^Ny7g59hl;YUIoKD9H8sS~!|hPtn;qr4X5B~EvQ zDyW#Q2sc?FKRY#_G(|E}R{bK-TFD#l%q5^OBoxxV^N9L!JWPGb`}7D^DybvvI8BCt zP&%X|md>g6AR%td+aQX^$3n`5Z)Xd5!boXz1`0<`mkBk{7- zOuI?eu@6>CMt6#+g2WfUzN(Zp4GdK0jw)mL^5qVbpr7k%pXr(;pb*HtgFjB-hSwZ> zXu-0-%L+$2(b&4o3X$njY`~t_5|X1r1*uYTUQ{olAHNvut?rln>;v_ZA4$s7;&CX~ z;M?*Uji&GL&q1BagDx|e(4tjNP$qwl{)`qd)ZjjU!Q6rF(bFyqdxfE4Jvf0vtNp4( z-3q*f;p4uSr_)DQ+DMUH)3qnU(N_Mgk}?5Y;(67T(@N69)IYsg(;6bdWiw2n$h1O^ zdb-zrC$5H%^*^}EzWn`R?K*T>MgM|*;-4mvAra4_N>a$G&`QEEwoyVO1lD*5RivJo zBsV^gDhETJ+yqkY`R|7(B&=-u1{l!jAAbttO4?(V)!^|(8eCnOL{C`T zT`O4m9?uzmxs=T+@7H`sY25UXHLN}OkeiNKNd!fnzk3}-8}hruJ+2#>n$k-)HP944 zvSa0vpis*6msykYSMjk%tDJDlTP;FcpPfpFRt4nDLsHHt&H3F?cW*xKiOI%x^^H8B z0&BnDD*YJMeEH}1AQ#kBZM(wjv19|XCA7e}=qGn=I2zW8IbPurpOf!3pQW%@BJ3`- z^>;A^^~3I`h6pH5C* z70!F0Eopbry+$yovJD^|V6ro-gZt%PuN`{8&~4oK>DGp1%z&)5!r<6|V@l8|lC(qpfT_X1YZZW$8QVNtzsIUCQJReyRqB|DOiMXn1Ap-0}+8dl5nV#xDnTgO2UD3wVDUmUI`Qu=!9Z|RO}pLkB~XR(t^k)?w=*+a4r?N z;+Q~6op-wUSGmJ8f`!2P&2RISbdK~KP|9MeVkl}vtBku*aOED&_3p3dJ&IqE#*ey%R5Qi5@*_`;v zX`92PqR)m}6yTEL@R#pQ!C5Dqm`~n#Dn8*AO?b9>3wn zkk!{y|HcncW8HhzllPeUt^ip8=jA<34rh*((ak+^L*$n~XFI+B46syZ)v?F)%6pRU zwR>XHc_)|saw+H`8Rsni3ZVtIUl#caaz-t0r6fWtn)Iz;!^Izc z-AB&RbpGG_YyiC4t8tu81OUWwl|$dRCKp_h4}H9TDc5Vd{`mpPSPH%AH-;R!Nj5|8 zmfG#d3}H=RN(sA@RsBiUKffRuI~pW0n7boGRip-Gu8P%agtR@_v9tz>EgM$-M%J~$ z9W7hi8eI#@f7CN5_dzz6V)}dcA&zm7gUvgD)`hq4(uVXP4cCuH(q3MqH;dTr6Zr9R z@SpX1^~%>L+&@Psw#4&4C=NditMdHp!U?0H#<=bL++eSgJ;+5ENRJ?0fi~@P3Hcz8 zZOHSQ-@zlcK@VHnELyxzj zbPH5lli$4CoJOk4eF04T%ZdH_*o6XsMr2>FEulAiwe>@jLHBx|nqGe?Zj~J;kTG&z z^Hq8#O!XVhL_fazda8cYKX2eOA?4U#;l&U4bF<~LSty~ywft*pN9N*368XcMJoIp- zJ8Y2^ zt1KlMFs;8yMwopKzFD+!Xt$59pAbDMZMUtnygQli=#1gq$rim$4cd8#tQJ;$uc)|MHHR z5sd9+G2b(%=#a@#{IR;AZaSLwdFCl!b_(G`0Z5Zk_gO6~nB<|z)0+!?27vG$fccwt z84OH@qto~sP^@~J{wec_q5KY)5#l%D>VvPB*w^H1AhvPyR?7&on|nW7{O&edTMfI_ zzrcv!Un0VK4?4TT>*t~@QK#Y)zMabptf(VXg3D_-w+-wBbH-PGbDA3`-HEeHQ!vXy z^k&1RJ?q+lQN-!Nt=y9#&IWJI;4IW}WFC~ucpsEPGGa1Tn^inHSu9Z{_!S13MvRs5 z&=7iVUDB)-Q~YIK!WJp4}(d?IB<u~`rr@tiRPeU34Fe~7hxU9l2KHLjuehz+XC#9)2t^L5{e{HV6t zF57ehe%I@H4(Ce~>~nJB)^e5qgXk+ZRqB%9$db!u85PM(TVvtmgWT&3zn$e{8}&;x z0S}A^LwMTc23~iNnr|n@qc18_I_i%8=$m!tBxJcMvw}d|@$bSB>pB`kO=mM-ZIiU;G0;3Gy3yS+Z2QLtLLr&%gD5k#YrE8A zfYR=Y5zbkez0G@Ajw=96=bM=0i7faJd&uK z?4BsAB|dTI{uaSg8R@O_5$>RsHq%+J9g2Jt)z{rwvA(nD!J-gafn}ShbSCmng_$^v z*%VqQ0<4IHL+-wXtM*j)!LsX%(I=k`?zfvUQF-H_ROB^&g*#*IDp>YzB5KbrNLQ{9 zb;Y^mW4|ekfFn$Vz0gNDfBKqSi;*EL0@yI?X3YGFkp#yw#`3k`J!g_V&5Rz*mCi&R zO+$-7bky@WqF*1p@V4Luxm`c0c~2a}%||}AgdpSp`FN_Qd5&ECj|gy8LCI-fjdGZ? zM+ts#IiUXiah9j__)t-($pEYC1i$zR`$sAi?D2xADU|XT9l_%QpTyEzlJ%Y9hX_sE zol+5QJ%ZvmK7F&t<7+>o57GG*5HEdAY=7*&Y0FYncetPeXr)+9Y-~w0p~@erKWuy~ zf(nI9Q5(b%40~|p-LrB|;cbC5Yop6WZ>)%8h^BPlD_KYqfuiRCmGISb77rB~b3&ZT zAjaSBAf*>6%|0t!M0WUW;5y-wne&A^9q)Uf+#g> zA{GE|eV_h=n?Z12A*QB1Lb*(XjN0kr&l7ym9t%{*Gx=Ec^e`t=&oN(v_M8F72)~uf zJ$^%sk5ylF3?mG7$uM1`xFkFN(INX6Oj`h)`DcHj(7jriX1g*fs`nqUSAzd+*3Z>* z+=JB%?@9|PF!JfB+IrREcqg4He`h{)rh-N4uH}k+Dx@ERoVkLMFaknYUFA=JnF8cc zt(Od}APBG>vW{TcCAXn%PY_B;_k#XdW-oqM-(9{|G_s+9UisxKhBMcu3o#D8#kw<> z_<~}tX9`8@A)g6GyX)>EJbw%I#YXqAe zctxARLk3l;>S?|pvsS!PuV*n9d)Y8s>8IR~oOH9xJ)h#s??v1ZUiU0t8Dx3TzhALm zpi|=G{-`@551of_Sqlpxmv`OEaH4V4K3woHb9jz<^fi7NajR#k>iO&sORDbc$Rz+^ zEpY`-`xanv`>0*?(_HcYWUdx$o+Co8I?r&Kxs{*+CZ>|!D?NxcQyfF}MjHIb17ogp zq~YfIr}du5U;^*MU$G+k(Y%KdO?el5Ux3{`78`u$G7JTL`ts&|Ucw(>93W*Vgmm{heh!2~lRc=}nK>@kg8DznPR33*NC1F4wcF{!q zceYbPB%JCLggNV^M|Q2tAADaO%qRoz+Hsz+yG6Z#k{!auim0rCwR+(xQa}h^_-lmK zSEI_lMEa)g)zY0k+U}lqm{NZa5ueS$p+g~BfzIlqo^=#tX4eh()F!?^ytbNW}(Yc*|fncY7 zV?TbGZ;+Xb!MO$Ami%3V|B0+C>Z~pn75*V!1?XkyKmJ?EdBiSF^>4j~yMgdPi7CvM z5zWb0=z-Gj*}F#O4prQ9l2mcWeLzI%@`2{E9T?gujO_kE!!04`*8AJ~nK&wg*K0&M z3&58>DJ6d0xg&Gg|DU?0Fj`#Pb9G%sDbRZo2+uTmlHMLU`NK4jtnwk zu*9AM?cUEaPE}oJ?yYfgaj5wC9>rm#Q^?NE=`k_r1d*}L#GVdDel~%Ly57n0w5kSG zY8;29H3P%Lmi#f{QnY)HO_i?&KVxamfOe;!$m4^r$7yR~ZEc6QakKNW!OPQqPjBxz zkoQUI?~bMq0j=hQd0m>zs+&|Q8<5)fcW*`U6Ggv}Cu()6o2K_3%#?r}9t^gwC!=Ym z7u!(c7t>CEm~bNA6z6 zyDZzm0u@xt#b4UD?*j5GMRoPTy@{O0{rpr=tU$nF>x;tw^viCmkJ0HsiOqU>AX_vH z$PKnuJx=2VECP<#wj)4o2B6t6x2^O;@SV8L2iN zs#K#3$^NFGfDXRL6eLI?fV>o_QTr1?n|;r()NI$N%d*a6nPBZ~j!o3k?;TPl(-*qhk& z^oXTn3QEdg7(}dJ>FLty>gr+FT(;{F3kwTz2?>yu)+=1qH8tn%t@D;_;Kf3l7dPtO zqOqyzGqVOhOe?RPW?Wo2bB5Qp`ScMz*SuU>DTuQkJf$fmlOH;g(T zAdC8jqOGKa$;rv7<@0=9s!@kfrXmR@05s2FHr|iN>_96g{w-wLq%kKhF%gVT8VDUB zu)+etkL~U4AqvaN;x8bRxLxSM_}-2oL~ee5Oh(4&m-Z(iFfEWv&nD*5Y^kgd2d%-hyw!yAzE%%J)R!dUcaJ3mpAUEFBOate9sYV$=6*+uLo&t4Dn`a!K-P#D88L4EZKybw|e1Y&u$K#k)iRR;%mNUq= z%zg@Mm_>Qxd*9(UJ&uwetI~v=zf0lKkrKbmSb|?K^>-J}7@R>lJ z3fT1wj}v{cGI0JKzVD!t81y0EZW~a4yw@Ac;JrGWi&C#KVYJ&6fe1n-{9CGC!*RRp z5Y=c2vhJHegKN+ef_CT07fHYg*|FIh1}chx-hdfMlS1J!DD+tH@=Q-S~dn$ps6V7FtElf?xE z{o=eG@N^X-=J2;Xc!FJT1Pi`NR`F+~rTnz7k0t}MD^=!Se zcG{d3T(G0Xx-cNNy4dWMqzo+Y+0h4m3>m7b?_v$-Kipr_H zj12Pj_O|8Hp9msecZTodBtV*02sBJUxY4RZtg_nGB?K*)1%&osCLj(p7VP4lX<8jVEzF{3uoLzk3YPw1jC@KmO zPQZ#@-{0L8hzPEg{`}bnRXhUF-*Rf%iZtnylaqskhX@hS={vNYon0KWnL`dy$ZAeg zOk)NYiDZTJXZ`d&#KpyhEm!(~u3)_8l>?uoMi7I@OH3 zj_sfrY+gJK3=MI4O;})HV5Zd%&5Bx&A_ZQqRcJpd$KUzyt17E1Dq6hjIJQ%iR~D}$ zKbr)bt)QV%hLt+<)y){j>Dmvrt+XZ0sr}_|I_T#Fx0oDPhqkeWfx#extJZ45`s#VY$^O?>S6ciQR4vz;0DLsS*vXFub*)CJv2g%jSRN7t+XtBO%^b8+XB$l(X zuvEHDQDnGYz^jzrRrTIks8pEr4JUJ?j~W)+h@Cw?v#_wB5@LMzI)|98&|XA-&RuzM zKD-B3Env_np$q7ufNP`vOqmj|Es2Q$bLg#2>Gk>3IR4+U zp&Z#vzNC>I424;Mm+T%1>zNPRJQ~lk5j8)&DFj*Es##QQPy$h1p`SagAFC!C+E(VB ztWjF|#u3X)O2mH4{mO_IbaG;a5ku(eGImCx>pxj+q$Q2$!~QX0^zVv!w8MyL!@d#6 z=fxEiO+n0Nb+AM8E8GMP#Q%&Pq`vRMkD!QARJgl6toS|gU9MzC!KE3r&tqTf0hK3X z-6(uL`;H$7-zru5H$}t1XVO@$wVK^-4pu-Jk`gi@&%l%0Wml6&qD(W(QORN& zJO-sf2$N%j_vP-0;eHJHw2~^++1}bKeFT4MY-Z*d?U(khRbCGOE4A!;KkCmpaS_HA zNQH*X@iNCYo33;>+q8Ex%km=$h}*$O@mw+B;^Gd!96}M&pN0w)DKK5f6cHk?HOtxn z9)H{?@zUs?u$Y_l^2jZCg+S}KJnw4}W84fS45hJ9f=xROtjG65T(%;u#raA_%$r*J+w z^cp<0O$x9__WIe3h7F9~(yW!|&3?hM{b8BW4F{Nm(D?-VxsfrbN097{CIiNm#vrtC z{oA|7#&$-%b%7?Q!}lGafNG(}gB?IW9ME4OoIo5@sWm$|JM`@_?=3JhI1UaCZH;#Z zT%G#hCG#>3j*acE`$4^_@qjmw1NAB?GZrBc5&EDI?uq|ql$oIzJZNid*yzD%lGcv} zQk(={R6kcl(2alK--=uMV%Ttg^;}Dc|V4kY3nfT5^ z!0jG>bHhd1Mx?Of+2jw}#x|I-N zGhM($1y=7}yCYm&!XqLYcJ+jEq{}#4u0^VpkTcUteygadiG_N+z3e-*K}AFB^txS> zJxEfjz!g+g#STUxM4x=1-~WEPzBfVkLrjFh`^lAyo0}7;?)?M>yNU)ufDt{k4WOg8 zYk9@Vql<}^mDSN&J#oQQXRdf`VR_Lf4vr*7!#)V2kDJ-Cl%Ww}WSpG1XW@JI_xF1m znv6K^aBy&XNArx>=}dETbBbC@;hlON*7azpr~-Wrc0!s^WAC-Wfz;MchlYh^W@V1` z^@VsFfsSihLW0RZdl>2>>i;Myr^d&@xn<1x8im!S`^vOU%-t6nIR zv?<~an}rT`O~c`$#(m`g?yVK9rZ!XL#(WgDVe8AW03i-iN_X^xvGXTs&A*#HRB` zw0hhyIo!~J@xDx{U!3c9{UUn;cNK@#9g|kI>|Yz~iD~~0VL%GU!=3fuzyJvgUAWy= zKL$GbMdoN^)GKKa!N!opP!iviVKOET&bRMsI5W!1AHqWQhjvCndJPtr7L!>`*#-v( z<1#)QpRV$DU8-*H*z3K%GcPUyXNyj&_E+KFchK18=ZJ}+hBMp8?QIayRPX(zT}V$9 z)6*l_>WeZR+WGwLKLaLa=6ev#GvG@95c^T%I*1N@OY`LgSm&=4v5clC1pfX3>T6>^ z;nz*)bizOpoy{CQ#LjTKBtY)UyTu%Kn;hxs+8hMVtwY@sI}Cq-w2t5LNO>Vda-rKm#0NUjQ-o$&{tAYg1hYj1xz$% zm_VD|Yruvfcw5;6q*GN!87 z%%-EcO~ol&{ZX;abl9mQeV}mD%*&UUb@yae0-Xkk<{q0Kxyfl9(-{4@4qs3 z)h%0&@%nu;8ynLXf0#EL1scyNH>#d@2&14Ap^Z`!`#=f^3+LzsF9T$6R@8sfTwI*8 zvtzQjxHw$B|3>M|(zdqv;UCX{=$7#Gbyj;f||byV_6B&&ln2 z?+l`GlBN2dU=V*vFs^(D$x}q!r@)8l*DN&L&uY#;%&0YHDt}-{oK1 z3i`;7ijMae_!@{i%jfq;&fK^BXAqJJ^m#cs0VuO=V?X0*;XWW3bw6B#ifu-pPRPGQ ze?eSIX|c#s;ez+!{i;T5it$haqjwkds^^w8s1iv6<9BW*jQF}G@1jh_>AFtBUaHku z%2{*Yzx3Jx!rZ4jJDE(bUP6}@aZvdf97SL<`EL;T)Z|!787A-zz?RInxM2_;A1^zs zwQ6~+)PX%_Ha*b-7iKV-FCBi1a(sN=cf@=<fPEf;Zk$$%j;U1o98$ERjf!)CycvUT(?>KgOn~a_BH@@Giq35SIgtq^Vy~F zkcjQJ$I~|}0&cVcpp~X)X5Xf4uw_tGUj93;-pZ@d7%_hPqmC0*;!xxEtY*U&eN_B< zf;17v9JOMB{VNnv>~g(I#f^gL`>5xx{i%Y+*G^a*Mg!-bn?1KsTbpI}z4>pje@@5P^OIe7BD zNTcEM6vTml;UGYEEGvVc`X~W{q|k^6QTjx~Dm6fykkio-tdMKKA1}0Oo&`-Mq7-z8 z4jrR^Fae9=7+3;X!Opf*xjOX$g(0 z?_p-@g}T6=8uQ{_ja*9+Ml6pisw-ix7mT%hv3GMI|F=4Fm?;h-pDIJ@kX9 zx;iefPQs+oZ%|m>3>TCFG&ONC)iA-tFY9*)p}(F(ISp%NQT`IYqY~pl65dlO4rCes*Q1m-zKe zOyN-p{&8^nylZP(X>NRKO4zpDskql5Z_fygbE-g5<6wUQ5fOpIcAdmMJrdl%4M(o~ zHU5{-vk+S$AtBr5m4=m*cU<#dW8t0n!?@xVI6FeKG|Kw69f4JN&q2xI^}r&_e~(EK zD}JVA!1zB#0)QVB5IIj4b}Dne-emWG5;YC(51+DRnwXsI0suG!oFW3*6e$YKzn441 z6g9~^`T6f|kpc(5qlYVl(}NHQnNtO8)v^AS?9eN*`Z90}_{CH!< z!p`m>R>AMPo8f^~r1aHOi(oyu6R8k8EP2MJMch!4ED^=vHA{h-F?Bd;m;xLUo0c0c zh~N79;97NFoIRceG3Ry!2L(<}&wm5NrA$HWPQFPOJwu*j^GcFbz94OjEagLjrp@n` z((q#MoQ*s9t;Uxid=7vvVUY85c%<#lU}C&q{V(aopyq^!$Fsvr`0dYH(1Byy zYam$Gcvp2aX49BFJ}&3|nELv=x*9!RV&o1UV?aBB`=1Bk4*Q6<=5{FA*b?5H(Pp;6 ztk(s6`}4}_+2!R{U#j)R;txw}YZH+pI3n+VXq|BRQB`JUPft6U4x4v&Z4Z-M4^lZ3 zaN8_+5rwRHO09&yCca~>Y;+GNaYFI$ua9_JE~)`6unpew{IkJ)()37QTv7}} zR>4Q?kDaYV<#x6aymxZ2GbhW#*ikt2oh4hL2$WHVh>*T5Lq*H%^z{1a>1!+86M&_q zrF1vPD`JX@7~C#LBy@CAXTm%7jpK)o1YC}AjY2Xau06iHbuSu=OG_Se+sBD<01fqA zdDDk$$zX#r=T;qAZRyVvc?c0-14gWKii;7_Pd0~sfXn|0J&Z$Hp{pnc{Xca0?rh%s z`lQc}j*gW+r+hInG4u;Uw8m02kGIF5_6W2EvE_ulxeGwcM3uF$Kok`fy}G)BYjwAm zVDfN2{asRmShFByU_dG@EggrM=(@s=8A^r$c&_Q08M}W2XrLlAh$Wg8lt0bR8nEEX zQ^y02Sx!yu8;J2JV)wI&)D;vI=i6`b{5yvghfUoM-uT$Ocu%m`wM95ksGU} zAMOmPBfw5%4ir+2X7EZH8e&kyqP5EO_kC$w|2ODo()fxHBj$Y`wx)a3UwLL*`|ce9 zrzcMIx8aLS?Er-$KwMRuj#>8@Fn%5xq0{w766_Rg(57d3c>y^lNZ*bufv2Y@4re-I zfUGJv7(vs*O?yswWcW`^Oz8DX5gK{uvn+=Fk>vDzMD;@v?d|*$@iEf)>~_VuKPt}{ z=-W5#0e*rHMWKr1L?u+g-JLT-i6}|G8?@*lA)#>DEOF=)5%Uz@>hS;*IDgCr$ZZKXbxy`^ z!yoeRd6`uju5WN-iq>pv6M51{|Y-ZfVw5vK%L zEI>?z6QxTD3i46Pru7`#GtyDKKMP+CB@;s)C;=|nObPw*_N04$s(Y-wS!E!0YM+#p zNvKlBk%IsnAUQ?FZjkU17ndgIA${w5Sd}Bj2@H9sU?=o@n42an492E8q0gTf(E@&_ z=7>cqsH%#A+BSeCgS!Ro?U}$hTPfMC0Lw~>6{>DOqX6QcBEvq{^pYOQKAVAi=yP?^RpIa4@M?>V>iqerhun@ zi%%}9nIf?938Ub%dkdZq zlCr$uVSR2xuhWp0lKKF14+E$)5XFuR5 zAGYG+;?Srl)039Qj2jN;4>QU$|A@K28X7{qd-u-rX%lgBa%$r63IbdX!+yTuX^d-jj7JlCc7)^BJ=oPpC+GUGmI9q#@8$}RC(_7U#(d@XFmMEE~+ z?dqX2pFp2x-WD~wm({>lfWARwed8{+aQh{XJo+0w&5;-1)q@t@s~VVD%lQL7{{hoe z(*D%t-S6`pJKu?!gn|ZnPdQS}O_@Hmi1~Epn%Ptxw=2gT~ z_x;_e>45eFfIKNFDdUINfMNjv1$2o5NDb`QUkSK(GbH=&<_;u0v_Tm`3fMbqq8F_4i44wp(7Wk-4nEV9Ud_IAfBMf zL#Pswl9xwQD8kH{2WMSv+pR9E#-J_Hz(1zH zfB%BevU9^$PDdwFqwFh9Jn~%|m<6Efe)EAWB*>G3_49CggSctD9tmt-_{5$*nn)NyYp+){u%}FXdr1QR568yj{fu8)7rwlSFHBKC$T#~dZ!&P z{c+g2!sS~!!}Yjz-K;88uL-JXd-~beN0ITg#t-%_XvAbI4_l|lq$WDkCp=NdH5%{) zAgiN3SE5@wweQ-hI#igI<@=@H@*U4Z?`g|33Is5NU6EEx@1kh7`-#0ixMJG#xxRXF zH8;5)jL8Bt`Q655H$G7p>*8?|@r(PYPf3aTin^|;n#VPge^kM|$TRe!+ZytX|bEwtj- zFO3{lwD!TCwy%{4El8M(QJz+KWm;+SK5U=1UY4(~I8I^Xb1vYk9BjA0rUPdtF_v(# ziTK6#VOl`<(59_1C1D2(a07RTx-T@YRxli%dkpZQ@IQhA4OsAaH9Y9C#i9r{z{2FV zt#0jjtWakDs&@bjoxb_DSVl~4GymiCz<)5aTdsc3?K9#^6YzP4wDawr=b6^2x$OsH zQ&ZEMT;`AXSG+pxj-G?HFsRaSz1~*kSi$Gq4M5@3yUdrat*t$qj+KR%EK=3+4g`rC znM}TswbwBR1jn6W+}U#Vu&Vw6KrM9b=AKBcT33U znDmy=b=Z;W>guMVr*6x=YDXgPB^QEDdI2sU>x+(*v=dSUQpO%TNJy+S-!izYYWW8Q z1bRqHN(PQ=C=|sVr4fKDJp}MA^ru%Y=i}x5JZJ7Z-sYAQyXKXn(ILZG%hT^nq#{S7 zOUHS9mTbw%39%zFtA#DkjCc{)$`3fHYzY7+$2MEyMnpsaw>yl*Od1_xtg1Vb#8}kT z3OXGa{hg*ZGB%C|d=qG8hV4BBQvRLWiLq%h!{=Q>SMI#q#>RB*J9r6Sbm^g?V4@OM z!jqYkc#IK{TAlbYwY5Q+Y+R+~{R~~Z38yHfEP{qRzwyhqVdMBXL(?O?n5Y}fyG4jn ztf-)*b`?oUiy_enaxjnHa9rlW(|Y=f(o&=2l)Ak~vk50>CwV0$z*3V1Swm^3Yxnf@ z=()_RH=7*$I&yP!zrBEvt^@8M!|lP$-922Wve(aTaqw!Nxsd7$@mZ=+kshFpTApqb zfjD6!^Rx{Z9}FRw+bV~CJ6)t zlm5T^8H}_ZM$2XJ4i3eMyj~gs)kcCI3hgrLmB#0l0z&F9nvgXM;TNQYm!LD(;P9}4 zMSDn_7f3?_Zi(>V@SxFPLkOTRtT32lsUWo@-XO=?`q*E4^4`GYerjj$lJgM~76Q+e z&#uV{0Ccr}4J{QzNaU)FV#VC$LrDdw%I_?zU!&k@wmMY#W3v`1MX^=BT4UL~GRkf9 z3Kj8{EH_V%YHx23m9*gm;SkrcO)b(m_0%%8SHm0sU&+m72 z#+;p;CNe=aCMh9=uA&N5Jx)n$zarmWLzi`G<%D(TA-4t_{ zVO!u_eHb#YOF2rj+-TziEQlNM*~!eN$V>Go(-GwrC1U@fGkW%%y=(U~jYz7uz@B?L z!UNfDReJUC1xqY{9{+x?+FpZeCLwWx5|qg^8pTvWe;sbp@K z)hxF?L)leplaUOV=h->8W@ko++0u8ZP9XHqJMlcd0&Nd|3d(4L_9DP$kaK%1`mS{_ z8>&~?ldJ01q_t=_yO#}o2so&|HN%JGNR!F+hU&)&o(j#JM&ai#Qe6kcfSb-;fPceF z&|xySO}XA21Os55yl-E1Q?`RVL{N>}cmHAQ!{>fIchl{OvYQL3cbr(vzWw!XYD@fV>MpSN!(zfPi0x zF}u6J|BW;r^Xr$djEl|}ZXVJ!KyWBw!|7;h;sdG0Cf|i*J%_G~{IG z1d>Z>TMW@<`_hDLPS29Ca!07Q-$C5k!!ZzU?b zTaD__UIUPat6H!G*bf9ckwe>fwWa*5K}Q$=>~X!lce|IHw06fF>n&F&o8`BwJRO>s z0n*vgJqhilP#uW=))I>y*6W{MH9Zyu$fkU$WFaf*vdW!Ai9G-96y5gA3tFttM%Sq& z)U>n!xcnlQOeDbyYrUFRruhh{xzHZjO34$8Gzf&i7?70F@i}%nFt<>5pHcYFfbnA0 zWx$9DgbClo#W((iVnE?}zOmLecfi(|LS`uyp@#JsNe^v)8RP2@-RcjFqyUXi6v+#I z(PBC}IaTRDzXy=wEpF1OZm5sM{N`TJ!PKaQ;}=Imj)+AkK!-(^I0##JqCkUbBn@i7 zGKnu%O;L!sM4V+J=eV?|HNSYRYR5^Cqlf+g9LQi#C{YWOXQ_X9NDoQMx|z28w(<*9xqoF=^}=&PTseVihG?Ws0y49DYr@KB}SbNG8+k@h83 zilQQNGqug9l8KujBX6YlV%xbHrT~KFbB#LgG%6|PCGUQaY^81? zQtWs4%fjh0h!gX9e)uW74pMROb`$BT2?+uZFp zwIT3Z&UU6+>n*SG1AYsa-J1ubb3`a&nSDAvbzEQE%A05s_w*-t9*1k*M0Ma`o*gld z*>?Z@2q@gMqp7hyr9qG-X0ZDZK`x? zGrKw-XL>#0c9D^e*ZpAv^nLzVQe>yz`tgj-r-W~|oaxJ+ho7OIdc3YSf~RMv0X70) zdgF%sB&(z(jD5{D7Wgxe9OmVooPY562O`D)v#F&k1QrWi0ysNfYpHPW|aGw@v(6T!p=bsA`)y#u)lZ}ZA3vmL@7?5Mg2Sg!o;zH%?CmyHwqtF`#U7})lm6Z&RT-)^ zQi8Z~`L*NuM__Q3;p5Far|HFFGG^M?*ZX4|Gt2L}fUPW;5?3@N1J{|^Wz~r?)8_^k ztEPV!x8oUQSyoQ&m)_JG2;>)Pz?YPCA3N8W-V!--5rQrAe}e2GWsKsxq1_oy<}D=a z1y4v$25E1MPODGMEBkiQPj01UI)Zx1B$(-Ct?|DW1Fg&+Iio z9t*rXpgel^?d@L!P#Cz}Snxr6bl_!}J#OfTUav87bMpv!9l2zNVy}z;=59-?%66mv!s65r&JXygp8kHIxQ2K2jOhOmB}fx*K-j}v z2tv8NXtJZFW|Sf&2^W|8epitn>(lmB044)*A0SsM4(aQ|ydH0m#*z4)ihqEugg+>_ zzP|P!bp|}8Q{661b5)gJcQ7)bOX-WPoOZ6v00s>?yyjo!Z~Xy%di5|hJq_}&V(#gt zL2l1j9|nDoX=zr zKeQ{=SVJEXnRreN6|V;txQ4%liD09=PI6OIQ{;-2YwPRK2+&De>Z5?H^@xo-Jw1JT zZU%$+|21~rk5s?^|F4u8LRr})Np|)q8Eo5b7lkAe@T{3@ka<(;3{Kqsp-~ylQMVa%t88maYukJcL(5C}1n|b) z%<4+h1RuqhPcKJpeW^w&YtTeM2QVkiN6}B6>VVSYc64Eml7}8hIun_Ec<3y{)Hhbw zV=e31SXBU8duE4IS=q-iO9KmI-tU^ljt?$9(c&EBd~sTF5XpNUj9@0?styKyhR*HC z2oz16$7dkU!VXMIMb#OjQ*Kx`E|(~R@IN*$8DkTQehH#Rcz8HgsH!Xz3B0`O9_Z=G zO8dd?5_GsSpwTPgys~8u-Q?!v93J6_Mzn$09xio=xm^A6l~Xi5gN-(MyGM`r;J^Sl zR&z07XV-l4B#p!EPS+;5P4hw&spY|EgGD0q>=|>o94;ZjQjSH^GHlel1HyLJZ;wyAsC#3VWXkZEbB~4G`SKr`fOKF;Ug>?s?3@ z!g_PJ1vB%K@}}i^nPu6cOGgK8ZY6SAO2jS4nZ_EHNj^p3#4#BkAIA~etZS} zthSDJ9G?r323NiNUv#`80N+vJxGAzztGT7l-c$Q+u{Z^H@oX{L4iuVkNI95!5vb6VdF`tdavnxP+ah$fI%`j zVQmG=DNu&VQAAv8FtZ3IyFKrXA-4N``v|O4c(!h$E^f!W(Q+)7{M2VBA?7OmDm2iG zleLGX4SJl};9z6(La0FEVwYJd>YHu^Ey@p^cS8S+k!J`5wwak3P?g+Pe@sJZB&4AG z_dsv{<7EfKb{0PQpqlW$8J*?y=}Qo9j?t-;$x%)nwvK~t7&__n^h)1PV0LF9lQT2T z!7f0ojj5)d-dGcIU&P%&dMN<1pJJ4v>pW(bAolL#lv}m%`{kQJMFB|<9S(KbXACF- z=b3bh@(B_)gR$8^;mSQ9>nMysT3vDkJ zS61F1ZfY?qe;T&F2dNV$5Hvc{SwMh}WPJgi1;%l5-Wq?LP15U^Ama2L3x`NqTV25& z@!MXUkFV=_P(B!Kd&LgWC`)MaVyzD5?WAS?{tjGLoY#lMOMw4gtc?vkR~T$ZR#ryH zu>{kKMgtla$>W_+Shpq38AHY=_8ANbL%RC&VMUCIY|)rG%#tEDSIY;>4Wr0XJ`Gcmfy=SWz!!WUhl1AlAr{ z$^`BJ901T2JppqO;P2oUDBpvSz|c19BI6RRI0>)Mw_fHE1JhAx!~=f7ZTx#x8eC-4 zJWK-7naiwC1i5>R@)cm4JTo8_zF!| zAuus+28ANB2Iris{DT8iv$DRNnH&edc-}l?&P1*Aile@GCjv^tg&-e48>Z}9iW z{qD*aoJUGnDp2%zqgo2wHUrvm-Y6VXc7!p?J$vEwxS-|?zfTOkS^uq<-sci0+Mwjj zvrw7-lBAArAr9JYA@_YY)N&sR@AMuM*jcy!NUE7Sz@2=%28`??>!|`L3Gdh=$NxcZ z3xgTxxrO__6I*qz9g_sRcs0cIk`4(<7Q-3S8)UBZ65dir*QdXPCEt?x@V_tozXE;k z|M#DywYzA!IMTDTakBTdSqcteLc{Bhx8@cG!DL!`mQv20{=mU`9UdbValflC2rRBC5)a9h>>RV zGSa(upDT8Am%p82ue5u}^)T!A??7nGp}>Jpaq#YBKl8If&2Hc(R2}zNdS1Ms@Mx`1 zEJz&4eQceYnp$Z*cLyXS?MhqTI7?ew^3?agL5wr!n+^CjJ~YH4^caj?ee}osCzd|< z1Dvb%T-+*OC@5&cbYBDYrm&#F{Rh)3U9Tf7kYz>@`i|rh^3|F?%tLKkB+?%4gcfEZpff9 zj4d#wr}t@jYR=v@!-St242XXU&1;TC+0_I^v5(-(@bnFVS_F#~l+;=0YCjtZXPL`U9Hv$XmPP*0t@qP~IOC|MOrzc+f?S|Zc zp{gB99JbCVN(qmSjt+9~JD42&uiuhpA3X}gJ{1!hz%a)aqkwtvz5!(Z!ND}UI$)22 zH1%|M9hE#EA?^QDjXh;9Dki36d*P)V)ael6p!3+|p^m3^`*%!n)P?dfbJ3@RI&vN^ zN0`?&yJui~9MKZaoRgEk98>Rp8#aibzWV>v*q126E=d3TKUjgx=VV6GsA9rxJI+F0 zPH}cKu4J;XX<>3NgTlZR@`Az1+#fK*LJJG+$vL&2*}kDxfuY6Wou*=E9n2WJ9C|Tv zY^>JS*0cG315%)K>Af#KB3?xlY5wAWEU?#N=M9CU1@N3uXhDsP2bg8^ud$Njvy#3m znsCg+iRi!3{?Z$k(s<|)*WYOnOw5pUlj}d3J&aRB~fd&D7bRM%cjLzYQ3u+aT#OS0fG> zi=(9ix_eAaA0;p5h$o%fx7eZ-E>0#5FdYCcao8+msF;|U6G47-n0Q+O&T@Nsp3bpD zSB%*CCLbK+&`~!4r+7TIb4d>>>Dh9C0jlenPkRFOyslmceNakH4p&FOZf<=^qXcRu*rovtyh8bc)!N1e-~{LrKwIEB zIQ*HVpzyWRRM+MFpgW203ryB$M46Xq`cp|H;Lv-^*_Tt1k$nR5GHdWEog@k-sAg4W zQ^G|AWk|jDZmp7zt}c__Nnx?0UFj>BPJfY8r|rV)6vLdp7Mzj;ivm-^=jFj=B0FYl zuQlBCHxCbKdCk_2!XdGMDLqMwiZFrI{e8!L{kq9P`Lc?%yDY1+^ygjtybn5a6|Vp$91Bey zC?7_!W}&+HyoA)1hU}GSxyRn%pot75(XNU>x8tkEPRsp%9C}*gqO3Shpp&b&>+b$n z4RXJ%2Ip@}x{5dB-7h5T1K|6chq`la-?l+@^iH0T4|9ox$snJ-pclJ)MKP|%av z2&a#YvtCZfK7RPKF6Sv??Y#PEoTRQSBZ}<45~lIqcMQ`QI4l|PvpoL5>Ej0p+0oc4jl%Ly8Y4&#? z+y=dW8tyKrO@ab<&JG+@ph_w$HSGn2DJRNpGm29q0M`NO5q9!7Q@=w%Ou%%#0aUBn z?Czu7FJY_?VNK?5>fGVLVF&M@0Y!>?IFY2-~!Zxe=uI6Ao$!3o>w_1N{J;+u2p zT;X8;^K(j z*Xj}9zB%@vU;{+3a9n?OCr-B)KA7_Rg_a=3_V=%#?oi#4mG682Y7du)p55RERlI<6 zhl}3Lpw>WD;mQW$VJgoV&n?`U{%IvMSqPLsLon>-GYbw(WT%|-AwOgGM;RtYX68@7 z$3;>;R0>Pt2g)Ql6?QFY8T7%Y4#aINtCCu}P@nm9S=(n1JBj!sV(c6Q)8#kTE26J9DvPMA&Ce2~~_6^k?iC-7 zOAuTaem7_=xYN|Mt(yvR>K`XU2Iq3BLGA+hX7B0DF#5F&Q}}Mk=hmCdRzqyyQ?0FU zQy=Ma8Q6|Vd3cCEFVGfY_^GU`E9T&L=GngJJXnB-YvTxS1stS+`(vmx&_HDK)J=Gk z=;t7r*}P9Rh;toX`IUtEGwN?Mapc#p4Unp4uSt`H*1@VIt~Yc1E7?z&!_882)Q_$|aB;UREz_-pv14BErL? zyH)=yJ3F>N4S{O-M66$02f5U^#~uRzBh$hf4H@A4ot-sI_x|)U8~RpUe4@DHup!x9U=og_52fv@R4D=Uz+!813^6u<=oylAY#r67w=TDrGB zHzVpV_setOQ$e$M#h2v(AVF9|u9|+D9ViZQT3Qr&8yEifjNxK|51pn`oH1$rmX=nw zB;GF7Q#7K^!LJ4LjZcCby%xUsejb?I?=czC%2S7Us_%ya$=55rfGd0ycp};nIU^ZU zV}(q1L#_Oq7Tp;b9raaYHCg@@r(gdPB-IxNZ&-jcItCTCIcr1s{Ruz#uVk!BKT1ko z;XZa8d?AQ8mkP~1Yg$0*zGK~q^+Sw35w4=5Z}FW1!wtY0TQs%>XdBdb9Z3*P0n=F} z4FNnV%p9+tH4ztQP6S+j5ByCMI+Az&r65$ef_wh~t-|&VWVRx^8425J26r2uJ?E`d zAmiHFurX8%F)UAi3(e3))**MfsuzK$l$M)rP>OHMR!RGdZRx?hoj`GvuqKQpQr8HzzIpQrA>4e#XPaQ* z<=xu!&=sBN(m@&X^vRPe<|Q`($aQze#v!Joom>3NlJ{A^Pw{%k>kqLVVn6#k#K_LR23Gk;-?gKL`{-Xi@5@x#t+Xy@# z*dv<)ci}OErv|Ai74|4Feqc|Au9QpSG69oLD4By>Gy!cQS%KA@e>V(Dj;<=J^aaPV#F@_x(o7X{!KNsaDr z+&zFx2v&p!t;rC$jOsGQ8$0wpLden3%3r>4vr%r&Q%oN#J8UeQrb0H}m*@_=@s!>ahId)rMhsT} zsxBnrdV~BuqCRB3Q`$f#tC9beIi{<2yul>wBJc~no2KQnD{zC`(-dV@ZTIME4?*fv zR~T4Owa_byO*7-ABlA^~!+o?NXOiKja1$}PV-azbLMtTM=IjDwnE0`u#4dljzo=$t z_ybw{>A?1U2T)8bDaC`!S}r?yQ@;(V6@(2|2wW!{)qHm43dJ*dnWt)&R&N{M2zb!G zkY^!HO~v_~@Ou~QVU&XLX;je;t`Z9=VI>8?T{qo(#|1-bZ)GSfMM=2&{hSW?@4$6#$7|mS`#)s$ z3Bj_Tlcbu~r%#{!(EFF16eDwfZvM3lO#{d!W-&2cT)vTKssn86>+AkuLG*vs=eZ&- z(2YK21}CtEsK8|)poZaG&pCUEAsiMJ`>0A6AW0X$`vP%vY5f8HuQ}aLWO91?shp)h z(sFwt9+mjN@Lj&J%Qg*$LGSPHZ)t6J^ZR!AZ>RnKu0);2NWtkhkO=hlExX(6V;FDL zfoelM?PGA{u{p{QnFUx6D}zoOz8gTAV!}ia6C>K32$N%x%2&2OKR~7s3i+7AhNOk+ zdmP)t%3_QMCGdTSG6sz`{eCHtl3N`FWgEG!w=kS~kf=^WCJV|`Z5>WrJ%aW|?RBDb z-bmr*x)}&R5E{~~_r{{7-GZ1%v1_L>Cj0}^>%6_t(P}esoS>aVe{-rEY#=p%s!Z2Z z;ef^9%lBU<0bExEKLZ4|fuW%m2!#20fI^JfiD9#js629o1Mt{!N(4Tr7=sx^$2Xew zNl++;VaIhU+H4%7W=l&Q0qfMP-+uL*aOx(#M1rh_KCCRG9*@iP+FIH#gPq?VM8-uY zZbkKFwjmC;r`n+rdG4k~Rqe9#zwF)q;I1{iSCL^7ZKeW@QGYZmEg8W}fNe%X5B&gP zLY$M6)4d*20&+DY5&ibCa{_-SXEuopxlA*AjL$2QF>qtB!Nm5*f&(4MApxB8gEj` zCg!H9!`~Y<16<-df2!WEU_=-YF$!%~l=AE6u=hp8lfBA6Z0Fm4Zf&ved5mO;cFl!B zL8ZIEb`to!O#Cjd?f(6*d2k!u`~n%~o1sXa);}i)Qc_I=$qkb_An$$^=A7VQEN5?T zRX9qdU{?bJ>Na_j#-di0^_?uG#CZ^oA+nqQr|10X4P#o>f8Z>B0X-J5R+WxBLr9Nr zJg~v$WM?x73dTTy0N~rAiLDycq2$q6ndHKUFLa2MPT0ej-xap%5jWZ4i-D|Hi-ooAo?LfyJ0*VO8O#{A#Nb4W87w~L*R57h! zYMO3XH~^)#m!5c4Rh1@(`cv13?Ckwz9400OO!!@igP}gSm;?_OceZ@OZY8&%E;S|PDxmUT z=sg>Lz7})z>@(X9A2;G5H&~?AHc_gNH<941V1a!kK1+ZB4P5)IkChO zb9Gi(Sy_xeUcFQG1@wf|!)-VmjRoR);vWGziy_a#9;~em-oCx~e#Z-4Wce=&9*Dz} z6ZhIsxU#Rn882z@bWnJuTK;jVO`aJgn48T zbxsglbF+K;^eU8lldcQw;Fl5AD!qidcthgYH+jaB5196vK^ykz$xR+7;9Tzs3Q|<} zv_YMt3Ck-D5wg4xCPDo*`I1E%zh>C@X^t8kU7r=aE;?F_1=7@Q#E>3gs^G2KR!rE) z)Kg-AYJ6{=dq6|*S_Ap@8$YmPQc}j(0NG7KYjViQ$hgwZCFcHOx%c=^fDER&{fKV? z{vsJy{Avaffnmvnkn=v}+}xZ#Qd(LHkC1>YbO#tuQ1l^uzyfsrD>f(%KVw4VvlpEWtmyJL%_q_=ZXP#Hj{g{1QF zfr`FJ6I&4PMqj3;i;E!SyDiU7*DJrLr?Y^z{jTVpnuf+Jy;sdJE5MgoKvEKJ4{K6p zTg+BV;zfr<+ZxVHdwu#GSFS0RSx$DkCI$Jfud%WI@LvsOtH9&~OovxJ1#WblR*6NV zmPW}?iTxO} z_RWLLlrsn;$IdP%MA5sMf5gIk26W$i_fUB7_JOSB^MVHaQdxXlwvWa5-D#mhC)uLK zq9uLZu5m#Z6&p_GQSqU@!ALLlt1byD?DG;suJW2IXBpL;r_hnI}r&Ud5#Q!)li;L~cJW1v8x;otWGu z#remko*k5mTWQ32m~~ui?5$;Vtv;9hpY+&1_gaakV^QC}`Esr2?;U%xk!2D1u1n;b zz!)<}XD7W)wSUJo`#vN^|9x&^H0r%H9sw7m^NG)*Sf=7rxNE89d3Lj>1iicpPb8#N ztZ8qJ)cP!Xoh^7T8wmT1_t*rQ3=hAVtPGFQ_vG0=`S~B(!L73lH^!DET8#{kHb|zA1x4ZYT4mOh;Z4y@bgoGfB0+c#&co6OXap z^<&#rjK$KnQ!O93nj{^)O3%t#IB*?3?h|#}`*+`ba>q;5g%tOCJK;pJy^dt2nr_=^gPs>v>^{8 zyDzbLfkQX@((c@9Tm-@+LNt(0Auy(k(v~$+nJZmTRAZh0=l*xS^r-!OmC&6u9dFf9 zJGc|^N26f52McF`t~m+y0D`P#a>x}?!}K2r(9374mC z6ujA8~^@paBj!TJSRC24$nweM)WiK;(+?xO~Y z8(f50hY+wmV35%5I}|FXDv#jbGTSm^<2M=_u4IyvL5IEq+(a_jNQFxqy$oy1Ch~ zgN{sBn1>g`^c`)8Tl+L@W~F(Fnk*XU+Eu86Og>+SIuS}FZJi0|9N$cpM|~SBiHmtm z41HVY5TL6@FdxqIr1Sn{;SvHIeo_|SW~045l$??htJ?^NL{5Q4Zvwx-+i8|yGI2U$ z)>i~X?ZOTeOQg7p#kS4vpsqwV$`>#9Nayw6y7{@It4|vA0bwdbBWD4TL?yZZ*4Edh zSR;+BdFBpW|5`gi*z6{P*@+%m1T!okl&D$mDGa`tuN33HJ7)6T;?fF_m{@S+Nk@csDpXsW>+LP>Y(-6x96$;lWSCA`RbdMj{N9Z=vGhg+l|p zG4kwJOJw9z_#KRCY{1x6W|M(_5e8Pm$eR>FO3g}p#uVjSubvZ}pP!pTs0SEhaP_0f z$!f*LR}ZlFvBet=zm7e4kS>!P*w`sQqFX`^BLKN6S(r^Y-KBp`m4G1%p`T|SqK%yl zvaPc4GcZ}sTJc)So8ev*x5**Ey|%e&dj6Skky9I1tafqna*1cF1AtNZehHhKo1^cE z{giF^P0h^_1=6PR$EXs@QlbH*OLWbdCoeCrv9B1&!NDORDT5o#^(l={pdyrQZN-dL zgBcfK%T<|AiQuOqPtTd3{oQc7NkrrTN>XG}c<-G6jjz>gF(<#>ff$~sub_pAa@>@V zT*MWW23G}aau_ND;uBWWT;+~;fv7R4h#4oSu z*q*dgq3|vao=Gmx(0iyAs`^YEBfdGixw#GM|Iqc=a_YFlSFd*LVFFioQ*v^QTDegmmzlyGs28*$q;p_nY zEs|p*2J1Boh>JPcUtVRsc2&S``ZiLMi)l}9A(aqh{~!I9kPk~(+cq~g{`j#;3evQ~ zEA~H-ciGrDK%=}0ioMv+p>safgJ7%jvK?NVGQKe;K>Gpgbm7Foc|!~{|uMc#=dcE<~bg@=>CWDhpDvr#^R zgd}c0Rqq5IajdpBB^A}2--^K#x+sazu(0>7cQkgVVP>h%BJP#fQS|mF`|U?w-bo&Z zRh6d`)fU8=(d2K+83FXnL9u^S#LU?|?X!F3wr`p4pvb1kc6%8nI$_TLys{{lX>T0= z?&F<_5{iQME~pSTCrV;ot}|zbCGlB|!VT6xa=a^2rT*$A|IC?d`Evh?>p}=p`1E)z zcEMw%&u(yh9KWH&1I;5KfPhci>EUL^#s^3og2fc=*kdyicr5 z9jI^)ce3V6{BdSo4|s?)YMy)Oh;r2*k%Ba(%+@kke@xsfOam@E%0W$W0Mu2SXW#)Z z)*Q4~2)$!+=*B=t8C8BMjf_cC6~tE{ft|AIGVtZr|Ij+N)=8^;?pO;INX?Dbla;r6U^9}x1X?vb z4~OC6T+I?^LfAy$FeK;DmFtV+3wL-aEe*n8gvGsuf9^0Q2ol!UNYF8ev^XA*vkiw| zCz_MEn{k%^2d~|Es9xyaL%p6R$do+u^5491`P&)ReRfdDU|8^*@fx_fzG854h$XwK zROFG_!!9U$gsN))iSBK5uQ#0>heFh2de zDkvbJ`hK1TwpX$Jpk$D5{1kZMT?eER2uQk$FR-zk^d_18@c9oKlRxUwt?9|$ss>@L z#&f7?{ikQwl;5r1It94+Q~xbNceqlRIi$_Xz+Wk=c?Uf>GEN;iBPg)kBw}cGdH3|j zFoTREGJwMO15j@GaWM`-%fU1(zsnl z7|`He|N3wdGYsvhM#B4ex4>A61fPJQ>U7!z=2I?ezIIZ)7YFZWN;p&_a5`p~nbn*P zJcr;iOt3UoAb+G;`E_r2$ut4U&B#lCx>%5G?CJS26!p_fNk#85B zi3$1QFIrQ$YDakE5PtyE5{B(;OAKu3Q)1}cr zFe$}wi-GbckhAma{${*XOSxUl+PguP{_XAUYxJx4VPvTxx35%6>-{T+Z#HFLQ6{0P(Z;TONmrz5UnXTn)g{b}Q>WVdx$L{F}e60r!9#lp`aZ zSEq$8V{kEV<(0O2Tdm~Tedn`TA|owrck0mh5VK8uuC5+^%jRvxSf*J;MplMNkTnWI z98ktIkx4%N{vRTZM8B=mlvh<%75DlzOujBE>Rx4eI-Y7HA7(sE`$EcL+Bj91&f?xu zs-AnI`twv(d3OXhjP$L!FerH6l~*-Cw__g;-ALYzQKQ-Pu(CITi|9l`;?LrUj8Qi^m7cdHFJ!WSa0BkpRb&UmY z^vdozZ3SwCekK)$r)rf%RH5>#m08*QWw)9(1b?mk72UBvr4<$0oA&rsqum`u7O-UZ zv-I>|{h5DzvL}-*>#;`boIT*HVW{qHz4@*OBqSF~uWUXwGE7ZPVV0`ARlw+|tjq=e zMJAzlJFRHl$Ze$G=vx5?hvHUC6O!ZV tx?AJlVdgtJD=Wjv+=9);I%Dt;FgC02B>HTz{{3Ia)mWhJ|)s;ppzOm}j1D#oLPC(c-!D}zgY>6D6Nq-B9a zk?x5Fk#dTu+KDN}6~VGnZ~Nwp#?_LB2Z1Too{8`l#9B=7$JpZMcBJR$y-VPZcVZFM=dv+# zFA^IVncB5`Mm)?3c_M=Oa3;h;eIxG*Wl9tm8!wV2mQ8Nd89@()N)rhdddf+ELhk=4 zSZPfTTYW;EN!A1}B>5`jO$efvh`y!%L$@_G1K# z+$Y*ZQjE0)O=;>p{Y@L3ofsr81aT^acMO5v1KHGr+5$q}h5#3)4u!NgWZCw|hy@cP z#>Vh%%*9FcuQa48fp*SCWe?!A!*TL6*=Fa4Ve}g}gj@$xW=6{PrMZTm5JCwI8bQHS z4sjwD9l@^)(u~F1hkz1ARm4w(r4SX70>>0O%T+GHFAF}+GdtEfrgr+;2Kpk}oU3Gx z_JZjSL&gkO)T>>CY6VqqsK5;y9f;jKdd)o0NqH<<0r)SW)mXv;qSkP!xZ)8V3}|t27Dd@agfSw_pxr;o zdFpwb`DIElidiKB^J??d7Vr{5Gp@l_s6#-So1rd7@q<@MHhvVlo>fEjUPFQHOU24 z7U>3QCvn24#1CW#J}ucz5gW=Jk}axkrCeG~T1e_^40XDBYA0GR0NY)F!HdWeTP$t@F^ng=w{V1|chNjFGmOGk~_W6}`h z;r)d;KDlRoF?w-+;Z|DcT;|0@~Qz zhuoFigWNCNAMfE_=-lR!g3S3);`xe2E4$LQA!eh;pWii|Rjudvf=2m6ydbz(lVPhbeP028Do`W+pu`IrOGxXtGL6=rWe8wEU}&e$(Zban)UmEVZGJJgw#~BHF!ve`HbysB zF`qNJE3ZsrSZW&jx2k)qyVY8L^n2RN=BLeY^O}jvT($*~ad&Um(nml*e!xiHq|xl( z9+tngi#N~_L+~cnW?3#Gyly;|zrP*cFRt`zoqH}nV`CS|q{~E%=erHvJ>7jhifTP= zbZ?;5h5^lJ=k{AKAw-M~oC5=qmLxcgwHKqB1!m8CMEynMxTt=`Gtso35v%NsS}}uhsYl)0&Aqt7-KK z^_|7Dwe@BKY7NF|CZaXMx=u$J6Uou&6yB8c4n-pkrRInlnK~J5T-_BtQ^m%{Q!i)f z2dO9xIgd)Si=x$~cDMHG^PA;4^dX6?w2X({NQk}R4<-aLQV;;e?F5h zZLQz)OB+u5y?4A%{6ZnTCZi`O8PXX{EA7e)oNo>LddIh1edacXtjcYRn^OqEL&!r2 zeKMXd9{PntJYs618@zr#=~=@x<`TdEZB+XJ>M4u4~e06PT9xg22^BBK+B%0$_ zcho&_U4iQh`-7e%f0&agkmP)Na%fL$2)fq=9TChGyybk2!2Q#6R+MSZZ?(y-T+>c^;#-H)6aYFj$@K%qrt!_u{*Lg$ze(_DkeewC)c;{iwSAPgMxIQx~~)a zD=yuxZ>-Fiyc{38_iuC683rZY%b&BCrdLkO_wO3G)n@uB9ZEiq+YD#cpY5qG=xnW5 zwO4e4souxWIQKV~#gPg*-Vl$0cdzHxV3q)xBsP&!mIHy@DM29LKoIB!IOTf`0yzUj z^VARo`j!d;VcTW4De(appp9iD#Xz6`{p5BQCje*Q?4-0DK_Eu5|9-(-3k81zCt;kv z%ZbD6AY#GrQ0(}PbOJX4eHRl}bzMEzbJ0~f1!hY!cob;cg-d?c(aSNr>6 zRY|aFnxfs_*jSlA*w*Y!7rjVO7~M8l=?f0-AIZ$R+1@QElI`~0*O%P)@M&~-|7OVR z(fg|PDANP_7Y^FnS6_9z_yl|zL|@x#af29!$&7F?CkW=%m2P=j2yHOpriPzk37Pln zvCH?v*QjJOB}!yJtGP!R$rDCdT&Apk{QSuaJ!8GvAY85AnZ|9%DfjJyN*>i7SB5aJ#EF8|-*AbMchJz$nKS!ZpAW~$SA1Eucw z^q;E6hxGXS!TN^wf@#{xFVVM6sE@L~>g5YKoL1C{(g$oDBD6`y3uS7tqx)~Qfq{^+ z+4xAMsuo_pcQ6v$%WCc9-is6R#GG*O5Io8*Ll{A5RGmP^Uk^*~jZz-1ffd z>TP6~qOztT;!~YtWXXrCS49S)gc%3aW)I9qxo;Zz2 zO;g`zKVEJ1?}|s{DpEskA8=2dc1Fk)%V+h?QbgRm1j0S-CukYs$k4>@aj$oI!Dv?& z4R}@jE?L*Xwk5E=IIgKnoL7q{h(f^5ik=`21i)#vy^snM$Vs)$^}b zsM6N{+LM?_z3CEtBgm9CVhP>jK7M!+5lnQT&_|WM>aU}pwx0CE!EMEsj3IO@a?$Gc zCYZ|NeU$aen>)!}%J9x^+Q|HOxe{=()|{j*nBgOPu<1WMaazo`h}AV{(jQ(~Uer5{8sqcas@hMEjrAqcs90$aMP1Mw zZyx4g2Mu6a{9}Pao=WE^x4+qi0=w?$?A*CHu&&QcNk|Bo7JQYhId5-kGky-oG+*Lu zSiab3Ge!6#pS8=SLoL~BPk(!RYxg=uuz$FJeX(H9?s_-L_4n`~#d@`Mz2g`9zl$}P z++&x7@%`mCYmZv17oh%qr?Pnv8nq`g;_K=iQ5-)7NXZ^a85k!0Bf12PL~2{^WZ8IY zMiN6FfyC-%ldH79}B4fLggUvAIA|n#I2F42R2` z&usFgVdTi7@$3HK;mSNxrTQ79lN))bzO9j0Zlb?3e6s1z(NRd3*XvGxjDWu?WxY}> zn#o*Il$4Cjo}VPmpw3)To_eMBH01Hg+*a>A*Oq5ntq2%@xum>2QhY*!-M^Eq$iA=5YuuDiMp52ao$rys?Z3Ig z%-@_Z11~q)Zf+Z7Df`>6Is*2n`MJ`gkQM4v{;GQBk=Zd&aXniR{MuijIHH1&Fl zhAK}P;ql4~2@Vg`;vX_;ZqJzN=KtLuOQQ2PA&rAIt{veamZux8A3b(Fobn54mn;Qa zbtO`AQieA$Fc|r9OUi#aaixdR3ELhlFO)(5+8-Q4t#;Yr zG>Z1t<@75rm)$2@J->Gv!H1@SAP~h$vzri)%c{ofVTYUEpccGRyYV;pOKVCy4)j`+ zZ8O3W(-fqU7M9n`gXBh=b3{i~%i|&URI;8!F{0kzFjFn3i^VT$(;pN7-aD|K#RI&b>;>E(PSr>Uha2u>&f4NP z+qtJ3AG#=hRWl&&Xszm@LI0R$X*_r);BAn!uqeAx%&`2sG@VF?+g8A2Iqv*#W`s`L zgTVf(&NEph_;-9lrtk0g|FHc3A7<}hj_YpOs81Z};td8OFrMFK&Dv*2tYvAShV5Gj z3BJT>Mgl|7;vP)7Zw=zlP!6A;R~;B0?(gr1;INplSs~0yNeR(uwh_)#%mpd{B}`0w zwJ^f+CsU=%gnGIC(WRcNn;Qu;bIpj0(~quG2Pkt9ShJ~2zy1&;OxI{Ba(|IhF(AWH zYR?rSroMR`(wj|r64B7mbS$Mx(MzcL_`G#oW3yW=&+Mjmdi>kIn-;7ujgm`e?;TSs zhk6_tAMYQ4tKM6@SX2CI>W2a@O#{?GnMQT=piD9`G4agltM}{V(sHAvhIdPH-YsK4 z^Yz_b{{*st&{o$w$9<6Kj71~x`fsdz!!b8cHzox|MZ2R3R3lSU651BD^4WZ0+5ByH_30@7 zq9I5|>n$u&a&l1p%)m#3!3r?K!orTXs+ppRc+Gm@xTE)SwC0ET;&$FW9%lq92pIL+ z0z1}qL&ZpI=n+I<@7?*0jg4o@e==oqd+R>wN}~$=LQ7^cm^x}_Gea@OfsP>(99o+z zGFqz2@;`g}ZQh85?)X$=G@@Sq?5L@}tgf^5mk*ST;_qhQ6$F4hCeX7CaiFy;gQs!a zFIG7kY!>2UOxUTiztwV^tdwk9M=E7-59V~2RMW2Jh z$Hj$x)&0mgV9dfDEgJQeqsDAf`+T_-p;Ei~&~ZU78{ft-0E&Uhm_@tUCJKu|J6Ajc z%Y3Ddf>xtcc{`ldbnM6e!NCoFxyi8n({98H4yPw%4p^cQ?53w9Eh{VQ(-{&Gk3Z1L z050jT9G+aMZE|vj`gBs9^IWh69|X>}<+D{p&hm3Qd+_1xFXurm+YcLyfo_usEC%?f z5+27xcJ*p~s9H_LPW>2w5t&SHdObNlJE;CEpHSHRTis>cOFwVH;S;&X&2GJl5rxMk zu{RX;x8c{^kwGvgMe+e8tLDL263bP&oB857#b&Q~`GP-+|3A_9jl|rYn3E zrE8Cy4W9k}-QSD#2S-5$kR^=H6e}1gN(;mGHd(LbE}i{1dyk`E>|YUazp2_~H8&$8 z5eWFBmnF1dc@gwWM$$LLbfxpcIJEkw{F2E)dUp)O5^34yxixs19UXB*t9gbFfkxHOjgg9blnvO-QHO+ zFFr?8M#nQG3gQSNkTM3+V|zbsGUSW*=FIHzLx6R-GY+9S)@ihfvR*^HAP*$w;eq@0 ztMrYy-kslKsmg>!OV%<9W2iS8pU0m;r%4ECh(`Uvu&}Tg&|n;(gBcGEXvLN+B@5JOJrrmmKYO06{l8Ul2WOvjkBTXSd+BYJ8hHw_9b6DQi+5P^_dAZRU z0fm6IJ&`sS8vZRvz{`EFr?(pw1B2Xd{%WmS&}=$e@0isZo>kjFNP!&fMmO0AN4J~M z`k^B=Rr7-{dT;x3C;I%{>f;#zf4DHX5?qWQMi(rMXNws8BCsEiLl~QU&r`ft%i`$#J;9V9WW39@9*7dIjPVP<O@ut2u%8*MP)yCgqPC$QZnjz-70VY|JRTV-Wm7>wRREnZPc(!?;Dh9H zt9#f74Q&_dB04Hc+`_`5b&Z9dBW@4CF3lD@lJ2{t^yKi7P7k*@zdi22;IHw)OSUs0 zFfcIJ>uoTc;9lM<+2NOmGgKTLU%mF?PKbl}K zR)Ya*Ua20jq>l%1;*_^9sL9RQ4dyH07rah2@S4&z0%;rwetv$xA=nEs_J+HI)#$#c zlLH@M)ccmFQLUc~LL%e_xgd*f#+9j+{}CTgUas}x-SoK9qfV06zk0r#HhtQQ*SD0onMsO-blYVHE-{UEro@Zsn zjs*_VdZ~&a`Mp)w&VY-H%WAa)icAs_rVs-#AKW_$5&QWX*TxPsTOFMJE|jP-Qn~Gw zNiG=3OJ!Mx@_?LP?*0TpBOW7X$-{(+`HMbZ!b#YVZEO&Dkdb{cA;Hp0Y-*yI>lVqQ zuCa0sf&>;uuiZ&J7qc5iWd$gOGV`@60$?%Bj40Q9wu%3XgP^xTI07~!u|mGE;$%AD z-EarT;D9M8C~PvW7uy=>cG#if;+~XfH-6pB79aprO$|t@Jh{>p@=2r8;_snt_dC*D zu>z0>cr`yC8TmY)Q1tcn0aJjDQX$QMwb4=sN)ITmKOg*20HguD%K5)kBv+DfwI{`skjuM6T&K{1SJIk=-ZaL8-Ym7T&ZW{UwdLI%yn9pSv{&+3_-!^_MWuLW2t&48Q-kw# z_QumweoRjtJ*U-rV2VC1pOUGF2;VoCQ%GP;8j>+XfWoCs4$*IoeqsEgRl`jxs+IXj zzqAtnK0>&Zd{3|fE=`6|Av;*1t7BwpPNgPmj024pHn2T6xtv@E*k9L6++Y_44&t5e z4-$YGBV3EAavr{~~QJYW~( z|Kore0jZ7zK761H1-KqvMBrJ-CN z`x4TDPLP*b#(}Y1nb2^g-b{?=?Ne+V3soCWNEGw{HV>_c=}QNq0O5jY z5GfV%8R8~C&F_*{@Ie+JIM5|{3mmaFCZY2%9M7wAP*|%iV1YyXQh;6zBD%VY6MgYA zkyp(?+7RYoJxf#7@!;EhzH`ih2^-*cdYFUMB1{u62X`9-h@n5 za#JcY5;`zsR-$e1RlRjjPxKSF6GPa3A9xZ*1FKfZZ8kO6c|rM9fnr}q=uk-rSeO|! zb<$OyG2wBGUL~Z-cb#0*#$?^KPpS$ginAo)Xd0~yAIxl*(7HqMY35qF0y+Os`YOAPInp-}@1ZlY zNdftMF~6qiYy`zfo-LV7iGY7l(F!U6xkB~OsJW_Ep^stW&lsWR8Gxn21;ELHendOq zthkcvTXLc@Dr1L+mOS-voTWvsJCPrelTq+OX{F1SIIqmq0$6|+2MHgCU&YGxMD4kK zv0+`XI3=71z7icT3No)9YyYyP@s?F=hy?$wj@v)|KKW{dSWAT6t>+z6(|&x(lqy(gzoY%A~@`&vyhWz?2;;OrX@j#z|A$Oa>t2c+aZ>1tM=VS_?g>AH6v}l z6-j}BZhYTC^~AIzSkcu0|95nW81p-c+1RiIjf~c@Cc&HT+qHDU-(#&}Y`!0avEhZ{ zU2DN~XSM%!EjH=RCA`4SHG(AV<%LrCQ@udC!A5IoRKd)t8_tZYFu$o26VOD2Xa?&( zKYD=A^g7UUkEz89lc2B|H&m|>UIlj{GX-hn^&C=%B-qn>{x(l;bdd#J$J6rB4#FMR zLEJ%u@?|TbwL75=oU#LK8ry{_ld-jVJsv0ZmI*t*G^^P99cZ3$9>5C?$z`W!bNpo~ zVWVu$1P^A0>S~v$?iGCe7&`CI5v5H|8-K}A-BHR195MP>-ouRTvg>h{VPl~Hzf|0R zBw~>zJ-xEZR7Q`JS<7~A5c8|_QsUDZ{!Ymzy~c=(S!9(e~M{C5zC|!Tp?QeQr3vjgrs4 zI0b*PWT*k`q4VqFsfC&DsKDDRgcy|pTjS+1m@F_L250b>mEI269@RbDDE)v^>&-sP zNqr{8j%5dHbnmE_!raPj>}&@o9-NIIh@0jdn9`-Qv^5$Anqga0Z}4eS#Mum9`kX(c za6wu~+lanHzDDT1DwkoQ!s9zvhqlfrgg*w1W~1R0Ef;>T-MeN>4WC}?d=8rLY}J9F zUQj77T?tNFPl_UeN596yFR?}N5zQ1pVW52ptybYeLwdZ14xy^Ii<|1&$3;RaX&E75 z{l*&OYua*IUljjQUMkXW6sxLDi=b;DTlq^%uIL?zQ!_vXJskuU!63md<2AqT zkWu9#Ks!=_J`Y`RfcmWe<{hk&-eG|`VaZfABV47-EBBVJ znYz|cfklMxN%T4Rd8GPsE>xw=Rq?eA+MCfE>n27cp?bTrQ>E7d+^1->?7HL~u<4=h zm_a(SlQO&#SHU^6vl`qwI~8-aXR^6(%+nOT3g(j5F8<9I=*Zh13oeS%iSh+JvA{ZQSU&b- zRvBo85^1f9{|~e9KrJ?Jm5J1~miPJyKS_WsMTz%7=ai*% zyyvWa;y;O`%S@0mFP}E3MMWmg$K6%PK=u`d1gPyOap~g-g@^~zg8jJ5>N}~mJ@!hE`vfuW4d)-c)3s*uKk=Y5d&i^g+1M50AF2!%t(mfSMq@}Dczi#}jJ&`lL>P9+S zKFYbDvqxsfx;IVm&4W^2Fx0`nHB(XB=BtDiAv8ldCjO(UtMNw77a(gZ!_?3J-?IQk zA>+dq|Y-#lE<;vH&xOAOf$A|PE z{E2Nez91*htO2^&JAUuS!Qd0C3Gdq9LbS(4w!0eD%Rk81aa)%opN2K#0^tt5&R44v zjYC(~Y)=ed5)D@P2zciWB1StH@?Zs`=%8^XS3W>sWCgSt+AO(Ync#Lgg4-0VySmeE zm%_)4(KA{5sQ-2wfi>GhO62+373V;3b>)K%AGRBG=xN)O7Obt`_zcNuQTY{scK~wZ zvQwg;CPG@W-0@h)w-;ICN%)Ehhg zhwI3OQg7g(CzI_Q*neNJK;I-&0)U8e^Pw8Mkrj%C@tge93e`EJQwL~>tz=gaZ)x+m zczb<=7O>1w|i&F=urX8tt{Ij8cov@gG_szyD!CRC9LbQhV~DmodBWk?yg?bBY| zac#(X`^C~eCQ-R}SnV|26e1;{@PKS5E@S@7)s=?=^9^-ji9spYHz;RLXSGzIhEDa2 zz`g`@Y9WFaHp)%(n{DaEqO^Q`B6)u`XK4nLJS@+$$=Kce6(2AiAkiu3R0U&xzSjOm z)_2b6IR1rf#$Fq7jazeuP@3lOcUH*hC0Nm)vqpFthd}YbV2CFOkb^UiCa)*i>FYeU z-Jwhv_RZpEsXTcG%J@m%-o57ue6&NX42E4CwbE9xfcNDc9aH=d%X(k|s~z?##D!VP zZpvNDC)vSjYzsI0jv2`ETu(#pf&oZ-gzwM0yJPt@dgHGh{J~x_-y?#Q+2APB+Q9lm zP1mb-3ePC`i&T;)q)-Te^N~RZ>H&BGy3*9p*!;=f{Bv@I>v)Gmh)`d{$w9T2`{O^k zdJl99lCI-4Ma7I?B4C|MrPQM*6?l*$zBBYyUP6uy-a0^;1v4+R-!iE>mya=}X~Z+` zxt`ktwL(lnm(3-@!#W(2J!b+W*|B;%?^aA8N@gf868}O9ouZ7ma!30W0lxP;b>B;lJk2#v%?Ma-0 zi{i9=-`GA<#`PogE7{Y7k)!1r47m`LD7UCQpSy`10iTGF{|pb~)n{tPQ$#ef+y3Xh z?&Dz4!+iQYFZyLVy{LR`$8#c42e%E*_v?^WTgj(##KCoc01>fFf)*ppj>D{JM%_L_ z1=2HzB~j@`0*#FA?uvvE^U-mNrpGV2Rs~iXW3i{L%TY5{!QNeO8QE8EP>;-kR`6kG z`L~60M1|I35b=qd!dRp29RPm?2SvR)N;ReTyZI5J)1JOh6RzYxD2Peez_|w8AK~Un=-#Tj_%?3vV|16f+(;rf|&7Y1v#VOaa&T(pW;rRy?HpbCj#E>` zRG_dY1_NO1?-Xp@7n40hr|LNfwe`SK?Z>Un7!QR@wGpdlV~NPdl*L@}h2)OLy?Xf^ zZ0@Uz!D>0b%gSqEKyBFFdk;$0RL73o=cW>)ceBogL`-ZI3aA zS;dLFSu>Bsq%43 zoylf3heBRXXT|{$%p8jE;j3U{LJ#)yt?RbWp`x|rD|{F@ngqO37f-xV_94144Gg@m zG8R6Rx%VI~ymqci9Eq|xWH1Uqh!?-C!27hg*V#49M7DY0e8|A zU~}R?HRmSc)NRICvBO(3R!KaLY_QrRqL=RVFfMJjyLOj;|WOTDBD^(Kb~qXA8F`!?Nf)a z=okn)-EwS7`up$p*TnSZ?vn40{yp557<2Bet(5~h?l6@WJYocF<*%#XnguMd_$bUc zJ;b1rt2NM`{#T}_*KXuLcK07~tj@W4i6X-%+efD%tDDXMUnO{1yo&jFfcXQE8gs2m zinon25z=_yeEiuv#6~eb%hXAM$!-kcsWqf^y);U0g6oxvs zeEMLpsLqTT(TEs({Ki4(cy2-QFuVk&_?kSW+RmQG=CMB_IysN(F5IAh2TNvr3XgXT zV?xO4*{D=k4;g`<7gA%cUs+a%zZd;lTr<@_k+#*`l_{cmm{!ykJ} zK%aq7mKHYHrVcT9WfY+>rTADbL!g5Sb5YmR_4{n}PRMDnZAcH#BkBK3Q=;Pc`1U#l z2E^qnG8<7k6`c#Wbz2*%ZAh0%8NH!qKkC!RK=Tlp3aG*^HHi#xaG;5&&7)WNc9{SN z3tpBz&!>SgVZK>gJ%WTp^hQ17mt9;NmPf?$d^{NFF=xI1xLZPaLMo6hQIdG^%hpJa z2jdQXk)(Y6$duMPrm5L0GD}S_@kiHV_WIy*Wj@s7Ld{oMpJ#%O)gKdcaAAD`NRbob zl}i6{)%qAuC9_daAgcuLGh>iAzTFNJnhEq=%ZZY>txhun+#g@k-dw*6kO{E&6(peE zsk1eLt~e2zpon>>h}X~Pp(MP!cK4zHH?9lDT~_0`_$%poM`$fH)UgK8W`zRGUALo-rlV;96Fg%cV${)(p$&s45!ZU0$lZvAKAdN)cxVnoNoZR(ieQ6ki~-xxxB z+~Q`qM-Yl`Y?rNj$7l#58-nZ6Hd;+|Nn}Fm=}vYs2x#GD+?a%Be7<7je(e(wHmoi` ze%0CW9daKMW<`V3}9Fx=N?6oKDAw1-Eb9KGX81%2OPb^swXd@KoBD8=er+jMhGbz)1290gQFsL z%fZzUsz_{XQjdWQ&ERw=)}J~{%!q~KHFN_qHbL+Zf8$Z#Ee14yY>98`|J5g!Y!Sgy zv<a@!@h4*u{0m_W~Fa$WMXLzL_rpkge(6XE&mG3Ew9|?U^o+f^G20YlHm~?K!)n^6?cgWb*J}cE|g31fe*n)seMKP_4<#29_P1*?b7|AOVHA zl1K+^ec>7rK#VAZFFJ!K0nsWF!MWnoxPp4Be~(L9$CDp zf@m!$k#g^EU8}Z5hg@ls(ye_+%0fct6%z|2dqfWCpYx6nGgXv^q8k*G1if(dpnz@E zn*9`pu}kbPg`pxqGcMe7a?M}(bp1&!0-Kzv75LsvCdXl#aU7-o8KC1W1Wp18KvzJj z)b-;=fTp_{i{P794uDdT*&C> zGfZz*6pCpSn^Pq)BvBHntd~ipQ6$fDXTjvx> z7V183phkM+A*PVpIb20&L(y`=_u&)fy1#V(7YD$co}HR387n1J*J%PiA*tOLFM?3E zg8e-JRpjaDxv6p!3{K?yRG`SFohwO2KNs{4y)|kO>%&7yLZYq z-<}p1gIDC1;S>L%YVl}x?QH|_I6h9tqi+vd40-|+EkFtDVVbK=CT5^6*gR_5= z4-qf++4FIMKSgA!57$E^>%(g=hHbfx|M1b=P}N+1<#HY2e>N#wM%To7s275}z?n~r zStJeIj&bzCX!%wDc$i%rPE+XGxdOR=Y{eu*VMMO!W(4*57VQ0nVcqva7!oq%lBkZ` z#-D-b90Sz`lKnGTZGzn!#O?h_ji0CT9|$nVeYASiEb}@6^*#N~8?2Va*dJtjJ!WTv_w0Ed`yL%?@NANjbbf$MsZwn(qCW>N@eJP! zNrDS^vYCR62|}j|Q`cFOGTCUw2led=r90Ss8&A37LrPh&Z_5Sw+S+Gf|M_1*{moDM z=rpYa?G^MH{wN5Q6?z*Kki6jA(xo;ll=y2p!PC#-!eLSpw!G!XU)y+*(ZX3z!n~L+ zXkl7mP}w=LxG^vi?aUnKi0L}4)YN@0vfES~qBw7>wk&{uh=IYuA8;*E&h^w(j~}6= z6ReZ?{m$h<63~`!R~*QL@$3)!qNV-w zAHB8THl5{OIVZAxy>Xe(6&LsS`P(7sKJ6cghJ6tP0T^ozc_p5LUruZ7_Kibw< z&Ai9sHIE1UQ}RgF5AS8~o>K);Rlc#C2|K3;z1NuPu zH2e)Z?OIcT53tYjbg&iF!AN36&dqaT&``BGWcDsHZV{L7Q-;{opwcDaXwS$%wSYL& zC?^;450$5nRD`04b6$uo2hgwVADV>eZq_`@WUmhGIEl#Y_aU$f}(Q=$j)8%H0> zbuuOcG-=fS=oh|}?5SWkc3S2aX`q1fTjsWTfcOrwxp9lpH0fpU64#|#{g`4re?6on zDyu51v&!Tp+hpL%R`2x67}<%XZ=F#gKs7O!Pj@!7cN{Bk6?bhM0MF;f&wmGhC!fg= zHhicbj?TjY5heH9 zKr^^%bcVpYVzCAbySehnsS9scS(pnB^|yr-i(`kHx~yFzWIlXP8L&57QeAtKDP&{I zDr@k43cn+>?m~9cwLYa+dkcWjWOVkoO%68>F0ld0Mh z0WV_HV=~do`I(#;E65)H4MXwm=W#^r zA#&6;`5zmU??1+Fr^=j_G3DCH#+i@>tG?-WG=dwE5V;}hdOJ02mB)9ZF_1eb*yjSGQ+ zrPsHxH(CRhw{xup|4! zonINR!6bZR>;$;hvLX+MOv}P8+CE;_5OK38~5uqqODCs62J}%CRE6zzAv8)M(!qMVOF4+SEv|?_ zAAq}SiwZ4L^NM-Jam~!0bMLj*Z=WTAZTsU13>>2SEtP0Ig3`-M)`Emy8Z=&iD^`Zj#ChdP zXHYjO%xStguXIC9DHRawqS7^2wpT4X5&=7XQ+E!BLZB;M@N zIi2y{e~*tOhhhhF*PGwTJW;oTYWQV6##BW0nb3R%~>1CvEkH8y(!WD*~Rj z2p@#}XJ176S+p7lk#4gyHLtoLuvHoaixwFBvo=l|(pAgVsdLRfS?0 zyGO1(#|4QvuqRIlWEzhG4UCTA~O2ssA2d#!oi2+UW<$xG56LlacZ8k10{ zZYW2i`83zo1t@vFIVUvHT@yyvM{6M>aYbqlO58piKC=-V0lRDGsC1dKLXww7mV;{u z2^QD)cl8b%uJ2=3Q)c4oaJ(&nvDm_ccds(gIg?lKd-D6Yy_rK)!Fx`26Egcu9_;v% znuK9%sOD zOW;BQz@dOzcx2yfCZ(eijxj0 z+IOEic!zpb5pnJ}Ih@b)bOFq~NRmJ@4tM-WSA?lFlcyvYdy$9FDHAXIl5T#U`C>y% z5@{6hIYg1?gAm|Z+xgB9lx-T;`Rtg6x)K3X6d(xDo&_ls7IOP}!^u6COJ9`h4^;|w z^gnCsG&JTlv5YNP6)zs0-J2c@AhqQIrT%--Ch_jwZ|Pr$$=Ru62&S~^y@qEKD5#mt z4(lEeW}@6|9I;=Z5t<#M4_p@v&NRotj$=b6SJ{rRZJ2o7`*X)yn1rb^doWu$%q;yjL zd(!U4%cRsTuZUsNkr$5Npi;EzGy?*NSOMe)10Gijlqzdr-Hh0IVqJ4UHkCEQkB2J< z4En^O73=Yyz}W<1jWlfiJD>&2I72-soxaG28YVhz#T#!rr?r_|b>K{wJ&pr*L=u77 zm+5-pog-J5cMs^@LgF|;>4tG_v*J@eO|?JeV8Oi*LpD&q-7B)C-64ns&cUCq|7vyXq!8z9~47U!m*gdr(F~# z^vEbPkd!%Xe3W3;gL~hmHMtM3(E4!CG;^H~#Dzusm|60S*!=H_3=wG&0o%rlZaq?l zL6-9TH_0k+smH>J#jSs{PW-BX*QeRE_>mE%sDxR4L_8=XQY#ATKo`R;z1!@;w#IN2 zn`jJ>#>^w&#zvF49P+?R`my^{v>WPCJfs#=@cCkC+_1{G2kn$&qQOVvUW8N_3z1P%@ezo6WVA`ss!Pd`90-avG~4YQH1y%(^>pa39j#@KPt_mR<4UYPmQ`G^ zbSxFYZ4j6(rFTB<)MRPsl}l+sfaZ?JvlGo<#YBiRupsy&oF`fykhG$sD*fBJ!~Z>X z{;V`xN}B$UKtqu6Xw|_?7qgcN{p81GB$S8O0&cE-ubH#VMya{03M^)!a=`&tj<@h+ zhpI=En#tSYVsHUd-W%%arEY#5y`GllnO+)$jJjFmP>oWvW}gyOKEhb+-}qCy$+gls zawz2Gnrg&L7{54%buwehf8pEe#jj=(AjuAAQ*tKcn8m`kI((G0PcnTuO4cvoDkW&{ zv|Ao@8J67&CH(}(6Guj3$YT9Baw?BB0f2tgN=9J?gAQ; z4h2*NkGV3!4Ecy|X94Q%MGjMJE(uZQ=r5}zM?^oUi|pqc6w??JloDvJbVl&Qy%niuD@Ef~y!2>sx=aZIhpZ0+IWw2XYQ(M{rlX*;GsnkT z9xoLWM=!~JO-#^Ey${iYAoNYC?B&>uUbeU(_beUOVxk!Fe>5KRH!dXL5P44RFnzFtn33gY)o>zwJ+Y&^0azUlXDGS2@O_BNEw++WTe}e^8s5V9 zw%46*AF~s(C^&$sl!c>!#|)(0$Dh=XhL@I(TrQ>6NXC3!5gXj{$#?yDLe;g1D|)0w z;0W*bL`Hex^X)BX?|(M6Q9WeGi}T#T-wt&f{EImkOz4=fq#5{Qs0c3jZAa6?Z>w0# zD#KGM&z#NC3a+$xK3TqC8n$bw>`rTKZS;>AKoNs&I87@s#`E9EU!=Hs7&bs|16 z(yhD5(CV1=@7@w6Y&QxASP7(NN8@ddboJ}GP4iyHC^JY81WQcw*BQ5A3bTMGmGxog zxA@3WnDw~evy!zw`<3D4E_CVtk{=yb_)sj}h4-|3Zf-^Z9mOa}G4;SVy+r#e9``2m z6HBQL_0n2Rk$B{sQO~Ep@y0|5z|NDGSfJ#(?~94I$h*?WM_v)r)iA&TH@NwbB8&!U ziI4mPcNtOOMKpFo(+fl&%EL~f^p7PplBTkO(LN2rq{EPeK7x7IFYptU{4MMm1YmRj zfM<3Gp49Dlga?->{rj?Euc^AXHOICH>t-?uVrJiKEX%m<^{`AM~@e##8U zd?X{f)4uuDBx%sJ|Fk(Kf2G3YILx+X+DpYL3Q0xFtunHvxdV+v(ZGaEBSKbyS-2t* z-6#=2r{(}C%Lb>A$PCr_M7yQMd9-p4bo{n9VrfzVMEY~%CM>9E|Hejt-WP7Bj_h>0 zL{T$0M&yfVK)$r%v{1J1{Av8)OHfPpa};hUAf9*vkM*KT?Wf#)m2JfF;-ASdeqSyZ z>6dA{;s7V^KX)x^LQ7~a%iG`@_p0xz7F9h_)tz=f&Yj;ifqmWfF}i9MnJ#B3BGSO2AK*q z)S@Fb0WgMOuv>7^P}4&LAh!qhQYn6P0{%+I1+|<58M-l?&mjwoxXmjbf8tUMFsPoG zK!@{*FoU-$YfK^Qtzk$^6Aa-S+d<+3ztkm!_)6gb+41Ke{`;!(`oOOWzt^sT(1m^% z8Gyb+F2@(_4VCR-aG;8I-Turn2&I)21T}1+O2*xI8ciMNBjHH(%j$Ez|Apf7oIS0b z-(tv*P>|uTLs~jarl!nj2)@<<$=vAC0Au)u%Opg3Nt_BOS|L&QiN!%2$}nLxou3RI zZ}?4DEeJ&t=yDJz04{?86bPECFtF!1cxeRn0&}aly>EIuvxz#ic)YJQV`zI~VHO>0 z3;2%!Lck%^i0VS>LR6YGj*-+wxOQODfwE@%WD@djF#g<4{8Dsn4NO>qY0iy?%Afd~ zje8zXiW~CUA^399bU6jl_J;O@1AhM|e@otz8>dM-%Ar&aP5y7pj7V^E5G@408Pmld zg@3cDM&>Mt+WlK#P!doe_O0h*1#wZc?T@Ej^3gWSkP|lWdJkD706B6P1qDVUSs^R+soh8&V0XGzF zWq8~3=#&=@i54;7=x*=>r8uj`Gi~^W!Wq7iuRC5)exjtiE8mWJn{>J(I(oGUMwVWr z0w;6vhf}HxuSz>Q0pdS<2wr#F-%_uO7AnRaBGeU)>Vp2f$MEqTC@U%}cRh#uo_gM; z{~6Ah6jZ>v^OS#$M~2Hr5-#Hbk6cTwW>s#apAgY9gK{3;9Sgv6;=g_abJ>Cs()v_n9^F$`p|033X&k(L2O@%BySYsgqHWQ1tu5OT;2q;6v; z5rD^`H1~7U&~Lx`_w%}CdLCbpPDNfWOo6B=|FHZYP-!1_v!wwtpEG!RC_{u_-SWsE zUJCVx(Mnvzw?H;cQte-d>MI@C-6x{t9{xu^gR{P7MbuB&Ir6IxP)W~)X+{UUiFL>$ z0~n8;!*^3h@1``nvcAf};R2UQjtuews7R~4@df}ofM54eE2pV$<4r;%Murx2k_m~^ zA*-eDJQW1gjO>8OIPmBt*6hvR;q{cQkDn$E3=4QR-SLX}K{+5UVtM5c3ys=%@dR^- zc1AjogcE!!yKCSH2>DuJ_>SYKHciJ4hT}u|?F=9m+*(IbCsOPm z>#H1-MP`5x4X^UXG>`z%3*Zd*b)ZPfk8)7V?NCdT0Dy#=!XbuJ1P=5Kao@U91pf_P$%L}lzjY`rsyQK z!Mt7=!g)sJ^B|CK06P1oVuifx_--={Y3wJ~ykI%+6>r_^o%l%y zg05Qrm!E1b6~I;oV9du+HT#i4xvv~7sp2960nW8&z-=iofLwKeLLgd$su-c_{y|qlf z1l9Pj$ml#GVr9OJ)o7~?f8(lX)0Sq;P`uFaeoxD)r#3(BNdvus zhDi)rsNDg8?~+R=cnM74H9vKN8k?7w9>+WpeHPwSbpoj+Nw@8H){#U2LKV))@RVRL zv;?Jqyg|V|ITHMdf9&c-OYLWP%#7F3$$4d2k(Bh+6#GK9DWksk8CWkV{#sYH1~yFC z*j!$n&SAwl6<31)d`6WN3`#hEAeH5)IkOOzS0Qh?W|Bg830UY@gi%R)9p%`DZw2!o zAaZ%6vPd5oW7reM%5=)XUnzDe3z|O{F3~}y4AXy1AH094i z;?J|6uF%gM$djYwj0yxzCIdLlAy7sIsfAIJ8|24>Co^a~i6uT$7+R{sPZshQKLoj# zqYR!+n!Qp;Ml<_f8ugCLfmSZKcgOh+*!|5$P&;&Amr7w=ffK<>NnVQ&3i0B1wT)?; z_`4P75=X(E@+@{9nMTQI!@hU?)+E>i*6;)0pFxLMT%j-VyjaBJoQPe=!@f1GNC~Q) zZ`uatWcHv-DoS-fsd>o%ghre~<@G-2obj*Hr@3DB)pQoMi{pV#i?}q)?ewTtZN-S6 zsYh(?-xjbwYgXBr=-rhW`|!k0bYhS!o5wC&Rnz;KdCD)A>i7>CBeBaUQOcQ{c#qPh zCm0jC)_PK|j;6E_e}Wpik)7#O+373^gN^;W>Ln@fT_p_HO<@0izc@NjtITqLQ{4f! zTh{0oUu3^#?psY@5Q5*J9F4U;J)1SW3UF3+~DPugnWutzIt zYgXB5aWla|*2Talki($vSi3i*vN(I-K%gp5+zfjQ3rxmCBaTr1$DpuP>SVI>P`iMP zqKu_oWoKKGc3VZ#xBHOhVJlQ#3le~50@#-^DK=FtZl95zr1N2!L1)OFRJM_dzsq;E z6NJD>!9UnTjEVaZ`p5F|D)zcCoPcNIwfnQ%-t;!?5sj*&fASpH`i}oN_}wtOn<}Jx z_e08tOB<~o!8eI#>!0n7jWl6l)T_TX3$R;8ommeow)PW=jKu%xSXuA=FsyA>8E%6d zpHh5h$A}YSMc~q@su0r{4^(}0i=8kEKW9{Cf4keQDEFM?NzAQ~GN5^cf4Ub#6rPeL z7`pH3KpAMFV>Egs$sk-yztpKILixp8#9>$HEgFhmp z2Y*i=RWdLV4tiSc#}o^)i4xddpY)QLI#avMs`_KI;jtV8hfMqx+OVC-XWp=N*oI%8Ic9 zr@|W%Z2z%F*;gym({2+17k58nh9OL|$!H;tP7C!YThG<(9IW-8LAKla4Tg6e!Q+IL zzo$}<7#&1`-}5uKv(rYK_#?~0L}1q3Qd0s3jlxOo>aUnk3HAN&$Asi)vgBVMt_KK} z$rm2j3S;mIIo4e9nWbkbU#06S{@x64utM_>JM$t|&R6;!T+;X%i z|FJG=mlCLTpI%7ytgH$G+Fo4d_$mHbZ=rxYi-ST+T|rYZ^xSOw49nlAHQGkneLz1j zyKMU8GgGN4`gOye+u#Pf!db@5CpI316lXu9st5CT(t?w3_GA)Bdq5rNIb|A#2NawnA}zx; zjp`gYi?mw)sea~pVzS74Ze(pWFsS?+k z->J|mCTx8ziS@P^lla0jkeiO1v{AD1zHz)Sf1A<2^}NSHqAo9T57{Cw&g9$qRoaTl zM6B-h)?ItD2XE>O)8$hfYn&2Q;;5P31edSyp+}C9%Af0=w3C{(_}NoTDgzry?28a{ zZ9ikt&oUF)9Q=)NdZ<ACT zXqp5ijp3&Ouhdudq`QhIiMi(|(}_40?0~L_YaK&RE1X=C$&m8Im`ap0RCpaIZLa(V z;R%~zjbPoX%D=tGWgI7Gx&3c|C)GnbOMupelMUika0Wr;QAx&|dj8-+t8V;OED|#B zwNsDnyY?(Gx(wU?vg?)bO>1alO)29!YR2%F@gADK!qjAsNLAxB)0>``MVD4e=p2D& zT}$wUgoDh&=qaZzJJJI1^`Rlkbk`Zd0n0K*I^q=P4{Czj@F@>f5`l$t+QAf0^juxec#N?;oekLHLPcw;^ zoI3ZikbmKq0n_ekSXoV)?*zyG`i^v(5`$wi(Np=D;1$!N=6&FnovTtUvgygK--V)A zsWvL zg}tzx3glgsD#h2%O`0^Uv;z-ei&a}kIW0^A_+x^~cIgo<)OK))DFVkZaiSw);Pej- zPN4#6y5G;KBjAgskMP+3hH4VPTa1@VmzuJsa}YCwpG5cvf`Q83n4x&$d-~Hhp2JZ; zCg%7RTXP@=c!qN!gaymcz#ULK`-^uQEit_=by}u{j7uyyB9jGgOJa4K6&h@0zMk7S q-9;n8he*=kq9Xpk|Fp-vBCJxk#6VCl5P+LdK?<^}GBr|Wq5lK!+6&+S literal 0 HcmV?d00001 diff --git a/public/images/logos/prokatimsya.png b/public/images/logos/prokatimsya.png new file mode 100644 index 0000000000000000000000000000000000000000..975d767980672e1f3d6f9524bf22052f7aea871b GIT binary patch literal 36140 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%0D=?99{XoDD8%Q)!Vxg}iu!KE~bQcgU~ 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 tdCOu`s{gj7 divIcon({ diff --git a/src/utils/marks.ts b/src/utils/marks.ts index 161ee6c..f3df6cf 100644 --- a/src/utils/marks.ts +++ b/src/utils/marks.ts @@ -1,9 +1,10 @@ -import { divIcon, LatLngLiteral, Layer, LayerGroup, Map, marker, Marker } from 'leaflet'; +import { divIcon, LatLngLiteral, LayerGroup, Map, marker, Marker } from 'leaflet'; import { arrowClusterIcon } from '~/utils/arrow'; import { MarkerClusterGroup } from 'leaflet.markercluster/dist/leaflet.markercluster-src.js'; import { allwaysPositiveAngleDeg, angleBetweenPoints, distKmHaversine } from '~/utils/geom'; import classNames from 'classnames'; -const arrow_image = require('~/sprites/arrow.svg'); + +const arrow_image = '/images/arrow.svg'; interface KmMarksOptions { showStartMarker: boolean; diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index b9d02bc..506b4b6 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -231,7 +231,7 @@ export const composeArrows = async ({ points: Point[]; ctx: CanvasRenderingContext2D; }): Promise => { - const image = await imageFetcher(require('~/sprites/arrow.svg')); + const image = await imageFetcher('/images/arrow.svg'); const distances = points.map( (point, i) => (points[i + 1] && findDistancePx(points[i], points[i + 1])) || 0 From 4e167c9759dd79e5031bbc55a42176dea1da52a3 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Thu, 8 Apr 2021 14:44:13 +0700 Subject: [PATCH 292/320] fixed marker dragging --- package.json | 2 +- src/components/StickerDesc.tsx | 12 +++++------ src/map/Sticker/index.tsx | 8 +++---- src/utils/map/ArrowsLayer.ts | 35 +++---------------------------- src/utils/map/DomMarker.js | 21 ------------------- src/utils/map/DomMarker.ts | 38 ++++++++++++++++++++++++++++++++++ src/utils/map/OsrmRouter.ts | 2 +- src/utils/renderer.ts | 2 -- 8 files changed, 53 insertions(+), 67 deletions(-) delete mode 100644 src/utils/map/DomMarker.js create mode 100644 src/utils/map/DomMarker.ts diff --git a/package.json b/package.json index 2aff043..f29bbf5 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "eslint-loader": "^4.0.2", "file-saver": "^2.0.0", "gpx-parser-builder": "^1.0.2", - "leaflet": "^1.6.0", + "leaflet": "1.6.0", "leaflet-editable": "^1.1.0", "leaflet-geometryutil": "^0.9.0", "leaflet-routing-machine": "^3.2.12", diff --git a/src/components/StickerDesc.tsx b/src/components/StickerDesc.tsx index 7b7cfa5..ab20af4 100644 --- a/src/components/StickerDesc.tsx +++ b/src/components/StickerDesc.tsx @@ -21,12 +21,12 @@ class StickerDesc extends React.PureComponent { }; blockMouse = e => { + e.preventDefault(); e.stopPropagation(); this.input.focus(); }; input: HTMLTextAreaElement; - // todo: pass here locker for moving markers from Sticker.js render() { const { value: text } = this.props; @@ -34,10 +34,10 @@ class StickerDesc extends React.PureComponent { return (