+ {d.address} |
+
+ {d.homepage || process.env.DEFAULT_DOMAIN}
+ |
{
{
Domain
{
Are you sure do you want to delete the domain{" "}
- "{domainToDelete && domainToDelete.customDomain}"?
+ "{domainToDelete && domainToDelete.address}"?
{deleteLoading ? (
diff --git a/client/components/Settings/SettingsPassword.tsx b/client/components/Settings/SettingsPassword.tsx
index a5a8b37..0be9ebc 100644
--- a/client/components/Settings/SettingsPassword.tsx
+++ b/client/components/Settings/SettingsPassword.tsx
@@ -6,7 +6,7 @@ import axios from "axios";
import { getAxiosConfig } from "../../utils";
import { useMessage } from "../../hooks";
import { TextInput } from "../Input";
-import { API } from "../../consts";
+import { APIv2 } from "../../consts";
import { Button } from "../Button";
import Text, { H2 } from "../Text";
import { Col } from "../Layout";
@@ -30,7 +30,7 @@ const SettingsPassword: FC = () => {
setMessage();
try {
const res = await axios.post(
- API.CHANGE_PASSWORD,
+ APIv2.AuthChangePassword,
formState.values,
getAxiosConfig()
);
diff --git a/client/components/Shortener.tsx b/client/components/Shortener.tsx
index c3b0785..9f8abf8 100644
--- a/client/components/Shortener.tsx
+++ b/client/components/Shortener.tsx
@@ -1,7 +1,7 @@
import { CopyToClipboard } from "react-copy-to-clipboard";
import { useFormState } from "react-use-form-state";
import { Flex } from "reflexbox/styled-components";
-import React, { useState } from "react";
+import React, { FC, useState } from "react";
import styled from "styled-components";
import { useStoreActions, useStoreState } from "../store";
@@ -260,8 +260,8 @@ const Shortener = () => {
options={[
{ key: defaultDomain, value: "" },
...domains.map(d => ({
- key: d.customDomain,
- value: d.customDomain
+ key: d.address,
+ value: d.address
}))
]}
/>
diff --git a/client/components/Text.tsx b/client/components/Text.tsx
index 9993593..8a13698 100644
--- a/client/components/Text.tsx
+++ b/client/components/Text.tsx
@@ -1,17 +1,19 @@
import { switchProp, ifNotProp, ifProp } from "styled-tools";
-import { Box } from "reflexbox/styled-components";
+import { Box, BoxProps } from "reflexbox/styled-components";
import styled, { css } from "styled-components";
+import { FC, CSSProperties } from "react";
import { Colors } from "../consts";
-import { FC, ComponentProps } from "react";
-interface Props {
+interface Props extends Omit {
+ as?: string;
htmlFor?: string;
light?: boolean;
normal?: boolean;
bold?: boolean;
+ style?: CSSProperties;
}
-const Text = styled(Box)`
+const Text: FC = styled(Box)`
font-weight: 400;
${ifNotProp(
"fontSize",
@@ -50,18 +52,15 @@ const Text = styled(Box)`
`;
Text.defaultProps = {
- as: "p",
color: Colors.Text
};
export default Text;
-type TextProps = ComponentProps;
-
-export const H1: FC = props => ;
-export const H2: FC = props => ;
-export const H3: FC = props => ;
-export const H4: FC = props => ;
-export const H5: FC = props => ;
-export const H6: FC = props => ;
-export const Span: FC = props => ;
+export const H1: FC = props => ;
+export const H2: FC = props => ;
+export const H3: FC = props => ;
+export const H4: FC = props => ;
+export const H5: FC = props => ;
+export const H6: FC = props => ;
+export const Span: FC = props => ;
diff --git a/client/consts/consts.ts b/client/consts/consts.ts
index 87f1062..6f25cd1 100644
--- a/client/consts/consts.ts
+++ b/client/consts/consts.ts
@@ -1,21 +1,17 @@
export enum API {
- LOGIN = "/api/auth/login",
- SIGNUP = "/api/auth/signup",
- RENEW = "/api/auth/renew",
- REPORT = "/api/url/report",
- RESET_PASSWORD = "/api/auth/resetpassword",
- CHANGE_PASSWORD = "/api/auth/changepassword",
BAN_LINK = "/api/url/admin/ban",
- CUSTOM_DOMAIN = "/api/url/customdomain",
- GENERATE_APIKEY = "/api/auth/generateapikey",
- SETTINGS = "/api/auth/usersettings",
- SUBMIT = "/api/url/submit",
- GET_LINKS = "/api/url/geturls",
- DELETE_LINK = "/api/url/deleteurl",
STATS = "/api/url/stats"
}
export enum APIv2 {
+ AuthLogin = "/api/v2/auth/login",
+ AuthSignup = "/api/v2/auth/signup",
+ AuthRenew = "/api/v2/auth/renew",
+ AuthResetPassword = "/api/v2/auth/reset-password",
+ AuthChangePassword = "/api/v2/auth/change-password",
+ AuthGenerateApikey = "/api/v2/auth/apikey",
+ Users = "/api/v2/users",
+ Domains = "/api/v2/domains",
Links = "/api/v2/links"
}
@@ -32,6 +28,8 @@ export enum Colors {
CheckIcon = "hsl(144, 50%, 60%)",
TrashIcon = "hsl(0, 100%, 69%)",
TrashIconBg = "hsl(0, 100%, 96%)",
+ StopIcon = "hsl(10, 100%, 40%)",
+ StopIconBg = "hsl(10, 100%, 96%)",
QrCodeIcon = "hsl(0, 0%, 35%)",
QrCodeIconBg = "hsl(0, 0%, 94%)",
PieIcon = "hsl(260, 100%, 69%)",
diff --git a/client/pages/login.tsx b/client/pages/login.tsx
index e2184eb..55ae2e6 100644
--- a/client/pages/login.tsx
+++ b/client/pages/login.tsx
@@ -16,7 +16,7 @@ import { Button } from "../components/Button";
import Text, { H2 } from "../components/Text";
import ALink from "../components/ALink";
import Icon from "../components/Icon";
-import { API } from "../consts";
+import { APIv2 } from "../consts";
const LoginForm = styled(Flex).attrs({
as: "form",
@@ -80,7 +80,7 @@ const LoginPage = () => {
if (type === "signup") {
setLoading(s => ({ ...s, signup: true }));
try {
- await axios.post(API.SIGNUP, { email, password });
+ await axios.post(APIv2.AuthSignup, { email, password });
setVerifying(true);
} catch (error) {
setError(error.response.data.error);
diff --git a/client/pages/url-password.tsx b/client/pages/protected/[id].tsx
similarity index 73%
rename from client/pages/url-password.tsx
rename to client/pages/protected/[id].tsx
index ba4136b..84bbc94 100644
--- a/client/pages/url-password.tsx
+++ b/client/pages/protected/[id].tsx
@@ -2,20 +2,23 @@ import { useFormState } from "react-use-form-state";
import { Flex } from "reflexbox/styled-components";
import React, { useState } from "react";
import { NextPage } from "next";
+import { useRouter } from "next/router";
import axios from "axios";
-import AppWrapper from "../components/AppWrapper";
-import { TextInput } from "../components/Input";
-import { Button } from "../components/Button";
-import Text, { H2 } from "../components/Text";
-import { Col } from "../components/Layout";
-import Icon from "../components/Icon";
+import AppWrapper from "../../components/AppWrapper";
+import { TextInput } from "../../components/Input";
+import { Button } from "../../components/Button";
+import Text, { H2 } from "../../components/Text";
+import { Col } from "../../components/Layout";
+import Icon from "../../components/Icon";
+import { APIv2 } from "../../consts";
interface Props {
protectedLink?: string;
}
-const UrlPasswordPage: NextPage = ({ protectedLink }) => {
+const ProtectedPage: NextPage = () => {
+ const router = useRouter();
const [loading, setLoading] = useState(false);
const [formState, { password }] = useFormState<{ password: string }>();
const [error, setError] = useState();
@@ -30,12 +33,13 @@ const UrlPasswordPage: NextPage = ({ protectedLink }) => {
setError("");
setLoading(true);
- // TODO: better api calls
try {
- const { data } = await axios.post("/api/url/requesturl", {
- id: protectedLink,
- password
- });
+ const { data } = await axios.post(
+ `${APIv2.Links}/${router.query.id}/protected`,
+ {
+ password
+ }
+ );
window.location.replace(data.target);
} catch ({ response }) {
setError(response.data.error);
@@ -45,7 +49,7 @@ const UrlPasswordPage: NextPage = ({ protectedLink }) => {
return (
- {!protectedLink ? (
+ {!router.query.id ? (
404 | Link could not be found.
@@ -84,10 +88,10 @@ const UrlPasswordPage: NextPage = ({ protectedLink }) => {
);
};
-UrlPasswordPage.getInitialProps = async ({ req }) => {
+ProtectedPage.getInitialProps = async ({ req }) => {
return {
protectedLink: req && (req as any).protectedLink
};
};
-export default UrlPasswordPage;
+export default ProtectedPage;
diff --git a/client/pages/report.tsx b/client/pages/report.tsx
index f66ef04..ced5b67 100644
--- a/client/pages/report.tsx
+++ b/client/pages/report.tsx
@@ -10,7 +10,7 @@ import { Button } from "../components/Button";
import { Col } from "../components/Layout";
import Icon from "../components/Icon";
import { useMessage } from "../hooks";
-import { API } from "../consts";
+import { APIv2 } from "../consts";
const ReportPage = () => {
const [formState, { text }] = useFormState<{ url: string }>();
@@ -22,7 +22,7 @@ const ReportPage = () => {
setLoading(true);
setMessage();
try {
- await axios.post(API.REPORT, { link: formState.values.url }); // TODO: better api calls
+ await axios.post(`${APIv2.Links}/report`, { link: formState.values.url });
setMessage("Thanks for the report, we'll take actions shortly.", "green");
formState.clear();
} catch (error) {
diff --git a/client/pages/reset-password.tsx b/client/pages/reset-password.tsx
index 680d43f..c91e6e8 100644
--- a/client/pages/reset-password.tsx
+++ b/client/pages/reset-password.tsx
@@ -16,7 +16,7 @@ import { Col } from "../components/Layout";
import { TokenPayload } from "../types";
import { useMessage } from "../hooks";
import Icon from "../components/Icon";
-import { API } from "../consts";
+import { API, APIv2 } from "../consts";
interface Props {
token?: string;
@@ -51,7 +51,7 @@ const ResetPassword: NextPage = ({ token }) => {
setLoading(true);
setMessage();
try {
- await axios.post(API.RESET_PASSWORD, {
+ await axios.post(APIv2.AuthResetPassword, {
email: formState.values.email
});
setMessage("Reset password email has been sent.", "green");
diff --git a/client/pages/settings.tsx b/client/pages/settings.tsx
index a989733..31ad05e 100644
--- a/client/pages/settings.tsx
+++ b/client/pages/settings.tsx
@@ -1,20 +1,18 @@
-import { Flex } from "reflexbox/styled-components";
-import React, { useEffect } from "react";
import { NextPage } from "next";
+import React from "react";
import SettingsPassword from "../components/Settings/SettingsPassword";
import SettingsDomain from "../components/Settings/SettingsDomain";
-import SettingsBan from "../components/Settings/SettingsBan";
import SettingsApi from "../components/Settings/SettingsApi";
-import { useStoreState, useStoreActions } from "../store";
import AppWrapper from "../components/AppWrapper";
import { H1, Span } from "../components/Text";
import Divider from "../components/Divider";
-import Footer from "../components/Footer";
import { Col } from "../components/Layout";
+import Footer from "../components/Footer";
+import { useStoreState } from "../store";
-const SettingsPage: NextPage = props => {
- const { email, isAdmin } = useStoreState(s => s.auth);
+const SettingsPage: NextPage = () => {
+ const email = useStoreState(s => s.auth.email);
return (
@@ -27,12 +25,6 @@ const SettingsPage: NextPage = props => {
.
- {isAdmin && (
- <>
-
-
- >
- )}
diff --git a/client/pages/stats.tsx b/client/pages/stats.tsx
index f0d7678..1e1e37b 100644
--- a/client/pages/stats.tsx
+++ b/client/pages/stats.tsx
@@ -15,15 +15,14 @@ import AppWrapper from "../components/AppWrapper";
import Divider from "../components/Divider";
import { useStoreState } from "../store";
import ALink from "../components/ALink";
-import { API, Colors } from "../consts";
+import { APIv2, Colors } from "../consts";
import Icon from "../components/Icon";
interface Props {
- domain?: string;
id?: string;
}
-const StatsPage: NextPage = ({ domain, id }) => {
+const StatsPage: NextPage = ({ id }) => {
const { isAuthenticated } = useStoreState(s => s.auth);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(false);
@@ -35,7 +34,7 @@ const StatsPage: NextPage = ({ domain, id }) => {
useEffect(() => {
if (!id || !isAuthenticated) return;
axios
- .get(`${API.STATS}?id=${id}&domain=${domain}`, getAxiosConfig())
+ .get(`${APIv2.Links}/${id}/stats`, getAxiosConfig())
.then(({ data }) => {
setLoading(false);
setError(!data);
@@ -208,7 +207,6 @@ StatsPage.getInitialProps = ({ query }) => {
};
StatsPage.defaultProps = {
- domain: "",
id: ""
};
diff --git a/client/pages/url-info.tsx b/client/pages/url-info.tsx
index 14fde1c..907fb58 100644
--- a/client/pages/url-info.tsx
+++ b/client/pages/url-info.tsx
@@ -1,21 +1,16 @@
+import { useRouter } from "next/router";
import React from "react";
-import styled from "styled-components";
-import { Flex } from "reflexbox/styled-components";
-import { NextPage } from "next";
import AppWrapper from "../components/AppWrapper";
import Footer from "../components/Footer";
import { H2, H4 } from "../components/Text";
import { Col } from "../components/Layout";
-interface Props {
- linkTarget?: string;
-}
-
-const UrlInfoPage: NextPage = ({ linkTarget }) => {
+const UrlInfoPage = () => {
+ const { query } = useRouter();
return (
- {!linkTarget ? (
+ {!query.target ? (
404 | Link could not be found.
@@ -25,7 +20,7 @@ const UrlInfoPage: NextPage = ({ linkTarget }) => {
Target:
- {linkTarget}
+ {query.target}
>
@@ -34,8 +29,4 @@ const UrlInfoPage: NextPage = ({ linkTarget }) => {
);
};
-UrlInfoPage.getInitialProps = async ctx => {
- return { linkTarget: (ctx?.req as any)?.linkTarget };
-};
-
export default UrlInfoPage;
diff --git a/client/store/auth.ts b/client/store/auth.ts
index b7329ae..24cea20 100644
--- a/client/store/auth.ts
+++ b/client/store/auth.ts
@@ -4,7 +4,7 @@ import cookie from "js-cookie";
import axios from "axios";
import { TokenPayload } from "../types";
-import { API } from "../consts";
+import { API, APIv2 } from "../consts";
import { getAxiosConfig } from "../utils";
export interface Auth {
@@ -35,14 +35,14 @@ export const auth: Auth = {
state.isAdmin = false;
}),
login: thunk(async (actions, payload) => {
- const res = await axios.post(API.LOGIN, payload);
+ const res = await axios.post(APIv2.AuthLogin, payload);
const { token } = res.data;
cookie.set("token", token, { expires: 7 });
const tokenPayload: TokenPayload = decode(token);
actions.add(tokenPayload);
}),
renew: thunk(async actions => {
- const res = await axios.post(API.RENEW, null, getAxiosConfig());
+ const res = await axios.post(APIv2.AuthRenew, null, getAxiosConfig());
const { token } = res.data;
cookie.set("token", token, { expires: 7 });
const tokenPayload: TokenPayload = decode(token);
diff --git a/client/store/links.ts b/client/store/links.ts
index e04bff8..fe49d35 100644
--- a/client/store/links.ts
+++ b/client/store/links.ts
@@ -6,7 +6,7 @@ import { getAxiosConfig } from "../utils";
import { API, APIv2 } from "../consts";
export interface Link {
- id: number;
+ id: string;
address: string;
banned: boolean;
banned_by_id?: number;
@@ -30,6 +30,14 @@ export interface NewLink {
reCaptchaToken?: string;
}
+export interface BanLink {
+ id: string;
+ host?: boolean;
+ domain?: boolean;
+ user?: boolean;
+ userLinks?: boolean;
+}
+
export interface LinksQuery {
limit: string;
skip: string;
@@ -53,7 +61,9 @@ export interface Links {
get: Thunk;
add: Action;
set: Action;
- deleteOne: Thunk;
+ update: Action>;
+ remove: Thunk;
+ ban: Thunk;
setLoading: Action;
}
@@ -80,8 +90,17 @@ export const links: Links = {
actions.setLoading(false);
return res.data;
}),
- deleteOne: thunk(async (actions, payload) => {
- await axios.post(API.DELETE_LINK, payload, getAxiosConfig());
+ remove: thunk(async (actions, id) => {
+ await axios.delete(`${APIv2.Links}/${id}`, getAxiosConfig());
+ }),
+ ban: thunk(async (actions, { id, ...payload }) => {
+ const res = await axios.post(
+ `${APIv2.Links}/admin/ban/${id}`,
+ payload,
+ getAxiosConfig()
+ );
+ actions.update({ id, banned: true });
+ return res.data;
}),
add: action((state, payload) => {
state.items.pop();
@@ -91,6 +110,11 @@ export const links: Links = {
state.items = payload.data;
state.total = payload.total;
}),
+ update: action((state, payload) => {
+ state.items = state.items.map(item =>
+ item.id === payload.id ? { ...item, ...payload } : item
+ );
+ }),
setLoading: action((state, payload) => {
state.loading = payload;
})
diff --git a/client/store/settings.ts b/client/store/settings.ts
index cb2cf2b..d582af4 100644
--- a/client/store/settings.ts
+++ b/client/store/settings.ts
@@ -3,60 +3,71 @@ import axios from "axios";
import { getAxiosConfig } from "../utils";
import { StoreModel } from "./store";
-import { API } from "../consts";
+import { APIv2 } from "../consts";
export interface Domain {
- customDomain: string;
- homepage: string;
+ id: string;
+ address: string;
+ banned: boolean;
+ created_at: string;
+ homepage?: string;
+ updated_at: string;
}
-export interface SettingsResp extends Domain {
+export interface NewDomain {
+ address: string;
+ homepage?: string;
+}
+
+export interface SettingsResp {
apikey: string;
+ email: string;
+ domains: Domain[];
}
export interface Settings {
domains: Array;
apikey: string;
+ email: string;
fetched: boolean;
setSettings: Action;
getSettings: Thunk;
setApiKey: Action;
generateApiKey: Thunk;
addDomain: Action;
- removeDomain: Action;
- saveDomain: Thunk;
- deleteDomain: Thunk;
+ removeDomain: Action;
+ saveDomain: Thunk;
+ deleteDomain: Thunk;
}
export const settings: Settings = {
domains: [],
+ email: null,
apikey: null,
fetched: false,
getSettings: thunk(async (actions, payload, { getStoreActions }) => {
getStoreActions().loading.show();
- const res = await axios.get(API.SETTINGS, getAxiosConfig());
+ const res = await axios.get(APIv2.Users, getAxiosConfig());
actions.setSettings(res.data);
getStoreActions().loading.hide();
}),
generateApiKey: thunk(async actions => {
- const res = await axios.post(API.GENERATE_APIKEY, null, getAxiosConfig());
+ const res = await axios.post(
+ APIv2.AuthGenerateApikey,
+ null,
+ getAxiosConfig()
+ );
actions.setApiKey(res.data.apikey);
}),
- deleteDomain: thunk(async actions => {
- await axios.delete(API.CUSTOM_DOMAIN, getAxiosConfig());
- actions.removeDomain();
+ deleteDomain: thunk(async (actions, id) => {
+ await axios.delete(`${APIv2.Domains}/${id}`, getAxiosConfig());
+ actions.removeDomain(id);
}),
setSettings: action((state, payload) => {
state.apikey = payload.apikey;
+ state.domains = payload.domains;
+ state.email = payload.email;
state.fetched = true;
- if (payload.customDomain) {
- state.domains = [
- {
- customDomain: payload.customDomain,
- homepage: payload.homepage
- }
- ];
- }
}),
setApiKey: action((state, payload) => {
state.apikey = payload;
@@ -64,14 +75,11 @@ export const settings: Settings = {
addDomain: action((state, payload) => {
state.domains.push(payload);
}),
- removeDomain: action(state => {
- state.domains = [];
+ removeDomain: action((state, id) => {
+ state.domains = state.domains.filter(d => d.id !== id);
}),
saveDomain: thunk(async (actions, payload) => {
- const res = await axios.post(API.CUSTOM_DOMAIN, payload, getAxiosConfig());
- actions.addDomain({
- customDomain: res.data.customDomain,
- homepage: res.data.homepage
- });
+ const res = await axios.post(APIv2.Domains, payload, getAxiosConfig());
+ actions.addDomain(res.data);
})
};
diff --git a/global.d.ts b/global.d.ts
index a7626e7..58987f2 100644
--- a/global.d.ts
+++ b/global.d.ts
@@ -1,3 +1,9 @@
+type Raw = import("knex").Raw;
+
+type Match = {
+ [K in keyof T]?: T[K] | [">" | ">=" | "<=" | "<", T[K]];
+};
+
interface User {
id: number;
apikey?: string;
@@ -24,6 +30,7 @@ interface UserJoined extends User {
interface Domain {
id: number;
+ uuid: string;
address: string;
banned: boolean;
banned_by_id?: number;
@@ -33,6 +40,18 @@ interface Domain {
user_id?: number;
}
+interface DomainSanitized {
+ id: string;
+ uuid: undefined;
+ address: string;
+ banned: boolean;
+ banned_by_id?: undefined;
+ created_at: string;
+ homepage?: string;
+ updated_at: string;
+ user_id?: undefined;
+}
+
interface Host {
id: number;
address: string;
@@ -64,6 +83,22 @@ interface Link {
visit_count: number;
}
+interface LinkSanitized {
+ address: string;
+ banned_by_id?: undefined;
+ banned: boolean;
+ created_at: string;
+ domain_id?: undefined;
+ id: string;
+ link: string;
+ password: boolean;
+ target: string;
+ updated_at: string;
+ user_id?: undefined;
+ uuid?: undefined;
+ visit_count: number;
+}
+
interface LinkJoinedDomain extends Link {
domain?: string;
}
diff --git a/package-lock.json b/package-lock.json
index f685089..b134ab4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -39,23 +39,28 @@
"integrity": "sha512-gACGfsVKinCy/977FSrlVgo6jxTZ0lcTCvCnRlNwvSOcxJVm+jJR3sP7/F43fpak9Gsq/EwFaatfnNMbunPc+w=="
},
"@babel/cli": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.4.4.tgz",
- "integrity": "sha512-XGr5YjQSjgTa6OzQZY57FAJsdeVSAKR/u/KA5exWIz66IKtv/zXtHy+fIZcMry/EgYegwuHE7vzGnrFhjdIAsQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.3.tgz",
+ "integrity": "sha512-K2UXPZCKMv7KwWy9Bl4sa6+jTNP7JyDiHKzoOiUUygaEDbC60vaargZDnO9oFMvlq8pIKOOyUUgeMYrsaN9djA==",
"dev": true,
"requires": {
- "chokidar": "^2.0.4",
- "commander": "^2.8.1",
+ "chokidar": "^2.1.8",
+ "commander": "^4.0.1",
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
"glob": "^7.0.0",
- "lodash": "^4.17.11",
- "mkdirp": "^0.5.1",
- "output-file-sync": "^2.0.0",
+ "lodash": "^4.17.13",
+ "make-dir": "^2.1.0",
"slash": "^2.0.0",
"source-map": "^0.5.0"
},
"dependencies": {
+ "commander": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz",
+ "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==",
+ "dev": true
+ },
"slash": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
@@ -72,37 +77,142 @@
"@babel/highlight": "^7.0.0"
}
},
- "@babel/core": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz",
- "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==",
+ "@babel/compat-data": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz",
+ "integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.4.4",
- "@babel/helpers": "^7.4.4",
- "@babel/parser": "^7.4.5",
- "@babel/template": "^7.4.4",
- "@babel/traverse": "^7.4.5",
- "@babel/types": "^7.4.4",
- "convert-source-map": "^1.1.0",
+ "browserslist": "^4.8.2",
+ "invariant": "^2.2.4",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz",
+ "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.3",
+ "@babel/helpers": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3",
+ "convert-source-map": "^1.7.0",
"debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
"json5": "^2.1.0",
- "lodash": "^4.17.11",
+ "lodash": "^4.17.13",
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
},
"dependencies": {
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==",
+ "dev": true
+ },
+ "@babel/traverse": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
+ "dev": true,
+ "requires": {
+ "@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": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "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==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
}
},
"debug": {
@@ -115,9 +225,9 @@
}
},
"json5": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
+ "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
@@ -126,47 +236,82 @@
}
},
"@babel/generator": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
- "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
"requires": {
- "@babel/types": "^7.4.4",
+ "@babel/types": "^7.8.3",
"jsesc": "^2.5.1",
- "lodash": "^4.17.11",
- "source-map": "^0.5.0",
- "trim-right": "^1.0.1"
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
+ "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
+ "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
"requires": {
- "@babel/helper-explode-assignable-expression": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/helper-explode-assignable-expression": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-builder-react-jsx": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz",
- "integrity": "sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz",
+ "integrity": "sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ==",
"requires": {
- "@babel/types": "^7.7.4",
+ "@babel/types": "^7.8.3",
"esutils": "^2.0.0"
},
"dependencies": {
"@babel/types": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
- "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
"requires": {
"esutils": "^2.0.2",
"lodash": "^4.17.13",
@@ -176,104 +321,414 @@
}
},
"@babel/helper-call-delegate": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
- "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz",
+ "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==",
"requires": {
- "@babel/helper-hoist-variables": "^7.4.4",
- "@babel/traverse": "^7.4.4",
- "@babel/types": "^7.4.4"
- }
- },
- "@babel/helper-create-regexp-features-plugin": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz",
- "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==",
- "requires": {
- "@babel/helper-regex": "^7.4.4",
- "regexpu-core": "^4.6.0"
+ "@babel/helper-hoist-variables": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
},
"dependencies": {
- "regexpu-core": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
- "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"requires": {
- "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"
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
+ },
+ "@babel/traverse": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
+ "requires": {
+ "@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": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
}
}
}
},
- "@babel/helper-define-map": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz",
- "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==",
+ "@babel/helper-compilation-targets": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz",
+ "integrity": "sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/types": "^7.4.4",
- "lodash": "^4.17.11"
+ "@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-class-features-plugin": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz",
+ "integrity": "sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA==",
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-member-expression-to-functions": "^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"
+ },
+ "dependencies": {
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz",
+ "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==",
+ "requires": {
+ "@babel/helper-regex": "^7.8.3",
+ "regexpu-core": "^4.6.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
+ "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/types": "^7.8.3",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
+ "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
"requires": {
- "@babel/traverse": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
+ },
+ "@babel/traverse": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
+ "requires": {
+ "@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": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
"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.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
},
"dependencies": {
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-get-function-arity": {
- "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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-hoist-variables": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
- "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
+ "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
"requires": {
- "@babel/types": "^7.4.4"
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
+ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-module-imports": {
@@ -285,39 +740,64 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz",
- "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz",
+ "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==",
"requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@babel/helper-simple-access": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.4.4",
- "@babel/template": "^7.4.4",
- "@babel/types": "^7.4.4",
- "lodash": "^4.17.11"
+ "@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"
},
"dependencies": {
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
- "dev": true,
+ "@babel/helper-module-imports": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
}
}
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
+ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
"requires": {
- "@babel/types": "^7.0.0"
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-plugin-utils": {
@@ -326,127 +806,478 @@
"integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA=="
},
"@babel/helper-regex": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz",
- "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
+ "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
"requires": {
- "lodash": "^4.17.11"
+ "lodash": "^4.17.13"
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
+ "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
"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.8.3",
+ "@babel/helper-wrap-function": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
},
"dependencies": {
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
- "dev": true,
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
+ },
+ "@babel/traverse": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
+ "requires": {
+ "@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": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
}
}
}
},
"@babel/helper-replace-supers": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz",
- "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz",
+ "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==",
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.0.0",
- "@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/traverse": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "@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"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
+ },
+ "@babel/traverse": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
+ "requires": {
+ "@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": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
+ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
"requires": {
- "@babel/template": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
},
"dependencies": {
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
- "dev": true,
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
- "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
"requires": {
- "@babel/types": "^7.4.4"
+ "@babel/types": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
+ "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
"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.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
},
"dependencies": {
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
- "dev": true,
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
+ },
+ "@babel/traverse": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
+ "requires": {
+ "@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": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
}
}
}
},
"@babel/helpers": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz",
- "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz",
+ "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==",
"requires": {
- "@babel/template": "^7.4.4",
- "@babel/traverse": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
},
"dependencies": {
- "@babel/template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
- "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
- "dev": true,
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.4.4",
- "@babel/types": "^7.4.4"
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
+ "requires": {
+ "@babel/types": "^7.8.3",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
+ },
+ "@babel/traverse": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
+ "requires": {
+ "@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": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
}
}
}
@@ -462,17 +1293,48 @@
}
},
"@babel/node": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.4.5.tgz",
- "integrity": "sha512-nDXPT0KwYMycDHhFG9wKlkipCR+iXzzoX9bD2aF2UABLhQ13AKhNi5Y61W8ASGPPll/7p9GrHesmlOgTUJVcfw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.8.3.tgz",
+ "integrity": "sha512-GZpHg1gPnZTk1PvHRc4g/M5c50nHERkk3ojb5AuUTZFAjEKzDhBJcqvwWa7NrNT3W3Nf8t8Sj8JjA6rtXJ1z/g==",
"dev": true,
"requires": {
- "@babel/polyfill": "^7.0.0",
- "@babel/register": "^7.0.0",
- "commander": "^2.8.1",
- "lodash": "^4.17.11",
+ "@babel/register": "^7.8.3",
+ "commander": "^4.0.1",
+ "core-js": "^3.2.1",
+ "lodash": "^4.17.13",
"node-environment-flags": "^1.0.5",
+ "regenerator-runtime": "^0.13.3",
+ "resolve": "^1.13.1",
"v8flags": "^3.1.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz",
+ "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz",
+ "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz",
+ "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ }
}
},
"@babel/parser": {
@@ -481,14 +1343,20 @@
"integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew=="
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
+ "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
"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.8.3",
+ "@babel/helper-remap-async-to-generator": "^7.8.3",
+ "@babel/plugin-syntax-async-generators": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-proposal-class-properties": {
@@ -498,540 +1366,826 @@
"requires": {
"@babel/helper-create-class-features-plugin": "^7.7.0",
"@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
+ "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-proposal-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz",
+ "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@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"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@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-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@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"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz",
+ "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@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.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@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"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@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"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@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.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz",
+ "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz",
+ "integrity": "sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
+ "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
+ "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-remap-async-to-generator": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-module-imports": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
"requires": {
- "@babel/highlight": "^7.0.0"
+ "@babel/types": "^7.8.3"
}
},
- "@babel/generator": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz",
- "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==",
- "requires": {
- "@babel/types": "^7.7.4",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz",
- "integrity": "sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==",
- "requires": {
- "@babel/helper-function-name": "^7.7.4",
- "@babel/helper-member-expression-to-functions": "^7.7.4",
- "@babel/helper-optimise-call-expression": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.7.4",
- "@babel/helper-split-export-declaration": "^7.7.4"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz",
- "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.7.4",
- "@babel/template": "^7.7.4",
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz",
- "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==",
- "requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz",
- "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==",
- "requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz",
- "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==",
- "requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz",
- "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==",
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.7.4",
- "@babel/helper-optimise-call-expression": "^7.7.4",
- "@babel/traverse": "^7.7.4",
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz",
- "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==",
- "requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/parser": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz",
- "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw=="
- },
- "@babel/traverse": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz",
- "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==",
- "requires": {
- "@babel/code-frame": "^7.5.5",
- "@babel/generator": "^7.7.4",
- "@babel/helper-function-name": "^7.7.4",
- "@babel/helper-split-export-declaration": "^7.7.4",
- "@babel/parser": "^7.7.4",
- "@babel/types": "^7.7.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
},
"@babel/types": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
- "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
"requires": {
"esutils": "^2.0.2",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
}
}
},
- "@babel/plugin-proposal-dynamic-import": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz",
- "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-dynamic-import": "^7.7.4"
- },
- "dependencies": {
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz",
- "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.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==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-json-strings": "^7.2.0"
- }
- },
- "@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz",
- "integrity": "sha512-TbYHmr1Gl1UC7Vo2HVuj/Naci5BEGNZ0AJhzqD2Vpr6QPFWpUmBRLrIDjedzx7/CShq0bRDS2gI4FIs77VHLVQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.7.4"
- }
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz",
- "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==",
- "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==",
- "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.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
- "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.4",
- "regexpu-core": "^4.5.4"
- }
- },
- "@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==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
- "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
- "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==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz",
- "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.7.4.tgz",
- "integrity": "sha512-XKh/yIRPiQTOeBg0QJjEus5qiSKucKAiApNtO1psqG7D17xmE+X2i5ZqBEuSvo0HRuyPaKaSN/Gy+Ha9KFQolw==",
- "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==",
- "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==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz",
- "integrity": "sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz",
- "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==",
- "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==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz",
- "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==",
- "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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
+ "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz",
- "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
+ "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "lodash": "^4.17.11"
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-classes": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz",
- "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz",
+ "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-define-map": "^7.4.4",
- "@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.4.4",
- "@babel/helper-split-export-declaration": "^7.4.4",
+ "@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"
+ },
+ "dependencies": {
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
+ "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz",
- "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz",
+ "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
- "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
+ "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.4",
- "regexpu-core": "^4.5.4"
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
+ "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
+ "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
"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.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
- "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz",
+ "integrity": "sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
- "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
+ "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
"requires": {
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
+ "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-member-expression-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
- "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz",
+ "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz",
+ "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==",
"requires": {
- "@babel/helper-module-transforms": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-module-transforms": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz",
- "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz",
+ "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.4.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-simple-access": "^7.1.0"
+ "@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"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
+ "dev": true
+ }
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz",
- "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz",
+ "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==",
"requires": {
- "@babel/helper-hoist-variables": "^7.4.4",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@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"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz",
+ "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==",
"requires": {
- "@babel/helper-module-transforms": "^7.1.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-module-transforms": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz",
- "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
+ "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
"requires": {
- "regexp-tree": "^0.1.6"
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
- "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
+ "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
+ "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.1.0"
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
- "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz",
+ "integrity": "sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q==",
"requires": {
- "@babel/helper-call-delegate": "^7.4.4",
- "@babel/helper-get-function-arity": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-call-delegate": "^7.8.3",
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/plugin-transform-property-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
- "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz",
+ "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-react-display-name": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz",
- "integrity": "sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz",
+ "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-react-jsx": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.7.tgz",
- "integrity": "sha512-SlPjWPbva2+7/ZJbGcoqjl4LsQaLpKEzxW9hcxU7675s24JmdotJOSJ4cgAbV82W3FcZpHIGmRZIlUL8ayMvjw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz",
+ "integrity": "sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g==",
"requires": {
- "@babel/helper-builder-react-jsx": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.7.4"
+ "@babel/helper-builder-react-jsx": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-react-jsx-self": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.7.4.tgz",
- "integrity": "sha512-PWYjSfqrO273mc1pKCRTIJXyqfc9vWYBax88yIhQb+bpw3XChVC7VWS4VwRVs63wFHKxizvGSd00XEr+YB9Q2A==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz",
+ "integrity": "sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.7.4"
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-react-jsx-source": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz",
- "integrity": "sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz",
+ "integrity": "sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-jsx": "^7.7.4"
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
- "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz",
+ "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==",
"requires": {
"regenerator-transform": "^0.14.0"
}
},
"@babel/plugin-transform-reserved-words": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
- "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz",
+ "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-runtime": {
@@ -1046,9 +2200,9 @@
},
"dependencies": {
"resolve": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz",
- "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==",
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz",
+ "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
"requires": {
"path-parse": "^1.0.6"
}
@@ -1056,133 +2210,204 @@
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
+ "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
+ "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
+ "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-regex": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
- "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
+ "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
"requires": {
- "@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@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==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz",
+ "integrity": "sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-transform-typescript": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz",
+ "integrity": "sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ==",
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-typescript": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
- "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
- "dev": true,
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
+ "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.4",
- "regexpu-core": "^4.5.4"
- }
- },
- "@babel/polyfill": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz",
- "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==",
- "dev": true,
- "requires": {
- "core-js": "^2.6.5",
- "regenerator-runtime": "^0.13.2"
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
}
},
"@babel/preset-env": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz",
- "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.3.tgz",
+ "integrity": "sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg==",
"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.4.4",
- "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@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.4.4",
- "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
- "@babel/plugin-transform-block-scoping": "^7.4.4",
- "@babel/plugin-transform-classes": "^7.4.4",
- "@babel/plugin-transform-computed-properties": "^7.2.0",
- "@babel/plugin-transform-destructuring": "^7.4.4",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
- "@babel/plugin-transform-duplicate-keys": "^7.2.0",
- "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
- "@babel/plugin-transform-for-of": "^7.4.4",
- "@babel/plugin-transform-function-name": "^7.4.4",
- "@babel/plugin-transform-literals": "^7.2.0",
- "@babel/plugin-transform-member-expression-literals": "^7.2.0",
- "@babel/plugin-transform-modules-amd": "^7.2.0",
- "@babel/plugin-transform-modules-commonjs": "^7.4.4",
- "@babel/plugin-transform-modules-systemjs": "^7.4.4",
- "@babel/plugin-transform-modules-umd": "^7.2.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5",
- "@babel/plugin-transform-new-target": "^7.4.4",
- "@babel/plugin-transform-object-super": "^7.2.0",
- "@babel/plugin-transform-parameters": "^7.4.4",
- "@babel/plugin-transform-property-literals": "^7.2.0",
- "@babel/plugin-transform-regenerator": "^7.4.5",
- "@babel/plugin-transform-reserved-words": "^7.2.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.4.4",
- "@babel/plugin-transform-typeof-symbol": "^7.2.0",
- "@babel/plugin-transform-unicode-regex": "^7.4.4",
- "@babel/types": "^7.4.4",
- "browserslist": "^4.6.0",
- "core-js-compat": "^3.1.1",
+ "@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",
- "js-levenshtein": "^1.1.3",
+ "levenary": "^1.1.0",
"semver": "^5.5.0"
},
"dependencies": {
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz",
- "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==",
+ "@babel/helper-module-imports": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
+ "dev": true
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
}
}
}
@@ -1211,32 +2436,32 @@
"@babel/plugin-transform-react-jsx-source": "^7.0.0"
}
},
+ "@babel/preset-typescript": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.7.2.tgz",
+ "integrity": "sha512-1B4HthAelaLGfNRyrWqJtBEjXX1ulThCrLQ5B2VOtEAznWFIFXFJahgXImqppy66lx/Oh+cOSCQdJzZqh2Jh5g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-transform-typescript": "^7.7.2"
+ }
+ },
"@babel/register": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.4.4.tgz",
- "integrity": "sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.8.3.tgz",
+ "integrity": "sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg==",
"dev": true,
"requires": {
- "core-js": "^3.0.0",
"find-cache-dir": "^2.0.0",
- "lodash": "^4.17.11",
- "mkdirp": "^0.5.1",
+ "lodash": "^4.17.13",
+ "make-dir": "^2.1.0",
"pirates": "^4.0.0",
- "source-map-support": "^0.5.9"
- },
- "dependencies": {
- "core-js": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.3.tgz",
- "integrity": "sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA==",
- "dev": true
- }
+ "source-map-support": "^0.5.16"
}
},
"@babel/runtime": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
- "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
+ "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.2"
}
@@ -1250,25 +2475,53 @@
"regenerator-runtime": "^0.13.2"
}
},
- "@babel/template": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz",
- "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==",
+ "@babel/runtime-corejs3": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.3.tgz",
+ "integrity": "sha512-lrIU4aVbmlM/wQPzhEvzvNJskKyYptuXb0fGC0lTQTupTOYtR2Vqbu6/jf8vTr4M8Wt1nIzxVrSvPI5qESa/xA==",
+ "dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.7.4",
- "@babel/types": "^7.7.4"
+ "core-js-pure": "^3.0.0",
+ "regenerator-runtime": "^0.13.2"
+ }
+ },
+ "@babel/template": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
+ "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.3",
+ "@babel/types": "^7.8.3"
},
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
"@babel/parser": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz",
- "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw=="
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
},
"@babel/types": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
- "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
"requires": {
"esutils": "^2.0.2",
"lodash": "^4.17.13",
@@ -1278,21 +2531,54 @@
}
},
"@babel/traverse": {
- "version": "7.4.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz",
- "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.4.4",
- "@babel/helper-function-name": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.4.4",
- "@babel/parser": "^7.4.5",
- "@babel/types": "^7.4.4",
+ "@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.11"
+ "lodash": "^4.17.13"
},
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -1319,47 +2605,114 @@
"integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
},
"@emotion/cache": {
- "version": "10.0.19",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.19.tgz",
- "integrity": "sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ==",
+ "version": "10.0.27",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.27.tgz",
+ "integrity": "sha512-Zp8BEpbMunFsTcqAK4D7YTm3MvCp1SekflSLJH8lze2fCcSZ/yMkXHo8kb3t1/1Tdd3hAqf3Fb7z9VZ+FMiC9w==",
"requires": {
- "@emotion/sheet": "0.9.3",
- "@emotion/stylis": "0.8.4",
- "@emotion/utils": "0.11.2",
- "@emotion/weak-memoize": "0.2.4"
+ "@emotion/sheet": "0.9.4",
+ "@emotion/stylis": "0.8.5",
+ "@emotion/utils": "0.11.3",
+ "@emotion/weak-memoize": "0.2.5"
+ },
+ "dependencies": {
+ "@emotion/stylis": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
+ "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ=="
+ },
+ "@emotion/utils": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz",
+ "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw=="
+ }
}
},
"@emotion/core": {
- "version": "10.0.22",
- "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.22.tgz",
- "integrity": "sha512-7eoP6KQVUyOjAkE6y4fdlxbZRA4ILs7dqkkm6oZUJmihtHv0UBq98VgPirq9T8F9K2gKu0J/au/TpKryKMinaA==",
+ "version": "10.0.27",
+ "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.27.tgz",
+ "integrity": "sha512-XbD5R36pVbohQMnKfajHv43g8EbN4NHdF6Zh9zg/C0nr0jqwOw3gYnC07Xj3yG43OYSRyrGsoQ5qPwc8ycvLZw==",
"requires": {
"@babel/runtime": "^7.5.5",
- "@emotion/cache": "^10.0.17",
- "@emotion/css": "^10.0.22",
- "@emotion/serialize": "^0.11.12",
- "@emotion/sheet": "0.9.3",
- "@emotion/utils": "0.11.2"
+ "@emotion/cache": "^10.0.27",
+ "@emotion/css": "^10.0.27",
+ "@emotion/serialize": "^0.11.15",
+ "@emotion/sheet": "0.9.4",
+ "@emotion/utils": "0.11.3"
},
"dependencies": {
- "@babel/runtime": {
- "version": "7.7.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.6.tgz",
- "integrity": "sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==",
+ "@emotion/hash": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.4.tgz",
+ "integrity": "sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A=="
+ },
+ "@emotion/serialize": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.15.tgz",
+ "integrity": "sha512-YE+qnrmGwyR+XB5j7Bi+0GT1JWsdcjM/d4POu+TXkcnrRs4RFCCsi3d/Ebf+wSStHqAlTT2+dfd+b9N9EO2KBg==",
"requires": {
- "regenerator-runtime": "^0.13.2"
+ "@emotion/hash": "0.7.4",
+ "@emotion/memoize": "0.7.4",
+ "@emotion/unitless": "0.7.5",
+ "@emotion/utils": "0.11.3",
+ "csstype": "^2.5.7"
}
+ },
+ "@emotion/utils": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz",
+ "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw=="
}
}
},
"@emotion/css": {
- "version": "10.0.22",
- "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.22.tgz",
- "integrity": "sha512-8phfa5mC/OadBTmGpMpwykIVH0gFCbUoO684LUkyixPq4F1Wwri7fK5Xlm8lURNBrd2TuvTbPUGxFsGxF9UacA==",
+ "version": "10.0.27",
+ "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz",
+ "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==",
"requires": {
- "@emotion/serialize": "^0.11.12",
- "@emotion/utils": "0.11.2",
- "babel-plugin-emotion": "^10.0.22"
+ "@emotion/serialize": "^0.11.15",
+ "@emotion/utils": "0.11.3",
+ "babel-plugin-emotion": "^10.0.27"
+ },
+ "dependencies": {
+ "@emotion/hash": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.4.tgz",
+ "integrity": "sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A=="
+ },
+ "@emotion/serialize": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.15.tgz",
+ "integrity": "sha512-YE+qnrmGwyR+XB5j7Bi+0GT1JWsdcjM/d4POu+TXkcnrRs4RFCCsi3d/Ebf+wSStHqAlTT2+dfd+b9N9EO2KBg==",
+ "requires": {
+ "@emotion/hash": "0.7.4",
+ "@emotion/memoize": "0.7.4",
+ "@emotion/unitless": "0.7.5",
+ "@emotion/utils": "0.11.3",
+ "csstype": "^2.5.7"
+ }
+ },
+ "@emotion/utils": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz",
+ "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw=="
+ },
+ "babel-plugin-emotion": {
+ "version": "10.0.27",
+ "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.27.tgz",
+ "integrity": "sha512-SUNYcT4FqhOqvwv0z1oeYhqgheU8qrceLojuHyX17ngo7WtWqN5I9l3IGHzf21Xraj465CVzF4IvOlAF+3ed0A==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@emotion/hash": "0.7.4",
+ "@emotion/memoize": "0.7.4",
+ "@emotion/serialize": "^0.11.15",
+ "babel-plugin-macros": "^2.0.0",
+ "babel-plugin-syntax-jsx": "^6.18.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^1.0.5",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7"
+ }
+ }
}
},
"@emotion/hash": {
@@ -1368,24 +2721,24 @@
"integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw=="
},
"@emotion/is-prop-valid": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.5.tgz",
- "integrity": "sha512-6ZODuZSFofbxSbcxwsFz+6ioPjb0ISJRRPLZ+WIbjcU2IMU0Io+RGQjjaTgOvNQl007KICBm7zXQaYQEC1r6Bg==",
+ "version": "0.8.6",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.6.tgz",
+ "integrity": "sha512-mnZMho3Sq8BfzkYYRVc8ilQTnc8U02Ytp6J1AwM6taQStZ3AhsEJBX2LzhA/LJirNCwM2VtHL3VFIZ+sNJUgUQ==",
"requires": {
- "@emotion/memoize": "0.7.3"
+ "@emotion/memoize": "0.7.4"
},
"dependencies": {
"@emotion/memoize": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.3.tgz",
- "integrity": "sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow=="
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw=="
}
}
},
"@emotion/memoize": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.1.tgz",
- "integrity": "sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg=="
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw=="
},
"@emotion/serialize": {
"version": "0.11.14",
@@ -1412,9 +2765,9 @@
}
},
"@emotion/sheet": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.3.tgz",
- "integrity": "sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A=="
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz",
+ "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA=="
},
"@emotion/styled": {
"version": "10.0.23",
@@ -1465,9 +2818,9 @@
"integrity": "sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ=="
},
"@emotion/unitless": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.4.tgz",
- "integrity": "sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ=="
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
},
"@emotion/utils": {
"version": "0.11.2",
@@ -1475,9 +2828,9 @@
"integrity": "sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA=="
},
"@emotion/weak-memoize": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz",
- "integrity": "sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA=="
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
+ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
},
"@sinonjs/commons": {
"version": "1.4.0",
@@ -1608,23 +2961,6 @@
"@emotion/is-prop-valid": "^0.8.1",
"@emotion/memoize": "^0.7.1",
"styled-system": "^5.1.4"
- },
- "dependencies": {
- "@emotion/is-prop-valid": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.5.tgz",
- "integrity": "sha512-6ZODuZSFofbxSbcxwsFz+6ioPjb0ISJRRPLZ+WIbjcU2IMU0Io+RGQjjaTgOvNQl007KICBm7zXQaYQEC1r6Bg==",
- "requires": {
- "@emotion/memoize": "0.7.3"
- },
- "dependencies": {
- "@emotion/memoize": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.3.tgz",
- "integrity": "sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow=="
- }
- }
- }
}
},
"@styled-system/space": {
@@ -1659,9 +2995,9 @@
"dev": true
},
"@types/body-parser": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
- "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz",
+ "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==",
"dev": true,
"requires": {
"@types/connect": "*",
@@ -1669,45 +3005,50 @@
}
},
"@types/bson": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.0.tgz",
- "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.1.tgz",
+ "integrity": "sha512-K6VAEdLVJFBxKp8m5cRTbUfeZpuSvOuLKJLrgw9ANIXo00RiyGzgH4BKWWR4F520gV4tWmxG7q9sKQRVDuzrBw==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/bull": {
- "version": "3.10.5",
- "resolved": "https://registry.npmjs.org/@types/bull/-/bull-3.10.5.tgz",
- "integrity": "sha512-1/4/tNitRNBjXpQ9tJdWJxpbVft0fFUPc5d0UPB/1NJgxn8Wd9xjSkFkS+YxwUqW6+NfFzOFqqPMPL+yzLL6LQ==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@types/bull/-/bull-3.12.0.tgz",
+ "integrity": "sha512-oKj9X8bxBF7OyAsCPGg2hu9msQPM/WwIRJfUHd0xzmKDMYOBepzbWdIuQDoX1xyvDskdjbW2Io7chbxqARae7A==",
"dev": true,
"requires": {
"@types/ioredis": "*"
}
},
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
+ },
"@types/connect": {
- "version": "3.4.32",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
- "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
+ "version": "3.4.33",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
+ "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/cookie-parser": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.1.tgz",
- "integrity": "sha512-iJY6B3ZGufLiDf2OCAgiAAQuj1sMKC/wz/7XCEjZ+/MDuultfFJuSwrBKcLSmJ5iYApLzCCYBYJZs0Ws8GPmwA==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.2.tgz",
+ "integrity": "sha512-uwcY8m6SDQqciHsqcKDGbo10GdasYsPCYkH3hVegj9qAah6pX5HivOnOuI3WYmyQMnOATV39zv/Ybs0bC/6iVg==",
"dev": true,
"requires": {
"@types/express": "*"
}
},
"@types/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==",
+ "version": "2.8.6",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz",
+ "integrity": "sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg==",
"dev": true,
"requires": {
"@types/express": "*"
@@ -1738,9 +3079,9 @@
"dev": true
},
"@types/express": {
- "version": "4.17.0",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz",
- "integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==",
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz",
+ "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==",
"dev": true,
"requires": {
"@types/body-parser": "*",
@@ -1749,9 +3090,9 @@
}
},
"@types/express-serve-static-core": {
- "version": "4.16.7",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz",
- "integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==",
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.1.tgz",
+ "integrity": "sha512-9e7jj549ZI+RxY21Cl0t8uBnWyb22HzILupyHZjYEVK//5TT/1bZodU+yUbLnPdoYViBBnNWbxp4zYjGV0zUGw==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -1768,18 +3109,18 @@
}
},
"@types/ioredis": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.0.18.tgz",
- "integrity": "sha512-iDIRGPGP4LwoeiKNxQcI38ZA5T8SC+MbGCiiNFJ+LNy9tdegj6f9PAZ7se4tiWJhUHbf25kEJt7k3YfmYjWKZg==",
+ "version": "4.14.4",
+ "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.14.4.tgz",
+ "integrity": "sha512-6eM+TBd6YE8E+4DruPYKBYvMKSx+eRdBcJLlaxqZsViR5UQWu+VEkkltet5Z2ZFhRqHMnDf38xDvI1GESCD2Ig==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/json-schema": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz",
- "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
+ "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==",
"dev": true
},
"@types/jsonwebtoken": {
@@ -1804,9 +3145,9 @@
"dev": true
},
"@types/mongodb": {
- "version": "3.1.30",
- "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.1.30.tgz",
- "integrity": "sha512-o8NLZRp+zEILEMj628cCTT2bSWH/Zst+vjSNgaSoKwGeHqJXiGPBSHb0RuidPrllBEyQ+uSW/qNPv0b5mzh+SA==",
+ "version": "3.3.14",
+ "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.3.14.tgz",
+ "integrity": "sha512-Ie0Fjoifm/TPY2rNOgixzhNSjDgxgR0dMKQk9XqUXHnkfuw26SpbMXjwECfxSnEdG1bH6bIlpLIK7HvGHQhzqg==",
"dev": true,
"requires": {
"@types/bson": "*",
@@ -1814,18 +3155,18 @@
}
},
"@types/morgan": {
- "version": "1.7.36",
- "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.7.36.tgz",
- "integrity": "sha512-Hc2UfTpnqS3gfGZFPk6aaQf/nwxFHboC/o1O25W29UsENPLv8qd/GJUBqzrBuczgaIS3/vZxZRHTfFF28uFNeQ==",
+ "version": "1.7.37",
+ "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.7.37.tgz",
+ "integrity": "sha512-tIdEA10BcHcOumMmUiiYdw8lhiVVq62r0ghih5Xpp4WETkfsMiTUZL4w9jCI502BBOrKhFrAOGml9IeELvVaBA==",
"dev": true,
"requires": {
"@types/express": "*"
}
},
"@types/ms": {
- "version": "0.7.30",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.30.tgz",
- "integrity": "sha512-OftRLCgAzJP7vmKn9by/GVjnf4hloz/pXNOwPo0vKGAfXI7GqWXJi9N2kRar4cP5s1dGwuwcagWqO6iHBTq1Mg==",
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
+ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==",
"dev": true
},
"@types/next": {
@@ -1853,9 +3194,9 @@
}
},
"@types/nodemailer": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.2.1.tgz",
- "integrity": "sha512-6f46rxxaFwyOW39psPoQiM7jHjL7apDRNT5WPHIuv+TZFv+7sBGSI9J7blIC3/NWff4O9/VSzgoQtO6aPLUdvQ==",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.0.tgz",
+ "integrity": "sha512-KY7bFWB0MahRZvVW4CuW83qcCDny59pJJ0MQ5ifvfcjNwPlIT0vW4uARO4u1gtkYnWdhSvURegecY/tzcukJcA==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -1867,9 +3208,9 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
},
"@types/pg": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.11.0.tgz",
- "integrity": "sha512-wXduaNIDQp7w9ediwIRAH+FpdgtOlOwFVlYe9DtBPDczxcHgfb0blLNR7yYVNUMhspC0xOLykOvMDHavbO0Sxg==",
+ "version": "7.14.1",
+ "resolved": "https://registry.npmjs.org/@types/pg/-/pg-7.14.1.tgz",
+ "integrity": "sha512-gQgg4bLuykokypx4O1fwEzl5e6UjjyaBtN3znn5zhm0YB9BnKyHDw+e4cQY9rAPzpdM2qpJbn9TNzUazbmTsdw==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -1887,13 +3228,10 @@
}
},
"@types/pg-types": {
- "version": "1.11.4",
- "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.4.tgz",
- "integrity": "sha512-WdIiQmE347LGc1Vq3Ki8sk3iyCuLgnccqVzgxek6gEHp2H0p3MQ3jniIHt+bRODXKju4kNQ+mp53lmP5+/9moQ==",
- "dev": true,
- "requires": {
- "moment": ">=2.14.0"
- }
+ "version": "1.11.5",
+ "resolved": "https://registry.npmjs.org/@types/pg-types/-/pg-types-1.11.5.tgz",
+ "integrity": "sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==",
+ "dev": true
},
"@types/prop-types": {
"version": "15.7.3",
@@ -1917,9 +3255,9 @@
"dev": true
},
"@types/react": {
- "version": "16.9.16",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.16.tgz",
- "integrity": "sha512-dQ3wlehuBbYlfvRXfF5G+5TbZF3xqgkikK7DWAsQXe2KnzV+kjD4W2ea+ThCrKASZn9h98bjjPzoTYzfRqyBkw==",
+ "version": "16.9.17",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.17.tgz",
+ "integrity": "sha512-UP27In4fp4sWF5JgyV6pwVPAQM83Fj76JOcg02X5BZcpSu5Wx+fP9RMqc2v0ssBoQIFvD5JdKY41gjJJKmw6Bg==",
"dev": true,
"requires": {
"@types/prop-types": "*",
@@ -1945,9 +3283,9 @@
}
},
"@types/redis": {
- "version": "2.8.13",
- "resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.13.tgz",
- "integrity": "sha512-p86cm5P6DMotUqCS6odQRz0JJwc5QXZw9eyH0ALVIqmq12yqtex5ighWyGFHKxak9vaA/GF/Ilu0KZ0MuXXUbg==",
+ "version": "2.8.14",
+ "resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.14.tgz",
+ "integrity": "sha512-255dzsOLJdXFHBio9/aMHGozNkoiBUgc+g2nlNjbTSp5qcAlmpm4Z6Xs3pKOBLNIKdZbA2BkUxWvYSIwKra0Yw==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -1965,9 +3303,9 @@
}
},
"@types/serve-static": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz",
- "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==",
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz",
+ "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==",
"dev": true,
"requires": {
"@types/express-serve-static-core": "*",
@@ -2001,51 +3339,93 @@
"dev": true
},
"@typescript-eslint/eslint-plugin": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.0.0.tgz",
- "integrity": "sha512-Mo45nxTTELODdl7CgpZKJISvLb+Fu64OOO2ZFc2x8sYSnUpFrBUW3H+H/ZGYmEkfnL6VkdtOSxgdt+Av79j0sA==",
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.16.0.tgz",
+ "integrity": "sha512-TKWbeFAKRPrvKiR9GNxErQ8sELKqg1ZvXi6uho07mcKShBnCnqNpDQWP01FEvWKf0bxM2g7uQEI5MNjSNqvUpQ==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "2.0.0",
- "eslint-utils": "^1.4.0",
+ "@typescript-eslint/experimental-utils": "2.16.0",
+ "eslint-utils": "^1.4.3",
"functional-red-black-tree": "^1.0.1",
- "regexpp": "^2.0.1",
- "tsutils": "^3.14.0"
+ "regexpp": "^3.0.0",
+ "tsutils": "^3.17.1"
}
},
"@typescript-eslint/experimental-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.0.0.tgz",
- "integrity": "sha512-XGJG6GNBXIEx/mN4eTRypN/EUmsd0VhVGQ1AG+WTgdvjHl0G8vHhVBHrd/5oI6RRYBRnedNymSYWW1HAdivtmg==",
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.16.0.tgz",
+ "integrity": "sha512-bXTmAztXpqxliDKZgvWkl+5dHeRN+jqXVZ16peKKFzSXVzT6mz8kgBpHiVzEKO2NZ8OCU7dG61K9sRS/SkUUFQ==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.3",
- "@typescript-eslint/typescript-estree": "2.0.0",
- "eslint-scope": "^4.0.0"
+ "@typescript-eslint/typescript-estree": "2.16.0",
+ "eslint-scope": "^5.0.0"
}
},
"@typescript-eslint/parser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.0.0.tgz",
- "integrity": "sha512-ibyMBMr0383ZKserIsp67+WnNVoM402HKkxqXGlxEZsXtnGGurbnY90pBO3e0nBUM7chEEOcxUhgw9aPq7fEBA==",
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.16.0.tgz",
+ "integrity": "sha512-+w8dMaYETM9v6il1yYYkApMSiwgnqXWJbXrA94LAWN603vXHACsZTirJduyeBOJjA9wT6xuXe5zZ1iCUzoxCfw==",
"dev": true,
"requires": {
"@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "2.0.0",
- "@typescript-eslint/typescript-estree": "2.0.0",
- "eslint-visitor-keys": "^1.0.0"
+ "@typescript-eslint/experimental-utils": "2.16.0",
+ "@typescript-eslint/typescript-estree": "2.16.0",
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true
+ }
}
},
"@typescript-eslint/typescript-estree": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.0.0.tgz",
- "integrity": "sha512-NXbmzA3vWrSgavymlzMWNecgNOuiMMp62MO3kI7awZRLRcsA1QrYWo6q08m++uuAGVbXH/prZi2y1AWuhSu63w==",
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.16.0.tgz",
+ "integrity": "sha512-hyrCYjFHISos68Bk5KjUAXw0pP/455qq9nxqB1KkT67Pxjcfw+r6Yhcmqnp8etFL45UexCHUMrADHH7dI/m2WQ==",
"dev": true,
"requires": {
- "lodash.unescape": "4.0.1",
- "semver": "^6.2.0"
+ "debug": "^4.1.1",
+ "eslint-visitor-keys": "^1.1.0",
+ "glob": "^7.1.6",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.15",
+ "semver": "^6.3.0",
+ "tsutils": "^3.17.1"
},
"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"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": 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"
+ }
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -2243,9 +3623,9 @@
"integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw=="
},
"acorn-jsx": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
- "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
+ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
"dev": true
},
"ajv": {
@@ -2265,9 +3645,9 @@
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
},
"ajv-keywords": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
- "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw=="
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
},
"amphtml-validator": {
"version": "1.0.23",
@@ -2301,6 +3681,33 @@
"dev": true,
"requires": {
"string-width": "^2.0.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
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ }
}
},
"ansi-colors": {
@@ -2413,13 +3820,14 @@
"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=",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
+ "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.7.0"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0",
+ "is-string": "^1.0.5"
}
},
"array-slice": {
@@ -2445,6 +3853,16 @@
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
+ "array.prototype.flat": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
+ "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
@@ -2514,12 +3932,18 @@
"integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
"dev": true
},
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
"async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
- "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+ "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.11"
+ "lodash": "^4.17.14"
}
},
"async-each": {
@@ -2576,60 +4000,40 @@
"make-dir": "^1.0.0",
"pkg-dir": "^2.0.0"
}
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "requires": {
+ "pify": "^3.0.0"
+ }
}
}
},
"autoprefixer": {
- "version": "9.7.3",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz",
- "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==",
+ "version": "9.7.4",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz",
+ "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==",
"requires": {
- "browserslist": "^4.8.0",
- "caniuse-lite": "^1.0.30001012",
+ "browserslist": "^4.8.3",
+ "caniuse-lite": "^1.0.30001020",
"chalk": "^2.4.2",
"normalize-range": "^0.1.2",
"num2fraction": "^1.2.2",
- "postcss": "^7.0.23",
+ "postcss": "^7.0.26",
"postcss-value-parser": "^4.0.2"
},
"dependencies": {
- "browserslist": {
- "version": "4.8.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz",
- "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==",
- "requires": {
- "caniuse-lite": "^1.0.30001017",
- "electron-to-chromium": "^1.3.322",
- "node-releases": "^1.1.44"
- }
- },
"caniuse-lite": {
- "version": "1.0.30001019",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001019.tgz",
- "integrity": "sha512-6ljkLtF1KM5fQ+5ZN0wuyVvvebJxgJPTmScOMaFuQN2QuOzvRJnWSKfzQskQU5IOU4Gap3zasYPIinzwUjoj/g=="
- },
- "electron-to-chromium": {
- "version": "1.3.327",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz",
- "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg=="
- },
- "node-releases": {
- "version": "1.1.44",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz",
- "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==",
- "requires": {
- "semver": "^6.3.0"
- }
+ "version": "1.0.30001021",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz",
+ "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g=="
},
"postcss-value-parser": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
"integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ=="
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
}
}
},
@@ -2644,28 +4048,21 @@
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"axios": {
- "version": "0.19.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
- "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.1.tgz",
+ "integrity": "sha512-Yl+7nfreYKaLRvAvjNPkvfjnQHJM1yLBY3zhqAwcJSwR/6ETkanUgylgtIvkvz0xJ+p/vZuNw8X7Hnb7Whsbpw==",
"requires": {
- "follow-redirects": "1.5.10",
- "is-buffer": "^2.0.2"
- },
- "dependencies": {
- "is-buffer": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
- "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
- }
+ "follow-redirects": "1.5.10"
}
},
"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==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.1.tgz",
+ "integrity": "sha512-lF98xa/yvy6j3fBHAgQXIYl+J4eZadOSqsPojemUqClzNbBV38wWGpUbQbVEyf4eUF5yF7eHmGgGA2JiHyjeqw==",
"dev": true,
"requires": {
- "ast-types-flow": "0.0.7"
+ "@babel/runtime": "^7.7.4",
+ "@babel/runtime-corejs3": "^7.7.4"
}
},
"babel": {
@@ -3412,14 +4809,14 @@
}
},
"babel-plugin-styled-components": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.0.tgz",
- "integrity": "sha512-sQVKG8irFXx14ZfaK1bBePirfkacl3j8nZwSZK+ZjsbnadRHKQTbhXbe/RB1vT6Vgkz45E+V95LBq4KqdhZUNw==",
+ "version": "1.10.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz",
+ "integrity": "sha512-gyQj/Zf1kQti66100PhrCRjI5ldjaze9O0M3emXRPAN80Zsf8+e1thpTpaXJXVHXtaM4/+dJEgZHyS9Its+8SA==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.0.0",
"@babel/helper-module-imports": "^7.0.0",
"babel-plugin-syntax-jsx": "^6.18.0",
- "lodash": "^4.17.10"
+ "lodash": "^4.17.11"
}
},
"babel-plugin-syntax-async-functions": {
@@ -4103,9 +5500,9 @@
}
},
"bowser": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.7.0.tgz",
- "integrity": "sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w=="
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.8.1.tgz",
+ "integrity": "sha512-FxxltGKqMHkVa3KtpA+kdnxH0caHPDewccyrK3vW1bsMw6Zco4vRPmMunowX0pXlDZqhxkKSpToADQI2Sk4OeQ=="
},
"boxen": {
"version": "1.3.0",
@@ -4120,6 +5517,39 @@
"string-width": "^2.0.0",
"term-size": "^1.2.0",
"widest-line": "^2.0.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
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ }
}
},
"brace-expansion": {
@@ -4235,13 +5665,25 @@
}
},
"browserslist": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz",
- "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==",
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz",
+ "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==",
"requires": {
- "caniuse-lite": "^1.0.30000967",
- "electron-to-chromium": "^1.3.133",
- "node-releases": "^1.1.19"
+ "caniuse-lite": "^1.0.30001017",
+ "electron-to-chromium": "^1.3.322",
+ "node-releases": "^1.1.44"
+ },
+ "dependencies": {
+ "caniuse-lite": {
+ "version": "1.0.30001021",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz",
+ "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g=="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.337",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.337.tgz",
+ "integrity": "sha512-uJ+wLjslYQ/2rAusDg+6FlK8DLhHWTLCe7gkofBehTifW7KCkPVTn5rhKSCncWYNq34Iy/o4OfswuEkAO2RBaw=="
+ }
}
},
"buffer": {
@@ -4290,9 +5732,9 @@
"integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
},
"bull": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/bull/-/bull-3.11.0.tgz",
- "integrity": "sha512-QQOn63RkL6CfnmZcacPVg1EF42SwQcYxNSn9OGlM5S2JW+Gah/dwCcXxZQ3h2nYnhsNfBsherJ7EpLzIsi2kSQ==",
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/bull/-/bull-3.12.1.tgz",
+ "integrity": "sha512-X3bSP7gTqPXLYVSyUtQuTOqZuU0GwVbV304Et84Z8bxYP60R1VD3FUOLsESVRA9LIUEOWVH3hE8MFqlszmO0Gw==",
"requires": {
"cron-parser": "^2.13.0",
"debuglog": "^1.0.0",
@@ -4310,11 +5752,6 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "uuid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
}
}
},
@@ -4466,35 +5903,25 @@
"integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
"requires": {
"callsites": "^2.0.0"
- },
- "dependencies": {
- "callsites": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
- "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
- }
}
},
"caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
"requires": {
- "callsites": "^0.2.0"
+ "caller-callsite": "^2.0.0"
}
},
"callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
},
"camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"camelize": {
"version": "1.0.0",
@@ -4504,7 +5931,8 @@
"caniuse-lite": {
"version": "1.0.30000971",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz",
- "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g=="
+ "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==",
+ "dev": true
},
"capture-stack-trace": {
"version": "1.0.1",
@@ -4542,9 +5970,9 @@
}
},
"chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
"charenc": {
@@ -4559,9 +5987,9 @@
"dev": true
},
"chokidar": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
- "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
+ "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",
@@ -4605,12 +6033,6 @@
"safe-buffer": "^5.0.1"
}
},
- "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",
@@ -4711,17 +6133,6 @@
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "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==",
- "dev": true,
- "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",
@@ -4730,17 +6141,6 @@
"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==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
}
}
},
@@ -4897,19 +6297,6 @@
"write-file-atomic": "^3.0.0"
},
"dependencies": {
- "dot-prop": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
- "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
- },
"make-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
@@ -4922,17 +6309,6 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "write-file-atomic": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz",
- "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==",
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
}
}
},
@@ -4948,6 +6324,43 @@
"unique-string": "^1.0.0",
"write-file-atomic": "^2.0.0",
"xdg-basedir": "^3.0.0"
+ },
+ "dependencies": {
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "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"
+ }
+ }
}
},
"console-browserify": {
@@ -5048,9 +6461,9 @@
}
},
"copyfiles": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.1.1.tgz",
- "integrity": "sha512-y6DZHve80whydXzBal7r70TBgKMPKesVRR1Sn/raUu7Jh/i7iSLSyGvYaq0eMJ/3Y/CKghwzjY32q1WzEnpp3Q==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.2.0.tgz",
+ "integrity": "sha512-iJbHJI+8OKqsq+4JF0rqgRkZzo++jqO6Wf4FUU1JM41cJF6JcY5968XyF4tm3Kkm7ZOMrqlljdm8N9oyY5raGw==",
"dev": true,
"requires": {
"glob": "^7.0.5",
@@ -5067,26 +6480,26 @@
"integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
},
"core-js-compat": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.3.tgz",
- "integrity": "sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==",
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz",
+ "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==",
"requires": {
- "browserslist": "^4.6.0",
- "core-js-pure": "3.1.3",
- "semver": "^6.1.0"
+ "browserslist": "^4.8.3",
+ "semver": "7.0.0"
},
"dependencies": {
"semver": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz",
- "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="
}
}
},
"core-js-pure": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.3.tgz",
- "integrity": "sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA=="
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.4.tgz",
+ "integrity": "sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw==",
+ "dev": true
},
"core-util-is": {
"version": "1.0.2",
@@ -5312,11 +6725,6 @@
"schema-utils": "^2.6.0"
},
"dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
"postcss-value-parser": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
@@ -5333,13 +6741,13 @@
}
},
"css-to-react-native": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz",
- "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz",
+ "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==",
"requires": {
"camelize": "^1.0.0",
"css-color-keywords": "^1.0.0",
- "postcss-value-parser": "^3.3.0"
+ "postcss-value-parser": "^4.0.2"
}
},
"cssdb": {
@@ -5399,27 +6807,27 @@
"integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
},
"d3-color": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz",
- "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw=="
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz",
+ "integrity": "sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg=="
},
"d3-format": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz",
- "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ=="
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.3.tgz",
+ "integrity": "sha512-mm/nE2Y9HgGyjP+rKIekeITVgBtX97o1nrvHCWX8F/yBYyevUTvu9vb5pUnKwrcSw7o7GuwMOWjS9gFDs4O+uQ=="
},
"d3-interpolate": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz",
- "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
+ "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
"requires": {
"d3-color": "1"
}
},
"d3-path": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz",
- "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA=="
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
},
"d3-scale": {
"version": "2.2.2",
@@ -5435,22 +6843,22 @@
}
},
"d3-shape": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.5.tgz",
- "integrity": "sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg==",
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+ "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
"requires": {
"d3-path": "1"
}
},
"d3-time": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.11.tgz",
- "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw=="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
+ "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
},
"d3-time-format": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz",
- "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz",
+ "integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==",
"requires": {
"d3-time": "1"
}
@@ -5475,9 +6883,9 @@
"integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg="
},
"date-fns": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.4.1.tgz",
- "integrity": "sha512-2RhmH/sjDSCYW2F3ZQxOUx/I7PvzXpi89aQL2d3OAxSTwLx6NilATeUbe0menFE3Lu5lFkOFci36ivimwYHHxw=="
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.9.0.tgz",
+ "integrity": "sha512-khbFLu/MlzLjEzy9Gh8oY1hNt/Dvxw3J6Rbc28cVoYWQaC1S3YI4xwkF9ZWcjDLscbZlY9hISMr66RFzZagLsA=="
},
"debounce": {
"version": "1.2.0",
@@ -5692,9 +7100,9 @@
"integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q=="
},
"doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"requires": {
"esutils": "^2.0.2"
@@ -5719,18 +7127,17 @@
"integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug=="
},
"dot-prop": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
- "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
- "dev": true,
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
+ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
"requires": {
- "is-obj": "^1.0.0"
+ "is-obj": "^2.0.0"
}
},
"dotenv": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz",
- "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg=="
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
},
"double-ended-queue": {
"version": "2.1.0-0",
@@ -5760,20 +7167,19 @@
}
},
"easy-peasy": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/easy-peasy/-/easy-peasy-3.2.3.tgz",
- "integrity": "sha512-BPFqqlsH0MGwSSDI9QQJEizkyoIhuadvGUt/aKfIrRES7S1x9qw1gVzVrEBiXxqjEqZ0LrVI6BNKHBW1jHkX+w==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/easy-peasy/-/easy-peasy-3.3.0.tgz",
+ "integrity": "sha512-wkTDAG+nRy+4g8Z3/k1vuTyrhxet19oY5MCmuRgOObm8dtZ2m+g5Mk/sdf3UWPuyx/sKIYH5Fy/HXab8iNKjTQ==",
"requires": {
"debounce": "^1.2.0",
"immer-peasy": "3.1.3",
"is-plain-object": "^3.0.0",
"memoizerific": "^1.11.3",
"prop-types": "^15.6.2",
- "redux": "^4.0.4",
+ "redux": "^4.0.5",
"redux-thunk": "^2.3.0",
- "shallowequal": "^1.1.0",
"symbol-observable": "^1.2.0",
- "ts-toolbelt": "^4.10.0"
+ "ts-toolbelt": "^6.1.6"
},
"dependencies": {
"is-plain-object": {
@@ -5788,15 +7194,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
"integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA=="
- },
- "redux": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz",
- "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==",
- "requires": {
- "loose-envify": "^1.4.0",
- "symbol-observable": "^1.2.0"
- }
}
}
},
@@ -5832,7 +7229,8 @@
"electron-to-chromium": {
"version": "1.3.137",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz",
- "integrity": "sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw=="
+ "integrity": "sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw==",
+ "dev": true
},
"elliptic": {
"version": "6.5.2",
@@ -5903,6 +7301,73 @@
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
"integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA=="
},
+ "envalid": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/envalid/-/envalid-6.0.0.tgz",
+ "integrity": "sha512-ervvE+KHy69NmJI1iEcBCkH9dlL5GaS6e4rbP2ohMKPjE2TLuq6E4tWEJojShpHqBz1k6OFgwEJOPTak3Tg5ow==",
+ "requires": {
+ "chalk": "^3.0.0",
+ "dotenv": "^8.2.0",
+ "meant": "^1.0.1",
+ "validator": "^12.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "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=="
+ },
+ "dotenv": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
+ },
+ "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.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "validator": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-12.1.0.tgz",
+ "integrity": "sha512-gIC2RBuFRi574Rb9vewGCJ7TCLxHXNx6EKthEgs+Iz0pYa9a9Te1VLG/bGLsAyGWrqR5FfR7tbFUI7FEF2LiGA=="
+ }
+ }
+ },
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
@@ -5920,22 +7385,27 @@
}
},
"es-abstract": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
- "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "version": "1.17.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.2.tgz",
+ "integrity": "sha512-YoKuru3Lyoy7yVTBSH2j7UxTqe/je3dWAruC0sHvZX1GNd5zX8SSLvQqEgO9b3Ex8IW+goFI9arEEsFIbulhOw==",
"requires": {
- "es-to-primitive": "^1.2.0",
+ "es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"has": "^1.0.3",
- "is-callable": "^1.1.4",
- "is-regex": "^1.0.4",
- "object-keys": "^1.0.12"
+ "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": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
- "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "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",
@@ -5953,48 +7423,46 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz",
- "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==",
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+ "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
"dev": true,
"requires": {
- "ajv": "^6.5.0",
- "babel-code-frame": "^6.26.0",
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.9.1",
"chalk": "^2.1.0",
"cross-spawn": "^6.0.5",
- "debug": "^3.1.0",
- "doctrine": "^2.1.0",
- "eslint-scope": "^4.0.0",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.3",
"eslint-utils": "^1.3.1",
"eslint-visitor-keys": "^1.0.0",
- "espree": "^4.0.0",
+ "espree": "^5.0.1",
"esquery": "^1.0.1",
"esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
+ "file-entry-cache": "^5.0.1",
"functional-red-black-tree": "^1.0.1",
"glob": "^7.1.2",
"globals": "^11.7.0",
- "ignore": "^4.0.2",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
- "inquirer": "^5.2.0",
- "is-resolvable": "^1.1.0",
- "js-yaml": "^3.11.0",
+ "inquirer": "^6.2.2",
+ "js-yaml": "^3.13.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.3.0",
- "lodash": "^4.17.5",
+ "lodash": "^4.17.11",
"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.0",
- "regexpp": "^2.0.0",
- "require-uncached": "^1.0.3",
- "semver": "^5.5.0",
+ "regexpp": "^2.0.1",
+ "semver": "^5.5.1",
"strip-ansi": "^4.0.0",
"strip-json-comments": "^2.0.1",
- "table": "^4.0.3",
+ "table": "^5.2.3",
"text-table": "^0.2.0"
},
"dependencies": {
@@ -6017,6 +7485,31 @@
"which": "^1.2.9"
}
},
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -6047,22 +7540,22 @@
}
},
"eslint-config-prettier": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz",
- "integrity": "sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==",
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.9.0.tgz",
+ "integrity": "sha512-k4E14HBtcLv0uqThaI6I/n1LEqROp8XaPu6SO9Z32u5NlGRC07Enu1Bh2KEFw4FNHbekH8yzbIU9kUGxbiGmCA==",
"dev": true,
"requires": {
"get-stdin": "^6.0.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==",
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
+ "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
"dev": true,
"requires": {
"debug": "^2.6.9",
- "resolve": "^1.5.0"
+ "resolve": "^1.13.1"
},
"dependencies": {
"debug": {
@@ -6079,16 +7572,25 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
+ },
+ "resolve": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz",
+ "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
}
}
},
"eslint-module-utils": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz",
- "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz",
+ "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==",
"dev": true,
"requires": {
- "debug": "^2.6.8",
+ "debug": "^2.6.9",
"pkg-dir": "^2.0.0"
},
"dependencies": {
@@ -6110,22 +7612,23 @@
}
},
"eslint-plugin-import": {
- "version": "2.17.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.3.tgz",
- "integrity": "sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q==",
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz",
+ "integrity": "sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==",
"dev": true,
"requires": {
"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.0",
+ "eslint-module-utils": "^2.4.1",
"has": "^1.0.3",
- "lodash": "^4.17.11",
"minimatch": "^3.0.4",
+ "object.values": "^1.1.0",
"read-pkg-up": "^2.0.0",
- "resolve": "^1.11.0"
+ "resolve": "^1.12.0"
},
"dependencies": {
"debug": {
@@ -6154,9 +7657,9 @@
"dev": true
},
"resolve": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz",
- "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==",
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz",
+ "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
@@ -6165,11 +7668,12 @@
}
},
"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==",
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz",
+ "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==",
"dev": true,
"requires": {
+ "@babel/runtime": "^7.4.5",
"aria-query": "^3.0.0",
"array-includes": "^3.0.3",
"ast-types-flow": "^0.0.7",
@@ -6177,7 +7681,7 @@
"damerau-levenshtein": "^1.0.4",
"emoji-regex": "^7.0.2",
"has": "^1.0.3",
- "jsx-ast-utils": "^2.0.1"
+ "jsx-ast-utils": "^2.2.1"
}
},
"eslint-plugin-prettier": {
@@ -6190,26 +7694,35 @@
}
},
"eslint-plugin-react": {
- "version": "7.14.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
- "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.18.0.tgz",
+ "integrity": "sha512-p+PGoGeV4SaZRDsXqdj9OWcOrOpZn8gXoGPcIQTzo2IDMbAKhNDnME9myZWqO3Ic4R3YmwAZ1lDjWl2R2hMUVQ==",
"dev": true,
"requires": {
- "array-includes": "^3.0.3",
+ "array-includes": "^3.1.1",
"doctrine": "^2.1.0",
"has": "^1.0.3",
- "jsx-ast-utils": "^2.1.0",
- "object.entries": "^1.1.0",
- "object.fromentries": "^2.0.0",
- "object.values": "^1.1.0",
+ "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.10.1"
+ "resolve": "^1.14.2"
},
"dependencies": {
+ "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"
+ }
+ },
"resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz",
+ "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
@@ -6224,21 +7737,30 @@
"dev": true
},
"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==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
+ "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+ "dev": true,
"requires": {
"esrecurse": "^4.1.0",
"estraverse": "^4.1.1"
}
},
"eslint-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
- "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.0.0"
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "dev": true
+ }
}
},
"eslint-visitor-keys": {
@@ -6248,22 +7770,14 @@
"dev": true
},
"espree": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
- "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
"dev": true,
"requires": {
- "acorn": "^6.0.2",
+ "acorn": "^6.0.7",
"acorn-jsx": "^5.0.0",
"eslint-visitor-keys": "^1.0.0"
- },
- "dependencies": {
- "acorn": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
- "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
- "dev": true
- }
}
},
"esprima": {
@@ -6309,9 +7823,9 @@
"integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg=="
},
"events": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
- "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
+ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="
},
"evp_bytestokey": {
"version": "1.0.3",
@@ -6552,13 +8066,13 @@
}
},
"external-editor": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
"dev": true,
"requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
"tmp": "^0.0.33"
}
},
@@ -6670,19 +8184,17 @@
"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=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
"dev": true,
"requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
+ "flat-cache": "^2.0.1"
}
},
"file-loader": {
@@ -6752,12 +8264,12 @@
}
},
"find-cache-dir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
- "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
+ "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": "^1.0.0",
+ "make-dir": "^2.0.0",
"pkg-dir": "^3.0.0"
},
"dependencies": {
@@ -6779,9 +8291,9 @@
}
},
"p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
+ "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
"requires": {
"p-try": "^2.0.0"
}
@@ -6851,15 +8363,14 @@
"integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
},
"flat-cache": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
- "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
"dev": true,
"requires": {
- "circular-json": "^0.3.1",
- "graceful-fs": "^4.1.2",
- "rimraf": "~2.6.2",
- "write": "^0.2.1"
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
},
"dependencies": {
"rimraf": {
@@ -6873,6 +8384,12 @@
}
}
},
+ "flatted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
+ "dev": true
+ },
"flatten": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
@@ -7591,10 +9108,16 @@
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
+ "dev": true
+ },
"geoip-lite": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/geoip-lite/-/geoip-lite-1.3.8.tgz",
- "integrity": "sha512-K0YNaQlHRjdLymVfDr47UEy+NTw40WLVmaAKy8lCzIrwWvuS764ZeIDlDofdApFWVbwU3HgJoU4oSIJvsA09bg==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/geoip-lite/-/geoip-lite-1.4.0.tgz",
+ "integrity": "sha512-pQmZqkOAs6yRAEruVvX9Vbj1rdGHSc8QpbOA/FSZIhIsTsySOrufc3DPxjHimWo4zxIZMbdHwOiWvA6FB3bZhQ==",
"requires": {
"async": "^2.1.1",
"colors": "^1.1.2",
@@ -7628,12 +9151,9 @@
"dev": true
},
"get-port": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.0.0.tgz",
- "integrity": "sha512-imzMU0FjsZqNa6BqOjbbW6w5BivHIuQKopjpPqcnx0AVHJQKCxK1O+Ab3OrVXhrekqfVMjwA9ZYu062R+KcIsQ==",
- "requires": {
- "type-fest": "^0.3.0"
- }
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
+ "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ=="
},
"get-stdin": {
"version": "6.0.0",
@@ -7884,9 +9404,9 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
- "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
},
"has-value": {
"version": "1.0.0",
@@ -7942,9 +9462,9 @@
"dev": true
},
"helmet": {
- "version": "3.21.1",
- "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.1.tgz",
- "integrity": "sha512-IC/54Lxvvad2YiUdgLmPlNFKLhNuG++waTF5KPYq/Feo3NNhqMFbcLAlbVkai+9q0+4uxjxGPJ9bNykG+3zZNg==",
+ "version": "3.21.2",
+ "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.2.tgz",
+ "integrity": "sha512-okUo+MeWgg00cKB8Csblu8EXgcIoDyb5ZS/3u0W4spCimeVuCUvVZ6Vj3O2VJ1Sxpyb8jCDvzu0L1KKT11pkIg==",
"requires": {
"depd": "2.0.0",
"dns-prefetch-control": "0.2.0",
@@ -7953,7 +9473,7 @@
"feature-policy": "0.3.0",
"frameguard": "3.1.0",
"helmet-crossdomain": "0.4.0",
- "helmet-csp": "2.9.2",
+ "helmet-csp": "2.9.4",
"hide-powered-by": "1.1.0",
"hpkp": "2.0.0",
"hsts": "2.2.0",
@@ -7976,11 +9496,11 @@
"integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA=="
},
"helmet-csp": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.2.tgz",
- "integrity": "sha512-Lt5WqNfbNjEJ6ysD4UNpVktSyjEKfU9LVJ1LaFmPfYseg/xPealPfgHhtqdAdjPDopp5zbg/VWCyp4cluMIckw==",
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.4.tgz",
+ "integrity": "sha512-qUgGx8+yk7Xl8XFEGI4MFu1oNmulxhQVTlV8HP8tV3tpfslCs30OZz/9uQqsWPvDISiu/NwrrCowsZBhFADYqg==",
"requires": {
- "bowser": "^2.6.1",
+ "bowser": "^2.7.0",
"camelize": "1.0.0",
"content-security-policy-builder": "2.1.0",
"dasherize": "2.0.0"
@@ -8001,6 +9521,14 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
+ "hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
"home-or-tmp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
@@ -8198,27 +9726,13 @@
}
},
"import-fresh": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
- "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "dev": true,
"requires": {
- "caller-path": "^2.0.0",
- "resolve-from": "^3.0.0"
- },
- "dependencies": {
- "caller-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
- "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
- "requires": {
- "caller-callsite": "^2.0.0"
- }
- },
- "resolve-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
- "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
- }
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
}
},
"import-from": {
@@ -8277,23 +9791,23 @@
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"inquirer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz",
- "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
"dev": true,
"requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
"cli-cursor": "^2.1.0",
"cli-width": "^2.0.0",
- "external-editor": "^2.1.0",
+ "external-editor": "^3.0.3",
"figures": "^2.0.0",
- "lodash": "^4.3.0",
+ "lodash": "^4.17.12",
"mute-stream": "0.0.7",
"run-async": "^2.2.0",
- "rxjs": "^5.5.2",
+ "rxjs": "^6.4.0",
"string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
+ "strip-ansi": "^5.1.0",
"through": "^2.3.6"
},
"dependencies": {
@@ -8303,13 +9817,42 @@
"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=",
+ "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": {
- "ansi-regex": "^3.0.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.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==",
+ "dev": true
+ }
}
}
}
@@ -8427,9 +9970,9 @@
"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=="
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="
},
"is-ci": {
"version": "1.2.1",
@@ -8459,9 +10002,9 @@
}
},
"is-date-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
- "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
},
"is-descriptor": {
"version": "0.1.6",
@@ -8551,11 +10094,11 @@
}
},
"is-nan": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.2.1.tgz",
- "integrity": "sha1-n69ltvttskt/XAYoR16nH5iEAeI=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.0.tgz",
+ "integrity": "sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ==",
"requires": {
- "define-properties": "^1.1.1"
+ "define-properties": "^1.1.3"
}
},
"is-npm": {
@@ -8583,10 +10126,9 @@
}
},
"is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
+ "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": "1.0.0",
@@ -8649,11 +10191,11 @@
"dev": true
},
"is-regex": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
- "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
"requires": {
- "has": "^1.0.1"
+ "has": "^1.0.3"
}
},
"is-relative": {
@@ -8664,16 +10206,10 @@
"is-unc-path": "^1.0.0"
}
},
- "is-resolvable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
- "dev": true
- },
"is-retry-allowed": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
- "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "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": {
@@ -8682,12 +10218,18 @@
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
+ "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==",
+ "dev": true
+ },
"is-symbol": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
- "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "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.0"
+ "has-symbols": "^1.0.1"
}
},
"is-typedarray": {
@@ -8703,11 +10245,6 @@
"unc-path-regex": "^0.1.2"
}
},
- "is-what": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.4.0.tgz",
- "integrity": "sha512-oFdBRuSY9PocqPoUUseDXek4I+A1kWGigZGhuG+7GEkp0tRkek11adc0HbTEVsNvtojV7rp0uhf5LWtGvHzoOQ=="
- },
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
@@ -8724,9 +10261,9 @@
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isbot": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/isbot/-/isbot-2.2.2.tgz",
- "integrity": "sha512-1kMG8kSCLndCCUyXf1Wx/ra9UOU+EookKPKk+7Tx1Dk1jwoXvOD1udPR3eA0eMd20gEcyowzXTueA9j6Kiyh9Q=="
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/isbot/-/isbot-2.5.4.tgz",
+ "integrity": "sha512-JvPtkOipSVVu7g/pKOwl+RHh6pq/3faeJ6h+v6HcRnBjkSiLIPVJkMqtIC7DUMav0rU72I9ruHHmlNmPTDo6Sw=="
},
"isexe": {
"version": "2.0.0",
@@ -8763,9 +10300,9 @@
}
},
"js-cookie": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz",
- "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s="
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
+ "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
},
"js-levenshtein": {
"version": "1.1.6",
@@ -8862,12 +10399,13 @@
}
},
"jsx-ast-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz",
- "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
+ "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
"dev": true,
"requires": {
- "array-includes": "^3.0.3"
+ "array-includes": "^3.0.3",
+ "object.assign": "^4.1.0"
}
},
"just-extend": {
@@ -8980,6 +10518,21 @@
"resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz",
"integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA="
},
+ "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==",
+ "dev": true
+ },
+ "levenary": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz",
+ "integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==",
+ "dev": true,
+ "requires": {
+ "leven": "^3.1.0"
+ }
+ },
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@@ -9155,12 +10708,6 @@
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
},
- "lodash.unescape": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
- "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=",
- "dev": true
- },
"log-symbols": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
@@ -9198,11 +10745,19 @@
}
},
"make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "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": "^3.0.0"
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ }
}
},
"make-iterator": {
@@ -9268,16 +10823,16 @@
"safe-buffer": "^5.1.2"
}
},
+ "meant": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz",
+ "integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg=="
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
- "memoize-one": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz",
- "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA=="
- },
"memoizerific": {
"version": "1.11.3",
"resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
@@ -9295,14 +10850,6 @@
"readable-stream": "^2.0.1"
}
},
- "merge-anything": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.4.tgz",
- "integrity": "sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ==",
- "requires": {
- "is-what": "^3.3.1"
- }
- },
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -9601,9 +11148,9 @@
}
},
"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=="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"mute-stream": {
"version": "0.0.7",
@@ -9665,19 +11212,19 @@
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
},
"neo4j-driver": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/neo4j-driver/-/neo4j-driver-1.7.5.tgz",
- "integrity": "sha512-xCD2F5+tp/SD9r5avX5bSoY8u8RH2o793xJ9Ikjz1s5qQy7cFxFbbj2c52uz3BVGhRAx/NmB57VjOquYmmxGtw==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/neo4j-driver/-/neo4j-driver-1.7.6.tgz",
+ "integrity": "sha512-6c3ALO3vYDfUqNoCy8OFzq+fQ7q/ab3LCuJrmm8P04M7RmyRCCnUtJ8IzSTGbiZvyhcehGK+azNDAEJhxPV/hA==",
"requires": {
- "@babel/runtime": "^7.4.4",
+ "@babel/runtime": "^7.5.5",
"text-encoding-utf-8": "^1.0.2",
"uri-js": "^4.2.2"
}
},
"next": {
- "version": "9.1.7",
- "resolved": "https://registry.npmjs.org/next/-/next-9.1.7.tgz",
- "integrity": "sha512-qG6TsPl7ANuNPFhKq/1Pd4pAf24QCmUAjc0P8qYrSSsbwNIco1KNNXOyZajV/YlqBjBy/fCrZoErKK3zEUVz6w==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/next/-/next-9.2.0.tgz",
+ "integrity": "sha512-c4gyJotZHuvq9dslum+Z2Z21jjb9qWMYybV+IS9yEg7hTjs8OyKU59snyJ1Bi0ul84OdyLOZ4ytjch9zMw9lEQ==",
"requires": {
"@ampproject/toolbox-optimizer": "1.1.1",
"@babel/core": "7.7.2",
@@ -9703,6 +11250,7 @@
"babel-plugin-syntax-jsx": "6.18.0",
"babel-plugin-transform-define": "2.0.0",
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
+ "browserslist": "4.8.3",
"cache-loader": "4.1.0",
"chalk": "2.4.2",
"ci-info": "2.0.0",
@@ -9765,11 +11313,11 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
"requires": {
- "@babel/highlight": "^7.0.0"
+ "@babel/highlight": "^7.8.3"
}
},
"@babel/core": {
@@ -9801,11 +11349,11 @@
}
},
"@babel/generator": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz",
- "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
+ "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
"requires": {
- "@babel/types": "^7.7.4",
+ "@babel/types": "^7.8.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
@@ -9818,184 +11366,71 @@
}
}
},
- "@babel/helper-annotate-as-pure": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz",
- "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==",
- "requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz",
- "integrity": "sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==",
- "requires": {
- "@babel/helper-function-name": "^7.7.4",
- "@babel/helper-member-expression-to-functions": "^7.7.4",
- "@babel/helper-optimise-call-expression": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.7.4",
- "@babel/helper-split-export-declaration": "^7.7.4"
- }
- },
- "@babel/helper-define-map": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz",
- "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==",
- "requires": {
- "@babel/helper-function-name": "^7.7.4",
- "@babel/types": "^7.7.4",
- "lodash": "^4.17.13"
- }
- },
"@babel/helper-function-name": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz",
- "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
"requires": {
- "@babel/helper-get-function-arity": "^7.7.4",
- "@babel/template": "^7.7.4",
- "@babel/types": "^7.7.4"
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz",
- "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
"requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz",
- "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==",
- "requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz",
- "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==",
- "requires": {
- "@babel/types": "^7.7.4"
+ "@babel/types": "^7.8.3"
}
},
"@babel/helper-module-imports": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz",
- "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
"requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.7.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz",
- "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==",
- "requires": {
- "@babel/helper-module-imports": "^7.7.4",
- "@babel/helper-simple-access": "^7.7.4",
- "@babel/helper-split-export-declaration": "^7.7.4",
- "@babel/template": "^7.7.4",
- "@babel/types": "^7.7.4",
- "lodash": "^4.17.13"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz",
- "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==",
- "requires": {
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz",
- "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.7.4",
- "@babel/helper-wrap-function": "^7.7.4",
- "@babel/template": "^7.7.4",
- "@babel/traverse": "^7.7.4",
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz",
- "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==",
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.7.4",
- "@babel/helper-optimise-call-expression": "^7.7.4",
- "@babel/traverse": "^7.7.4",
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz",
- "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==",
- "requires": {
- "@babel/template": "^7.7.4",
- "@babel/types": "^7.7.4"
+ "@babel/types": "^7.8.3"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz",
- "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
"requires": {
- "@babel/types": "^7.7.4"
+ "@babel/types": "^7.8.3"
}
},
- "@babel/helper-wrap-function": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz",
- "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==",
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
"requires": {
- "@babel/helper-function-name": "^7.7.4",
- "@babel/template": "^7.7.4",
- "@babel/traverse": "^7.7.4",
- "@babel/types": "^7.7.4"
- }
- },
- "@babel/helpers": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz",
- "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==",
- "requires": {
- "@babel/template": "^7.7.4",
- "@babel/traverse": "^7.7.4",
- "@babel/types": "^7.7.4"
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz",
- "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw=="
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
+ "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
},
- "@babel/plugin-proposal-async-generator-functions": {
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
"version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz",
- "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz",
+ "integrity": "sha512-TbYHmr1Gl1UC7Vo2HVuj/Naci5BEGNZ0AJhzqD2Vpr6QPFWpUmBRLrIDjedzx7/CShq0bRDS2gI4FIs77VHLVQ==",
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-remap-async-to-generator": "^7.7.4",
- "@babel/plugin-syntax-async-generators": "^7.7.4"
- },
- "dependencies": {
- "@babel/plugin-syntax-async-generators": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz",
- "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- }
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.7.4"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz",
+ "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
}
},
"@babel/plugin-proposal-optional-chaining": {
@@ -10007,101 +11442,14 @@
"@babel/plugin-syntax-optional-chaining": "^7.7.4"
}
},
- "@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz",
- "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-syntax-typescript": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz",
- "integrity": "sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ==",
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
+ "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
}
},
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz",
- "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==",
- "requires": {
- "@babel/helper-module-imports": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-remap-async-to-generator": "^7.7.4"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz",
- "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz",
- "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.7.4",
- "@babel/helper-define-map": "^7.7.4",
- "@babel/helper-function-name": "^7.7.4",
- "@babel/helper-optimise-call-expression": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.7.4",
- "@babel/helper-split-export-declaration": "^7.7.4",
- "globals": "^11.1.0"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz",
- "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz",
- "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz",
- "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz",
- "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==",
- "requires": {
- "@babel/helper-function-name": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.7.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz",
- "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==",
- "requires": {
- "@babel/helper-module-transforms": "^7.7.5",
- "@babel/helper-plugin-utils": "^7.0.0",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
"@babel/plugin-transform-modules-commonjs": {
"version": "7.7.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz",
@@ -10113,77 +11461,6 @@
"babel-plugin-dynamic-import-node": "^2.3.0"
}
},
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz",
- "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==",
- "requires": {
- "@babel/helper-hoist-variables": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "babel-plugin-dynamic-import-node": "^2.3.0"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz",
- "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==",
- "requires": {
- "@babel/helper-module-transforms": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz",
- "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.7.4"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz",
- "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.7.4"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.7.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz",
- "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==",
- "requires": {
- "regenerator-transform": "^0.14.0"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz",
- "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
- "@babel/plugin-transform-typescript": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz",
- "integrity": "sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg==",
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-syntax-typescript": "^7.7.4"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz",
- "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.7.4",
- "@babel/helper-plugin-utils": "^7.0.0"
- }
- },
"@babel/preset-env": {
"version": "7.7.1",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.1.tgz",
@@ -10242,15 +11519,6 @@
"semver": "^5.5.0"
}
},
- "@babel/preset-typescript": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.7.2.tgz",
- "integrity": "sha512-1B4HthAelaLGfNRyrWqJtBEjXX1ulThCrLQ5B2VOtEAznWFIFXFJahgXImqppy66lx/Oh+cOSCQdJzZqh2Jh5g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-transform-typescript": "^7.7.2"
- }
- },
"@babel/runtime": {
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.2.tgz",
@@ -10260,25 +11528,25 @@
}
},
"@babel/traverse": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz",
- "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
+ "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
"requires": {
- "@babel/code-frame": "^7.5.5",
- "@babel/generator": "^7.7.4",
- "@babel/helper-function-name": "^7.7.4",
- "@babel/helper-split-export-declaration": "^7.7.4",
- "@babel/parser": "^7.7.4",
- "@babel/types": "^7.7.4",
+ "@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": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
- "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
"requires": {
"esutils": "^2.0.2",
"lodash": "^4.17.13",
@@ -10454,9 +11722,9 @@
}
},
"node-environment-flags": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
- "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
+ "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
"dev": true,
"requires": {
"object.getownpropertydescriptors": "^2.0.3",
@@ -10512,34 +11780,49 @@
"dev": true
},
"node-releases": {
- "version": "1.1.21",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.21.tgz",
- "integrity": "sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q==",
+ "version": "1.1.46",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.46.tgz",
+ "integrity": "sha512-YOjdx+Uoh9FbRO7yVYbnbt1puRWPQMemR3SutLeyv2XfxKs1ihpe0OLAUwBPEP2ImNH/PZC7SEiC6j32dwRZ7g==",
"requires": {
- "semver": "^5.3.0"
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
}
},
"nodemailer": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.3.0.tgz",
- "integrity": "sha512-TEHBNBPHv7Ie/0o3HXnb7xrPSSQmH1dXwQKRaMKDBGt/ZN54lvDVujP6hKkO/vjkIYL9rK8kHSG11+G42Nhxuw=="
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.2.tgz",
+ "integrity": "sha512-g0n4nH1ONGvqYo1v72uSWvF/MRNnnq1LzmSzXb/6EPF3LFb51akOhgG3K2+aETAsJx90/Q5eFNTntu4vBCwyQQ=="
},
"nodemon": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.1.tgz",
- "integrity": "sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg==",
+ "version": "1.19.4",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz",
+ "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==",
"dev": true,
"requires": {
- "chokidar": "^2.1.5",
- "debug": "^3.1.0",
+ "chokidar": "^2.1.8",
+ "debug": "^3.2.6",
"ignore-by-default": "^1.0.1",
"minimatch": "^3.0.4",
- "pstree.remy": "^1.1.6",
- "semver": "^5.5.0",
- "supports-color": "^5.2.0",
+ "pstree.remy": "^1.1.7",
+ "semver": "^5.7.1",
+ "supports-color": "^5.5.0",
"touch": "^3.1.0",
"undefsafe": "^2.0.2",
"update-notifier": "^2.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
}
},
"noms": {
@@ -10637,11 +11920,6 @@
"object-assign": "^4.1.0",
"strict-uri-encode": "^1.0.0"
}
- },
- "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="
}
}
},
@@ -10703,6 +11981,11 @@
}
}
},
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
+ },
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@@ -10749,36 +12032,36 @@
}
},
"object.entries": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz",
- "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
+ "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
- "es-abstract": "^1.12.0",
+ "es-abstract": "^1.17.0-next.1",
"function-bind": "^1.1.1",
"has": "^1.0.3"
}
},
"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==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
+ "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
"dev": true,
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.11.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
"function-bind": "^1.1.1",
- "has": "^1.0.1"
+ "has": "^1.0.3"
}
},
"object.getownpropertydescriptors": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
- "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
+ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
"requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.5.1"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
}
},
"object.map": {
@@ -10820,13 +12103,13 @@
}
},
"object.values": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
- "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
+ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
- "es-abstract": "^1.12.0",
+ "es-abstract": "^1.17.0-next.1",
"function-bind": "^1.1.1",
"has": "^1.0.3"
}
@@ -10866,17 +12149,17 @@
"integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw=="
},
"optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"dev": true,
"requires": {
"deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.4",
+ "fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
- "wordwrap": "~1.0.0"
+ "word-wrap": "~1.2.3"
}
},
"ora": {
@@ -10923,17 +12206,6 @@
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
- "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.11",
- "is-plain-obj": "^1.1.0",
- "mkdirp": "^0.5.1"
- }
- },
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
@@ -10961,9 +12233,9 @@
"integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
},
"p-queue": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.1.1.tgz",
- "integrity": "sha512-R9gq36Th88xZ+rWAptN5IXLwqkwA1gagCQhT6ZXQ6RxEfmjb9ZW+UBzRVqv9sm5TQmbbI/TsKgGLbOaA61xR5w==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.2.1.tgz",
+ "integrity": "sha512-wV8yC/rkuWpgu9LGKJIb48OynYSrE6lVl2Bx6r8WjbyVKrFAzzQ/QevAvwnDjlD+mLt8xy0LTDOU1freOvMTCg==",
"requires": {
"eventemitter3": "^4.0.0",
"p-timeout": "^3.1.0"
@@ -11121,9 +12393,9 @@
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
},
"passport": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz",
- "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
+ "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
"requires": {
"passport-strategy": "1.x.x",
"pause": "0.0.1"
@@ -11263,14 +12535,15 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"pg": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/pg/-/pg-7.12.1.tgz",
- "integrity": "sha512-l1UuyfEvoswYfcUe6k+JaxiN+5vkOgYcVSbSuw3FvdLqDbaoa2RJo1zfJKfPsSYPFVERd4GHvX3s2PjG1asSDA==",
+ "version": "7.17.1",
+ "resolved": "https://registry.npmjs.org/pg/-/pg-7.17.1.tgz",
+ "integrity": "sha512-SYWEip6eADsgDQIZk0bmB2JDOrC8Xu6z10KlhlXl03NSomwVmHB6ZTVyDCwOfT6bXHI8QndJdk5XxSSRXikaSA==",
"requires": {
"buffer-writer": "2.0.0",
"packet-reader": "1.0.0",
"pg-connection-string": "0.1.3",
- "pg-pool": "^2.0.4",
+ "pg-packet-stream": "^1.1.0",
+ "pg-pool": "^2.0.9",
"pg-types": "^2.1.0",
"pgpass": "1.x",
"semver": "4.3.2"
@@ -11294,26 +12567,31 @@
"integrity": "sha512-bhlV7Eq09JrRIvo1eKngpwuqKtJnNhZdpdOlvrPrA4dxqXPjxSrbNrfnIDmTpwMyRszrcV4kU5ZA4mMsQUrjdg=="
},
"pg-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.0.0.tgz",
- "integrity": "sha512-/gYHadqLurektHk6HXiL0hSrn+RZfowkLr+ftC0lLoLBlIm8JIdk9f9g71EEjK63XxqhFqcykHuxQLFzSeyzdQ=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.1.3.tgz",
+ "integrity": "sha512-DdI59QNiQI2n0qLjeVGRpnLERII0qvjEnPsujA7xJE+aEZYb0km2VzUu3qI7hapc3EasuUMuCSEh2sbStjrJww=="
},
"pg-int8": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
},
+ "pg-packet-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz",
+ "integrity": "sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg=="
+ },
"pg-pool": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.7.tgz",
- "integrity": "sha512-UiJyO5B9zZpu32GSlP0tXy8J2NsJ9EFGFfz5v6PSbdz/1hBLX1rNiiy5+mAm5iJJYwfCv4A0EBcQLGWwjbpzZw=="
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.9.tgz",
+ "integrity": "sha512-gNiuIEKNCT3OnudQM2kvgSnXsLkSpd6mS/fRnqs6ANtrke6j8OY5l9mnAryf1kgwJMWLg0C1N1cYTZG1xmEYHQ=="
},
"pg-query-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pg-query-stream/-/pg-query-stream-2.0.0.tgz",
- "integrity": "sha512-EInD7AOhnJVFIgN8BSEbKA6MKyn20dDGPsJEuhxiNaWpmveNgnmn3W1BmYm9pa6LakioR/WTi7ecWA44GBRKig==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/pg-query-stream/-/pg-query-stream-2.1.2.tgz",
+ "integrity": "sha512-xdF/xpn6foUk9HL1ptdP4NwZ2bzKuU0UldvkZ6++vAzNSIL+RBBmhgb59XA1vR2+TwCmFXskVwRz1876+0LH7Q==",
"requires": {
- "pg-cursor": "2.0.0"
+ "pg-cursor": "^2.1.2"
}
},
"pg-types": {
@@ -11368,6 +12646,37 @@
"node-modules-regexp": "^1.0.0"
}
},
+ "pkg-conf": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
+ "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
+ "requires": {
+ "find-up": "^2.0.0",
+ "load-json-file": "^4.0.0"
+ },
+ "dependencies": {
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "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"
+ }
+ }
+ }
+ },
"pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -11429,12 +12738,6 @@
"resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz",
"integrity": "sha1-cjnEKl72wwuPMoQ52bn/cQQkkPg="
},
- "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
- },
"pnp-webpack-plugin": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz",
@@ -11726,6 +13029,15 @@
"parse-json": "^4.0.0"
}
},
+ "import-fresh": {
+ "version": "2.0.0",
+ "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"
+ }
+ },
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@@ -11734,6 +13046,11 @@
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
}
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
}
}
},
@@ -11897,38 +13214,10 @@
"postcss-selector-not": "^4.0.0"
},
"dependencies": {
- "browserslist": {
- "version": "4.8.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz",
- "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==",
- "requires": {
- "caniuse-lite": "^1.0.30001017",
- "electron-to-chromium": "^1.3.322",
- "node-releases": "^1.1.44"
- }
- },
"caniuse-lite": {
- "version": "1.0.30001019",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001019.tgz",
- "integrity": "sha512-6ljkLtF1KM5fQ+5ZN0wuyVvvebJxgJPTmScOMaFuQN2QuOzvRJnWSKfzQskQU5IOU4Gap3zasYPIinzwUjoj/g=="
- },
- "electron-to-chromium": {
- "version": "1.3.327",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz",
- "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg=="
- },
- "node-releases": {
- "version": "1.1.44",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz",
- "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==",
- "requires": {
- "semver": "^6.3.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ "version": "1.0.30001021",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz",
+ "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g=="
}
}
},
@@ -11995,9 +13284,9 @@
}
},
"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=="
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
+ "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ=="
},
"postcss-values-parser": {
"version": "2.0.1",
@@ -12100,12 +13389,12 @@
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
},
"promise.prototype.finally": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.1.tgz",
- "integrity": "sha512-gnt8tThx0heJoI3Ms8a/JdkYBVhYP/wv+T7yQimR+kdOEJL21xTFbiJhMRqnSPcr54UVvMbsscDk2w+ivyaLPw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz",
+ "integrity": "sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA==",
"requires": {
"define-properties": "^1.1.3",
- "es-abstract": "^1.13.0",
+ "es-abstract": "^1.17.0-next.0",
"function-bind": "^1.1.1"
}
},
@@ -12160,9 +13449,9 @@
"integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g=="
},
"pstree.remy": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz",
- "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz",
+ "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==",
"dev": true
},
"public-encrypt": {
@@ -12244,13 +13533,20 @@
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
"query-string": {
- "version": "6.9.0",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.9.0.tgz",
- "integrity": "sha512-KG4bhCFYapExLsUHrFt+kQVEegF2agm4cpF/VNc6pZVthIfCc/GK8t8VyNIE3nyXG9DK3Tf2EGkxjR6/uRdYsA==",
+ "version": "6.10.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.10.1.tgz",
+ "integrity": "sha512-SHTUV6gDlgMXg/AQUuLpTiBtW/etZ9JT6k6RCtCyqADquApLX0Aq5oK/s5UeTUAWBG50IExjIr587GqfXRfM4A==",
"requires": {
"decode-uri-component": "^0.2.0",
"split-on-first": "^1.0.0",
"strict-uri-encode": "^2.0.0"
+ },
+ "dependencies": {
+ "strict-uri-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
+ "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
+ }
}
},
"querystring": {
@@ -12324,6 +13620,13 @@
"stack-trace": "0.0.10",
"timed-out": "4.0.1",
"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=="
+ }
}
},
"raw-body": {
@@ -12350,34 +13653,33 @@
}
},
"react": {
- "version": "16.8.6",
- "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz",
- "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==",
+ "version": "16.12.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz",
+ "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.13.6"
+ "prop-types": "^15.6.2"
}
},
"react-copy-to-clipboard": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.1.tgz",
- "integrity": "sha512-ELKq31/E3zjFs5rDWNCfFL4NvNFQvGRoJdAKReD/rUPA+xxiLPQmZBZBvy2vgH7V0GE9isIQpT9WXbwIVErYdA==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz",
+ "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==",
"requires": {
"copy-to-clipboard": "^3",
"prop-types": "^15.5.8"
}
},
"react-dom": {
- "version": "16.8.6",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz",
- "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==",
+ "version": "16.12.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz",
+ "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
- "scheduler": "^0.13.6"
+ "scheduler": "^0.18.0"
}
},
"react-error-overlay": {
@@ -12391,9 +13693,9 @@
"integrity": "sha512-oC4j6rJfEoIbDVlz0KAcgdn/EH6/UYlzfUaeaFDXplMACqSIPReGPPkSi9g1Q3Kd3KvCpMF67XzseanPLSrRYw=="
},
"react-ga": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-2.5.7.tgz",
- "integrity": "sha512-UmATFaZpEQDO96KFjB5FRLcT6hFcwaxOmAJZnjrSiFN/msTqylq9G+z5Z8TYzN/dbamDTiWf92m6MnXXJkAivQ=="
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-2.7.0.tgz",
+ "integrity": "sha512-AjC7UOZMvygrWTc2hKxTDvlMXEtbmA0IgJjmkhgmQQ3RkXrWR11xEagLGFGaNyaPnmg24oaIiaNPnEoftUhfXA=="
},
"react-inlinesvg": {
"version": "1.2.0",
@@ -12426,9 +13728,9 @@
}
},
"react-smooth": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.2.tgz",
- "integrity": "sha512-pIGzL1g9VGAsRsdZQokIK0vrCkcdKtnOnS1gyB2rrowdLy69lNSWoIjCTWAfgbiYvria8tm5hEZqj+jwXMkV4A==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.5.tgz",
+ "integrity": "sha512-eW057HT0lFgCKh8ilr0y2JaH2YbNcuEdFpxyg7Gf/qDKk9hqGMyXryZJ8iMGJEuKH0+wxS0ccSsBBB3W8yCn8w==",
"requires": {
"lodash": "~4.17.4",
"prop-types": "^15.6.0",
@@ -12445,9 +13747,9 @@
}
},
"react-tooltip": {
- "version": "3.11.1",
- "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.11.1.tgz",
- "integrity": "sha512-YCMVlEC2KuHIzOQhPplTK5jmBBwoL+PYJJdJKXj7M/h7oevupd/QSVq6z5U7/ehIGXyHsAqvwpdxexDfyQ0o3A==",
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.11.2.tgz",
+ "integrity": "sha512-7EJ7Cv7lgctw02j0hyp+PpJklIP3gyDbm4CvVQvq7U6zgZtuI+bFFnRzsQB1oTiHPkkhE2NU04EIkgBDiVNzxw==",
"requires": {
"classnames": "^2.2.5",
"prop-types": "^15.6.0"
@@ -12465,9 +13767,9 @@
}
},
"react-use-form-state": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/react-use-form-state/-/react-use-form-state-0.12.0.tgz",
- "integrity": "sha512-9/TQHnHYyx6jBk3/BINJd6xyGDiCLUNQixhG4P2GsgFjZOtPn0vXh4yZyt21zJjUwHWruDo3MtBvoiDs48S9pA=="
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/react-use-form-state/-/react-use-form-state-0.12.1.tgz",
+ "integrity": "sha512-umRm8m3DzscibP7nfC/d95UJ7NhDfF7UbvBvCzds5z52NmZUzgnZsETTYs95h6dqlvl5+BcIcCjXh9LIxDhJ7g=="
},
"read-pkg": {
"version": "2.0.0",
@@ -12514,27 +13816,34 @@
}
},
"recharts": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/recharts/-/recharts-1.6.2.tgz",
- "integrity": "sha512-NqVN8Hq5wrrBthTxQB+iCnZjup1dc+AYRIB6Q9ck9UjdSJTt4PbLepGpudQEYJEN5iIpP/I2vThC4uiTJa7xUQ==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-1.8.5.tgz",
+ "integrity": "sha512-tM9mprJbXVEBxjM7zHsIy6Cc41oO/pVYqyAsOHLxlJrbNBuLs0PHB3iys2M+RqCF0//k8nJtZF6X6swSkWY3tg==",
"requires": {
"classnames": "^2.2.5",
- "core-js": "^2.5.1",
+ "core-js": "^2.6.10",
"d3-interpolate": "^1.3.0",
"d3-scale": "^2.1.0",
"d3-shape": "^1.2.0",
"lodash": "^4.17.5",
"prop-types": "^15.6.0",
"react-resize-detector": "^2.3.0",
- "react-smooth": "^1.0.0",
+ "react-smooth": "^1.0.5",
"recharts-scale": "^0.4.2",
"reduce-css-calc": "^1.3.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
+ }
}
},
"recharts-scale": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.2.tgz",
- "integrity": "sha512-p/cKt7j17D1CImLgX2f5+6IXLbRHGUQkogIp06VUoci/XkhOQiGSzUrsD1uRmiI7jha4u8XNFOjkHkzzBPivMg==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.3.tgz",
+ "integrity": "sha512-t8p5sccG9Blm7c1JQK/ak9O8o95WGhNXD7TXg/BW5bYbVlr6eCeRBNpgyigD4p6pSSMehC5nSvBUPj6F68rbFA==",
"requires": {
"decimal.js-light": "^2.4.1"
}
@@ -12590,18 +13899,20 @@
}
},
"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=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz",
+ "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
"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="
- }
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "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"
}
},
"redux-thunk": {
@@ -12650,9 +13961,9 @@
"integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
},
"regenerator-transform": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz",
- "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==",
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
+ "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
"requires": {
"private": "^0.1.6"
}
@@ -12676,25 +13987,19 @@
"safe-regex": "^1.1.0"
}
},
- "regexp-tree": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz",
- "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==",
- "dev": true
- },
"regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz",
+ "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==",
"dev": true
},
"regexpu-core": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz",
- "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==",
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
+ "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
"requires": {
"regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^8.0.2",
+ "regenerate-unicode-properties": "^8.1.0",
"regjsgen": "^0.5.0",
"regjsparser": "^0.6.0",
"unicode-match-property-ecmascript": "^1.0.4",
@@ -12721,14 +14026,14 @@
}
},
"regjsgen": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
- "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA=="
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg=="
},
"regjsparser": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
- "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz",
+ "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==",
"requires": {
"jsesc": "~0.5.0"
},
@@ -12816,16 +14121,6 @@
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"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.0"
- }
- },
"resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -12849,9 +14144,9 @@
}
},
"resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"resolve-url": {
@@ -12920,20 +14215,12 @@
}
},
"rxjs": {
- "version": "5.5.12",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
- "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
+ "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
"dev": true,
"requires": {
- "symbol-observable": "1.0.1"
- },
- "dependencies": {
- "symbol-observable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
- "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
- "dev": true
- }
+ "tslib": "^1.9.0"
}
},
"safe-buffer": {
@@ -12960,38 +14247,38 @@
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"scheduler": {
- "version": "0.13.6",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
- "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz",
+ "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"schema-utils": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz",
- "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==",
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz",
+ "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==",
"requires": {
"ajv": "^6.10.2",
"ajv-keywords": "^3.4.1"
},
"dependencies": {
"ajv": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
- "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz",
+ "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==",
"requires": {
- "fast-deep-equal": "^2.0.1",
+ "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.4.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
- "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
}
}
},
@@ -13043,6 +14330,11 @@
"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=="
}
}
},
@@ -13138,6 +14430,16 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
+ "signale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz",
+ "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==",
+ "requires": {
+ "chalk": "^2.3.2",
+ "figures": "^2.0.0",
+ "pkg-conf": "^2.1.0"
+ }
+ },
"sinon": {
"version": "6.3.5",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-6.3.5.tgz",
@@ -13162,11 +14464,13 @@
"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==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
"requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
"is-fullwidth-code-point": "^2.0.0"
}
},
@@ -13311,9 +14615,9 @@
}
},
"source-map-support": {
- "version": "0.5.12",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
- "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
+ "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -13486,9 +14790,9 @@
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
},
"strict-uri-encode": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
- "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
"string-hash": {
"version": "1.1.3",
@@ -13496,32 +14800,51 @@
"integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs="
},
"string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
+ "emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "strip-ansi": "^5.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=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "^4.1.0"
}
}
}
},
+ "string.prototype.trimleft": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
+ "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
+ "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -13565,22 +14888,19 @@
}
},
"styled-components": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.4.1.tgz",
- "integrity": "sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.0.0.tgz",
+ "integrity": "sha512-F7VhIXIbUXJ8KO3pU9wap2Hxdtqa6PZ1uHrx+YXTgRjyxGlwvBHb8LULXPabmDA+uEliTXRJM5WcZntJnKNn3g==",
"requires": {
"@babel/helper-module-imports": "^7.0.0",
- "@babel/traverse": "^7.0.0",
- "@emotion/is-prop-valid": "^0.8.1",
- "@emotion/unitless": "^0.7.0",
+ "@babel/traverse": "^7.4.5",
+ "@emotion/is-prop-valid": "^0.8.3",
+ "@emotion/stylis": "^0.8.4",
+ "@emotion/unitless": "^0.7.4",
"babel-plugin-styled-components": ">= 1",
- "css-to-react-native": "^2.2.2",
- "memoize-one": "^5.0.0",
- "merge-anything": "^2.2.4",
- "prop-types": "^15.5.4",
- "react-is": "^16.6.0",
- "stylis": "^3.5.0",
- "stylis-rule-sheet": "^0.0.10",
+ "css-to-react-native": "^3.0.0",
+ "hoist-non-react-statics": "^3.0.0",
+ "shallowequal": "^1.1.0",
"supports-color": "^5.5.0"
}
},
@@ -13698,17 +15018,35 @@
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
},
"table": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
- "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
"dev": true,
"requires": {
- "ajv": "^6.0.1",
- "ajv-keywords": "^3.0.0",
- "chalk": "^2.1.0",
- "lodash": "^4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "^2.1.1"
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz",
+ "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==",
+ "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"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ }
}
},
"tapable": {
@@ -13785,81 +15123,11 @@
"worker-farm": "^1.7.0"
},
"dependencies": {
- "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"
- }
- },
- "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"
- }
- },
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
},
- "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"
- }
- },
- "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"
- }
- },
- "p-limit": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
- "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
- "requires": {
- "p-try": "^2.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"
- }
- },
- "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=="
- },
- "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"
- }
- },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -14034,7 +15302,8 @@
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
- "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
},
"ts-pnp": {
"version": "1.1.5",
@@ -14042,14 +15311,14 @@
"integrity": "sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA=="
},
"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=="
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.6.tgz",
+ "integrity": "sha512-zrLyrOg3LQlRi40hP8MHEXXlqkejYjBkX6U3ATY/NyBt0IRbYAJs8QG2meHV1HoRiTBMIgMav8ICu/IxOK4QCQ=="
},
"tslib": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
- "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
},
"tsutils": {
"version": "3.17.1",
@@ -14093,11 +15362,6 @@
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
- "type-fest": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
- "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ=="
- },
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -14121,9 +15385,9 @@
}
},
"typescript": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz",
- "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==",
+ "version": "3.7.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz",
+ "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==",
"dev": true
},
"tz-offset": {
@@ -14290,9 +15554,9 @@
"dev": true
},
"upath": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
- "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
},
"update-notifier": {
"version": "2.5.0",
@@ -14424,12 +15688,14 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
+ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
"requires": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.2",
+ "has-symbols": "^1.0.1",
+ "object.getownpropertydescriptors": "^2.1.0"
}
},
"utils-merge": {
@@ -14438,9 +15704,9 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"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=="
},
"v8flags": {
"version": "3.1.3",
@@ -14533,20 +15799,29 @@
},
"dependencies": {
"ajv": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
- "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz",
+ "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==",
"requires": {
- "fast-deep-equal": "^2.0.1",
+ "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.4.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
- "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+ "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"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
},
"schema-utils": {
"version": "1.0.0",
@@ -14663,12 +15938,39 @@
"dev": true,
"requires": {
"string-width": "^2.1.1"
+ },
+ "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
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ }
}
},
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "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==",
"dev": true
},
"worker-farm": {
@@ -14687,29 +15989,57 @@
"microevent.ts": "~0.1.1"
}
},
+ "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==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.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==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
"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=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
"dev": true,
"requires": {
"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,
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz",
+ "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==",
"requires": {
- "graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
}
},
"x-xss-protection": {
@@ -14724,9 +16054,9 @@
"dev": true
},
"xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"y18n": {
"version": "4.0.0",
@@ -14774,12 +16104,6 @@
"yargs-parser": "^13.1.1"
},
"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==",
- "dev": true
- },
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -14800,9 +16124,9 @@
}
},
"p-limit": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
- "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
+ "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
@@ -14822,26 +16146,6 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
- },
- "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==",
- "dev": true,
- "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==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
}
}
},
@@ -14853,14 +16157,6 @@
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- }
}
},
"yauzl": {
diff --git a/package.json b/package.json
index 0d8c7ed..f19da66 100644
--- a/package.json
+++ b/package.json
@@ -32,120 +32,122 @@
},
"homepage": "https://github.com/TheDevs-Network/kutt#readme",
"dependencies": {
- "axios": "^0.19.0",
+ "axios": "^0.19.1",
"babel-plugin-inline-react-svg": "^1.1.0",
"bcryptjs": "^2.4.3",
- "bull": "^3.11.0",
+ "bull": "^3.12.1",
"cookie-parser": "^1.4.4",
"cors": "^2.8.5",
- "date-fns": "^2.4.1",
- "dotenv": "^8.0.0",
- "easy-peasy": "^3.2.3",
+ "date-fns": "^2.9.0",
+ "dotenv": "^8.2.0",
+ "easy-peasy": "^3.3.0",
"email-validator": "^1.2.3",
+ "envalid": "^6.0.0",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
"express-validator": "^6.3.1",
- "geoip-lite": "^1.3.8",
- "helmet": "^3.21.1",
- "isbot": "^2.2.1",
- "js-cookie": "^2.2.0",
+ "geoip-lite": "^1.4.0",
+ "helmet": "^3.21.2",
+ "isbot": "^2.5.4",
+ "js-cookie": "^2.2.1",
"jsonwebtoken": "^8.4.0",
"jwt-decode": "^2.2.0",
"knex": "^0.19.5",
"morgan": "^1.9.1",
- "ms": "^2.1.1",
+ "ms": "^2.1.2",
"nanoid": "^1.3.4",
- "neo4j-driver": "^1.7.5",
- "next": "^9.1.7",
+ "neo4j-driver": "^1.7.6",
+ "next": "^9.2.0",
"node-cron": "^2.0.3",
- "nodemailer": "^6.3.0",
- "p-queue": "^6.1.1",
- "passport": "^0.4.0",
+ "nodemailer": "^6.4.2",
+ "p-queue": "^6.2.1",
+ "passport": "^0.4.1",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
"passport-localapikey-update": "^0.6.0",
- "pg": "^7.12.1",
- "pg-query-stream": "^2.0.0",
+ "pg": "^7.17.1",
+ "pg-query-stream": "^2.1.2",
"prop-types": "^15.7.2",
"qrcode.react": "^0.8.0",
- "query-string": "^6.9.0",
+ "query-string": "^6.10.1",
"raven": "^2.6.4",
- "react": "^16.8.1",
- "react-copy-to-clipboard": "^5.0.1",
- "react-dom": "^16.8.1",
- "react-ga": "^2.5.7",
+ "react": "^16.12.0",
+ "react-copy-to-clipboard": "^5.0.2",
+ "react-dom": "^16.12.0",
+ "react-ga": "^2.7.0",
"react-inlinesvg": "^1.2.0",
"react-tippy": "^1.3.1",
- "react-tooltip": "^3.11.1",
- "react-use-form-state": "^0.12.0",
- "recharts": "^1.4.3",
+ "react-tooltip": "^3.11.2",
+ "react-use-form-state": "^0.12.1",
+ "recharts": "^1.8.5",
"redis": "^2.8.0",
"reflexbox": "^4.0.6",
- "styled-components": "^4.4.1",
+ "signale": "^1.4.0",
+ "styled-components": "^5.0.0",
"styled-tools": "^1.7.1",
"universal-analytics": "^0.4.20",
"url-regex": "^4.1.1",
"use-media": "^1.4.0",
"useragent": "^2.2.1",
- "uuid": "^3.3.2"
+ "uuid": "^3.4.0"
},
"devDependencies": {
- "@babel/cli": "^7.2.3",
- "@babel/core": "^7.2.2",
- "@babel/node": "^7.2.2",
- "@babel/preset-env": "^7.3.1",
- "@babel/register": "^7.0.0",
+ "@babel/cli": "^7.8.3",
+ "@babel/core": "^7.8.3",
+ "@babel/node": "^7.8.3",
+ "@babel/preset-env": "^7.8.3",
+ "@babel/register": "^7.8.3",
"@types/bcryptjs": "^2.4.2",
- "@types/body-parser": "^1.17.0",
- "@types/bull": "^3.10.5",
- "@types/cookie-parser": "^1.4.1",
- "@types/cors": "^2.8.5",
+ "@types/body-parser": "^1.17.1",
+ "@types/bull": "^3.12.0",
+ "@types/cookie-parser": "^1.4.2",
+ "@types/cors": "^2.8.6",
"@types/date-fns": "^2.6.0",
"@types/dotenv": "^4.0.3",
- "@types/express": "^4.16.0",
+ "@types/express": "^4.17.2",
"@types/helmet": "0.0.38",
"@types/jsonwebtoken": "^7.2.8",
"@types/jwt-decode": "^2.2.1",
- "@types/mongodb": "^3.1.17",
- "@types/morgan": "^1.7.36",
- "@types/ms": "^0.7.30",
+ "@types/mongodb": "^3.3.14",
+ "@types/morgan": "^1.7.37",
+ "@types/ms": "^0.7.31",
"@types/next": "^9.0.0",
"@types/node-cron": "^2.0.2",
- "@types/nodemailer": "^6.2.1",
- "@types/pg": "^7.11.0",
+ "@types/nodemailer": "^6.4.0",
+ "@types/pg": "^7.14.1",
"@types/pg-query-stream": "^1.0.3",
"@types/qrcode.react": "^1.0.0",
- "@types/react": "^16.9.16",
+ "@types/react": "^16.9.17",
"@types/react-dom": "^16.9.4",
"@types/react-tooltip": "^3.11.0",
- "@types/redis": "^2.8.10",
+ "@types/redis": "^2.8.14",
"@types/reflexbox": "^4.0.0",
"@types/styled-components": "^4.1.8",
- "@typescript-eslint/eslint-plugin": "^2.0.0",
- "@typescript-eslint/parser": "^2.0.0",
+ "@typescript-eslint/eslint-plugin": "^2.16.0",
+ "@typescript-eslint/parser": "^2.16.0",
"babel": "^6.23.0",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-eslint": "^8.2.6",
- "babel-plugin-styled-components": "^1.10.0",
+ "babel-plugin-styled-components": "^1.10.6",
"babel-preset-env": "^1.7.0",
"chai": "^4.1.2",
- "copyfiles": "^2.1.1",
+ "copyfiles": "^2.2.0",
"deep-freeze": "^0.0.1",
- "eslint": "^5.4.0",
+ "eslint": "^5.16.0",
"eslint-config-airbnb": "^16.1.0",
- "eslint-config-prettier": "^6.7.0",
- "eslint-plugin-import": "^2.16.0",
- "eslint-plugin-jsx-a11y": "^6.2.1",
+ "eslint-config-prettier": "^6.9.0",
+ "eslint-plugin-import": "^2.20.0",
+ "eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-prettier": "^3.1.2",
- "eslint-plugin-react": "^7.14.3",
+ "eslint-plugin-react": "^7.18.0",
"husky": "^0.15.0-rc.13",
"mocha": "^5.2.0",
"nock": "^9.3.3",
- "nodemon": "^1.18.10",
+ "nodemon": "^1.19.4",
"prettier": "^1.19.1",
"rimraf": "^3.0.0",
"sinon": "^6.0.0",
- "typescript": "^3.7.3"
+ "typescript": "^3.7.5"
}
}
diff --git a/server/controllers/linkController.ts b/server/__v1/controllers/linkController.ts
similarity index 88%
rename from server/controllers/linkController.ts
rename to server/__v1/controllers/linkController.ts
index c878c2e..22c8020 100644
--- a/server/controllers/linkController.ts
+++ b/server/__v1/controllers/linkController.ts
@@ -9,6 +9,7 @@ import urlRegex from "url-regex";
import { promisify } from "util";
import { deleteDomain, getDomain, setDomain } from "../db/domain";
import { addIP } from "../db/ip";
+import env from "../../env";
import {
banLink,
createShortLink,
@@ -18,9 +19,9 @@ import {
getStats,
getUserLinksCount
} from "../db/link";
-import transporter from "../mail/mail";
-import * as redis from "../redis";
-import { addProtocol, generateShortLink, getStatsCacheTime } from "../utils";
+import transporter from "../../mail/mail";
+import * as redis from "../../redis";
+import { addProtocol, generateShortLink, getStatsCacheTime } from "../../utils";
import {
checkBannedDomain,
checkBannedHost,
@@ -29,14 +30,14 @@ import {
preservedUrls,
urlCountsCheck
} from "./validateBodyController";
-import { visitQueue } from "../queues";
+import queue from "../../queues";
const dnsLookup = promisify(dns.lookup);
const generateId = async () => {
const address = generate(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
- Number(process.env.LINK_LENGTH) || 6
+ env.LINK_LENGTH
);
const link = await findLink({ address });
if (!link) return address;
@@ -49,9 +50,8 @@ export const shortener: Handler = async (req, res) => {
const targetDomain = URL.parse(target).hostname;
const queries = await Promise.all([
- process.env.GOOGLE_SAFE_BROWSING_KEY && cooldownCheck(req.user),
- process.env.GOOGLE_SAFE_BROWSING_KEY &&
- malwareCheck(req.user, req.body.target),
+ env.GOOGLE_SAFE_BROWSING_KEY && cooldownCheck(req.user),
+ env.GOOGLE_SAFE_BROWSING_KEY && malwareCheck(req.user, req.body.target),
req.user && urlCountsCheck(req.user),
req.user &&
req.body.reuse &&
@@ -101,7 +101,7 @@ export const shortener: Handler = async (req, res) => {
},
req.user
);
- if (!req.user && Number(process.env.NON_USER_COOLDOWN)) {
+ if (!req.user && env.NON_USER_COOLDOWN) {
addIP(req.realIP);
}
@@ -115,7 +115,7 @@ export const goToLink: Handler = async (req, res, next) => {
const { host } = req.headers;
const reqestedId = req.params.id || req.body.id;
const address = reqestedId.replace("+", "");
- const customDomain = host !== process.env.DEFAULT_DOMAIN && host;
+ const customDomain = host !== env.DEFAULT_DOMAIN && host;
const isBot = isbot(req.headers["user-agent"]);
let domain;
@@ -126,7 +126,7 @@ export const goToLink: Handler = async (req, res, next) => {
const link = await findLink({ address, domain_id: domain && domain.id });
if (!link) {
- if (host !== process.env.DEFAULT_DOMAIN) {
+ if (host !== env.DEFAULT_DOMAIN) {
if (!domain || !domain.homepage) return next();
return res.redirect(301, domain.homepage);
}
@@ -156,7 +156,7 @@ export const goToLink: Handler = async (req, res, next) => {
return res.status(401).json({ error: "Password is not correct" });
}
if (link.user_id && !isBot) {
- visitQueue.add({
+ queue.visit.add({
headers: req.headers,
realIP: req.realIP,
referrer: req.get("Referrer"),
@@ -168,7 +168,7 @@ export const goToLink: Handler = async (req, res, next) => {
}
if (link.user_id && !isBot) {
- visitQueue.add({
+ queue.visit.add({
headers: req.headers,
realIP: req.realIP,
referrer: req.get("Referrer"),
@@ -177,8 +177,8 @@ export const goToLink: Handler = async (req, res, next) => {
});
}
- if (process.env.GOOGLE_ANALYTICS_UNIVERSAL && !isBot) {
- const visitor = ua(process.env.GOOGLE_ANALYTICS_UNIVERSAL);
+ if (env.GOOGLE_ANALYTICS_UNIVERSAL && !isBot) {
+ const visitor = ua(env.GOOGLE_ANALYTICS_UNIVERSAL);
visitor
.pageview({
dp: `/${address}`,
@@ -210,7 +210,7 @@ export const setCustomDomain: Handler = async (req, res) => {
.status(400)
.json({ error: "Maximum custom domain length is 40." });
}
- if (customDomain === process.env.DEFAULT_DOMAIN) {
+ if (customDomain === env.DEFAULT_DOMAIN) {
return res.status(400).json({ error: "You can't use default domain." });
}
const isValidHomepage =
@@ -260,7 +260,7 @@ export const deleteCustomDomain: Handler = async (req, res) => {
export const customDomainRedirection: Handler = async (req, res, next) => {
const { headers, path } = req;
if (
- headers.host !== process.env.DEFAULT_DOMAIN &&
+ headers.host !== env.DEFAULT_DOMAIN &&
(path === "/" ||
preservedUrls
.filter(l => l !== "url-password")
@@ -269,8 +269,7 @@ export const customDomainRedirection: Handler = async (req, res, next) => {
const domain = await getDomain({ address: headers.host });
return res.redirect(
301,
- (domain && domain.homepage) ||
- `https://${process.env.DEFAULT_DOMAIN + path}`
+ (domain && domain.homepage) || `https://${env.DEFAULT_DOMAIN + path}`
);
}
return next();
@@ -285,7 +284,7 @@ export const deleteUserLink: Handler = async (req, res) => {
const response = await deleteLink({
address: id,
- domain: !domain || domain === process.env.DEFAULT_DOMAIN ? null : domain,
+ domain: !domain || domain === env.DEFAULT_DOMAIN ? null : domain,
user_id: req.user.id
});
@@ -302,8 +301,7 @@ export const getLinkStats: Handler = async (req, res) => {
}
const { hostname } = URL.parse(req.query.domain);
- const hasCustomDomain =
- req.query.domain && hostname !== process.env.DEFAULT_DOMAIN;
+ const hasCustomDomain = req.query.domain && hostname !== env.DEFAULT_DOMAIN;
const customDomain = hasCustomDomain
? (await getDomain({ address: req.query.domain })) || ({ id: -1 } as Domain)
: ({} as Domain);
@@ -341,15 +339,15 @@ export const reportLink: Handler = async (req, res) => {
}
const { hostname } = URL.parse(req.body.link);
- if (hostname !== process.env.DEFAULT_DOMAIN) {
+ if (hostname !== env.DEFAULT_DOMAIN) {
return res.status(400).json({
- error: `You can only report a ${process.env.DEFAULT_DOMAIN} link`
+ error: `You can only report a ${env.DEFAULT_DOMAIN} link`
});
}
const mail = await transporter.sendMail({
- from: process.env.MAIL_USER,
- to: process.env.REPORT_MAIL,
+ from: env.MAIL_USER,
+ to: env.REPORT_MAIL,
subject: "[REPORT]",
text: req.body.link,
html: req.body.link
diff --git a/server/controllers/validateBodyController.ts b/server/__v1/controllers/validateBodyController.ts
similarity index 91%
rename from server/controllers/validateBodyController.ts
rename to server/__v1/controllers/validateBodyController.ts
index 9d517cf..a445a7d 100644
--- a/server/controllers/validateBodyController.ts
+++ b/server/__v1/controllers/validateBodyController.ts
@@ -1,19 +1,20 @@
-import { RequestHandler } from "express";
-import { promisify } from "util";
-import dns from "dns";
-import axios from "axios";
-import URL from "url";
-import urlRegex from "url-regex";
-import { body } from "express-validator";
import { differenceInMinutes, subHours, subDays, isAfter } from "date-fns";
import { validationResult } from "express-validator";
+import { body } from "express-validator";
+import { RequestHandler } from "express";
+import { promisify } from "util";
+import urlRegex from "url-regex";
+import axios from "axios";
+import dns from "dns";
+import URL from "url";
+import { addProtocol, CustomError } from "../../utils";
import { addCooldown, banUser } from "../db/user";
-import { getIP } from "../db/ip";
import { getUserLinksCount } from "../db/link";
import { getDomain } from "../db/domain";
import { getHost } from "../db/host";
-import { addProtocol, CustomError } from "../utils";
+import { getIP } from "../db/ip";
+import env from "../../env";
const dnsLookup = promisify(dns.lookup);
@@ -59,6 +60,7 @@ export const preservedUrls = [
"banned",
"terms",
"privacy",
+ "protected",
"report",
"pricing"
];
@@ -82,10 +84,10 @@ export const validateUrl: RequestHandler = async (req, res, next) => {
// If target is the URL shortener itself
const { host } = URL.parse(addProtocol(req.body.target));
- if (host === process.env.DEFAULT_DOMAIN) {
+ if (host === env.DEFAULT_DOMAIN) {
return res
.status(400)
- .json({ error: `${process.env.DEFAULT_DOMAIN} URLs are not allowed.` });
+ .json({ error: `${env.DEFAULT_DOMAIN} URLs are not allowed.` });
}
// Validate password length
@@ -134,7 +136,7 @@ export const cooldownCheck = async (user: User) => {
};
export const ipCooldownCheck: RequestHandler = async (req, res, next) => {
- const cooldownConfig = Number(process.env.NON_USER_COOLDOWN);
+ const cooldownConfig = env.NON_USER_COOLDOWN;
if (req.user || !cooldownConfig) return next();
const ip = await getIP(req.realIP);
if (ip) {
@@ -151,10 +153,10 @@ export const ipCooldownCheck: RequestHandler = async (req, res, next) => {
export const malwareCheck = async (user: User, target: string) => {
const isMalware = await axios.post(
- `https://safebrowsing.googleapis.com/v4/threatMatches:find?key=${process.env.GOOGLE_SAFE_BROWSING_KEY}`,
+ `https://safebrowsing.googleapis.com/v4/threatMatches:find?key=${env.GOOGLE_SAFE_BROWSING_KEY}`,
{
client: {
- clientId: process.env.DEFAULT_DOMAIN.toLowerCase().replace(".", ""),
+ clientId: env.DEFAULT_DOMAIN.toLowerCase().replace(".", ""),
clientVersion: "1.0.0"
},
threatInfo: {
@@ -190,9 +192,9 @@ export const urlCountsCheck = async (user: User) => {
user_id: user.id,
date: subDays(new Date(), 1)
});
- if (count > Number(process.env.USER_LIMIT_PER_DAY)) {
+ if (count > env.USER_LIMIT_PER_DAY) {
throw new CustomError(
- `You have reached your daily limit (${process.env.USER_LIMIT_PER_DAY}). Please wait 24h.`
+ `You have reached your daily limit (${env.USER_LIMIT_PER_DAY}). Please wait 24h.`
);
}
};
diff --git a/server/db/domain.ts b/server/__v1/db/domain.ts
similarity index 96%
rename from server/db/domain.ts
rename to server/__v1/db/domain.ts
index 48cde31..dd721f9 100644
--- a/server/db/domain.ts
+++ b/server/__v1/db/domain.ts
@@ -1,6 +1,6 @@
-import knex from "../knex";
-import * as redis from "../redis";
-import { getRedisKey } from "../utils";
+import knex from "../../knex";
+import * as redis from "../../redis";
+import { getRedisKey } from "../../utils";
export const getDomain = async (data: Partial): Promise => {
const getData = {
diff --git a/server/db/host.ts b/server/__v1/db/host.ts
similarity index 90%
rename from server/db/host.ts
rename to server/__v1/db/host.ts
index 5bdacf7..55cd140 100644
--- a/server/db/host.ts
+++ b/server/__v1/db/host.ts
@@ -1,6 +1,6 @@
-import knex from "../knex";
-import * as redis from "../redis";
-import { getRedisKey } from "../utils";
+import knex from "../../knex";
+import * as redis from "../../redis";
+import { getRedisKey } from "../../utils";
export const getHost = async (data: Partial) => {
const getData = {
diff --git a/server/db/ip.ts b/server/__v1/db/ip.ts
similarity index 81%
rename from server/db/ip.ts
rename to server/__v1/db/ip.ts
index 66b1d3b..0ad1594 100644
--- a/server/db/ip.ts
+++ b/server/__v1/db/ip.ts
@@ -1,6 +1,7 @@
import { subMinutes } from "date-fns";
-import knex from "../knex";
+import knex from "../../knex";
+import env from "../../env";
export const addIP = async (ipToGet: string) => {
const ip = ipToGet.toLowerCase();
@@ -24,7 +25,7 @@ export const addIP = async (ipToGet: string) => {
return ip;
};
export const getIP = async (ip: string) => {
- const cooldownConfig = Number(process.env.NON_USER_COOLDOWN);
+ const cooldownConfig = env.NON_USER_COOLDOWN;
const matchedIp = await knex("ips")
.where({ ip: ip.toLowerCase() })
.andWhere(
@@ -41,9 +42,6 @@ export const clearIPs = async () =>
.where(
"created_at",
"<",
- subMinutes(
- new Date(),
- Number(process.env.NON_USER_COOLDOWN)
- ).toISOString()
+ subMinutes(new Date(), env.NON_USER_COOLDOWN).toISOString()
)
.delete();
diff --git a/server/db/link.ts b/server/__v1/db/link.ts
similarity index 99%
rename from server/db/link.ts
rename to server/__v1/db/link.ts
index 7d0c1d3..bbcfde4 100644
--- a/server/db/link.ts
+++ b/server/__v1/db/link.ts
@@ -1,14 +1,14 @@
import bcrypt from "bcryptjs";
import { isAfter, subDays, set } from "date-fns";
-import knex from "../knex";
-import * as redis from "../redis";
+import knex from "../../knex";
+import * as redis from "../../redis";
import {
generateShortLink,
getRedisKey,
getUTCDate,
getDifferenceFunction,
statsObjectToArray
-} from "../utils";
+} from "../../utils";
import { banDomain } from "./domain";
import { banHost } from "./host";
import { banUser } from "./user";
diff --git a/server/db/user.ts b/server/__v1/db/user.ts
similarity index 97%
rename from server/db/user.ts
rename to server/__v1/db/user.ts
index 5873e5a..87f8713 100644
--- a/server/db/user.ts
+++ b/server/__v1/db/user.ts
@@ -3,9 +3,9 @@ import nanoid from "nanoid";
import uuid from "uuid/v4";
import { addMinutes } from "date-fns";
-import knex from "../knex";
-import * as redis from "../redis";
-import { getRedisKey } from "../utils";
+import knex from "../../knex";
+import * as redis from "../../redis";
+import { getRedisKey } from "../../utils";
export const getUser = async (emailOrKey = ""): Promise => {
const redisKey = getRedisKey.user(emailOrKey);
diff --git a/server/__v1/index.ts b/server/__v1/index.ts
new file mode 100644
index 0000000..cf4981f
--- /dev/null
+++ b/server/__v1/index.ts
@@ -0,0 +1,63 @@
+import asyncHandler from "express-async-handler";
+import { Router } from "express";
+import cors from "cors";
+
+import {
+ validateUrl,
+ ipCooldownCheck
+} from "./controllers/validateBodyController";
+import * as auth from "../handlers/auth";
+import * as link from "./controllers/linkController";
+
+const router = Router();
+
+/* URL shortener */
+router.post(
+ "url/submit",
+ cors(),
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwtLoose),
+ asyncHandler(auth.recaptcha),
+ asyncHandler(validateUrl),
+ asyncHandler(ipCooldownCheck),
+ asyncHandler(link.shortener)
+);
+router.post(
+ "url/deleteurl",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ asyncHandler(link.deleteUserLink)
+);
+router.get(
+ "url/geturls",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ asyncHandler(link.getUserLinks)
+);
+router.post(
+ "url/customdomain",
+ asyncHandler(auth.jwt),
+ asyncHandler(link.setCustomDomain)
+);
+router.delete(
+ "url/customdomain",
+ asyncHandler(auth.jwt),
+ asyncHandler(link.deleteCustomDomain)
+);
+router.get(
+ "url/stats",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ asyncHandler(link.getLinkStats)
+);
+router.post("url/requesturl", asyncHandler(link.goToLink));
+router.post("url/report", asyncHandler(link.reportLink));
+router.post(
+ "url/admin/ban",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ asyncHandler(auth.admin),
+ asyncHandler(link.ban)
+);
+
+export default router;
diff --git a/server/configToEnv.ts b/server/configToEnv.ts
deleted file mode 100644
index 57d34e0..0000000
--- a/server/configToEnv.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-/* eslint-disable global-require */
-import fs from "fs";
-import path from "path";
-
-const hasServerConfig = fs.existsSync(path.resolve(__dirname, "config.js"));
-const hasClientConfig = fs.existsSync(
- path.resolve(__dirname, "../client/config.js")
-);
-
-if (hasServerConfig && hasClientConfig) {
- const serverConfig = require("./config.js");
- const clientConfig = require("../client/config.js");
- let envTemplate = fs.readFileSync(
- path.resolve(__dirname, "../.template.env"),
- "utf-8"
- );
-
- const configs = {
- PORT: serverConfig.PORT || 3000,
- DEFAULT_DOMAIN: serverConfig.DEFAULT_DOMAIN || "localhost:3000",
- DB_URI: serverConfig.DB_URI || "bolt://localhost",
- DB_USERNAME: serverConfig.DB_USERNAME,
- DB_PASSWORD: serverConfig.DB_PASSWORD,
- REDIS_DISABLED: serverConfig.REDIS_DISABLED || false,
- REDIS_HOST: serverConfig.REDIS_HOST || "127.0.0.1",
- REDIS_PORT: serverConfig.REDIS_PORT || 6379,
- REDIS_PASSWORD: serverConfig.REDIS_PASSWORD,
- USER_LIMIT_PER_DAY: serverConfig.USER_LIMIT_PER_DAY || 50,
- JWT_SECRET: serverConfig.JWT_SECRET || "securekey",
- ADMIN_EMAILS: serverConfig.ADMIN_EMAILS.join(","),
- RECAPTCHA_SITE_KEY: clientConfig.RECAPTCHA_SITE_KEY,
- RECAPTCHA_SECRET_KEY: serverConfig.RECAPTCHA_SECRET_KEY,
- GOOGLE_SAFE_BROWSING_KEY: serverConfig.GOOGLE_SAFE_BROWSING_KEY,
- GOOGLE_ANALYTICS: clientConfig.GOOGLE_ANALYTICS_ID,
- GOOGLE_ANALYTICS_UNIVERSAL: serverConfig.GOOGLE_ANALYTICS,
- MAIL_HOST: serverConfig.MAIL_HOST,
- MAIL_PORT: serverConfig.MAIL_PORT,
- MAIL_SECURE: serverConfig.MAIL_SECURE,
- MAIL_USER: serverConfig.MAIL_USER,
- MAIL_FROM: serverConfig.MAIL_FROM,
- MAIL_PASSWORD: serverConfig.MAIL_PASSWORD,
- REPORT_MAIL: serverConfig.REPORT_MAIL,
- CONTACT_EMAIL: clientConfig.CONTACT_EMAIL
- };
-
- Object.keys(configs).forEach(c => {
- envTemplate = envTemplate.replace(
- new RegExp(`{{${c}}}`, "gm"),
- configs[c] || ""
- );
- });
-
- fs.writeFileSync(path.resolve(__dirname, "../.env"), envTemplate);
- fs.renameSync(
- path.resolve(__dirname, "config.js"),
- path.resolve(__dirname, "old.config.js")
- );
- fs.renameSync(
- path.resolve(__dirname, "../client/config.js"),
- path.resolve(__dirname, "../client/old.config.js")
- );
-}
diff --git a/server/controllers/authController.ts b/server/controllers/authController.ts
deleted file mode 100644
index 8750297..0000000
--- a/server/controllers/authController.ts
+++ /dev/null
@@ -1,274 +0,0 @@
-import { Handler } from "express";
-import fs from "fs";
-import path from "path";
-import passport from "passport";
-import JWT from "jsonwebtoken";
-import axios from "axios";
-import { addDays } from "date-fns";
-
-import { isAdmin } from "../utils";
-import transporter from "../mail/mail";
-import { resetMailText, verifyMailText } from "../mail/text";
-import {
- createUser,
- changePassword,
- generateApiKey,
- getUser,
- verifyUser,
- requestPasswordReset,
- resetPassword
-} from "../db/user";
-
-/* Read email template */
-const resetEmailTemplatePath = path.join(
- __dirname,
- "../mail/template-reset.html"
-);
-const verifyEmailTemplatePath = path.join(
- __dirname,
- "../mail/template-verify.html"
-);
-const resetEmailTemplate = fs
- .readFileSync(resetEmailTemplatePath, { encoding: "utf-8" })
- .replace(/{{domain}}/gm, process.env.DEFAULT_DOMAIN);
-const verifyEmailTemplate = fs
- .readFileSync(verifyEmailTemplatePath, { encoding: "utf-8" })
- .replace(/{{domain}}/gm, process.env.DEFAULT_DOMAIN);
-
-/* Function to generate JWT */
-const signToken = (user: UserJoined) =>
- JWT.sign(
- {
- iss: "ApiAuth",
- sub: user.email,
- domain: user.domain || "",
- admin: isAdmin(user.email),
- iat: parseInt((new Date().getTime() / 1000).toFixed(0)),
- exp: parseInt((addDays(new Date(), 7).getTime() / 1000).toFixed(0))
- } as Record,
- process.env.JWT_SECRET
- );
-
-/* Passport.js authentication controller */
-const authenticate = (
- type: "jwt" | "local" | "localapikey",
- error: string,
- isStrict = true
-) =>
- function auth(req, res, next) {
- if (req.user) return next();
- return passport.authenticate(type, (err, user) => {
- if (err) return res.status(400);
- if (!user && isStrict) return res.status(401).json({ error });
- if (user && isStrict && !user.verified) {
- return res.status(400).json({
- error:
- "Your email address is not verified. " +
- "Click on signup to get the verification link again."
- });
- }
- if (user && user.banned) {
- return res
- .status(403)
- .json({ error: "Your are banned from using this website." });
- }
- if (user) {
- req.user = {
- ...user,
- admin: isAdmin(user.email)
- };
- return next();
- }
- return next();
- })(req, res, next);
- };
-
-export const authLocal = authenticate("local", "Login credentials are wrong.");
-export const authJwt = authenticate("jwt", "Unauthorized.");
-export const authJwtLoose = authenticate("jwt", "Unauthorized.", false);
-export const authApikey = authenticate(
- "localapikey",
- "API key is not correct.",
- false
-);
-
-/* reCaptcha controller */
-export const recaptcha: Handler = async (req, res, next) => {
- if (process.env.NODE_ENV === "production" && !req.user) {
- const isReCaptchaValid = await axios({
- method: "post",
- url: "https://www.google.com/recaptcha/api/siteverify",
- headers: {
- "Content-type": "application/x-www-form-urlencoded"
- },
- params: {
- secret: process.env.RECAPTCHA_SECRET_KEY,
- response: req.body.reCaptchaToken,
- remoteip: req.realIP
- }
- });
- if (!isReCaptchaValid.data.success) {
- return res
- .status(401)
- .json({ error: "reCAPTCHA is not valid. Try again." });
- }
- }
- return next();
-};
-
-export const authAdmin: Handler = async (req, res, next) => {
- if (!req.user.admin) {
- return res.status(401).json({ error: "Unauthorized." });
- }
- return next();
-};
-
-export const signup: Handler = async (req, res) => {
- const { email, password } = req.body;
-
- if (password.length > 64) {
- return res.status(400).json({ error: "Maximum password length is 64." });
- }
-
- if (email.length > 255) {
- return res.status(400).json({ error: "Maximum email length is 255." });
- }
- const user = await getUser(email);
-
- if (user && user.verified) {
- return res.status(403).json({ error: "Email is already in use." });
- }
-
- const newUser = await createUser(email, password, user);
-
- const mail = await transporter.sendMail({
- from: process.env.MAIL_FROM || process.env.MAIL_USER,
- to: newUser.email,
- subject: "Verify your account",
- text: verifyMailText.replace(
- /{{verification}}/gim,
- newUser.verification_token
- ),
- html: verifyEmailTemplate.replace(
- /{{verification}}/gim,
- newUser.verification_token
- )
- });
-
- if (mail.accepted.length) {
- return res
- .status(201)
- .json({ email, message: "Verification email has been sent." });
- }
-
- return res
- .status(400)
- .json({ error: "Couldn't send verification email. Try again." });
-};
-
-export const login: Handler = (req, res) => {
- const token = signToken(req.user);
- return res.status(200).json({ token });
-};
-
-export const renew: Handler = (req, res) => {
- const token = signToken(req.user);
- return res.status(200).json({ token });
-};
-
-export const verify: Handler = async (req, _res, next) => {
- const { verificationToken } = req.params;
- if (!verificationToken) return next();
-
- const user = await verifyUser(req.params.verificationToken);
- if (user) {
- const token = signToken(user);
- req.token = token;
- }
-
- return next();
-};
-
-export const changeUserPassword: Handler = async (req, res) => {
- if (req.body.password.length < 8) {
- return res
- .status(400)
- .json({ error: "Password must be at least 8 chars long." });
- }
-
- if (req.body.password.length > 64) {
- return res.status(400).json({ error: "Maximum password length is 64." });
- }
-
- const changedUser = await changePassword(req.user.id, req.body.password);
-
- if (changedUser) {
- return res
- .status(200)
- .json({ message: "Your password has been changed successfully." });
- }
-
- return res
- .status(400)
- .json({ error: "Couldn't change the password. Try again later" });
-};
-
-export const generateUserApiKey = async (req, res) => {
- const apikey = await generateApiKey(req.user.id);
-
- if (apikey) {
- return res.status(201).json({ apikey });
- }
-
- return res
- .status(400)
- .json({ error: "Sorry, an error occured. Please try again later." });
-};
-
-export const userSettings: Handler = (req, res) =>
- res.status(200).json({
- apikey: req.user.apikey || "",
- customDomain: req.user.domain || "",
- homepage: req.user.homepage || ""
- });
-
-export const requestUserPasswordReset: Handler = async (req, res) => {
- const user = await requestPasswordReset(req.body.email);
-
- if (!user) {
- return res.status(400).json({ error: "Couldn't reset password." });
- }
-
- const mail = await transporter.sendMail({
- from: process.env.MAIL_USER,
- to: user.email,
- subject: "Reset your password",
- text: resetMailText
- .replace(/{{resetpassword}}/gm, user.reset_password_token)
- .replace(/{{domain}}/gm, process.env.DEFAULT_DOMAIN),
- html: resetEmailTemplate
- .replace(/{{resetpassword}}/gm, user.reset_password_token)
- .replace(/{{domain}}/gm, process.env.DEFAULT_DOMAIN)
- });
-
- if (mail.accepted.length) {
- return res.status(200).json({
- email: user.email,
- message: "Reset password email has been sent."
- });
- }
-
- return res.status(400).json({ error: "Couldn't reset password." });
-};
-
-export const resetUserPassword: Handler = async (req, _res, next) => {
- const { resetPasswordToken } = req.params;
- if (resetPasswordToken) {
- const user: UserJoined = await resetPassword(resetPasswordToken);
- if (user) {
- const token = signToken(user as UserJoined);
- req.token = token;
- }
- }
- return next();
-};
diff --git a/server/cron.ts b/server/cron.ts
index b0eaeee..70a392d 100644
--- a/server/cron.ts
+++ b/server/cron.ts
@@ -1,9 +1,10 @@
import cron from "node-cron";
-import { clearIPs } from "./db/ip";
+import query from "./queries";
+import env from "./env";
-if (Number(process.env.NON_USER_COOLDOWN)) {
+if (env.NON_USER_COOLDOWN) {
cron.schedule("* */24 * * *", () => {
- clearIPs().catch();
+ query.ip.clear().catch();
});
}
diff --git a/server/env.ts b/server/env.ts
new file mode 100644
index 0000000..f5137ca
--- /dev/null
+++ b/server/env.ts
@@ -0,0 +1,41 @@
+import { cleanEnv, num, str, bool } from "envalid";
+
+const env = cleanEnv(process.env, {
+ PORT: num({ default: 3000 }),
+ DEFAULT_DOMAIN: str({ example: "kutt.it" }),
+ LINK_LENGTH: num({ default: 6 }),
+ DB_HOST: str({ default: "localhost" }),
+ DB_PORT: num({ default: 5432 }),
+ DB_NAME: str({ default: "postgres" }),
+ DB_USER: str(),
+ DB_PASSWORD: str(),
+ DB_SSL: bool({ default: false }),
+ NEO4J_DB_URI: str({ default: "" }),
+ NEO4J_DB_USERNAME: str({ default: "" }),
+ NEO4J_DB_PASSWORD: str({ default: "" }),
+ REDIS_HOST: str({ default: "127.0.0.1" }),
+ REDIS_PORT: num({ default: 6379 }),
+ REDIS_PASSWORD: str({ default: "" }),
+ USER_LIMIT_PER_DAY: num({ default: 50 }),
+ NON_USER_COOLDOWN: num({ default: 10 }),
+ DEFAULT_MAX_STATS_PER_LINK: num({ default: 5000 }),
+ CUSTOM_DOMAIN_USE_HTTPS: bool({ default: false }),
+ JWT_SECRET: str(),
+ ADMIN_EMAILS: str({ default: "" }),
+ RECAPTCHA_SITE_KEY: str(),
+ RECAPTCHA_SECRET_KEY: str(),
+ GOOGLE_SAFE_BROWSING_KEY: str({ default: "" }),
+ GOOGLE_ANALYTICS: str({ default: "" }),
+ GOOGLE_ANALYTICS_UNIVERSAL: str({ default: "" }),
+ MAIL_HOST: str(),
+ MAIL_PORT: num(),
+ MAIL_SECURE: bool({ default: false }),
+ MAIL_USER: str(),
+ MAIL_FROM: str({ default: "", example: "Kutt " }),
+ MAIL_PASSWORD: str(),
+ REPORT_EMAIL: str({ default: "" }),
+ CONTACT_EMAIL: str({ default: "" }),
+ RAVEN_DSN: str({ default: "" })
+});
+
+export default env;
diff --git a/server/handlers/auth.ts b/server/handlers/auth.ts
index 292cd9c..153423a 100644
--- a/server/handlers/auth.ts
+++ b/server/handlers/auth.ts
@@ -1,10 +1,17 @@
-import { differenceInMinutes, subMinutes } from "date-fns";
+import { differenceInMinutes, addMinutes, subMinutes } from "date-fns";
import { Handler } from "express";
import passport from "passport";
+import bcrypt from "bcryptjs";
+import nanoid from "nanoid";
+import uuid from "uuid/v4";
import axios from "axios";
-import { isAdmin, CustomError } from "../utils";
+import { CustomError } from "../utils";
+import * as utils from "../utils";
+import * as mail from "../mail";
+import query from "../queries";
import knex from "../knex";
+import env from "../env";
const authenticate = (
type: "jwt" | "local" | "localapikey",
@@ -14,10 +21,8 @@ const authenticate = (
async function auth(req, res, next) {
if (req.user) return next();
- return passport.authenticate(type, (err, user) => {
- if (err) {
- throw new CustomError("An error occurred");
- }
+ passport.authenticate(type, (err, user) => {
+ if (err) return next(err);
if (!user && isStrict) {
throw new CustomError(error, 401);
@@ -38,7 +43,7 @@ const authenticate = (
if (user) {
req.user = {
...user,
- admin: isAdmin(user.email)
+ admin: utils.isAdmin(user.email)
};
return next();
}
@@ -56,7 +61,7 @@ export const apikey = authenticate(
);
export const cooldown: Handler = async (req, res, next) => {
- const cooldownConfig = Number(process.env.NON_USER_COOLDOWN);
+ const cooldownConfig = env.NON_USER_COOLDOWN;
if (req.user || !cooldownConfig) return next();
const ip = await knex("ips")
@@ -80,8 +85,7 @@ export const cooldown: Handler = async (req, res, next) => {
};
export const recaptcha: Handler = async (req, res, next) => {
- if (process.env.NODE_ENV !== "production") return next();
- if (req.user) return next();
+ if (env.isDev || req.user) return next();
const isReCaptchaValid = await axios({
method: "post",
@@ -90,7 +94,7 @@ export const recaptcha: Handler = async (req, res, next) => {
"Content-type": "application/x-www-form-urlencoded"
},
params: {
- secret: process.env.RECAPTCHA_SECRET_KEY,
+ secret: env.RECAPTCHA_SECRET_KEY,
response: req.body.reCaptchaToken,
remoteip: req.realIP
}
@@ -102,3 +106,115 @@ export const recaptcha: Handler = async (req, res, next) => {
return next();
};
+
+export const admin: Handler = async (req, res, next) => {
+ if (req.user.admin) return next();
+ throw new CustomError("Unauthorized", 401);
+};
+
+export const signup: Handler = async (req, res) => {
+ const salt = await bcrypt.genSalt(12);
+ const password = await bcrypt.hash(req.body.password, salt);
+
+ const user = await query.user.add(
+ { email: req.body.email, password },
+ req.user
+ );
+
+ await mail.verification(user);
+
+ return res.status(201).send({ message: "Verification email has been sent." });
+};
+
+export const token: Handler = async (req, res) => {
+ const token = utils.signToken(req.user);
+ return res.status(200).send({ token });
+};
+
+export const verify: Handler = async (req, res, next) => {
+ if (!req.params.verificationToken) return next();
+
+ const [user] = await query.user.update(
+ {
+ verification_token: req.params.verificationToken,
+ verification_expires: [">", new Date().toISOString()]
+ },
+ {
+ verified: true,
+ verification_token: null,
+ verification_expires: null
+ }
+ );
+
+ if (user) {
+ const token = utils.signToken(user);
+ req.token = token;
+ }
+
+ return next();
+};
+
+export const changePassword: Handler = async (req, res) => {
+ const salt = await bcrypt.genSalt(12);
+ const password = await bcrypt.hash(req.body.password, salt);
+
+ const [user] = await query.user.update({ id: req.user.id }, { password });
+
+ if (!user) {
+ throw new CustomError("Couldn't change the password. Try again later.");
+ }
+
+ return res
+ .status(200)
+ .send({ message: "Your password has been changed successfully." });
+};
+
+export const generateApiKey = async (req, res) => {
+ const apikey = nanoid(40);
+
+ const [user] = await query.user.update({ id: req.user.id }, { apikey });
+
+ if (!user) {
+ throw new CustomError("Couldn't generate API key. Please try again later.");
+ }
+
+ return res.status(201).send({ apikey });
+};
+
+export const resetPasswordRequest = async (req, res) => {
+ const [user] = await query.user.update(
+ { email: req.body.email },
+ {
+ reset_password_token: uuid(),
+ reset_password_expires: addMinutes(new Date(), 30).toISOString()
+ }
+ );
+
+ if (user) {
+ await mail.resetPasswordToken(user);
+ }
+
+ return res.status(200).json({
+ error: "If email address exists, a reset password email has been sent."
+ });
+};
+
+export const resetPassword = async (req, res, next) => {
+ const { resetPasswordToken } = req.params;
+
+ if (resetPasswordToken) {
+ const [user] = await query.user.update(
+ {
+ reset_password_token: resetPasswordToken,
+ reset_password_expires: [">", new Date().toISOString()]
+ },
+ { reset_password_expires: null, reset_password_token: null }
+ );
+
+ if (user) {
+ const token = utils.signToken(user as UserJoined);
+ req.token = token;
+ }
+ }
+ return next();
+};
diff --git a/server/handlers/domains.ts b/server/handlers/domains.ts
new file mode 100644
index 0000000..7e4dcd8
--- /dev/null
+++ b/server/handlers/domains.ts
@@ -0,0 +1,31 @@
+import { Handler } from "express";
+import query from "../queries";
+import { CustomError, sanitize } from "../utils";
+
+export const add: Handler = async (req, res) => {
+ const { address, homepage } = req.body;
+
+ const domain = await query.domain.add({
+ address,
+ homepage,
+ user_id: req.user.id
+ });
+
+ return res.status(200).send(sanitize.domain(domain));
+};
+
+export const remove: Handler = async (req, res) => {
+ const [domain] = await query.domain.update(
+ {
+ uuid: req.params.id,
+ user_id: req.user.id
+ },
+ { user_id: null }
+ );
+
+ if (!domain) {
+ throw new CustomError("Could not delete the domain.", 500);
+ }
+
+ return res.status(200).send({ message: "Domain deleted successfully" });
+};
diff --git a/server/handlers/helpers.ts b/server/handlers/helpers.ts
index f18d3af..d038353 100644
--- a/server/handlers/helpers.ts
+++ b/server/handlers/helpers.ts
@@ -1,4 +1,43 @@
-import { Handler } from "express";
+import { Handler, ErrorRequestHandler } from "express";
+import { validationResult } from "express-validator";
+import Raven from "raven";
+import signale from "signale";
+
+import { CustomError } from "../utils";
+import env from "../env";
+
+export const ip: Handler = (req, res, next) => {
+ req.realIP =
+ (req.headers["x-real-ip"] as string) || req.connection.remoteAddress || "";
+ return next();
+};
+
+export const error: ErrorRequestHandler = (error, req, res, next) => {
+ if (env.isDev) {
+ signale.fatal(error);
+ }
+
+ if (error instanceof CustomError) {
+ return res.status(error.statusCode || 500).json({ error: error.message });
+ }
+
+ if (env.RAVEN_DSN) {
+ Raven.captureException(error, {
+ user: { email: req.user && req.user.email }
+ });
+ }
+
+ return res.status(500).json({ error: "An error occurred." });
+};
+
+export const verify = (req, res, next) => {
+ const errors = validationResult(req);
+ if (!errors.isEmpty()) {
+ const message = errors.array()[0].msg;
+ throw new CustomError(message, 400);
+ }
+ return next();
+};
export const query: Handler = (req, res, next) => {
const { limit, skip, all } = req.query;
diff --git a/server/handlers/links.ts b/server/handlers/links.ts
index eeef61d..02d30cc 100644
--- a/server/handlers/links.ts
+++ b/server/handlers/links.ts
@@ -1,37 +1,37 @@
-import { Handler, Request } from "express";
+import ua from "universal-analytics";
+import { Handler } from "express";
+import { promisify } from "util";
+import bcrypt from "bcryptjs";
+import isbot from "isbot";
+import next from "next";
import URL from "url";
+import dns from "dns";
-import { generateShortLink, generateId, CustomError } from "../utils";
-import {
- getLinksQuery,
- getTotalQuery,
- findLinkQuery,
- createLinkQuery
-} from "../queries/link";
-import {
- cooldownCheck,
- malwareCheck,
- urlCountsCheck,
- checkBannedDomain,
- checkBannedHost
-} from "../controllers/validateBodyController";
-import { addIP } from "../db/ip";
+import * as validators from "./validators";
+import { CreateLinkReq } from "./types";
+import { CustomError } from "../utils";
+import transporter from "../mail/mail";
+import * as utils from "../utils";
+import query from "../queries";
+import queue from "../queues";
+import env from "../env";
-export const getLinks: Handler = async (req, res) => {
+const dnsLookup = promisify(dns.lookup);
+
+export const get: Handler = async (req, res) => {
const { limit, skip, search, all } = req.query;
const userId = req.user.id;
+ const match = {
+ ...(!all && { user_id: userId })
+ };
+
const [links, total] = await Promise.all([
- getLinksQuery({ all, limit, search, skip, userId }),
- getTotalQuery({ all, search, userId })
+ query.link.get(match, { limit, search, skip }),
+ query.link.total(match, { search })
]);
- const data = links.map(link => ({
- ...link,
- id: link.uuid,
- password: !!link.password,
- link: generateShortLink(link.address, link.domain)
- }));
+ const data = links.map(utils.sanitize.link);
return res.send({
total,
@@ -41,80 +41,319 @@ export const getLinks: Handler = async (req, res) => {
});
};
-interface CreateLinkReq extends Request {
- body: {
- reuse?: boolean;
- password?: string;
- customurl?: string;
- domain?: Domain;
- target: string;
- };
-}
-
-export const createLink: Handler = async (req: CreateLinkReq, res) => {
+export const create: Handler = async (req: CreateLinkReq, res) => {
const { reuse, password, customurl, target, domain } = req.body;
- const domainId = domain ? domain.id : null;
- const domainAddress = domain ? domain.address : null;
+ const domain_id = domain ? domain.id : null;
- try {
- const targetDomain = URL.parse(target).hostname;
+ const targetDomain = URL.parse(target).hostname;
- const queries = await Promise.all([
- process.env.GOOGLE_SAFE_BROWSING_KEY && cooldownCheck(req.user),
- process.env.GOOGLE_SAFE_BROWSING_KEY && malwareCheck(req.user, target),
- req.user && urlCountsCheck(req.user),
- reuse &&
- findLinkQuery({
- target,
- userId: req.user.id,
- domainId
- }),
- customurl &&
- findLinkQuery({
- address: customurl,
- domainId
- }),
- !customurl && generateId(domainId),
- checkBannedDomain(targetDomain),
- checkBannedHost(targetDomain)
- ]);
+ const queries = await Promise.all([
+ validators.cooldown(req.user),
+ validators.malware(req.user, target),
+ validators.linksCount(req.user),
+ reuse &&
+ query.link.find({
+ target,
+ user_id: req.user.id,
+ domain_id
+ }),
+ customurl &&
+ query.link.find({
+ address: customurl,
+ user_id: req.user.id,
+ domain_id
+ }),
+ !customurl && utils.generateId(domain_id),
+ validators.bannedDomain(targetDomain),
+ validators.bannedHost(targetDomain)
+ ]);
- // if "reuse" is true, try to return
- // the existent URL without creating one
- if (queries[3]) {
- const { domain_id: d, user_id: u, ...currentLink } = queries[3];
- const link = generateShortLink(currentLink.address, req.user.domain);
- const data = {
- ...currentLink,
- id: currentLink.uuid,
- password: !!currentLink.password,
- link
- };
- return res.json(data);
- }
+ // if "reuse" is true, try to return
+ // the existent URL without creating one
+ if (queries[3]) {
+ return res.json(utils.sanitize.link(queries[3]));
+ }
- // Check if custom link already exists
- if (queries[4]) {
- throw new CustomError("Custom URL is already in use.");
- }
+ // Check if custom link already exists
+ if (queries[4]) {
+ throw new CustomError("Custom URL is already in use.");
+ }
- // Create new link
- const address = customurl || queries[5];
- const link = await createLinkQuery({
- password,
- address,
- domainAddress,
- domainId,
- target,
- userId: req.user && req.user.id
+ // Create new link
+ const address = customurl || queries[5];
+ const link = await query.link.create({
+ password,
+ address,
+ domain_id,
+ target,
+ user_id: req.user && req.user.id
+ });
+
+ if (!req.user && env.NON_USER_COOLDOWN) {
+ query.ip.add(req.realIP);
+ }
+
+ return res
+ .status(201)
+ .send(utils.sanitize.link({ ...link, domain: domain?.address }));
+};
+
+export const remove: Handler = async (req, res) => {
+ const link = await query.link.remove({
+ uuid: req.params.id,
+ ...(!req.user.admin && { user_id: req.user.id })
+ });
+
+ if (!link) {
+ throw new CustomError("Could not delete the link");
+ }
+
+ return res
+ .status(200)
+ .send({ message: "Link has been deleted successfully." });
+};
+
+export const report: Handler = async (req, res) => {
+ const { link } = req.body;
+
+ const mail = await transporter.sendMail({
+ from: env.MAIL_USER,
+ to: env.REPORT_MAIL,
+ subject: "[REPORT]",
+ text: link,
+ html: link
+ });
+
+ if (!mail.accepted.length) {
+ throw new CustomError("Couldn't submit the report. Try again later.");
+ }
+ return res
+ .status(200)
+ .send({ message: "Thanks for the report, we'll take actions shortly." });
+};
+
+export const ban: Handler = async (req, res) => {
+ const { id } = req.params;
+
+ const update = {
+ banned_by_id: req.user.id,
+ banned: true
+ };
+
+ // 1. Check if link exists
+ const link = await query.link.find({ uuid: id });
+
+ if (!link) {
+ throw new CustomError("No link has been found.", 400);
+ }
+
+ if (link.banned) {
+ return res.status(200).send({ message: "Link has been banned already." });
+ }
+
+ const tasks = [];
+
+ // 2. Ban link
+ tasks.push(query.link.update({ uuid: id }, update));
+
+ const domain = URL.parse(link.target).hostname;
+
+ // 3. Ban target's domain
+ if (req.body.domain) {
+ tasks.push(query.domain.add({ ...update, address: domain }));
+ }
+
+ // 4. Ban target's host
+ if (req.body.host) {
+ const dnsRes = await dnsLookup(domain).catch(() => {
+ throw new CustomError("Couldn't fetch DNS info.");
});
+ const host = dnsRes?.address;
+ tasks.push(query.host.add({ ...update, address: host }));
+ }
- if (!req.user && Number(process.env.NON_USER_COOLDOWN)) {
- addIP(req.realIP);
- }
+ // 5. Ban link owner
+ if (req.body.user) {
+ tasks.push(query.user.update({ id: link.user_id }, update));
+ }
- return res.json({ ...link, id: link.uuid });
- } catch (error) {
- return res.status(400).json({ error: error.message });
+ // 6. Ban all of owner's links
+ if (req.body.userLinks) {
+ tasks.push(query.link.update({ user_id: link.user_id }, update));
+ }
+
+ // 7. Wait for all tasks to finish
+ await Promise.all(tasks).catch(() => {
+ throw new CustomError("Couldn't ban entries.");
+ });
+
+ // 8. Send response
+ return res.status(200).send({ message: "Banned link successfully." });
+};
+
+export const redirect = (app: ReturnType): Handler => async (
+ req,
+ res,
+ next
+) => {
+ const isBot = isbot(req.headers["user-agent"]);
+ const isPreservedUrl = validators.preservedUrls.some(
+ item => item === req.path.replace("/", "")
+ );
+
+ if (isPreservedUrl) return next();
+
+ // 1. If custom domain, get domain info
+ const { host } = req.headers;
+ const domain =
+ host !== env.DEFAULT_DOMAIN
+ ? await query.domain.find({ address: host })
+ : null;
+
+ // 2. Get link
+ const address = req.params.id.replace("+", "");
+ const link = await query.link.find({
+ address,
+ domain_id: domain && domain.id
+ });
+
+ // 3. When no link, if has domain redirect to domain's homepage
+ // otherwise rediredt to 404
+ if (!link) {
+ return res.redirect(301, domain ? domain.homepage : "/404");
+ }
+
+ // 4. If link is banned, redirect to banned page.
+ if (link.banned) {
+ return res.redirect("/banned");
+ }
+
+ // 5. If wants to see link info, then redirect
+ const doesRequestInfo = /.*\+$/gi.test(req.params.id);
+ if (doesRequestInfo && !link.password) {
+ return app.render(req, res, "/url-info", { target: link.target });
+ }
+
+ // 6. If link is protected, redirect to password page
+ if (link.password) {
+ return res.redirect(`/protected/${link.uuid}`);
+ }
+
+ // 7. Create link visit
+ if (link.user_id && !isBot) {
+ queue.visit.add({
+ headers: req.headers,
+ realIP: req.realIP,
+ referrer: req.get("Referrer"),
+ link
+ });
+ }
+
+ // 8. Create Google Analytics visit
+ if (env.GOOGLE_ANALYTICS_UNIVERSAL && !isBot) {
+ ua(env.GOOGLE_ANALYTICS_UNIVERSAL)
+ .pageview({
+ dp: `/${address}`,
+ ua: req.headers["user-agent"],
+ uip: req.realIP,
+ aip: 1
+ })
+ .send();
+ }
+
+ // 10. Redirect to target
+ return res.redirect(link.target);
+};
+
+export const redirectProtected: Handler = async (req, res) => {
+ // 1. Get link
+ const uuid = req.params.id;
+ const link = await query.link.find({ uuid });
+
+ // 2. Throw error if no link
+ if (!link || !link.password) {
+ throw new CustomError("Couldn't find the link.", 400);
+ }
+
+ // 3. Check if password matches
+ const matches = await bcrypt.compare(req.body.password, link.password);
+
+ if (!matches) {
+ throw new CustomError("Password is not correct.", 401);
+ }
+
+ // 4. Create visit
+ if (link.user_id) {
+ queue.visit.add({
+ headers: req.headers,
+ realIP: req.realIP,
+ referrer: req.get("Referrer"),
+ link
+ });
+ }
+
+ // 5. Create Google Analytics visit
+ if (env.GOOGLE_ANALYTICS_UNIVERSAL) {
+ ua(env.GOOGLE_ANALYTICS_UNIVERSAL)
+ .pageview({
+ dp: `/${link.address}`,
+ ua: req.headers["user-agent"],
+ uip: req.realIP,
+ aip: 1
+ })
+ .send();
+ }
+
+ // 6. Send target
+ return res.status(200).send({ target: link.target });
+};
+
+export const redirectCustomDomain: Handler = async (req, res, next) => {
+ const {
+ headers: { host },
+ path
+ } = req;
+
+ if (host === env.DEFAULT_DOMAIN) {
+ return next();
+ }
+
+ if (
+ path === "/" ||
+ validators.preservedUrls
+ .filter(l => l !== "url-password")
+ .some(item => item === path.replace("/", ""))
+ ) {
+ const domain = await query.domain.find({ address: host });
+ const redirectURL = domain
+ ? domain.homepage
+ : `https://${env.DEFAULT_DOMAIN + path}`;
+
+ return res.redirect(301, redirectURL);
}
};
+
+export const stats: Handler = async (req, res) => {
+ const { user } = req;
+ const uuid = req.params.id;
+
+ const link = await query.link.find({
+ ...(!user.admin && { user_id: user.id }),
+ uuid
+ });
+
+ if (!link) {
+ throw new CustomError("Link could not be found.");
+ }
+
+ const stats = await query.visit.find({ link_id: link.id }, link.visit_count);
+
+ if (!stats) {
+ throw new CustomError("Could not get the short link stats.");
+ }
+
+ return res.status(200).send({
+ ...stats,
+ ...utils.sanitize.link(link)
+ });
+};
diff --git a/server/handlers/sanitizers.ts b/server/handlers/sanitizers.ts
deleted file mode 100644
index 6d09c52..0000000
--- a/server/handlers/sanitizers.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { sanitizeBody, CustomSanitizer } from "express-validator";
-import { addProtocol } from "../utils";
-
-const passIfUser: CustomSanitizer = (value, { req }) =>
- req.user ? value : undefined;
-
-export const createLink = [
- sanitizeBody("target")
- .trim()
- .customSanitizer(value => value && addProtocol(value)),
- sanitizeBody("domain")
- .customSanitizer(value =>
- typeof value === "string" ? value.toLowerCase() : undefined
- )
- .customSanitizer(passIfUser),
- sanitizeBody("password").customSanitizer(passIfUser),
- sanitizeBody("customurl")
- .customSanitizer(passIfUser)
- .customSanitizer(value => value && value.trim()),
- sanitizeBody("reuse").customSanitizer(passIfUser)
-];
diff --git a/server/handlers/types.d.ts b/server/handlers/types.d.ts
new file mode 100644
index 0000000..e35ecf1
--- /dev/null
+++ b/server/handlers/types.d.ts
@@ -0,0 +1,11 @@
+import { Request } from "express";
+
+export interface CreateLinkReq extends Request {
+ body: {
+ reuse?: boolean;
+ password?: string;
+ customurl?: string;
+ domain?: Domain;
+ target: string;
+ };
+}
diff --git a/server/handlers/users.ts b/server/handlers/users.ts
new file mode 100644
index 0000000..68a9e9b
--- /dev/null
+++ b/server/handlers/users.ts
@@ -0,0 +1,14 @@
+import query from "../queries";
+import * as utils from "../utils";
+
+export const get = async (req, res) => {
+ const domains = await query.domain.get({ user_id: req.user.id });
+
+ const data = {
+ apikey: req.user.apikey,
+ email: req.user.email,
+ domains: domains.map(utils.sanitize.domain)
+ };
+
+ return res.status(200).send(data);
+};
diff --git a/server/handlers/validators.ts b/server/handlers/validators.ts
index c82fb36..5bc4508 100644
--- a/server/handlers/validators.ts
+++ b/server/handlers/validators.ts
@@ -1,18 +1,17 @@
-import { body, validationResult } from "express-validator";
+import { body, param } from "express-validator";
+import { isAfter, subDays, subHours } from "date-fns";
import urlRegex from "url-regex";
+import { promisify } from "util";
+import axios from "axios";
+import dns from "dns";
import URL from "url";
-import { findDomain } from "../queries/domain";
-import { CustomError } from "../utils";
+import { CustomError, addProtocol } from "../utils";
+import query from "../queries";
+import knex from "../knex";
+import env from "../env";
-export const verify = (req, res, next) => {
- const errors = validationResult(req);
- if (!errors.isEmpty()) {
- const message = errors.array()[0].msg;
- throw new CustomError(message, 400);
- }
- return next();
-};
+const dnsLookup = promisify(dns.lookup);
export const preservedUrls = [
"login",
@@ -32,53 +31,341 @@ export const preservedUrls = [
"banned",
"terms",
"privacy",
+ "protected",
"report",
"pricing"
];
+export const checkUser = (value, { req }) => !!req.user;
+
export const createLink = [
body("target")
.exists({ checkNull: true, checkFalsy: true })
.withMessage("Target is missing.")
+ .isString()
+ .trim()
.isLength({ min: 1, max: 2040 })
.withMessage("Maximum URL length is 2040.")
+ .customSanitizer(addProtocol)
.custom(
value =>
urlRegex({ exact: true, strict: false }).test(value) ||
/^(?!https?)(\w+):\/\//.test(value)
)
.withMessage("URL is not valid.")
- .custom(value => URL.parse(value).host !== process.env.DEFAULT_DOMAIN)
- .withMessage(`${process.env.DEFAULT_DOMAIN} URLs are not allowed.`),
+ .custom(value => URL.parse(value).host !== env.DEFAULT_DOMAIN)
+ .withMessage(`${env.DEFAULT_DOMAIN} URLs are not allowed.`),
body("password")
.optional()
+ .custom(checkUser)
+ .withMessage("Only users can use this field.")
+ .isString()
.isLength({ min: 3, max: 64 })
.withMessage("Password length must be between 3 and 64."),
body("customurl")
.optional()
+ .custom(checkUser)
+ .withMessage("Only users can use this field.")
+ .isString()
+ .trim()
.isLength({ min: 1, max: 64 })
.withMessage("Custom URL length must be between 1 and 64.")
.custom(value => /^[a-zA-Z0-9-_]+$/g.test(value))
.withMessage("Custom URL is not valid")
- .custom(value => preservedUrls.some(url => url.toLowerCase() === value))
+ .custom(value => !preservedUrls.some(url => url.toLowerCase() === value))
.withMessage("You can't use this custom URL."),
body("reuse")
.optional()
+ .custom(checkUser)
+ .withMessage("Only users can use this field.")
.isBoolean()
.withMessage("Reuse must be boolean."),
body("domain")
.optional()
+ .custom(checkUser)
+ .withMessage("Only users can use this field.")
.isString()
.withMessage("Domain should be string.")
+ .customSanitizer(value => value.toLowerCase())
.custom(async (address, { req }) => {
- const domain = await findDomain({
+ const domain = await query.domain.find({
address,
- userId: req.user && req.user.id
+ user_id: req.user.id
});
req.body.domain = domain || null;
- if (domain) return true;
-
- throw new CustomError("You can't use this domain.", 400);
+ return !!domain;
})
+ .withMessage("You can't use this domain.")
];
+
+export const redirectProtected = [
+ body("password", "Password is invalid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .isString()
+ .isLength({ min: 3, max: 64 })
+ .withMessage("Password length must be between 3 and 64."),
+ param("id", "ID is invalid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .isLength({ min: 36, max: 36 })
+];
+
+export const addDomain = [
+ body("address", "Domain is not valid")
+ .exists({ checkFalsy: true, checkNull: true })
+ .isLength({ min: 3, max: 64 })
+ .withMessage("Domain length must be between 3 and 64.")
+ .trim()
+ .customSanitizer(value => {
+ const parsed = URL.parse(value);
+ return parsed.hostname || parsed.href;
+ })
+ .custom(value => urlRegex({ exact: true, strict: false }).test(value))
+ .custom(value => value !== env.DEFAULT_DOMAIN)
+ .withMessage("You can't use the default domain.")
+ .custom(async (value, { req }) => {
+ const domains = await query.domain.get({ user_id: req.user.id });
+ return domains.length === 0;
+ })
+ .withMessage("You already own a domain. Contact support if you need more.")
+ .custom(async value => {
+ const domain = await query.domain.find({ address: value });
+ return !domain || !domain.user_id || !domain.banned;
+ })
+ .withMessage("You can't add this domain."),
+ body("homepage")
+ .optional({ checkFalsy: true, nullable: true })
+ .customSanitizer(addProtocol)
+ .custom(value => urlRegex({ exact: true, strict: false }).test(value))
+ .withMessage("Homepage is not valid.")
+];
+
+export const removeDomain = [
+ param("id", "ID is invalid.")
+ .exists({
+ checkFalsy: true,
+ checkNull: true
+ })
+ .isLength({ min: 36, max: 36 })
+];
+
+export const deleteLink = [
+ param("id", "ID is invalid.")
+ .exists({
+ checkFalsy: true,
+ checkNull: true
+ })
+ .isLength({ min: 36, max: 36 })
+];
+
+export const reportLink = [
+ body("link", "No link has been provided.")
+ .exists({
+ checkFalsy: true,
+ checkNull: true
+ })
+ .custom(value => URL.parse(value).hostname === env.DEFAULT_DOMAIN)
+ .withMessage(`You can only report a ${env.DEFAULT_DOMAIN} link.`)
+];
+
+export const banLink = [
+ param("id", "ID is invalid.")
+ .exists({
+ checkFalsy: true,
+ checkNull: true
+ })
+ .isLength({ min: 36, max: 36 }),
+ body("host", '"host" should be a boolean.')
+ .optional({
+ nullable: true
+ })
+ .isBoolean(),
+ body("user", '"user" should be a boolean.')
+ .optional({
+ nullable: true
+ })
+ .isBoolean(),
+ body("userlinks", '"userlinks" should be a boolean.')
+ .optional({
+ nullable: true
+ })
+ .isBoolean(),
+ body("domain", '"domain" should be a boolean.')
+ .optional({
+ nullable: true
+ })
+ .isBoolean()
+];
+
+export const getStats = [
+ param("id", "ID is invalid.")
+ .exists({
+ checkFalsy: true,
+ checkNull: true
+ })
+ .isLength({ min: 36, max: 36 })
+];
+
+export const signup = [
+ body("password", "Password is not valid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .isLength({ min: 8, max: 64 })
+ .withMessage("Password length must be between 8 and 64."),
+ body("email", "Email is not valid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .trim()
+ .isEmail()
+ .isLength({ min: 0, max: 255 })
+ .withMessage("Email length must be max 255.")
+ .custom(async (value, { req }) => {
+ const user = await query.user.find({ email: value });
+
+ if (user) {
+ req.user = user;
+ }
+
+ return !user || !user.verified;
+ })
+ .withMessage("You can't use this email address.")
+];
+
+export const login = [
+ body("password", "Password is not valid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .isLength({ min: 8, max: 64 })
+ .withMessage("Password length must be between 8 and 64."),
+ body("email", "Email is not valid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .trim()
+ .isEmail()
+ .isLength({ min: 0, max: 255 })
+ .withMessage("Email length must be max 255.")
+];
+
+export const changePassword = [
+ body("password", "Password is not valid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .isLength({ min: 8, max: 64 })
+ .withMessage("Password length must be between 8 and 64.")
+];
+
+export const resetPasswordRequest = [
+ body("email", "Email is not valid.")
+ .exists({ checkFalsy: true, checkNull: true })
+ .trim()
+ .isEmail()
+ .isLength({ min: 0, max: 255 })
+ .withMessage("Email length must be max 255.")
+];
+
+export const cooldown = (user: User) => {
+ if (!env.GOOGLE_SAFE_BROWSING_KEY || !user || !user.cooldowns) return;
+
+ // If has active cooldown then throw error
+ const hasCooldownNow = user.cooldowns.some(cooldown =>
+ isAfter(subHours(new Date(), 12), new Date(cooldown))
+ );
+
+ if (hasCooldownNow) {
+ throw new CustomError("Cooldown because of a malware URL. Wait 12h");
+ }
+};
+
+export const malware = async (user: User, target: string) => {
+ if (!env.GOOGLE_SAFE_BROWSING_KEY) return;
+
+ const isMalware = await axios.post(
+ `https://safebrowsing.googleapis.com/v4/threatMatches:find?key=${env.GOOGLE_SAFE_BROWSING_KEY}`,
+ {
+ client: {
+ clientId: env.DEFAULT_DOMAIN.toLowerCase().replace(".", ""),
+ clientVersion: "1.0.0"
+ },
+ threatInfo: {
+ threatTypes: [
+ "THREAT_TYPE_UNSPECIFIED",
+ "MALWARE",
+ "SOCIAL_ENGINEERING",
+ "UNWANTED_SOFTWARE",
+ "POTENTIALLY_HARMFUL_APPLICATION"
+ ],
+ platformTypes: ["ANY_PLATFORM", "PLATFORM_TYPE_UNSPECIFIED"],
+ threatEntryTypes: [
+ "EXECUTABLE",
+ "URL",
+ "THREAT_ENTRY_TYPE_UNSPECIFIED"
+ ],
+ threatEntries: [{ url: target }]
+ }
+ }
+ );
+ if (!isMalware.data || !isMalware.data.matches) return;
+
+ if (user) {
+ const [updatedUser] = await query.user.update(
+ { id: user.id },
+ {
+ cooldowns: knex.raw("array_append(cooldowns, ?)", [
+ new Date().toISOString()
+ ]) as any
+ }
+ );
+
+ // Ban if too many cooldowns
+ if (updatedUser.cooldowns.length > 2) {
+ await query.user.update({ id: user.id }, { banned: true });
+ throw new CustomError("Too much malware requests. You are now banned.");
+ }
+ }
+
+ throw new CustomError(
+ user ? "Malware detected! Cooldown for 12h." : "Malware detected!"
+ );
+};
+
+export const linksCount = async (user?: User) => {
+ if (!user) return;
+
+ const count = await query.link.total({
+ user_id: user.id,
+ created_at: [">", subDays(new Date(), 1).toISOString()]
+ });
+
+ if (count > env.USER_LIMIT_PER_DAY) {
+ throw new CustomError(
+ `You have reached your daily limit (${env.USER_LIMIT_PER_DAY}). Please wait 24h.`
+ );
+ }
+};
+
+export const bannedDomain = async (domain: string) => {
+ const isBanned = await query.domain.find({
+ address: domain,
+ banned: true
+ });
+
+ if (isBanned) {
+ throw new CustomError("URL is containing malware/scam.", 400);
+ }
+};
+
+export const bannedHost = async (domain: string) => {
+ let isBanned;
+
+ try {
+ const dnsRes = await dnsLookup(domain);
+
+ if (!dnsRes || !dnsRes.address) return;
+
+ isBanned = await query.host.find({
+ address: dnsRes.address,
+ banned: true
+ });
+ } catch (error) {
+ isBanned = null;
+ }
+
+ if (isBanned) {
+ throw new CustomError("URL is containing malware/scam.", 400);
+ }
+};
diff --git a/server/knex.ts b/server/knex.ts
index d333cde..8deb4ad 100644
--- a/server/knex.ts
+++ b/server/knex.ts
@@ -1,20 +1,22 @@
import knex from "knex";
+
import { createUserTable } from "./models/user";
import { createDomainTable } from "./models/domain";
import { createLinkTable } from "./models/link";
import { createVisitTable } from "./models/visit";
import { createIPTable } from "./models/ip";
import { createHostTable } from "./models/host";
+import env from "./env";
const db = knex({
client: "postgres",
connection: {
- host: process.env.DB_HOST,
- port: Number(process.env.DB_PORT) || 5432,
- database: process.env.DB_NAME,
- user: process.env.DB_USER,
- password: process.env.DB_PASSWORD,
- ssl: process.env.DB_SSL === "true"
+ host: env.DB_HOST,
+ port: env.DB_PORT,
+ database: env.DB_NAME,
+ user: env.DB_USER,
+ password: env.DB_PASSWORD,
+ ssl: env.DB_SSL
}
});
diff --git a/server/mail/index.ts b/server/mail/index.ts
new file mode 100644
index 0000000..4235880
--- /dev/null
+++ b/server/mail/index.ts
@@ -0,0 +1 @@
+export * from "./mail";
diff --git a/server/mail/mail.ts b/server/mail/mail.ts
index 5b4950c..e3c0202 100644
--- a/server/mail/mail.ts
+++ b/server/mail/mail.ts
@@ -1,15 +1,71 @@
import nodemailer from "nodemailer";
+import path from "path";
+import fs from "fs";
+
+import { resetMailText, verifyMailText } from "./text";
+import { CustomError } from "../utils";
+import env from "../env";
const mailConfig = {
- host: process.env.MAIL_HOST,
- port: Number(process.env.MAIL_PORT),
- secure: process.env.MAIL_SECURE === "true",
+ host: env.MAIL_HOST,
+ port: env.MAIL_PORT,
+ secure: env.MAIL_SECURE,
auth: {
- user: process.env.MAIL_USER,
- pass: process.env.MAIL_PASSWORD
+ user: env.MAIL_USER,
+ pass: env.MAIL_PASSWORD
}
};
const transporter = nodemailer.createTransport(mailConfig);
export default transporter;
+
+// Read email templates
+const resetEmailTemplatePath = path.join(__dirname, "template-reset.html");
+const verifyEmailTemplatePath = path.join(__dirname, "template-verify.html");
+const resetEmailTemplate = fs
+ .readFileSync(resetEmailTemplatePath, { encoding: "utf-8" })
+ .replace(/{{domain}}/gm, env.DEFAULT_DOMAIN);
+const verifyEmailTemplate = fs
+ .readFileSync(verifyEmailTemplatePath, { encoding: "utf-8" })
+ .replace(/{{domain}}/gm, env.DEFAULT_DOMAIN);
+
+export const verification = async (user: User) => {
+ const mail = await transporter.sendMail({
+ from: env.MAIL_FROM || env.MAIL_USER,
+ to: user.email,
+ subject: "Verify your account",
+ text: verifyMailText.replace(
+ /{{verification}}/gim,
+ user.verification_token
+ ),
+ html: verifyEmailTemplate.replace(
+ /{{verification}}/gim,
+ user.verification_token
+ )
+ });
+
+ if (!mail.accepted.length) {
+ throw new CustomError("Couldn't send verification email. Try again later.");
+ }
+};
+
+export const resetPasswordToken = async (user: User) => {
+ const mail = await transporter.sendMail({
+ from: env.MAIL_USER,
+ to: user.email,
+ subject: "Reset your password",
+ text: resetMailText
+ .replace(/{{resetpassword}}/gm, user.reset_password_token)
+ .replace(/{{domain}}/gm, env.DEFAULT_DOMAIN),
+ html: resetEmailTemplate
+ .replace(/{{resetpassword}}/gm, user.reset_password_token)
+ .replace(/{{domain}}/gm, env.DEFAULT_DOMAIN)
+ });
+
+ if (!mail.accepted.length) {
+ throw new CustomError(
+ "Couldn't send reset password email. Try again later."
+ );
+ }
+};
diff --git a/server/migration/01_host.ts b/server/migration/01_host.ts
index 5b5dac9..e299472 100644
--- a/server/migration/01_host.ts
+++ b/server/migration/01_host.ts
@@ -1,4 +1,5 @@
-require("dotenv").config();
+import env from "../env";
+
import { v1 as NEO4J } from "neo4j-driver";
import knex from "knex";
import PQueue from "p-queue";
@@ -7,17 +8,17 @@ const queue = new PQueue({ concurrency: 10 });
// 1. Connect to Neo4j database
const neo4j = NEO4J.driver(
- process.env.NEO4J_DB_URI,
- NEO4J.auth.basic(process.env.NEO4J_DB_USERNAME, process.env.NEO4J_DB_PASSWORD)
+ env.NEO4J_DB_URI,
+ NEO4J.auth.basic(env.NEO4J_DB_USERNAME, env.NEO4J_DB_PASSWORD)
);
// 2. Connect to Postgres database
const postgres = knex({
client: "postgres",
connection: {
- host: process.env.DB_HOST,
- database: process.env.DB_NAME,
- user: process.env.DB_USER,
- password: process.env.DB_PASSWORD
+ host: env.DB_HOST,
+ database: env.DB_NAME,
+ user: env.DB_USER,
+ password: env.DB_PASSWORD
}
});
diff --git a/server/migration/02_users.ts b/server/migration/02_users.ts
index 09b34d1..bff9371 100644
--- a/server/migration/02_users.ts
+++ b/server/migration/02_users.ts
@@ -1,23 +1,24 @@
-require("dotenv").config();
+import env from "../env";
+
import { v1 as NEO4J } from "neo4j-driver";
-import knex from "knex";
import PQuque from "p-queue";
+import knex from "knex";
const queue = new PQuque({ concurrency: 10 });
// 1. Connect to Neo4j database
const neo4j = NEO4J.driver(
- process.env.NEO4J_DB_URI,
- NEO4J.auth.basic(process.env.NEO4J_DB_USERNAME, process.env.NEO4J_DB_PASSWORD)
+ env.NEO4J_DB_URI,
+ NEO4J.auth.basic(env.NEO4J_DB_USERNAME, env.NEO4J_DB_PASSWORD)
);
// 2. Connect to Postgres database
const postgres = knex({
client: "postgres",
connection: {
- host: process.env.DB_HOST,
- database: process.env.DB_NAME,
- user: process.env.DB_USER,
- password: process.env.DB_PASSWORD
+ host: env.DB_HOST,
+ database: env.DB_NAME,
+ user: env.DB_USER,
+ password: env.DB_PASSWORD
}
});
diff --git a/server/migration/03_domains.ts b/server/migration/03_domains.ts
index eb79679..e270f21 100644
--- a/server/migration/03_domains.ts
+++ b/server/migration/03_domains.ts
@@ -1,23 +1,24 @@
-require("dotenv").config();
+import env from "../env";
+
import { v1 as NEO4J } from "neo4j-driver";
-import knex from "knex";
import PQueue from "p-queue";
+import knex from "knex";
const queue = new PQueue({ concurrency: 1 });
// 1. Connect to Neo4j database
const neo4j = NEO4J.driver(
- process.env.NEO4J_DB_URI,
- NEO4J.auth.basic(process.env.NEO4J_DB_USERNAME, process.env.NEO4J_DB_PASSWORD)
+ env.NEO4J_DB_URI,
+ NEO4J.auth.basic(env.NEO4J_DB_USERNAME, env.NEO4J_DB_PASSWORD)
);
// 2. Connect to Postgres database
const postgres = knex({
client: "postgres",
connection: {
- host: process.env.DB_HOST,
- database: process.env.DB_NAME,
- user: process.env.DB_USER,
- password: process.env.DB_PASSWORD
+ host: env.DB_HOST,
+ database: env.DB_NAME,
+ user: env.DB_USER,
+ password: env.DB_PASSWORD
}
});
diff --git a/server/migration/04_links.ts b/server/migration/04_links.ts
index fcb57f2..5e401ee 100644
--- a/server/migration/04_links.ts
+++ b/server/migration/04_links.ts
@@ -1,8 +1,9 @@
-require("dotenv").config();
+import env from "../env";
+
import { v1 as NEO4J } from "neo4j-driver";
-import knex from "knex";
-import PQueue from "p-queue";
import { startOfHour } from "date-fns";
+import PQueue from "p-queue";
+import knex from "knex";
let count = 0;
const queue = new PQueue({ concurrency: 5 });
@@ -11,18 +12,18 @@ queue.on("active", () => (count % 1000 === 0 ? console.log(count++) : count++));
// 1. Connect to Neo4j database
const neo4j = NEO4J.driver(
- process.env.NEO4J_DB_URI,
- NEO4J.auth.basic(process.env.NEO4J_DB_USERNAME, process.env.NEO4J_DB_PASSWORD)
+ env.NEO4J_DB_URI,
+ NEO4J.auth.basic(env.NEO4J_DB_USERNAME, env.NEO4J_DB_PASSWORD)
);
// 2. Connect to Postgres database
const postgres = knex({
client: "postgres",
connection: {
- host: process.env.DB_HOST,
- database: process.env.DB_NAME,
- user: process.env.DB_USER,
- password: process.env.DB_PASSWORD
+ host: env.DB_HOST,
+ database: env.DB_NAME,
+ user: env.DB_USER,
+ password: env.DB_PASSWORD
}
});
diff --git a/server/migration/neo4j_delete_duplicated.ts b/server/migration/neo4j_delete_duplicated.ts
index 689e909..78eb2fc 100644
--- a/server/migration/neo4j_delete_duplicated.ts
+++ b/server/migration/neo4j_delete_duplicated.ts
@@ -1,4 +1,5 @@
-require("dotenv").config();
+import env from "../env";
+
import { v1 as NEO4J } from "neo4j-driver";
import PQueue from "p-queue";
@@ -8,8 +9,8 @@ queue.on("active", () => console.log(count++));
// 1. Connect to Neo4j database
const neo4j = NEO4J.driver(
- process.env.NEO4J_DB_URI,
- NEO4J.auth.basic(process.env.NEO4J_DB_USERNAME, process.env.NEO4J_DB_PASSWORD)
+ env.NEO4J_DB_URI,
+ NEO4J.auth.basic(env.NEO4J_DB_USERNAME, env.NEO4J_DB_PASSWORD)
);
(async function() {
diff --git a/server/models/domain.ts b/server/models/domain.ts
index 573cec8..35fcf08 100644
--- a/server/models/domain.ts
+++ b/server/models/domain.ts
@@ -3,6 +3,7 @@ import * as Knex from "knex";
export async function createDomainTable(knex: Knex) {
const hasTable = await knex.schema.hasTable("domains");
if (!hasTable) {
+ await knex.schema.raw('create extension if not exists "uuid-ossp"');
await knex.schema.createTable("domains", table => {
table.increments("id").primary();
table
@@ -26,4 +27,15 @@ export async function createDomainTable(knex: Knex) {
table.timestamps(false, true);
});
}
+
+ const hasUUID = await knex.schema.hasColumn("domains", "uuid");
+ if (!hasUUID) {
+ await knex.schema.raw('create extension if not exists "uuid-ossp"');
+ await knex.schema.alterTable("domains", table => {
+ table
+ .uuid("uuid")
+ .notNullable()
+ .defaultTo(knex.raw("uuid_generate_v4()"));
+ });
+ }
}
diff --git a/server/passport.ts b/server/passport.ts
index 03aa29f..697f2a9 100644
--- a/server/passport.ts
+++ b/server/passport.ts
@@ -1,20 +1,21 @@
-import passport from "passport";
+import { Strategy as LocalAPIKeyStrategy } from "passport-localapikey-update";
import { Strategy as JwtStrategy, ExtractJwt } from "passport-jwt";
import { Strategy as LocalStratergy } from "passport-local";
-import { Strategy as LocalAPIKeyStrategy } from "passport-localapikey-update";
+import passport from "passport";
import bcrypt from "bcryptjs";
-import { getUser } from "./db/user";
+import query from "./queries";
+import env from "./env";
const jwtOptions = {
jwtFromRequest: ExtractJwt.fromHeader("authorization"),
- secretOrKey: process.env.JWT_SECRET
+ secretOrKey: env.JWT_SECRET
};
passport.use(
new JwtStrategy(jwtOptions, async (payload, done) => {
try {
- const user = await getUser(payload.sub);
+ const user = await query.user.find({ email: payload.sub });
if (!user) return done(null, false);
return done(null, user);
} catch (err) {
@@ -30,7 +31,7 @@ const localOptions = {
passport.use(
new LocalStratergy(localOptions, async (email, password, done) => {
try {
- const user = await getUser(email);
+ const user = await query.user.find({ email });
if (!user) {
return done(null, false);
}
@@ -53,7 +54,7 @@ const localAPIKeyOptions = {
passport.use(
new LocalAPIKeyStrategy(localAPIKeyOptions, async (apikey, done) => {
try {
- const user = await getUser(apikey);
+ const user = await query.user.find({ apikey });
if (!user) {
return done(null, false);
}
diff --git a/server/queries/domain.ts b/server/queries/domain.ts
index 04438f8..ef43f85 100644
--- a/server/queries/domain.ts
+++ b/server/queries/domain.ts
@@ -1,34 +1,84 @@
-import { getRedisKey } from "../utils";
import * as redis from "../redis";
import knex from "../knex";
-interface FindDomain {
- address?: string;
- homepage?: string;
- uuid?: string;
- userId?: number;
-}
-
-export const findDomain = async ({
- userId,
- ...data
-}: FindDomain): Promise => {
- const redisKey = getRedisKey.domain(data.address);
- const cachedDomain = await redis.get(redisKey);
-
- if (cachedDomain) return JSON.parse(cachedDomain);
-
- const query = knex("domains").where(data);
-
- if (userId) {
- query.andWhere("user_id", userId);
+export const find = async (match: Partial): Promise => {
+ if (match.address) {
+ const cachedDomain = await redis.get(redis.key.domain(match.address));
+ if (cachedDomain) return JSON.parse(cachedDomain);
}
- const domain = await query.first();
+ const domain = await knex("domains")
+ .where(match)
+ .first();
if (domain) {
- redis.set(redisKey, JSON.stringify(domain), "EX", 60 * 60 * 6);
+ redis.set(
+ redis.key.domain(domain.address),
+ JSON.stringify(domain),
+ "EX",
+ 60 * 60 * 6
+ );
}
return domain;
};
+
+export const get = async (match: Partial): Promise => {
+ return knex("domains").where(match);
+};
+
+interface Add extends Partial {
+ address: string;
+}
+
+export const add = async (params: Add) => {
+ params.address = params.address.toLowerCase();
+
+ const exists = await knex("domains")
+ .where("address", params.address)
+ .first();
+
+ const newDomain = {
+ address: params.address,
+ homepage: params.homepage || null,
+ user_id: params.user_id || null,
+ banned: !!params.banned
+ };
+
+ let domain: Domain;
+ if (exists) {
+ const [response]: Domain[] = await knex("domains")
+ .where("id", exists.id)
+ .update(
+ {
+ ...newDomain,
+ updated_at: params.updated_at || new Date().toISOString()
+ },
+ "*"
+ );
+ domain = response;
+ } else {
+ const [response]: Domain[] = await knex("domains").insert(
+ newDomain,
+ "*"
+ );
+ domain = response;
+ }
+
+ redis.remove.domain(domain);
+
+ return domain;
+};
+
+export const update = async (
+ match: Partial,
+ update: Partial
+) => {
+ const domains = await knex("domains")
+ .where(match)
+ .update({ ...update, updated_at: new Date().toISOString() }, "*");
+
+ domains.forEach(redis.remove.domain);
+
+ return domains;
+};
diff --git a/server/queries/host.ts b/server/queries/host.ts
new file mode 100644
index 0000000..fd478ee
--- /dev/null
+++ b/server/queries/host.ts
@@ -0,0 +1,62 @@
+import * as redis from "../redis";
+import knex from "../knex";
+
+interface Add extends Partial {
+ address: string;
+}
+
+export const find = async (match: Partial): Promise => {
+ if (match.address) {
+ const cachedHost = await redis.get(redis.key.host(match.address));
+ if (cachedHost) return JSON.parse(cachedHost);
+ }
+
+ const host = await knex("hosts")
+ .where(match)
+ .first();
+
+ if (host) {
+ redis.set(
+ redis.key.host(host.address),
+ JSON.stringify(host),
+ "EX",
+ 60 * 60 * 6
+ );
+ }
+
+ return host;
+};
+
+export const add = async (params: Add) => {
+ params.address = params.address.toLowerCase();
+
+ const exists = await knex("domains")
+ .where("address", params.address)
+ .first();
+
+ const newHost = {
+ address: params.address,
+ banned: !!params.banned
+ };
+
+ let host: Host;
+ if (exists) {
+ const [response] = await knex("hosts")
+ .where("id", exists.id)
+ .update(
+ {
+ ...newHost,
+ updated_at: params.updated_at || new Date().toISOString()
+ },
+ "*"
+ );
+ host = response;
+ } else {
+ const [response] = await knex("hosts").insert(newHost, "*");
+ host = response;
+ }
+
+ redis.remove.host(host);
+
+ return host;
+};
diff --git a/server/queries/index.ts b/server/queries/index.ts
new file mode 100644
index 0000000..5fb6d5d
--- /dev/null
+++ b/server/queries/index.ts
@@ -0,0 +1,15 @@
+import * as domain from "./domain";
+import * as visit from "./visit";
+import * as link from "./link";
+import * as user from "./user";
+import * as host from "./host";
+import * as ip from "./ip";
+
+export default {
+ domain,
+ host,
+ ip,
+ link,
+ user,
+ visit
+};
diff --git a/server/queries/ip.ts b/server/queries/ip.ts
new file mode 100644
index 0000000..1461ab8
--- /dev/null
+++ b/server/queries/ip.ts
@@ -0,0 +1,35 @@
+import { subMinutes } from "date-fns";
+
+import knex from "../knex";
+import env from "../env";
+
+export const add = async (ipToAdd: string) => {
+ const ip = ipToAdd.toLowerCase();
+
+ const currentIP = await knex("ips")
+ .where("ip", ip)
+ .first();
+
+ if (currentIP) {
+ const currentDate = new Date().toISOString();
+ await knex("ips")
+ .where({ ip })
+ .update({
+ created_at: currentDate,
+ updated_at: currentDate
+ });
+ } else {
+ await knex("ips").insert({ ip });
+ }
+
+ return ip;
+};
+
+export const clear = async () =>
+ knex("ips")
+ .where(
+ "created_at",
+ "<",
+ subMinutes(new Date(), env.NON_USER_COOLDOWN).toISOString()
+ )
+ .delete();
diff --git a/server/queries/link.ts b/server/queries/link.ts
index 09e3130..77b9ba7 100644
--- a/server/queries/link.ts
+++ b/server/queries/link.ts
@@ -1,74 +1,84 @@
import bcrypt from "bcryptjs";
-import { getRedisKey, generateShortLink } from "../utils";
+import { CustomError } from "../utils";
import * as redis from "../redis";
import knex from "../knex";
-interface GetTotal {
- all: boolean;
- userId: number;
+const selectable = [
+ "links.id",
+ "links.address",
+ "links.banned",
+ "links.created_at",
+ "links.domain_id",
+ "links.updated_at",
+ "links.password",
+ "links.target",
+ "links.visit_count",
+ "links.user_id",
+ "links.uuid",
+ "domains.address as domain"
+];
+
+const normalizeMatch = (match: Partial): Partial => {
+ const newMatch = { ...match };
+
+ if (newMatch.address) {
+ newMatch["links.address"] = newMatch.address;
+ delete newMatch.address;
+ }
+
+ if (newMatch.user_id) {
+ newMatch["links.user_id"] = newMatch.user_id;
+ delete newMatch.user_id;
+ }
+
+ if (newMatch.uuid) {
+ newMatch["links.uuid"] = newMatch.uuid;
+ delete newMatch.uuid;
+ }
+
+ return newMatch;
+};
+
+interface TotalParams {
search?: string;
}
-export const getTotalQuery = async ({ all, search, userId }: GetTotal) => {
- const query = knex("links").count("id");
+export const total = async (match: Match, params: TotalParams = {}) => {
+ const query = knex("links");
- if (!all) {
- query.where("user_id", userId);
- }
+ Object.entries(match).forEach(([key, value]) => {
+ query.andWhere(key, ...(Array.isArray(value) ? value : [value]));
+ });
- if (search) {
+ if (params.search) {
query.andWhereRaw("links.address || ' ' || target ILIKE '%' || ? || '%'", [
- search
+ params.search
]);
}
- const [{ count }] = await query;
+ const [{ count }] = await query.count("id");
return typeof count === "number" ? count : parseInt(count);
};
-interface GetLinks {
- all: boolean;
+interface GetParams {
limit: number;
search?: string;
skip: number;
- userId: number;
}
-export const getLinksQuery = async ({
- all,
- limit,
- search,
- skip,
- userId
-}: GetLinks) => {
+export const get = async (match: Partial, params: GetParams) => {
const query = knex("links")
- .select(
- "links.id",
- "links.address",
- "links.banned",
- "links.created_at",
- "links.domain_id",
- "links.updated_at",
- "links.password",
- "links.target",
- "links.visit_count",
- "links.user_id",
- "links.uuid",
- "domains.address as domain"
- )
- .offset(skip)
- .limit(limit)
+ .select(...selectable)
+ .where(normalizeMatch(match))
+ .offset(params.skip)
+ .limit(params.limit)
.orderBy("created_at", "desc");
- if (!all) {
- query.where("links.user_id", userId);
- }
-
- if (search) {
+ if (params.search) {
query.andWhereRaw("links.address || ' ' || target ILIKE '%' || ? || '%'", [
- search
+ params.search
]);
}
@@ -79,79 +89,90 @@ export const getLinksQuery = async ({
return links;
};
-interface FindLink {
- address?: string;
- domainId?: number;
- userId?: number;
- target?: string;
-}
-
-export const findLinkQuery = async ({
- address,
- domainId,
- userId,
- target
-}: FindLink): Promise => {
- const redisKey = getRedisKey.link(address, domainId, userId);
- const cachedLink = await redis.get(redisKey);
-
- if (cachedLink) return JSON.parse(cachedLink);
+export const find = async (match: Partial): Promise => {
+ if (match.address && match.domain_id) {
+ const key = redis.key.link(match.address, match.domain_id);
+ const cachedLink = await redis.get(key);
+ if (cachedLink) return JSON.parse(cachedLink);
+ }
const link = await knex("links")
- .where({
- ...(address && { address }),
- ...(domainId && { domain_id: domainId }),
- ...(userId && { user_id: userId }),
- ...(target && { target })
- })
+ .select(...selectable)
+ .where(normalizeMatch(match))
+ .leftJoin("domains", "links.domain_id", "domains.id")
.first();
if (link) {
- redis.set(redisKey, JSON.stringify(link), "EX", 60 * 60 * 2);
+ const key = redis.key.link(link.address, link.domain_id);
+ redis.set(key, JSON.stringify(link), "EX", 60 * 60 * 2);
}
return link;
};
-interface CreateLink {
- userId?: number;
- domainAddress?: string;
- domainId?: number;
- password?: string;
+interface Create extends Partial {
address: string;
target: string;
}
-export const createLinkQuery = async ({
- password,
- address,
- target,
- domainAddress,
- domainId = null,
- userId = null
-}: CreateLink) => {
- let encryptedPassword;
+export const create = async (params: Create) => {
+ let encryptedPassword: string = null;
- if (password) {
+ if (params.password) {
const salt = await bcrypt.genSalt(12);
- encryptedPassword = await bcrypt.hash(password, salt);
+ encryptedPassword = await bcrypt.hash(params.password, salt);
}
- const [link]: Link[] = await knex("links").insert(
+ const [link]: LinkJoinedDomain[] = await knex(
+ "links"
+ ).insert(
{
password: encryptedPassword,
- domain_id: domainId,
- user_id: userId,
- address,
- target
+ domain_id: params.domain_id || null,
+ user_id: params.user_id || null,
+ address: params.address,
+ target: params.target
},
"*"
);
- return {
- ...link,
- id: link.uuid,
- password: !!password,
- link: generateShortLink(address, domainAddress)
- };
+ return link;
+};
+
+export const remove = async (match: Partial) => {
+ const link = await knex("links")
+ .where(match)
+ .first();
+
+ if (!link) {
+ throw new CustomError("Link was not found.");
+ }
+
+ await knex("visits")
+ .where("link_id", link.id)
+ .delete();
+
+ const deletedLink = await knex("links")
+ .where("id", link.id)
+ .delete();
+
+ redis.remove.link(link);
+
+ return !!deletedLink;
+};
+
+export const update = async (match: Partial, update: Partial) => {
+ const links = await knex("links")
+ .where(match)
+ .update({ ...update, updated_at: new Date().toISOString() }, "*");
+
+ links.forEach(redis.remove.link);
+
+ return links;
+};
+
+export const increamentVisit = async (match: Partial) => {
+ return knex("links")
+ .where(match)
+ .increment("visit_count", 1);
};
diff --git a/server/queries/user.ts b/server/queries/user.ts
new file mode 100644
index 0000000..8fc04d9
--- /dev/null
+++ b/server/queries/user.ts
@@ -0,0 +1,75 @@
+import uuid from "uuid/v4";
+import { addMinutes } from "date-fns";
+
+import * as redis from "../redis";
+import knex from "../knex";
+
+export const find = async (match: Partial) => {
+ if (match.email || match.apikey) {
+ const key = redis.key.user(match.email || match.apikey);
+ const cachedUser = await redis.get(key);
+ if (cachedUser) return JSON.parse(cachedUser) as User;
+ }
+
+ const user = await knex("users")
+ .where(match)
+ .first();
+
+ if (user) {
+ const emailKey = redis.key.user(user.email);
+ redis.set(emailKey, JSON.stringify(user), "EX", 60 * 60 * 1);
+
+ if (user.apikey) {
+ const apikeyKey = redis.key.user(user.apikey);
+ redis.set(apikeyKey, JSON.stringify(user), "EX", 60 * 60 * 1);
+ }
+ }
+
+ return user;
+};
+
+interface Add {
+ email: string;
+ password: string;
+}
+
+export const add = async (params: Add, user?: User) => {
+ const data = {
+ email: params.email,
+ password: params.password,
+ verification_token: uuid(),
+ verification_expires: addMinutes(new Date(), 60).toISOString()
+ };
+
+ if (user) {
+ await knex("users")
+ .where("id", user.id)
+ .update({ ...data, updated_at: new Date().toISOString() });
+ } else {
+ await knex("users").insert(data);
+ }
+
+ redis.remove.user(user);
+
+ return {
+ ...user,
+ ...data
+ };
+};
+
+export const update = async (match: Match, update: Partial) => {
+ const query = knex("users");
+
+ Object.entries(match).forEach(([key, value]) => {
+ query.andWhere(key, ...(Array.isArray(value) ? value : [value]));
+ });
+
+ const users = await query.update(
+ { ...update, updated_at: new Date().toISOString() },
+ "*"
+ );
+
+ users.forEach(redis.remove.user);
+
+ return users;
+};
diff --git a/server/queries/visit.ts b/server/queries/visit.ts
new file mode 100644
index 0000000..972896b
--- /dev/null
+++ b/server/queries/visit.ts
@@ -0,0 +1,245 @@
+import { isAfter, subDays, set } from "date-fns";
+
+import * as utils from "../utils";
+import * as redis from "../redis";
+import knex from "../knex";
+
+interface Add {
+ browser: string;
+ country: string;
+ domain?: string;
+ id: number;
+ os: string;
+ referrer: string;
+}
+
+export const add = async (params: Add) => {
+ const data = {
+ ...params,
+ country: params.country.toLowerCase(),
+ referrer: params.referrer.toLowerCase()
+ };
+
+ const visit = await knex("visits")
+ .where({ link_id: params.id })
+ .andWhere(
+ knex.raw("date_trunc('hour', created_at) = date_trunc('hour', ?)", [
+ knex.fn.now()
+ ])
+ )
+ .first();
+
+ if (visit) {
+ await knex("visits")
+ .where({ id: visit.id })
+ .increment(`br_${data.browser}`, 1)
+ .increment(`os_${data.os}`, 1)
+ .increment("total", 1)
+ .update({
+ updated_at: new Date().toISOString(),
+ countries: knex.raw(
+ "jsonb_set(countries, '{??}', (COALESCE(countries->>?,'0')::int + 1)::text::jsonb)",
+ [data.country, data.country]
+ ),
+ referrers: knex.raw(
+ "jsonb_set(referrers, '{??}', (COALESCE(referrers->>?,'0')::int + 1)::text::jsonb)",
+ [data.referrer, data.referrer]
+ )
+ });
+ } else {
+ await knex("visits").insert({
+ [`br_${data.browser}`]: 1,
+ countries: { [data.country]: 1 },
+ referrers: { [data.referrer]: 1 },
+ [`os_${data.os}`]: 1,
+ total: 1,
+ link_id: data.id
+ });
+ }
+
+ return visit;
+};
+
+interface StatsResult {
+ stats: {
+ browser: { name: string; value: number }[];
+ os: { name: string; value: number }[];
+ country: { name: string; value: number }[];
+ referrer: { name: string; value: number }[];
+ };
+ views: number[];
+}
+
+interface IGetStatsResponse {
+ allTime: StatsResult;
+ lastDay: StatsResult;
+ lastMonth: StatsResult;
+ lastWeek: StatsResult;
+ updatedAt: string;
+}
+
+export const find = async (match: Partial, total: number) => {
+ if (match.link_id) {
+ const key = redis.key.stats(match.link_id);
+ const cached = await redis.get(key);
+ if (cached) return JSON.parse(cached);
+ }
+
+ const stats = {
+ lastDay: {
+ stats: utils.getInitStats(),
+ views: new Array(24).fill(0)
+ },
+ lastWeek: {
+ stats: utils.getInitStats(),
+ views: new Array(7).fill(0)
+ },
+ lastMonth: {
+ stats: utils.getInitStats(),
+ views: new Array(30).fill(0)
+ },
+ allTime: {
+ stats: utils.getInitStats(),
+ views: new Array(18).fill(0)
+ }
+ };
+
+ const visitsStream: any = knex("visits")
+ .where(match)
+ .stream();
+ const nowUTC = utils.getUTCDate();
+ const now = new Date();
+
+ for await (const visit of visitsStream as Visit[]) {
+ utils.STATS_PERIODS.forEach(([days, type]) => {
+ const isIncluded = isAfter(
+ new Date(visit.created_at),
+ subDays(nowUTC, days)
+ );
+ if (isIncluded) {
+ const diffFunction = utils.getDifferenceFunction(type);
+ const diff = diffFunction(now, visit.created_at);
+ const index = stats[type].views.length - diff - 1;
+ const view = stats[type].views[index];
+ const period = stats[type].stats;
+ stats[type].stats = {
+ browser: {
+ chrome: period.browser.chrome + visit.br_chrome,
+ edge: period.browser.edge + visit.br_edge,
+ firefox: period.browser.firefox + visit.br_firefox,
+ ie: period.browser.ie + visit.br_ie,
+ opera: period.browser.opera + visit.br_opera,
+ other: period.browser.other + visit.br_other,
+ safari: period.browser.safari + visit.br_safari
+ },
+ os: {
+ android: period.os.android + visit.os_android,
+ ios: period.os.ios + visit.os_ios,
+ linux: period.os.linux + visit.os_linux,
+ macos: period.os.macos + visit.os_macos,
+ other: period.os.other + visit.os_other,
+ windows: period.os.windows + visit.os_windows
+ },
+ country: {
+ ...period.country,
+ ...Object.entries(visit.countries).reduce(
+ (obj, [country, count]) => ({
+ ...obj,
+ [country]: (period.country[country] || 0) + count
+ }),
+ {}
+ )
+ },
+ referrer: {
+ ...period.referrer,
+ ...Object.entries(visit.referrers).reduce(
+ (obj, [referrer, count]) => ({
+ ...obj,
+ [referrer]: (period.referrer[referrer] || 0) + count
+ }),
+ {}
+ )
+ }
+ };
+ stats[type].views[index] = view + visit.total;
+ }
+ });
+
+ const allTime = stats.allTime.stats;
+ const diffFunction = utils.getDifferenceFunction("allTime");
+ const diff = diffFunction(
+ set(new Date(), { date: 1 }),
+ set(new Date(visit.created_at), { date: 1 })
+ );
+ const index = stats.allTime.views.length - diff - 1;
+ const view = stats.allTime.views[index];
+ stats.allTime.stats = {
+ browser: {
+ chrome: allTime.browser.chrome + visit.br_chrome,
+ edge: allTime.browser.edge + visit.br_edge,
+ firefox: allTime.browser.firefox + visit.br_firefox,
+ ie: allTime.browser.ie + visit.br_ie,
+ opera: allTime.browser.opera + visit.br_opera,
+ other: allTime.browser.other + visit.br_other,
+ safari: allTime.browser.safari + visit.br_safari
+ },
+ os: {
+ android: allTime.os.android + visit.os_android,
+ ios: allTime.os.ios + visit.os_ios,
+ linux: allTime.os.linux + visit.os_linux,
+ macos: allTime.os.macos + visit.os_macos,
+ other: allTime.os.other + visit.os_other,
+ windows: allTime.os.windows + visit.os_windows
+ },
+ country: {
+ ...allTime.country,
+ ...Object.entries(visit.countries).reduce(
+ (obj, [country, count]) => ({
+ ...obj,
+ [country]: (allTime.country[country] || 0) + count
+ }),
+ {}
+ )
+ },
+ referrer: {
+ ...allTime.referrer,
+ ...Object.entries(visit.referrers).reduce(
+ (obj, [referrer, count]) => ({
+ ...obj,
+ [referrer]: (allTime.referrer[referrer] || 0) + count
+ }),
+ {}
+ )
+ }
+ };
+ stats.allTime.views[index] = view + visit.total;
+ }
+
+ const response: IGetStatsResponse = {
+ allTime: {
+ stats: utils.statsObjectToArray(stats.allTime.stats),
+ views: stats.allTime.views
+ },
+ lastDay: {
+ stats: utils.statsObjectToArray(stats.lastDay.stats),
+ views: stats.lastDay.views
+ },
+ lastMonth: {
+ stats: utils.statsObjectToArray(stats.lastMonth.stats),
+ views: stats.lastMonth.views
+ },
+ lastWeek: {
+ stats: utils.statsObjectToArray(stats.lastWeek.stats),
+ views: stats.lastWeek.views
+ },
+ updatedAt: new Date().toISOString()
+ };
+
+ if (match.link_id) {
+ const cacheTime = utils.getStatsCacheTime(total);
+ const key = redis.key.stats(match.link_id);
+ redis.set(key, JSON.stringify(response), "EX", cacheTime);
+ }
+
+ return response;
+};
diff --git a/server/queues/index.ts b/server/queues/index.ts
index 6c81b65..5ea6be7 100644
--- a/server/queues/index.ts
+++ b/server/queues/index.ts
@@ -1 +1,5 @@
-export * from "./queues";
+import { visit } from "./queues";
+
+export default {
+ visit
+};
diff --git a/server/queues/queues.ts b/server/queues/queues.ts
index 8c2a59c..ba7aee1 100644
--- a/server/queues/queues.ts
+++ b/server/queues/queues.ts
@@ -1,18 +1,20 @@
import Queue from "bull";
import path from "path";
+import env from "../env";
+
const redis = {
- port: Number(process.env.REDIS_PORT) || 6379,
- host: process.env.REDIS_HOST || "127.0.0.1",
- ...(process.env.REDIS_PASSWORD && { password: process.env.REDIS_PASSWORD })
+ port: env.REDIS_PORT,
+ host: env.REDIS_HOST,
+ ...(env.REDIS_PASSWORD && { password: env.REDIS_PASSWORD })
};
const removeJob = job => job.remove();
-export const visitQueue = new Queue("visit", { redis });
+export const visit = new Queue("visit", { redis });
-visitQueue.clean(5000, "completed");
+visit.clean(5000, "completed");
-visitQueue.process(4, path.resolve(__dirname, "visitQueue.js"));
+visit.process(4, path.resolve(__dirname, "visit.js"));
-visitQueue.on("completed", removeJob);
+visit.on("completed", removeJob);
diff --git a/server/queues/visitQueue.ts b/server/queues/visit.ts
similarity index 89%
rename from server/queues/visitQueue.ts
rename to server/queues/visit.ts
index d77be83..b5871b0 100644
--- a/server/queues/visitQueue.ts
+++ b/server/queues/visit.ts
@@ -2,7 +2,7 @@ import useragent from "useragent";
import geoip from "geoip-lite";
import URL from "url";
-import { createVisit, addLinkCount } from "../db/link";
+import query from "../queries";
import { getStatsLimit } from "../utils";
const browsersList = ["IE", "Firefox", "Chrome", "Opera", "Safari", "Edge"];
@@ -15,7 +15,7 @@ const filterInOs = agent => item =>
export default function({ data }) {
const tasks = [];
- tasks.push(addLinkCount(data.link.id));
+ tasks.push(query.link.increamentVisit(data.link.id));
if (data.link.visit_count < getStatsLimit()) {
const agent = useragent.parse(data.headers["user-agent"]);
@@ -25,10 +25,9 @@ export default function({ data }) {
const location = geoip.lookup(data.realIP);
const country = location && location.country;
tasks.push(
- createVisit({
+ query.visit.add({
browser: browser.toLowerCase(),
country: country || "Unknown",
- domain: data.customDomain,
id: data.link.id,
os: os.toLowerCase().replace(/\s/gi, ""),
referrer: (referrer && referrer.replace(/\./gi, "[dot]")) || "Direct"
diff --git a/server/redis.ts b/server/redis.ts
index 4649fb0..90edad1 100644
--- a/server/redis.ts
+++ b/server/redis.ts
@@ -1,10 +1,12 @@
import { promisify } from "util";
import redis from "redis";
+import env from "./env";
+
const client = redis.createClient({
- host: process.env.REDIS_HOST || "127.0.0.1",
- port: Number(process.env.REDIS_PORT) || 6379,
- ...(process.env.REDIS_PASSWORD && { password: process.env.REDIS_PASSWORD })
+ host: env.REDIS_HOST,
+ port: env.REDIS_PORT,
+ ...(env.REDIS_PASSWORD && { password: env.REDIS_PASSWORD })
});
export const get: (key: string) => Promise = promisify(client.get).bind(
@@ -21,3 +23,32 @@ export const set: (
export const del: (key: string) => Promise = promisify(client.del).bind(
client
);
+
+export const key = {
+ link: (address: string, domain_id?: number, user_id?: number) =>
+ `${address}-${domain_id || ""}-${user_id || ""}`,
+ domain: (address: string) => `d-${address}`,
+ stats: (link_id: number) => `s-${link_id}`,
+ host: (address: string) => `h-${address}`,
+ user: (emailOrKey: string) => `u-${emailOrKey}`
+};
+
+export const remove = {
+ domain: (domain?: Domain) => {
+ if (!domain) return;
+ del(key.domain(domain.address));
+ },
+ host: (host?: Host) => {
+ if (!host) return;
+ del(key.host(host.address));
+ },
+ link: (link?: Link) => {
+ if (!link) return;
+ del(key.link(link.address, link.domain_id));
+ },
+ user: (user?: User) => {
+ if (!user) return;
+ del(key.user(user.email));
+ del(key.user(user.apikey));
+ }
+};
diff --git a/server/routes/auth.ts b/server/routes/auth.ts
new file mode 100644
index 0000000..ab059a6
--- /dev/null
+++ b/server/routes/auth.ts
@@ -0,0 +1,43 @@
+import asyncHandler from "express-async-handler";
+import { Router } from "express";
+
+import * as validators from "../handlers/validators";
+import * as helpers from "../handlers/helpers";
+import * as auth from "../handlers/auth";
+
+const router = Router();
+
+router.post(
+ "/login",
+ validators.login,
+ asyncHandler(helpers.verify),
+ asyncHandler(auth.local),
+ asyncHandler(auth.token)
+);
+
+router.post(
+ "/signup",
+ validators.signup,
+ asyncHandler(helpers.verify),
+ asyncHandler(auth.signup)
+);
+
+router.post("/renew", asyncHandler(auth.jwt), asyncHandler(auth.token));
+
+router.post(
+ "/change-password",
+ asyncHandler(auth.jwt),
+ validators.changePassword,
+ asyncHandler(helpers.verify),
+ asyncHandler(auth.changePassword)
+);
+
+router.post(
+ "/apikey",
+ asyncHandler(auth.jwt),
+ asyncHandler(auth.generateApiKey)
+);
+
+router.post("/reset-password", asyncHandler(auth.resetPasswordRequest));
+
+export default router;
diff --git a/server/routes/domains.ts b/server/routes/domains.ts
new file mode 100644
index 0000000..2a06e63
--- /dev/null
+++ b/server/routes/domains.ts
@@ -0,0 +1,29 @@
+import { Router } from "express";
+import asyncHandler from "express-async-handler";
+
+import * as validators from "../handlers/validators";
+import * as helpers from "../handlers/helpers";
+import * as domains from "../handlers/domains";
+import * as auth from "../handlers/auth";
+
+const router = Router();
+
+router.post(
+ "/",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ validators.addDomain,
+ asyncHandler(helpers.verify),
+ asyncHandler(domains.add)
+);
+
+router.delete(
+ "/:id",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ validators.removeDomain,
+ asyncHandler(helpers.verify),
+ asyncHandler(domains.remove)
+);
+
+export default router;
diff --git a/server/routes/index.ts b/server/routes/index.ts
index 7c44e4a..1f524d9 100644
--- a/server/routes/index.ts
+++ b/server/routes/index.ts
@@ -1,11 +1 @@
-import { Router } from "express";
-
-import health from "./health";
-import links from "./links";
-
-const router = Router();
-
-router.use("/api/v2/health", health);
-router.use("/api/v2/links", links);
-
-export default router;
+export { default } from "./routes";
diff --git a/server/routes/links.ts b/server/routes/links.ts
index cdede89..352a8c2 100644
--- a/server/routes/links.ts
+++ b/server/routes/links.ts
@@ -2,11 +2,10 @@ import { Router } from "express";
import asyncHandler from "express-async-handler";
import cors from "cors";
-import * as auth from "../handlers/auth";
import * as validators from "../handlers/validators";
-import * as sanitizers from "../handlers/sanitizers";
import * as helpers from "../handlers/helpers";
-import { getLinks, createLink } from "../handlers/links";
+import * as link from "../handlers/links";
+import * as auth from "../handlers/auth";
const router = Router();
@@ -15,7 +14,7 @@ router.get(
asyncHandler(auth.apikey),
asyncHandler(auth.jwt),
helpers.query,
- getLinks
+ asyncHandler(link.get)
);
router.post(
@@ -24,10 +23,50 @@ router.post(
asyncHandler(auth.apikey),
asyncHandler(auth.jwtLoose),
asyncHandler(auth.recaptcha),
- sanitizers.createLink,
validators.createLink,
- asyncHandler(validators.verify),
- createLink
+ asyncHandler(helpers.verify),
+ asyncHandler(link.create)
+);
+
+router.delete(
+ "/:id",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ validators.deleteLink,
+ asyncHandler(helpers.verify),
+ asyncHandler(link.remove)
+);
+
+router.get(
+ "/:id/stats",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ validators.getStats,
+ asyncHandler(link.stats)
+);
+
+router.post(
+ "/:id/protected",
+ validators.redirectProtected,
+ asyncHandler(helpers.verify),
+ asyncHandler(link.redirectProtected)
+);
+
+router.post(
+ "/report",
+ validators.reportLink,
+ asyncHandler(helpers.verify),
+ asyncHandler(link.report)
+);
+
+router.post(
+ "/admin/ban/:id",
+ asyncHandler(auth.apikey),
+ asyncHandler(auth.jwt),
+ asyncHandler(auth.admin),
+ validators.banLink,
+ asyncHandler(helpers.verify),
+ asyncHandler(link.ban)
);
export default router;
diff --git a/server/routes/routes.ts b/server/routes/routes.ts
new file mode 100644
index 0000000..9926465
--- /dev/null
+++ b/server/routes/routes.ts
@@ -0,0 +1,17 @@
+import { Router } from "express";
+
+import domains from "./domains";
+import health from "./health";
+import links from "./links";
+import user from "./users";
+import auth from "./auth";
+
+const router = Router();
+
+router.use("/domains", domains);
+router.use("/health", health);
+router.use("/links", links);
+router.use("/users", user);
+router.use("/auth", auth);
+
+export default router;
diff --git a/server/routes/users.ts b/server/routes/users.ts
new file mode 100644
index 0000000..e2d94f7
--- /dev/null
+++ b/server/routes/users.ts
@@ -0,0 +1,16 @@
+import { Router } from "express";
+import asyncHandler from "express-async-handler";
+
+import * as auth from "../handlers/auth";
+import * as user from "../handlers/users";
+
+const router = Router();
+
+router.get(
+ "/",
+ asyncHandler(auth.jwt),
+ asyncHandler(auth.apikey),
+ asyncHandler(user.get)
+);
+
+export default router;
diff --git a/server/server.ts b/server/server.ts
index 264bc6f..2157718 100644
--- a/server/server.ts
+++ b/server/server.ts
@@ -1,52 +1,39 @@
-import "./configToEnv";
+import env from "./env";
-import dotenv from "dotenv";
-dotenv.config();
-
-import nextApp from "next";
-import express, { Request, Response } from "express";
-import helmet from "helmet";
-import morgan from "morgan";
-import Raven from "raven";
+import asyncHandler from "express-async-handler";
import cookieParser from "cookie-parser";
import passport from "passport";
-import cors from "cors";
+import express from "express";
+import helmet from "helmet";
+import morgan from "morgan";
+import nextApp from "next";
+import Raven from "raven";
-import {
- validateBody,
- validationCriterias,
- validateUrl,
- ipCooldownCheck
-} from "./controllers/validateBodyController";
-import * as auth from "./controllers/authController";
-import * as link from "./controllers/linkController";
+import * as helpers from "./handlers/helpers";
+import * as links from "./handlers/links";
+import * as auth from "./handlers/auth";
import { initializeDb } from "./knex";
+import __v1Routes from "./__v1";
import routes from "./routes";
import "./cron";
import "./passport";
-import { CustomError } from "./utils";
-if (process.env.RAVEN_DSN) {
- Raven.config(process.env.RAVEN_DSN).install();
+if (env.RAVEN_DSN) {
+ Raven.config(env.RAVEN_DSN).install();
}
-const catchErrors = fn => (req, res, next) =>
- Promise.resolve(fn(req, res, next)).catch(next);
-
-const port = Number(process.env.PORT) || 3000;
-const dev = process.env.NODE_ENV !== "production";
-const app = nextApp({ dir: "./client", dev });
+const port = env.PORT;
+const app = nextApp({ dir: "./client", dev: env.isDev });
const handle = app.getRequestHandler();
app.prepare().then(async () => {
await initializeDb();
const server = express();
-
server.set("trust proxy", true);
- if (process.env.NODE_ENV !== "production") {
+ if (env.isDev) {
server.use(morgan("dev"));
}
@@ -56,161 +43,33 @@ app.prepare().then(async () => {
server.use(express.urlencoded({ extended: true }));
server.use(passport.initialize());
server.use(express.static("static"));
+ server.use(helpers.ip);
- server.use((req, _res, next) => {
- req.realIP =
- (req.headers["x-real-ip"] as string) ||
- req.connection.remoteAddress ||
- "";
- return next();
- });
+ server.use(asyncHandler(links.redirectCustomDomain));
- server.use(link.customDomainRedirection);
+ server.use("/api/v2", routes);
+ server.use("/api", __v1Routes);
- server.use(routes);
-
- server.get("/", (req, res) => app.render(req, res, "/"));
- server.get("/login", (req, res) => app.render(req, res, "/login"));
- server.get("/logout", (req, res) => app.render(req, res, "/logout"));
- server.get("/settings", (req, res) => app.render(req, res, "/settings"));
- server.get("/stats", (req, res) => app.render(req, res, "/stats", req.query));
- server.get("/terms", (req, res) => app.render(req, res, "/terms"));
- server.get("/report", (req, res) => app.render(req, res, "/report"));
- server.get("/banned", (req, res) => app.render(req, res, "/banned"));
-
- /* View routes */
server.get(
"/reset-password/:resetPasswordToken?",
- catchErrors(auth.resetUserPassword),
+ asyncHandler(auth.resetPassword),
(req, res) => app.render(req, res, "/reset-password", { token: req.token })
);
+
server.get(
"/verify/:verificationToken?",
- catchErrors(auth.verify),
+ asyncHandler(auth.verify),
(req, res) => app.render(req, res, "/verify", { token: req.token })
);
- /* User and authentication */
- server.post(
- "/api/auth/signup",
- validationCriterias,
- catchErrors(validateBody),
- catchErrors(auth.signup)
- );
- server.post(
- "/api/auth/login",
- validationCriterias,
- catchErrors(validateBody),
- catchErrors(auth.authLocal),
- catchErrors(auth.login)
- );
- server.post(
- "/api/auth/renew",
- catchErrors(auth.authJwt),
- catchErrors(auth.renew)
- );
- server.post(
- "/api/auth/changepassword",
- catchErrors(auth.authJwt),
- catchErrors(auth.changeUserPassword)
- );
- server.post(
- "/api/auth/generateapikey",
- catchErrors(auth.authJwt),
- catchErrors(auth.generateUserApiKey)
- );
- server.post(
- "/api/auth/resetpassword",
- catchErrors(auth.requestUserPasswordReset)
- );
- server.get(
- "/api/auth/usersettings",
- catchErrors(auth.authJwt),
- catchErrors(auth.userSettings)
- );
+ server.get("/:id", asyncHandler(links.redirect(app)));
- /* URL shortener */
- server.post(
- "/api/url/submit",
- cors(),
- catchErrors(auth.authApikey),
- catchErrors(auth.authJwtLoose),
- catchErrors(auth.recaptcha),
- catchErrors(validateUrl),
- catchErrors(ipCooldownCheck),
- catchErrors(link.shortener)
- );
- server.post(
- "/api/url/deleteurl",
- catchErrors(auth.authApikey),
- catchErrors(auth.authJwt),
- catchErrors(link.deleteUserLink)
- );
- server.get(
- "/api/url/geturls",
- catchErrors(auth.authApikey),
- catchErrors(auth.authJwt),
- catchErrors(link.getUserLinks)
- );
- server.post(
- "/api/url/customdomain",
- catchErrors(auth.authJwt),
- catchErrors(link.setCustomDomain)
- );
- server.delete(
- "/api/url/customdomain",
- catchErrors(auth.authJwt),
- catchErrors(link.deleteCustomDomain)
- );
- server.get(
- "/api/url/stats",
- catchErrors(auth.authApikey),
- catchErrors(auth.authJwt),
- catchErrors(link.getLinkStats)
- );
- server.post("/api/url/requesturl", catchErrors(link.goToLink));
- server.post("/api/url/report", catchErrors(link.reportLink));
- server.post(
- "/api/url/admin/ban",
- catchErrors(auth.authApikey),
- catchErrors(auth.authJwt),
- catchErrors(auth.authAdmin),
- catchErrors(link.ban)
- );
- server.get(
- "/:id",
- catchErrors(link.goToLink),
- (req: Request, res: Response) => {
- switch (req.pageType) {
- case "password":
- return app.render(req, res, "/url-password", {
- protectedLink: req.protectedLink
- });
- case "info":
- default:
- return app.render(req, res, "/url-info", {
- linkTarget: req.linkTarget
- });
- }
- }
- );
+ // Error handler
+ server.use(helpers.error);
+ // Handler everything else by Next.js
server.get("*", (req, res) => handle(req, res));
- server.use((error, req, res, next) => {
- if (error instanceof CustomError) {
- return res.status(error.statusCode || 500).json({ error: error.message });
- }
-
- if (process.env.RAVEN_DSN) {
- Raven.captureException(error, {
- user: { email: req.user && req.user.email }
- });
- }
-
- return res.status(500).json({ error: "An error occurred." });
- });
-
server.listen(port, err => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
diff --git a/server/utils/index.ts b/server/utils/index.ts
index fe3ce8a..5384bf5 100644
--- a/server/utils/index.ts
+++ b/server/utils/index.ts
@@ -1,11 +1,15 @@
import ms from "ms";
+import generate from "nanoid/generate";
+import JWT from "jsonwebtoken";
import {
differenceInDays,
differenceInHours,
- differenceInMonths
+ differenceInMonths,
+ addDays
} from "date-fns";
-import generate from "nanoid/generate";
-import { findLinkQuery } from "../queries/link";
+
+import query from "../queries";
+import env from "../env";
export class CustomError extends Error {
public statusCode?: number;
@@ -18,14 +22,32 @@ export class CustomError extends Error {
}
}
-export const generateId = async (domainId: number = null) => {
+export const isAdmin = (email: string): boolean =>
+ env.ADMIN_EMAILS.split(",")
+ .map(e => e.trim())
+ .includes(email);
+
+export const signToken = (user: UserJoined) =>
+ JWT.sign(
+ {
+ iss: "ApiAuth",
+ sub: user.email,
+ domain: user.domain || "",
+ admin: isAdmin(user.email),
+ iat: parseInt((new Date().getTime() / 1000).toFixed(0)),
+ exp: parseInt((addDays(new Date(), 7).getTime() / 1000).toFixed(0))
+ } as Record,
+ env.JWT_SECRET
+ );
+
+export const generateId = async (domain_id: number = null) => {
const address = generate(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
- Number(process.env.LINK_LENGTH) || 6
+ env.LINK_LENGTH
);
- const link = await findLinkQuery({ address, domainId });
+ const link = await query.link.find({ address, domain_id });
if (!link) return address;
- return generateId(domainId);
+ return generateId(domain_id);
};
export const addProtocol = (url: string): string => {
@@ -35,18 +57,12 @@ export const addProtocol = (url: string): string => {
export const generateShortLink = (id: string, domain?: string): string => {
const protocol =
- process.env.CUSTOM_DOMAIN_USE_HTTPS === "true" || !domain
- ? "https://"
- : "http://";
- return `${protocol}${domain || process.env.DEFAULT_DOMAIN}/${id}`;
+ env.CUSTOM_DOMAIN_USE_HTTPS || !domain ? "https://" : "http://";
+ return `${protocol}${domain || env.DEFAULT_DOMAIN}/${id}`;
};
-export const isAdmin = (email: string): boolean =>
- process.env.ADMIN_EMAILS.split(",")
- .map(e => e.trim())
- .includes(email);
-
export const getRedisKey = {
+ // TODO: remove user id and make domain id required
link: (address: string, domain_id?: number, user_id?: number) =>
`${address}-${domain_id || ""}-${user_id || ""}`,
domain: (address: string) => `d-${address}`,
@@ -56,27 +72,10 @@ export const getRedisKey = {
// TODO: Add statsLimit
export const getStatsLimit = (): number =>
- Number(process.env.DEFAULT_MAX_STATS_PER_LINK) || 100000000;
+ env.DEFAULT_MAX_STATS_PER_LINK || 100000000;
export const getStatsCacheTime = (total?: number): number => {
- let durationInMs;
- switch (true) {
- case total <= 5000:
- durationInMs = ms("5 minutes");
- break;
- case total > 5000 && total < 20000:
- durationInMs = ms("10 minutes");
- break;
- case total < 40000:
- durationInMs = ms("15 minutes");
- break;
- case total > 40000:
- durationInMs = ms("30 minutes");
- break;
- default:
- durationInMs = ms("5 minutes");
- }
- return durationInMs / 1000;
+ return (total > 50000 ? ms("5 minutes") : ms("1 minutes")) / 1000;
};
export const statsObjectToArray = (obj: Stats) => {
@@ -115,3 +114,53 @@ export const getUTCDate = (dateString?: Date) => {
date.getUTCHours()
);
};
+
+export const STATS_PERIODS: [number, "lastDay" | "lastWeek" | "lastMonth"][] = [
+ [1, "lastDay"],
+ [7, "lastWeek"],
+ [30, "lastMonth"]
+];
+
+export const getInitStats = (): Stats => {
+ return Object.create({
+ browser: {
+ chrome: 0,
+ edge: 0,
+ firefox: 0,
+ ie: 0,
+ opera: 0,
+ other: 0,
+ safari: 0
+ },
+ os: {
+ android: 0,
+ ios: 0,
+ linux: 0,
+ macos: 0,
+ other: 0,
+ windows: 0
+ },
+ country: {},
+ referrer: {}
+ });
+};
+
+export const sanitize = {
+ domain: (domain: Domain): DomainSanitized => ({
+ ...domain,
+ id: domain.uuid,
+ uuid: undefined,
+ user_id: undefined,
+ banned_by_id: undefined
+ }),
+ link: (link: LinkJoinedDomain): LinkSanitized => ({
+ ...link,
+ banned_by_id: undefined,
+ domain_id: undefined,
+ user_id: undefined,
+ uuid: undefined,
+ id: link.uuid,
+ password: !!link.password,
+ link: generateShortLink(link.address, link.domain)
+ })
+};
|